Sisällysluettelo:
- Vaihe 1: Luo Blynk -projekti
- Vaihe 2: Lataa ohjelmat FireBeetle Board-ESP32: een
- Vaihe 3: Laitteistoyhteys
Video: Kuinka tehdä askellaskuri?: 3 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Toimin hyvin monissa urheilulajeissa: kävely, juoksu, pyöräily, sulkapallo jne.
Rakastan ratsastaa ja matkustaa ympäri ennen pitkää. Katsokaa minun vatsaani …….
No, joka tapauksessa, päätän aloittaa harjoituksen uudelleen. Mitä laitteita minun pitäisi valmistaa? Urheilutilojen lisäksi kyllä! Tarvitsen soittimen! Uskon sen avulla, että voin pitää riittävästi liikuntaa. Tässä instrumentti syntyy. Aloitetaan videolla ~
Laite ei voi vain tallentaa askeleita (ja kaloreita) reaaliajassa, vaan näyttää ajan. Erityistä on, että esitysmuoto on osoitin ~ niin siistiä! Pidän todella, todella!
Voit ladata tietueet Internetiin
vain yhdellä napsautuksella. Kaikki tietueet voidaan näyttää Blynkillä (aiemmin esitellyt älypuhelinohjelmisto). Sama kuin puettava älykello, laite saa aikaa verkossa (joten sinun ei tarvitse pelätä tehon ja ajan päivitystä).
Laitteisto meedissä:
FireBeetle Board-ESP32
FireBeetlen kannet-Proto-lauta
OLED12864 -näyttö
Kiihdytysmoduuli
3,7 V akku (ostettu verkosta, äänenvoimakkuus on noin 600 mAh)
3 pulloa (ostettu verkosta)
On erittäin kätevää rakentaa tämä projekti Blybkin toimesta.
Vaihe 1: Luo Blynk -projekti
Lisää kaksi ohjainta:
Arvonäyttö * 1
Reaaliaikainen kello * 1
Arvonäytön nimi on asetettava askeleisiin, mutta ei asetusta reaaliaikaisen kellon ominaisuuksiin. Säädä säätimien asettelua valitsemalla tulonapiksi V1, kuten alla on esitetty.
Vaihe 2: Lataa ohjelmat FireBeetle Board-ESP32: een
Lataa lähdekoodi esp32 -tiedostoon napsauttamalla tätä. Lähdekoodi koostuu kirjastotiedostoista ja 3D -tulostustiedostoista. Tallenna kirjastotiedosto arduinon lib -tiedostoon. Ja 3D -tiedostot voivat tulostaa kuoret suoraan.
Alla pääohjelma
#include #include // Tarvitaan vain Arduino 1.6.5: lle ja sitä vanhemmille #include "SSD1306.h" // alias kohteelle "#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 boolean upload = false; SSD1306 -näyttö (0x3c, 18, 0); OLEDDisplayUi ui (& näyttö); SimpleTimer -ajastin; WidgetRTC rtc; int -näyttöW = 128; int -näyttö H = 64; int clockCenterX = näyttöW/2; int clockCenterY = ((näyttöH-16)/2) +16; // ylin keltainen osa on 16 px korkeus int clockRadius = 23; #define DEVICE (0x53) // ADXL345 -laiteosoite #define TO_READ (6) // tavujen lukumäärä, jonka aiomme lukea joka kerta (kaksi tavua kullekin akselille), tavupuskuri [TO_READ]; // 6 tavun puskuri laitteesta luetun datan tallentamiseen char str [100]; // merkkijonopuskuri tietojen muuttamiseksi ennen niiden lähettämistä sarjaporttiin int regAddress = 0x32; // ensimmäisen akselin kiihdytystietorekisteri ADXL345: ssä int xx, yy, zz; // kolmen akselin kiihdytystiedot staattinen int currentValue = 0; staattiset allekirjoittamattomat pitkät askeleetSum = 0; char auth = "YourAuthToken"; // WiFi -kirjautumistietosi. // Aseta salasana "" avoimille verkoille. char ssid = "Oma verkkosiNimi"; char pass = "Oma salasana"; const char running_Logo_bits OHJELMA = {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 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, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x00, 0x00, 0x80 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, 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,}; // digitaalisen kellon näytön apuohjelma: tulostaa alun 0 -merkkijono kaksiDigits (int -numerot) {if (numerot <10) {String i = '0'+String (numerot); palauta i; } else {return Merkkijono (numeroa); }} void clockOverlay (OLEDDisplay * -näyttö, OLEDDisplayUiState * -tila) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * -näyttö, OLEDDisplayUiState * -tila, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // tunti rasti (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // näyttää käytetyn kellukulman = sekunti () * 6; kulma = (kulma / 57.29577951); // Muunna astetta radiaaneiksi int x3 = (clockCenterX + (sin (kulma) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (kulma) * * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // näyttö minuutin käden kulma = minuutti () * 6; kulma = (kulma / 57.29577951); // Muunna astetta radiaaneiksi x3 = (clockCenterX + (sin (kulma) * (clockRadius - (clockRadius / 4))))); y3 = (clockCenterY - (cos (kulma) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // näyttötunnin käden kulma = tunti () * 30 + int ((minuutti () / 12) * 6); kulma = (kulma / 57.29577951); // Muunna astetta radiaaneiksi x3 = (clockCenterX + (sin (kulma) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (kulma) * * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * -näyttö, OLEDDisplayUiState * -tila, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()); Merkkijonon aika = Jono (tunti ())+":"+kaksi numeroa (minuutti ())+":"+kaksi numeroa (toinen ()); display-> setTextAlignment (TEXT_ALIGN_CENTER); näyttö-> setFont (ArialMT_Plain_24); näyttö-> drawString (clockCenterX + x, 20, timenow); näyttö-> setFont (ArialMT_Plain_16); näyttö-> drawString (60, 45, päivämäärä); } void writeTo (int laite, tavuosoite, tavu val) {Wire.beginTransmission (laite); // aloita siirto laitteelle Wire.write (osoite); // lähetä rekisteriosoite Wire.write (val); // lähetä arvo kirjoittaa Wire.endTransmission (); // lopeta lähetys} // lukee numeja tavuista alkaen laitteen osoiterekisteristä puskurimatriisiin void readFrom (int -laite, tavuosoite, int -numero, tavupuskuri ) {Wire.beginTransmission (laite); // aloita siirto laitteelle Wire.write (osoite); // lähettää luettavan osoitteen Wire.endTransmission (); // lopeta lähetys Wire.beginTransmission (laite); // aloita siirto laitteelle Wire.requestFrom (laite, numero); // pyytää 6 tavua laitteelta int i = 0; while (Wire.available ()) // laite voi lähettää vähemmän kuin pyydetty (epänormaali) {buff = Wire.read (); // vastaanottaa tavun i ++; } Wire.endTransmission (); // lopeta lähetys} void runningFrame (OLEDDisplay*-näyttö, OLEDDisplayUiState*-tila, int16_t x, int16_t y) {float calValue = stepsSum*0.4487; display-> setTextAlignment (TEXT_ALIGN_CENTER); näyttö-> setFont (ArialMT_Plain_24); näyttö-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); display-> setTextAlignment (TEXT_ALIGN_CENTER); näyttö-> setFont (ArialMT_Plain_10); näyttö-> drawString (100, 20, str); näyttö-> drawXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (OLEDDisplay * -näyttö, OLEDDisplayUiState * -tila, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "lähetä tiedot…"); } // Tämä taulukko pitää toimintojen osoittimet kaikkiin kehyksiin // kehykset ovat yksittäisiä näkymiä, jotka liukuvat FrameCallback -kehyksissä = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // kuinka monta kehystä on? int frameCount = 4; // Peittokuvat piirretään staattisesti kehyksen päälle, esim. a clock 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 (DIA_LEFT); ui.setFrames (kehykset, frameCount); ui.setOverlays (peittokuvat, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (LAITE, 0x2D, 0); writeTo (LAITE, 0x2D, 16); writeTo (LAITE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // lukee kiihdytystiedot ADXL345: stä 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); palauta POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); palauta MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); palauta UPLOAD_KEY; }} paluu 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int avaimet = getKeys (); if (avaimet == POWER_KEY) {staattinen merkki i = 0; jos (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (avaimet == MENU_KEY) {if (upload == false) {uiFrameIndex ++; jos (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} jos (avaimet == UPLOAD_KEY) {jos (lataa == tosi) {lataa = epätosi; 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 ülejäänudTimeBudget = ui.update (); staattinen int testSum = 0; if ((testSum 0) {delay (leftTimeBudget);} doKeysFunction (); timer.run ();}
Varoitus: Muuta Wi-Fi-asetusta, passia ja AUTHTOKENS-tiedostoja itse.
char auth = "YourAuthToken"; // WiFi -kirjautumistietosi. // Aseta salasana "" avoimille verkoille. char ssid = "Oma verkkosiNimi"; char pass = "Oma salasana";
Vaihe 3: Laitteistoyhteys
Liitä OLED12864 ja kiihdytysmoduuli I2C: hen, pohjat D2, D3, D4. Lisäksi lisää 51k: n vetovastusvastuksia pohjaan, jotta se saavuttaa 3,3 V: n, kuten alla on esitetty.
Varoitus: On väärin kytkeä vetovastusvastukset AREF: ään, oikea on 3.3 V
Laitteiston juotoskuva, joka on esitetty alla:
Juottamisen jälkeen laitteistomoduulin kokoaminen kuoreen, kuten alla:
Kattava vaikutus kuva ~
Suositeltava:
Kuinka tehdä langaton tinapurkkipuhelin! (Arduino Walkie Talkie): 7 vaihetta (kuvilla)
Kuinka tehdä langaton tinapurkkipuhelin! (Arduino Walkie Talkie): Juuri eilen olin keskellä erittäin tärkeää puhelua, kun banaanipuhelin lakkasi toimimasta! Olin niin turhautunut. Se on viimeinen kerta, kun jätän puhelun tyhmän puhelimen takia! (Jälkeenpäin ajateltuna olen saattanut olla hieman vihainen
DIY Kuinka tehdä tyylikkään näköinen kello - StickC - Helppo tehdä: 8 vaihetta
DIY Kuinka tehdä tyylikkään näköinen kello - StickC - Helppo tehdä: Tässä opetusohjelmassa opimme ohjelmoimaan ESP32 M5Stack StickC: n Arduino IDE: n ja Visuinon avulla näyttämään ajan nestekidenäytöllä ja asettamaan ajan myös StickC -painikkeilla
Kuinka tehdä äänensäätö LM358 vahvistimelle 2.1: 7 vaihetta (kuvilla)
Kuinka tehdä äänensäätö LM358 vahvistimelle 2.1: Youtube -kanavallani monet ihmiset kysyvät, kuinka yhdistää kaksi vahvistinta yhdeksi. Ensimmäistä vahvistinta käytetään satelliittikaiuttimiin ja toista vahvistinta käytetään subwoofer -kaiuttimiin. Tätä vahvistimen asennuskokoonpanoa voidaan kutsua Amp
Kuinka tehdä jousitärinäanturi kotona!: 5 vaihetta (kuvilla)
Kuinka tehdä jousivärähtelyanturi kotona!: Työskentelin uuden projektin parissa, joka käsitti jousivärähtelyanturin eli "köyhän miehen". kiihtyvyysanturi/liikeanturi! Nämä jousivärähtelykytkimet ovat erittäin herkkiä suuntaamattomia tärinän aiheuttamia liipaisinkytkimiä. Sisällä on
Askellaskuri - Mikro: Bitti: 12 vaihetta (kuvilla)
Askellaskuri - Mikro: Bitti: Tämä projekti on askellaskuri. Käytämme Micro: Bitiin sisäänrakennettua kiihtyvyysanturianturia askeleiden mittaamiseen. Joka kerta kun Micro: Bit ravistelee, lisäämme laskutoimitukseen 2 ja näytämme sen näytöllä