Tartalomjegyzék:
- 1. lépés: Hozzon létre egy Blynk projektet
- 2. lépés: Programok letöltése a FireBeetle Board-ESP32-re
- 3. lépés: Hardvercsatlakozás
Videó: Hogyan készítsünk lépésszámlálót?: 3 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Korábban sok sportágban teljesítettem jól: gyalog, futás, kerékpározás, tollaslabda stb.
Szeretek lovagolni, hogy hamarosan körbeutazzam. Nos, nézd a portékás hasamat ……
Mindenesetre úgy döntök, hogy újrakezdem a gyakorlást. Milyen felszerelést kell előkészítenem? A sportlétesítmény mellett igen! Kell egy hangszer! Hiszek benne, hogy meg tudom tartani a megfelelő mennyiségű gyakorlatot. Itt jön létre a hangszer. Kezdjük egy videóval ~
A műszer nemcsak lépéseket (és kalóriákat) rögzít valós időben, hanem megjeleníti az időt. Különlegessége, hogy a megjelenítés formátuma pointer ~ annyira klassz! Nagyon -nagyon szeretem!
Feltöltheti rekordjait az internetre
csak egy kattintással. A Blynk (korábban bemutatott okostelefon-szoftver) minden rekordot megjeleníthet. A hordható intelligens órához hasonlóan a műszer időt kap az interneten (így nem kell félnie a teljesítmény és az idő frissítésétől).
Hardver a meedben:
FireBeetle Board-ESP32
A FireBeetle fedőlapjai-Proto Board
OLED12864 kijelző
Gyorsító modul
3,7 V -os akkumulátor (online vásárolt, a hangerő 600 mAh körül van)
3 üveg (online vásárolt)
Nagyon kényelmes építeni ezt a projektet Blybk által.
1. lépés: Hozzon létre egy Blynk projektet
Adjon hozzá két vezérlőt:
Értékkijelző * 1
Valós idejű óra * 1
Az Értékkijelző nevét lépésre kell állítani, de a valós idejű óra tulajdonságaihoz nem kell beállítani. Válassza ki a V1 bemeneti tűt a vezérlők elrendezésének beállításához, az alábbiak szerint.
2. lépés: Programok letöltése a FireBeetle Board-ESP32-re
Kattintson ide a forráskód letöltéséhez az esp32 -re. A forráskód könyvtári fájlokból és 3D nyomtatási fájlokból áll. Mentse el a könyvtárfájlt az arduino lib -be. A 3D fájlok pedig közvetlenül nyomtathatnak kéregeket.
Az alábbiakban a fő program látható
#include #include // Csak az Arduino 1.6.5 és korábbi verziói esetén szükséges include #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; SSD1306 kijelző (0x3c, 18, 0); OLEDDisplayUi ui (& kijelző); SimpleTimer időzítő; WidgetRTC rtc; int képernyőW = 128; int képernyőH = 64; int clockCenterX = képernyőW/2; int clockCenterY = ((képernyőH-16)/2) +16; // a felső sárga rész 16 px magasság int clockRadius = 23; #define DEVICE (0x53) // ADXL345 eszköz címe #define TO_READ (6) // bájtok száma, amelyeket minden alkalommal ki fogunk olvasni (két bájt tengelyenként) bájt buff [TO_READ]; // 6 bájtos puffer az eszközről olvasott adatok mentésére char str [100]; // karakterlánc puffer az adatok átalakításához, mielőtt elküldi azokat a soros portra int regAddress = 0x32; // első tengely-gyorsulás-adat regiszter az ADXL345-en int xx, yy, zz; // háromtengelyes gyorsulási adatok statikus int currentValue = 0; statikus előjel nélküli hosszú lépésekSum = 0; char auth = "YourAuthToken"; // WiFi hitelesítő adatai. // Állítsa be a jelszót "" a nyitott hálózatokhoz. char ssid = "SajátNetworkName"; char pass = "Saját jelszó"; 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, 0x00, 0x00, 0x00, 0x00 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 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 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x00, 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, 0x00, 0x0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x0, 0x0, 0x0 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x0, 0x0, 0x0 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // segédfunkció digitális óra kijelzéshez: a kezdő 0 karakterlánc kinyomtatása Két számjegy (int számjegy) {if (számjegy <10) {String i = '0'+String (számjegy); vissza i; } else {return String (számjegy); }} void clockOverlay (OLEDDisplay * kijelző, OLEDDisplayUiState * állapot) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * kijelző, OLEDDisplayUiState * állapot, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // óra pipálja a következőt: (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // a használt lebegési szög = másodperc () * 6; szög = (szög) megjelenítése / 57.29577951); // Fokok konvertálása radiánokká int x3 = (clockCenterX + (sin (szög) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (szög) * * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // kijelző percmutató szöge = perc () * 6; szög = (szög / 57.29577951); // Fokok konvertálása radiánba x3 = (clockCenterX + (sin (szög) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (szög) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // az óra mutatószögének megjelenítése = óra () * 30 + int ((perc () / 12) * 6); szög = (szög / 57.29577951); // Fokok radiánokká alakítása x3 = (clockCenterX + (sin (szög) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (szög) * * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * kijelző, OLEDDisplayUiState * állapot, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()); String timenow = Karakterlánc (óra ())+":"+twoDigits (perc ())+":"+twoDigits (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, dátum); } void writeTo (int eszköz, bájtcím, bájt val) {Wire.beginTransmission (eszköz); // indítsa el az átvitelt az eszközre Wire.write (cím); // regisztrációs cím küldése Wire.write (val); // érték küldése írni Wire.endTransmission (); // az átvitel befejezése} // számbájtokat olvas az eszköz címregiszterétől kezdve a buff tömb void readFrom (int eszköz, bájtcím, int szám, bájt buff ) {Wire.beginTransmission (eszköz); // indítsa el az átvitelt az eszközre Wire.write (cím); // elküldendő címet küld a Wire.endTransmission () -ből; // vége átvitel Wire.beginTransmission (eszköz); // indítsa el az átvitelt az eszközre Wire.requestFrom (eszköz, szám); // 6 bájt kérése az eszköztől int i = 0; while (Wire.available ()) // az eszköz kevesebbet küldhet a kértnél (abnormális) {buff = Wire.read (); // bájt fogadása i ++; } Wire.endTransmission (); // vége átvitel} void runningFrame (OLEDDisplay*kijelző, OLEDDisplayUiState*állapot, 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 * kijelző, OLEDDisplayUiState * állapot, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "adatok feltöltése …"); } // Ez a tömb függvénymutatókat tart minden képkockára // A keretek az egyetlen nézetek, amelyek a FrameCallback frame -ekben csúsznak = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // hány képkocka van? int frameCount = 4; // A fedvények statikusan rajzolódnak a keret tetejére, pl. egy óra OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (void) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (keretek, frameCount); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (DEVICE, 0x2D, 16); writeTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // a gyorsulási adatok olvasása az ADXL345 -ből 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 <aktuálisérték) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {delay (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); return POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); return MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); vissza UPLOAD_KEY; }} return 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int kulcsok = getKeys (); if (kulcsok == POWER_KEY) {static char i = 0; ha (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (kulcsok == MENU_KEY) {if (feltöltés == hamis) {uiFrameIndex ++; ha (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} if (kulcsok == UPLOAD_KEY) {if (feltöltés == igaz) {feltöltés = hamis; ui.switchToFrame (uiFrameIndex); } else {feltöltés = igaz; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, BEMENET); pinMode (D4, BEMENET); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int maradékidőBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (maradékTimeBudget);} doKeysFunction (); timer.run ();}
Vigyázat: A Wi-Fi beállításokat, az útlevelet és az AUTHTOKENS-t saját maga módosítsa.
char auth = "YourAuthToken"; // WiFi hitelesítő adatai. // Állítsa be a jelszót "" a nyitott hálózatokhoz. char ssid = "SajátNetworkName"; char pass = "Saját jelszó";
3. lépés: Hardvercsatlakozás
Csatlakoztassa az OLED12864 -et és a gyorsítómodult az I2C -hez, alját a D2, D3, D4 -hez. Ezenkívül adjon hozzá 51k felhúzó ellenállást az aljához, hogy elérje a 3.3 V-ot, az alábbiak szerint.
Vigyázat: Helytelen a felhúzó ellenállásokat az AREF-hez csatlakoztatni, a megfelelő az 3.3V-hoz
A hardver forrasztási képe, az alábbiak szerint:
A forrasztás után a hardvermodul összeállítása a kéreghez, az alábbiak szerint:
Átfogó hatású kép ~
Ajánlott:
Hogyan készítsünk vezeték nélküli konzervdobozt! (Arduino Walkie Talkie): 7 lépés (képekkel)
Hogyan készítsünk vezeték nélküli konzervdobozt! (Arduino Walkie Talkie): Éppen a minap voltam egy nagyon fontos telefonhívás kellős közepén, amikor a banános telefonom leállt! Annyira csalódott voltam. Ez az utolsó alkalom, hogy nem fogadok hívást a hülye telefon miatt! (Utólag visszagondolva lehet, hogy egy kicsit túl mérges lettem
Hogyan készítsünk egy LED audiospektrum -elemzőt: 7 lépés (képekkel)
Hogyan készítsünk egy LED audiospektrum -elemzőt: A LED audio spektrumanalizátor a gyönyörű fénymintát a zene intenzitásának megfelelően hozza létre. Rengeteg DIY LED zenei spektrum készlet kapható a piacon, de itt egy LED audiospektrumot készítünk NeoPixe elemző
Hogyan készítsünk LM358 hangszínszabályozót az 2.1 erősítőhöz: 7 lépés (képekkel)
Hogyan készítsünk LM358 hangszínszabályozót a 2.1 -es erősítőhöz: Tehát a Youtube csatornámon sokan kérdezik, hogyan lehet két erősítőt egybe kombinálni. Az első erősítőt műholdas hangszórókhoz, a második erősítőt pedig mélynyomó hangszórókhoz használják. Ezt az erősítő telepítési konfigurációt nevezhetjük erősítőnek
Hogyan készítsünk otthon rugós rezgésérzékelőt!: 5 lépés (képekkel)
Hogyan készítsünk rugós rezgésérzékelőt otthon !: Egy új projekten dolgoztam, amely egy rugós rezgésérzékelőt tartalmaz, azaz a " szegény ember " gyorsulásmérő/mozgásérzékelő! Ezek a rugós rezgéskapcsolók nagy érzékenységű, nem irányított rezgések által kiváltott triggerkapcsolók. Belül van egy
Hogyan készítsünk nagyszülők naptárát & Scrapbook (még akkor is, ha nem tudja, hogyan kell a Scrapbookot írni): 8 lépés (képekkel)
Hogyan készítsünk nagyszülők naptárát & Scrapbook (még ha nem is tudod, hogyan kell a Scrapbookot írni): Ez egy nagyon gazdaságos (és nagyra értékelt!) Ünnepi ajándék a nagyszülőknek. Idén 5 naptárat készítettem, egyenként kevesebb mint 7 dollárért. Anyagok: 12 nagyszerű fotó gyermekéről, gyermekeiről, unokahúgairól, unokaöccseiről, kutyáiról, macskáiról vagy más rokonairól12 különböző darab