Inhoudsopgave:
- Stap 1: Maak een Blynk-project
- Stap 2: Programma's downloaden naar FireBeetle Board-ESP32
- Stap 3: Hardwareverbinding
Video: Hoe maak je een stappenteller?: 3 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Ik presteerde goed in veel sporten: wandelen, hardlopen, fietsen, badminton spelen etc.
Ik hou van paardrijden om snel rond te reizen. Nou, kijk eens naar mijn dikke buik……
Hoe dan ook, ik besluit weer te gaan sporten. Welke apparatuur moet ik voorbereiden? Naast sportfaciliteiten, ja! Ik heb een instrument nodig! Ik geloof dat ik hiermee de juiste hoeveelheid lichaamsbeweging kan behouden. Hier ontstaat het instrument. Laten we beginnen met een video~
Het instrument kan niet alleen stappen (en calorieën) in realtime opnemen, maar ook de tijd weergeven. Wat speciaal is, is dat het formaat van de weergave pointer is ~ zo cool! Ik vind het echt heel leuk!
U kunt uw gegevens uploaden naar internet
slechts met één klik. Alle records kunnen worden weergegeven door Blynk (een eerder geïntroduceerde smartphone-software). Hetzelfde als een draagbaar slim horloge, het instrument krijgt tijd online (je hoeft dus niet bang te zijn voor de kracht en tijd die wordt bijgewerkt).
Hardware in med:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 weergavescherm
Versnellingsmodule
3.7V batterij (online gekocht, het volume is ongeveer 600mAH)
3 flessen (online gekocht)
Het is erg handig om dit project door Blybk te bouwen.
Stap 1: Maak een Blynk-project
Voeg twee besturingselementen toe:
Waardeweergave * 1
Realtime klok * 1
De naam van Waardeweergave moet worden ingesteld op stappen, maar geen instelling voor de eigenschappen van Real-time klok. Kies V1 als invoerpin om de lay-out van de bedieningselementen aan te passen, zoals hieronder weergegeven.
Stap 2: Programma's downloaden naar FireBeetle Board-ESP32
Klik hier om de broncode naar esp32 te downloaden. De broncode bestaat uit bibliotheekbestanden en 3D-printbestanden. U moet het bibliotheekbestand opslaan in de bibliotheek van arduino. En de 3D-bestanden kunnen korsten direct printen.
Hieronder het hoofdprogramma
#include #include // Alleen nodig voor Arduino 1.6.5 en eerder #include "SSD1306.h" // alias voor `#include "SSD1306Wire.h"` #include "OLEDDisplayUi.h" #include "images.h" # include #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 booleaanse upload = false; SSD1306-scherm (0x3c, 18, 0); OLEDDisplayUi ui (&display); SimpleTimer-timer; WidgetRTC rtc; int schermW = 128; int schermH = 64; int clockCenterX = schermW/2; int clockCenterY = ((schermH-16)/2)+16; // bovenste gele deel is 16 px hoogte int clockRadius = 23; #define DEVICE (0x53) //ADXL345 device address #define TO_READ (6) //aantal bytes dat we elke keer gaan lezen (twee bytes voor elke as) byte buff [TO_READ]; //6 bytes buffer voor het opslaan van gegevens gelezen van het apparaat char str [100]; //stringbuffer om gegevens te transformeren voordat ze naar de seriële poort worden verzonden int regAddress = 0x32; //eerste as-versnelling-gegevensregister op de ADXL345 int xx, yy, zz; // versnellingsgegevens met drie assen statisch int currentValue = 0; statische niet-ondertekende lange stepsSum=0; char auth = "YourAuthToken"; // Uw WiFi-inloggegevens. // Stel wachtwoord in op "" voor open netwerken. char ssid = "UwNetwerkNaam"; char pass = "UwWachtwoord"; const char running_Logo_bits PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x00, 0x 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x0300, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1F, 0x0, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 0, 0xE8, 0x1F, 0x3F, 0x00, 0x00, 0xE8, 0xA7, 0x3E, 0x00, 0x00, 0xF0, 0x03, 0x7C, 0x00, 0x00, 0xE0, 0x05, 0x7C, 0x00, 0x00,x 0xE0, 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00,0x 0xA0, 0x00,x 0xA0, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0,0x 0x0F, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00, }; // hulpprogramma voor digitale klokweergave: drukt voorloop 0 String twoDigits (int cijfers) {if (cijfers <10) { String i = '0'+String (cijfers); retour ik; } else { return String (cijfers); } } void clockOverlay (OLEDDisplay *display, OLEDDisplayUiState* state) {if((hour()==0) && (minute()==0) && (second()==0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {display->drawCircle(clockCenterX + x, clockCenterY + y, 2); //uur tikt voor (int z=0; z drawLine(x2 + x, y2 + y, x3 + x, y3 + y); } // toon tweede hand zweefhoek = seconde() * 6; hoek = (hoek / 57.29577951); // Converteer graden naar radialen int x3 = (clockCenterX + (sin(angle) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos(angle) * (clockRadius - (clockRadius / 5)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // weergave minutenwijzer hoek = minuut () * 6; hoek = (hoek / 57.29577951); // Converteer graden naar radialen x3 = (clockCenterX + (sin(angle) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos(angle) * (clockRadius - (clockRadius / 4)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // weergave uurwijzerhoek = uur() * 30 + int((minuut() / 12) * 6); hoek = (hoek / 57.29577951); // Converteer graden naar radialen x3 = (clockCenterX + (sin(angle) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos(angle) * (clockRadius - (clockRa dius / 2)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { String date = String(year())+"/"+twoDigits(month())+"/"+twoDigits(day()); String timenow = String(uur())+":"+twoDigits(minute())+":"+twoCijfers(second()); display->setTextAlignment(TEXT_ALIGN_CENTER); display->setFont(ArialMT_Plain_24); display->drawString(clockCenterX + x, 20, timenow); display->setFont(ArialMT_Plain_16); display->drawString(60, 45, datum); } void writeTo (int-apparaat, byte-adres, byte-val) { Wire.beginTransmission (apparaat); // start verzending naar apparaat Wire.write (adres); // stuur registeradres Wire.write (val); // stuur waarde om Wire.endTransmission te schrijven (); // end transmissie } // leest num bytes vanaf adresregister op apparaat naar buff array void readFrom (int device, byte address, int num, byte buff ) { Wire.beginTransmission (apparaat); // start verzending naar apparaat Wire.write (adres); // verzendt adres om te lezen van Wire.endTransmission (); //Beëindig transmissie Wire.beginTransmission (apparaat); // start verzending naar apparaat Wire.requestFrom (apparaat, num); // verzoek 6 bytes van apparaat int i = 0; while(Wire.available()) //apparaat kan minder verzenden dan gevraagd (abnormaal) { buff= Wire.read(); // ontvang een byte i++; } Draad.endTransmission(); // end transmissie} void runningFrame (OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { float calValue = stepsSum*0.4487; display->setTextAlignment(TEXT_ALIGN_CENTER); display->setFont(ArialMT_Plain_24); display->drawString(clockCenterX, clockCenterY, str); sprintf(str, "%.2fcal", calValue); display->setTextAlignment(TEXT_ALIGN_CENTER); display->setFont(ArialMT_Plain_10); display->drawString(100, 20, str); display->drawXbm(10, 14, 34, 50, running_Logo_bits); } void uploadFrame (OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {display->setFont(ArialMT_Plain_16); display->drawString(60, 45, "gegevens uploaden …"); } // Deze array houdt functieaanwijzers naar alle frames // frames zijn de enkele weergaven die in FrameCallback-frames worden geschoven = { analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // hoeveel frames zijn er? int frameCount = 4; // Overlays worden statisch op een frame getekend, bijv. een klok OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk(void){if(upload == true){Blynk.virtualWrite(V0, stepsSum); Blynk.virtualWrite (V1, stappenSum); } } void uiInit(void){ ui.setTargetFPS(30); //ui.setActiveSymbol (activeSymbol); //ui.setInactiveSymbol (inactiveSymbol); ui.setIndicatorPositie (TOP); ui.setIndicatorDirection(LEFT_RIGHT); ui.setFrameAnimation(SLIDE_LEFT); ui.setFrames (frames, frameCount); ui.setOverlays(overlays, overlaysCount); ui.disableAutoTransition(); ui.switchToFrame(2); ui.init(); display.flipScreenVertical(); } void adxl345Init(void){ writeTo(DEVICE, 0x2D, 0); schrijfNaar(APPARAAT, 0x2D, 16); schrijfNaar(APPARAAT, 0x2D, 8); } void updateAdxl345(void){ readFrom(DEVICE, regAddress, TO_READ, buff); // lees de acceleratiegegevens van de ADXL345 xx = (((int) buff [1]) << 8) | buff[0]; yy = (((int)buff[3])<< 8) | buff [2]; zz = (((int)buff[5]) << 8) | buff[4]; if(xx 80){ if(xx <currentValue){ stepsSum++; } huidige waarde = xx; } sprintf(str, "%d", stepsSum); } int getKeys(void){ if(digitalRead(D2) == LAAG){ delay(5); if (digitalRead (D2) == LAAG) { while (digitalRead (D2) == LAAG); retourneer POWER_KEY; } } if(digitalRead(D3) == LAAG){ delay(5); if (digitalRead (D3) == LAAG) { while (digitalRead (D3) == LAAG); keer MENU_KEY terug; } } if(digitalRead(D4) == LAAG){ delay(5); if (digitalRead (D4) == LAAG) { while (digitalRead (D4) == LAAG); retourneer UPLOAD_KEY; } } retourneer 0; } void doKeysFunction(void){ static int uiFrameIndex = 2; int-sleutels = getKeys(); if(keys == POWER_KEY){ static char i = 0; if(i){ ui.init(); display.flipScreenVertical(); display.displayOn(); }else{ display.displayOff(); } ik = ~i; } if(keys == MENU_KEY){ if(upload == false){ uiFrameIndex++; if(uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame(uiFrameIndex); }else{ ui.switchToFrame(3); } } if(keys == UPLOAD_KEY){ if(upload == true){ upload = false; ui.switchToFrame(uiFrameIndex); }else{ uploaden = waar; ui.switchToFrame(3); } } } void setup () { pinMode (D2, INPUT); pinMode (D3, INGANG); pinMode (D4, INGANG); Blynk.begin(auth, ssid, pass); rtc.begin(); uiInit(); adxl345Init(); timer.setInterval (30, updateAdxl345); timer.setInterval(100, uploadToBlynk); } void loop() { int resterendeTimeBudget = ui.update(); statische int testSum = 0; if((testSum 0) {delay(remainingTimeBudget);} doKeysFunction(); timer.run();}
Let op: U dient de Wi-Fi-instelling, paspoort en AUTHTOKENS naar uzelf aan te passen.
char auth = "YourAuthToken"; // Uw WiFi-inloggegevens. // Stel wachtwoord in op "" voor open netwerken. char ssid = "UwNetwerkNaam"; char pass = "UwWachtwoord";
Stap 3: Hardwareverbinding
Sluit OLED12864 en acceleratiemodule aan op I2C, bodems op D2, D3, D4. Voeg bovendien 51k pull-up-weerstanden toe aan de bodems om 3,3 V te bereiken, zoals hieronder weergegeven.
Let op: Het is verkeerd om pull-up weerstanden aan te sluiten op AREF, de juiste is op 3.3V
De hardware-soldeerafbeelding, zoals hieronder weergegeven:
Na het soldeer, montage van de hardwaremodule tot korst, zoals hieronder weergegeven:
Uitgebreid effectbeeld ~
Aanbevolen:
Clockception - Hoe maak je een klok gemaakt van klokken bouwen! 14 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Clockception - Hoe maak je een klok gemaakt van klokken!: Hallo allemaal! Dit is mijn inzending voor de First Time Author Contest 2020! Als je dit project leuk vindt, zou ik je stem zeer op prijs stellen :) Bedankt! Deze instructable leidt je door het proces voor het bouwen van een klok gemaakt van klokken! Ik heb slim genoemd
Hoe maak je een stopwatch met Arduino 8 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe maak je een stopwatch met behulp van Arduino: dit is een zeer eenvoudige Arduino 16 * 2 lcd-scherm stopwatch ……….. Als je deze Instructable leuk vindt, abonneer je dan op mijn kanaal https://www.youtube.com /ZenoModiff
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
Hoe maak je een polsband stappenteller: 5 stappen
Hoe maak je een polsbandje stappenteller: Ik ben dol op wandelen en rennen in de wijk waar ik woon. Ik geniet van de tijd om alleen te zijn, omdat er op dit moment altijd geweldige ideeën in me opkomen. Onlangs kocht ik een 6-assige inertiële bewegingssensor van DFRobot. Dus het komt me voor dat waarom niet
Hoe maak je een lijnvolger met Arduino 8 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe maak je een lijnvolger met Arduino: Als je aan de slag gaat met robotica, bevat een van de eerste projecten die beginners maken een lijnvolger. Het is een speciale speelgoedauto met eigenschap om langs een lijn te rijden die normaal gesproken zwart van kleur is en contrasteert met de achtergrond. Let's get star