- Componenten vereist
- MPU6050-sensormodule - een korte introductie
- Attiny85 Stappenteller schakelschema
- Fabricage printplaat voor Attiny85 stappenteller
- PCB bestellen bij PCBWay
- Montage van de ATtiny85 stappenteller print
- ATtiny85 Stappenteller Code Uitleg
- Laten we een wandeling maken met onze Arduino-stappenteller
In deze tutorial gaan we een eenvoudige en goedkope stappenteller bouwen met ATtiny85 IC, MPU6050 Accelerometer & Gyroscope en OLED-displaymodule. Deze eenvoudige Arduino-gebaseerde stappenteller wordt aangedreven door een 3V-knoopcel, waardoor hij gemakkelijk mee te nemen is als u gaat wandelen of joggen. Het vereist ook heel weinig componenten om te bouwen en de code is ook relatief eenvoudig. Het programma in dit project gebruikt de MPU6050 om de grootte van de versnelling langs de 3 assen (X, Y en Z) te meten. Vervolgens berekent het het verschil in de versnellingsgrootte tussen de vorige en huidige waarden. Als het verschil groter is dan een bepaalde drempel (voor wandelen groter dan 6 en voor hardlopen groter dan 10), wordt het aantal stappen dienovereenkomstig verhoogd. Het totaal aantal genomen stappen wordt vervolgens weergegeven op het OLED-scherm.
Om deze draagbare stappenteller op een printplaat te bouwen, hebben we onze printplaten van PCBWay gefabriceerd en zullen we deze in dit project monteren en testen. Als je meer functies wilt toevoegen, kun je ook een Heartbeat-monitor aan deze opstelling toevoegen en we hebben ook eerder een Arduino-accelerometer-stappenteller gebouwd met ADXL335, bekijk ze als je geïnteresseerd bent.
Componenten vereist
Om deze stappenteller met Arduino te bouwen , heb je de volgende componenten nodig.
- Attiny85 IC
- MPU6050
- OLED-weergavemodule
- 2 × drukknoppen
- 5 × 10KΩ weerstanden (SMD)
MPU6050-sensormodule - een korte introductie
MPU6050 is gebaseerd op Micro-Mechanical Systems (MEMS) -technologie. Deze sensor heeft een 3-assige accelerometer, een 3-assige gyroscoop en een ingebouwde temperatuursensor. Het kan worden gebruikt om parameters zoals versnelling, snelheid, oriëntatie, verplaatsing, enz. Te meten. We hebben MPU6050 eerder gekoppeld aan Arduino en Raspberry pi en we hebben er ook een paar projecten mee gebouwd, zoals zelfbalancerende robot, Arduino digitale gradenboog en Arduino inclinometer.
De MPU6050-module is klein van formaat en heeft een laag stroomverbruik, veel herhaling, hoge schoktolerantie en lage gebruikersprijzen. De MPU6050 wordt geleverd met een I2C-bus en Auxiliary I2C-businterface en kan gemakkelijk interfereren met andere sensoren zoals magnetometers en microcontrollers.
Attiny85 Stappenteller schakelschema
Het schema voor de MPU6050-stappenteller wordt hieronder weergegeven:
De bovenstaande afbeelding toont het schakelschema voor het koppelen van MPU6050 en OLED-display met Attiny85 IC. De interface tussen MPU6050, OLED-display en Arduino moet worden geïmplementeerd met behulp van het I2C-protocol. Daarom is de SCLPin (PB2) van de ATtiny85 verbonden met de SCLPin van respectievelijk de MPU6050 en het OLED-scherm. Evenzo is de SDAPin (PB0) van de ATtiny85 verbonden met de SDAPin van de MPU6050 en OLED-display. Twee drukknoppen zijn ook verbonden met de PB3 & PB4 pin van ATtiny85 IC. Deze knoppen kunnen worden gebruikt om door de tekst te scrollen of om de tekst op het display te wijzigen.
Opmerking: volg onze vorige tutorial ATtiny85 IC programmeren rechtstreeks via USB met behulp van Digispark Bootloader om de ATtiny85 IC te programmeren via USB en Digispark Boot-loader.
Fabricage printplaat voor Attiny85 stappenteller
Het schema is klaar en we kunnen doorgaan met het opmaken van de printplaat. U kunt de printplaat ontwerpen met elke pcb-software van uw keuze. We hebben EasyEDA gebruikt om PCB's voor dit project te fabriceren.
Hieronder staan de 3D-modelaanzichten van de bovenste laag en de onderste laag van de stappenteller-printplaat:
De printlayout voor het bovenstaande circuit is ook beschikbaar om te downloaden als Gerber via de onderstaande link:
- Gerber-bestand voor ATtiny85 Step Counter
PCB bestellen bij PCBWay
Na het afronden van het ontwerp kunt u doorgaan met het bestellen van de print:
Stap 1: Ga naar https://www.pcbway.com/, meld u aan als dit de eerste keer is. Voer vervolgens op het tabblad PCB-prototype de afmetingen van uw PCB, het aantal lagen en het aantal PCB's dat u nodig heeft in.
Stap 2: Ga verder door op de knop 'Nu citeren' te klikken. U wordt naar een pagina geleid waar u een paar aanvullende parameters kunt instellen, zoals het bordtype, de lagen, het materiaal voor de printplaat, de dikte en meer, de meeste zijn standaard geselecteerd.Als u voor specifieke parameters kiest, kunt u selecteren het hier.
Stap 3: De laatste stap is om het Gerber-bestand te uploaden en door te gaan met de betaling. Om ervoor te zorgen dat het proces soepel verloopt, controleert PCBWAY of uw Gerber-bestand geldig is voordat u verdergaat met de betaling. Zo weet u zeker dat uw printplaat fabricagevriendelijk is en u als toegewijd zult bereiken.
Montage van de ATtiny85 stappenteller print
Na een paar dagen kregen we onze PCB in een nette verpakking en de kwaliteit van de PCB was zoals altijd goed. De bovenste laag en de onderste laag van het bord worden hieronder weergegeven:
Na te hebben gecontroleerd of de sporen en voetafdrukken correct waren. Ik ging verder met het monteren van de printplaat. Het volledig gesoldeerde bord ziet er als volgt uit:
ATtiny85 Stappenteller Code Uitleg
De volledige Arduino-stappentellercode staat aan het einde van het document. Hier leggen we enkele belangrijke delen van de code uit.
De code maakt gebruik van de TinyWireM.h & TinyOzOLED.h bibliotheken. De TinyWireM-bibliotheek kan worden gedownload van de Bibliotheekbeheerder in de Arduino IDE en vanaf daar worden geïnstalleerd. Open daarvoor de Arduino IDE en ga naar Sketch <Inclusief bibliotheek <Bibliotheken beheren . Zoek nu naar TinyWireM.h en installeer de TinyWireM-bibliotheek van Adafruit.
Terwijl de TinyOzOLED.h-bibliotheek kan worden gedownload via de gegeven links.
Na het installeren van de bibliotheken op Arduino IDE, start u de code door de benodigde bibliothekenbestanden op te nemen.
#include "TinyWireM.h" #include "TinyOzOLED.h"
Na het opnemen van de bibliotheken, definieert u de variabelen om de Accelerometer-metingen op te slaan.
intaccelX, accelY, accelZ;
Initialiseer in de setup () -lus de draadbibliotheek en reset de sensor via het energiebeheerregister en initialiseer ook de I2C-communicatie voor OLED-display. Stel vervolgens in de volgende regels de weergave-oriëntatie in en voer het registeradres in voor accelerometer- en gyroscoopwaarden.
TinyWireM.begin (); OzOled.init (); OzOled.clearDisplay (); OzOled.setNormalDisplay (); OzOled.sendCommand (0xA1); OzOled.sendCommand (0xC8); TinyWireM.beginTransmission (mpu); TinyWireM.write (0x6B); TinyWireM.write (0b00000000); TinyWireM.write (0x1B);
Begin in de functie getAccel () met het lezen van de versnellingsmetergegevens. De gegevens voor elke as worden opgeslagen in twee bytes (boven en onder) of registers. Om ze allemaal te kunnen lezen, begint u met het eerste register en met behulp van de requiestFrom () -functie vragen we om alle 6 de registers voor de X-, Y- en Z-assen te lezen. Vervolgens lezen we de gegevens van elk register, en omdat de outputs complementair zijn aan twee, moeten we ze op de juiste manier combineren om de volledige accelerometerwaarden te krijgen.
voidgetAccel () {TinyWireM.beginTransmission (mpu); TinyWireM.write (0x3B); TinyWireM.endTransmission (); TinyWireM.requestFrom (mpu, 6); accelX = TinyWireM.read () << 8-TinyWireM.read (); accelY = TinyWireM.read () << 8-TinyWireM.read (); accelZ = TinyWireM.read () << 8-TinyWireM.read (); }
Lees nu binnen de lusfunctie eerst de X-, Y- en Z-aswaarden en bereken na het verkrijgen van de 3-aswaarden de totale versnellingsvector door de vierkantswortel van X-, Y- en Z-aswaarden te nemen. Bereken vervolgens het verschil tussen de huidige vector en de vorige vector en als het verschil groter is dan 6, verhoog dan het aantal stappen.
getAccel (); vector = sqrt ((accelX * accelX) + (accelY * accelY) + (accelZ * accelZ)); totalvector = vector - vectorprevious; if (totalvector> 6) {Steps ++; } OzOled.printString ("Stappen", 0, 4); OzOled.printNumber (stappen, 0, 8, 4); vectorprevious = vector; vertraging (600);
Laten we een wandeling maken met onze Arduino-stappenteller
Als u klaar bent met het monteren van de print, sluit u de ATtiny85 aan op het programmeerbord en uploadt u de code. Neem nu de instelling van de stappenteller in uw handen en begin stap voor stap te lopen, het zou het aantal stappen op OLED moeten weergeven. Soms verhoogt het het aantal stappen wanneer de opstelling heel snel of heel langzaam trilt.
Op deze manier kunt u uw eigen stappenteller bouwen met de ATtiny85 en MPU6050. De volledige werking van het project is ook te vinden in de onderstaande video. Ik hoop dat je genoten hebt van het project en het interessant vond om er zelf een te bouwen. Als u vragen heeft, laat deze dan achter in het commentaargedeelte hieronder.