Obsah:
- Krok 1: Vytvořte projekt Blynk
- Krok 2: Stáhněte si programy do FireBeetle Board-ESP32
- Krok 3: Hardwarové připojení
Video: Jak udělat počítadlo kroků?: 3 kroky (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Měl jsem dobrý výkon v mnoha sportech: chůze, běh, jízda na kole, hraní badmintonu atd.
Miluji jízdu, abych mohl dlouho cestovat. Podívejte se na mé bříško ……
No, každopádně jsem se rozhodl začít cvičit. Jaké vybavení si mám připravit? Kromě sportovního zařízení ano! Potřebuji nástroj! Věřím, že s tím dokážu udržet přiměřené množství cvičení. Zde nástroj vzniká. Začněme videem ~
Přístroj může nejen zaznamenávat kroky (a kalorie) v reálném čase, ale také ukazovat čas. Zvláštní je, že formát zobrazení je ukazatel ~ tak skvělý! Moc, moc se mi to líbí!
Své záznamy můžete nahrát na internet
pouze jedním kliknutím. Všechny záznamy může zobrazit Blynk (software pro chytrý telefon představený dříve). Stejně jako u chytrých hodinek, které lze nosit, nástroj získá čas online (takže se nemusíte bát aktualizace napájení a času).
Hardware v meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
Displej displeje OLED12864
Zrychlovací modul
Baterie 3,7 V (zakoupeno online, objem kolem 600 mAh)
3 botičky (zakoupeno online)
Je velmi výhodné postavit tento projekt společností Blybk.
Krok 1: Vytvořte projekt Blynk
Přidejte dva ovládací prvky:
Zobrazení hodnoty * 1
Hodiny reálného času * 1
Název zobrazení hodnoty by měl být nastaven na kroky, ale žádné nastavení pro vlastnosti hodin reálného času. Zvolte V1 jako vstupní kolík a upravte rozložení ovládacích prvků, jak je znázorněno níže.
Krok 2: Stáhněte si programy do FireBeetle Board-ESP32
Kliknutím sem stáhnete zdrojový kód do esp32. Zdrojový kód se skládá ze souborů knihovny a souborů 3D tisku. Soubor knihovny byste měli uložit do lib of arduino. A 3D soubory mohou krusty tisknout přímo.
Níže je hlavní program
#include #include // Potřebné pouze pro Arduino 1.6.5 a starší #include "SSD1306.h" // alias pro `#include" SSD1306Wire.h "` #include "OLEDDisplayUi.h" #include "images.h" # zahrnout #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; Displej SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (& zobrazit); Časovač SimpleTimer; WidgetRTC rtc; int obrazovka W = 128; int obrazovkaH = 64; int clockCenterX = obrazovkaW/2; int clockCenterY = ((obrazovkaH-16)/2) +16; // horní žlutá část má výšku 16 px int clockRadius = 23; #define DEVICE (0x53) // adresa zařízení ADXL345 #define TO_READ (6) // počet bytů, které budeme číst pokaždé (dva bajty pro každou osu) byte buff [TO_READ]; // 6bytová vyrovnávací paměť pro ukládání dat načtených ze zařízení char str [100]; // vyrovnávací paměť řetězců pro transformaci dat před odesláním na sériový port int regAddress = 0x32; // první registr dat zrychlení osy na ADXL345 int xx, yy, zz; // statická data tříosého zrychlení int currentValue = 0; statické nepodepsané dlouhé krokySoučet = 0; char auth = "YourAuthToken"; // Vaše pověření WiFi. // U otevřených sítí nastavte heslo na „“. char ssid = "YourNetworkName"; char pass = "Vaše heslo"; 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, 0x 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, 0xF, 0x0, 0x0 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1, 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, 0x0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0x 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x0, 0x0 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // pomocná funkce pro zobrazení digitálních hodin: tiskne úvodní 0 Řetězec twoDigits (int číslice) {if (číslice <10) {String i = '0'+String (číslice); vrátit i; } else {return String (číslice); }} 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); // hodinová tikadla pro (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // zobrazí úhel plovoucí ruky z druhé ruky = sekunda () * 6; úhel = (úhel / 57.29577951); // Převod stupňů na radiány int x3 = (clockCenterX + (sin (úhel) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (úhel) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // zobrazení minutového úhlu ruky = minuta () * 6; úhel = (úhel / 57.29577951); // Převod stupňů na radiány x3 = (clockCenterX + (sin (úhel) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (úhel) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // zobrazení hodinového úhlu ruky = hodina () * 30 + int ((minuta () / 12) * 6); úhel = (úhel / 57.29577951); // Převod stupňů na radiány x3 = (clockCenterX + (sin (úhel) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (úhel) * (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 (hodina ())+":"+dvě číslice (minuta ())+":"+dvě číslice (druhá ()); 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, date); } void writeTo (int zařízení, adresa bytu, hodnota bytu) {Wire.beginTransmission (zařízení); // zahájení přenosu do zařízení Wire.write (adresa); // odeslat registrační adresu Wire.write (val); // odeslání hodnoty pro zápis Wire.endTransmission (); // konec přenosu} // čte počet bajtů počínaje registrem adres na zařízení do buff buffu void readFrom (int zařízení, adresa bytu, int num, byte buff ) {Wire.beginTransmission (zařízení); // zahájení přenosu do zařízení Wire.write (adresa); // odešle adresu ke čtení z Wire.endTransmission (); // konec přenosu Wire.beginTransmission (zařízení); // zahájení přenosu do zařízení Wire.requestFrom (zařízení, počet); // požadavek 6 bytů ze zařízení int i = 0; while (Wire.available ()) // zařízení může odesílat méně, než je požadováno (abnormální) {buff = Wire.read (); // obdrží bajt i ++; } Wire.endTransmission (); // konec přenosu} void runningFrame (OLEDDisplay*displej, OLEDDisplayUiState*stav, 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, „nahrát data …“); } // Toto pole uchovává ukazatele funkcí na všechny snímky // rámce jsou jednotlivá zobrazení, která se posouvají v rámcích FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // kolik rámců je? int frameCount = 4; // Překryvy jsou staticky kresleny na horní část rámu, např. překrytí hodin OverlayCallback = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (neplatné) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (rámce, frameCount); ui.setOverlays (překryvy, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (ZAŘÍZENÍ, 0x2D, 16); writeTo (ZAŘÍZENÍ, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // přečtěte data zrychlení z 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 ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {delay (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); vrátit POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); vrátit MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); vrátit UPLOAD_KEY; }} vrátit 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int klíče = getKeys (); if (keys == POWER_KEY) {static char i = 0; if (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ 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 {upload = true; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int ZbývajícíTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (remainTimeBudget);} doKeysFunction (); timer.run ();}
Upozornění: Nastavení Wi-Fi, cestovní pas a AUTHTOKENS byste měli upravit sami sobě.
char auth = "YourAuthToken"; // Vaše pověření WiFi. // U otevřených sítí nastavte heslo na „“. char ssid = "YourNetworkName"; char pass = "Vaše heslo";
Krok 3: Hardwarové připojení
Připojte OLED12864 a akcelerační modul k I2C, spodní části k D2, D3, D4. Kromě toho přidejte ke dnu 51k výsuvné odpory, aby dosáhly 3,3 V, jak je znázorněno níže.
Upozornění: Připojování výsuvných odporů k AREF je nesprávné, správné je 3,3V
Obrázek pájení hardwaru, zobrazený níže:
Po pájení sestavte hardwarový modul do kůry, viz níže:
Komplexní efektový obrázek ~
Doporučuje:
Jak udělat softstarter: 4 kroky (s obrázky)
Jak vyrobit softstarter: V tomto malém projektu se budeme blíže zabývat zařízeními, která vyžadují softstartér, aby správně fungovaly s omezeným výstupním proudovým systémem. Zobrazená zařízení v tomto projektu zahrnují střídač, zesilovač, napájecí zdroj
JAK UDĚLAT SKVĚLOU ROBOTNÍ KRAVU SCARECROW: 16 kroků (s obrázky)
JAK VYROBIT ÚŽASNOU ROBOTOVOU KRAVU SCARECROW: Nedávno jsem vytvořil Moo-Bot, strašáka robotické krávy skákající přes Měsíc, pro místní soutěž plašičů. Moje inspirace byla od mého syna, který zpíval „hej, dodle dodle, kočka a housle“. .. " Na projektu bylo velmi zábavné pracovat na mém
Jak udělat nejmenšího sledovacího robota na světě (robo Rizeh): 7 kroků (s obrázky)
Jak vytvořit nejmenšího sledovacího robota na světě (robo Rizeh): Jak vyrobit nejmenšího sledovacího robota na světě (vibrobot) " roboRizeh " hmotnost: 5gr velikost: 19x16x10 mm od: Naghi Sotoudeh Slovo "Rizeh" je perské slovo, které znamená „malé“. Rizeh je velmi malý ro
Jak udělat mini reproduktor velmi snadným: 4 kroky (s obrázky)
Jak si vyrobit mini reproduktor-super snadné: Ahoj kluci, dnes postavíme " Vytvořte mini reproduktor ". Tento reproduktor je velmi malý, ale kvalita zvuku a hlasitost je docela úžasná. Tento reproduktor může být jednoduchou náhradou reproduktoru notebooku nebo mobilního telefonu
Jak udělat počítadlo pomocí Microbit ?: 9 kroků
Jak udělat počítadlo s Microbitem?: Když jsme nastoupili do letadla, často se setkáváme se situací, jako je tato: krásná letuška nesoucí malou stříbrnou krabičku ji neustále tiskne, když projíždí kolem. Mumlá: 1,2,3,4,5,6 … Musíte uhodnout-počítá celkový počet