Përmbajtje:
- Hapi 1: Krijoni një Projekt Blynk
- Hapi 2: Shkarkoni Programet në FireBeetle Board-ESP32
- Hapi 3: Lidhja e harduerit
Video: Si të bëni një numërues hapash ?: 3 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Më parë performoja mirë në shumë sporte: ecje, vrapim, ngasja biçikletë, duke luajtur badminton etj.
Më pëlqen shumë të udhëtoj për të udhëtuar. Epo, shiko barkun tim portual ……
Epo, gjithsesi, vendos të rifilloj të stërvitem. Çfarë pajisje duhet të përgatis? Përveç objektit sportiv, po! Kam nevojë për një instrument! Unë besoj se me të, unë mund të mbaj sasinë e duhur të stërvitjes. Këtu instrumenti vjen në ekzistencë. Le të fillojmë me një video
Instrumenti jo vetëm që mund të regjistrojë hapa (dhe kalori) në kohë reale, por të tregojë kohën. E veçanta është se formati i shfaqjes është tregues ~ aq i lezetshëm! Me të vërtetë, me të vërtetë më pëlqen!
Ju mund t'i ngarkoni të dhënat tuaja në internet
vetëm me një klikim. Të gjitha regjistrimet mund të shfaqen nga Blynk (një softuer i telefonave inteligjentë i prezantuar më parë). Ashtu si ora inteligjente e veshshme, instrumenti merr kohë në linjë (Pra, nuk keni nevojë të keni frikë nga përditësimi i fuqisë dhe kohës).
Pajisjet kompjuterike në bar:
Bordi FireBeetle-ESP32
FireBeetle Covers-Proto Board
Ekrani i shpërndarjes OLED12864
Moduli i përshpejtimit
Bateri 3.7V (e blerë në internet, vëllimi është rreth 600mAH)
3 shishe (blerë në internet
Shtë shumë i përshtatshëm për të ndërtuar këtë projekt nga Blybk.
Hapi 1: Krijoni një Projekt Blynk
Shtoni dy kontrolle:
Shfaqja e vlerës * 1
Ora në kohë reale * 1
Emri i ekranit të vlerës duhet të vendoset në hapa, por asnjë cilësim për vetitë e orës në kohë reale. Zgjidhni V1 si pin hyrje për të rregulluar paraqitjen e kontrolleve, të treguar si më poshtë.
Hapi 2: Shkarkoni Programet në FireBeetle Board-ESP32
Klikoni këtu për të shkarkuar kodin burimor në esp32. Kodi burim përbëhet nga skedarë bibliotekash dhe skedarë printimi 3D. Duhet ta ruani skedarin e bibliotekës në lib of arduino. Dhe skedarët 3D mund të printojnë kore direkt.
Më poshtë është programi kryesor
#include #include // Nevojitet vetëm për Arduino 1.6.5 dhe më herët #përfshi "SSD1306.h" // alias për `#include" SSD1306Wire.h "` # #include "OLEDDisplayUi.h" #include "images.h" # përfshijnë #përfshijnë #përfshijnë #përfshijnë #përfshijnë #përcaktojnë POWER_KEY 1 #përcaktojnë MENU_KEY 2 #përcaktojnë UPLOAD_KEY 3 ngarkim boolean = false; Ekran SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (& shfaq); Kohëmatësi SimpleTimer; WidgetRTC rtc; int ekranW = 128; int screenH = 64; int clockCenterX = ekranW/2; int clockCenterY = ((ekranH-16)/2) +16; // pjesa e verdhë e sipërme është 16 px lartësi int clockRadius = 23; #define DEVICE (0x53) // Adresa e pajisjes ADXL345 #përcakto TO_READ (6) // numrin e bajtëve që do të lexojmë çdo herë (dy byte për secilin aks) byte buff [TO_READ]; // 6 bytes tampon për ruajtjen e të dhënave të lexuara nga pajisja char str [100]; // string buffer për të transformuar të dhënat para se t'i dërgoni në portin serik int regAddress = 0x32; // regjistri i parë i aksit-nxitimit-të dhënave në ADXL345 int xx, yy, zz; // të dhëna të nxitimit me tre boshte statike int currentValue = 0; hapa të gjatë të panënshkruar statikëSum = 0; char auth = "YourAuthToken"; // Kredencialet tuaja WiFi. // Vendosni fjalëkalimin në "" për rrjetet e hapura. char ssid = "Emri juaj i rrjetit"; char pass = "Fjalëkalimi juaj"; 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 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xF, 0x03, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x03 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 0x07, 0x07 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x00, 0x1F 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 0.5 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0x03, 0x40, 0xFC, 0x00, 0x80, 0x3 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // funksioni i shërbimit për shfaqjen e orës dixhitale: printon në krye 0 String twoDigits (shifrat int) {if (shifrat <10) {String i = '0'+String (shifra); kthehem i; } else {kthimi i vargut (shifrat); }} void clockOverlay (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *) {if ((orë () == 0) && (minuta () == 0) && (e dyta () == 0)) hapaSum = 0; } void analogClockFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // rriqrat e orës për (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // shfaq këndin e notimit të dorës së dytë = e dytë () * 6; kënd = (kënd / 57.29577951); // Shndërroni gradat në radianë int x3 = (clockCenterX + (sin (këndi) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (këndi) * (clockRadius - (clockRadius / 5)))); ekran-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // shfaq këndin e dorës së minutës = minutë () * 6; kënd = (kënd / 57.29577951); // Shndërroni gradë në radian x3 = (clockCenterX + (sin (kënd) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (kënd) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // shfaq këndin e dorës së orës = orë () * 30 + int ((minutë () / 12) * 6); kënd = (këndi / 57.29577951); // Shndërroni gradat në radian x3 = (clockCenterX + (sin (kënd) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (kënd) * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {Data e vargut = String (vit ())+"/"+dyDigra (muaj ())+"/"+dyDigra (ditë ()); String timenow = String (orë ())+":"+twoDigits (minute ())+":"+twoDigits (e dyta ()); shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); shfaqje-> setFont (ArialMT_Plain_24); ekran-> drawString (clockCenterX + x, 20, ora më poshtë); ekran-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, data); } void writeTo (pajisja int, adresa e bajtit, byte val) {Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.write (adresa); // dërgoni adresën e regjistrit Wire.write (val); // dërgoni vlerë për të shkruar Wire.endTransmission (); // përfundimi i transmetimit} // lexon numra byte duke filluar nga regjistri i adresave në pajisje në array buff void readFrom (pajisja int, adresa e bajtit, int num, byte buff ) {Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.write (adresa); // dërgon adresën për të lexuar nga Wire.endTransmission (); // përfundoni transmetimin Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.requestFrom (pajisje, num); // të kërkojë 6 bajt nga pajisja int i = 0; ndërsa (Wire.available ()) // pajisja mund të dërgojë më pak nga sa kërkohet (jonormale) {buff = Wire.read (); // merrni një byte i ++; } Wire.endTransmission (); // përfundimi i transmetimit} void runningFrame (ekrani OLEDDisplay*, gjendja OLEDDisplayUiState*, int16_t x, int16_t y) {float calValue = hapaSum*0.4487; shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); ekran-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); ekran-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); ekran-> barazimXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "ngarkoni të dhënat …"); } // Ky grup mban treguesit e funksionit në të gjitha kornizat // kornizat janë pamjet e vetme që rrëshqasin në kornizat FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // sa korniza ka? int frameCount = 4; // Mbivendosjet vizatohen në mënyrë statike mbi një kornizë p.sh. një mbivendosje mbivendosjesh të orës = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (pavlefshme) {if (upload == true) {Blynk.virtualWrite (V0, hapatSum); Blynk.virtualWrite (V1, hapaSum); }} void uiInit (i pavlefshëm) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (korniza, frameCount); ui.setOvelays (mbivendosje, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertical (); } void adxl345Init (i pavlefshëm) {writeTo (Pajisje, 0x2D, 0); writeTo (Pajisje, 0x2D, 16); writeTo (Pajisje, 0x2D, 8); } void updateAdxl345 (pavlefshme) {readFrom (Pajisje, regAddress, TO_READ, buff); // lexoni të dhënat e nxitimit nga ADXL345 xx = ((((int) buff [1]) << 8) | buff [0]; yy = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; nëse (xx 80) {nëse (xx <vlera aktuale) {hapaSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (pavlefshme) {if (digitalRead (D2) == LOW) {vonesë (5); nëse (digitalRead (D2) == LOW) {ndërsa (digitalRead (D2) == LOW); kthe POWER_KEY; }} if (digitalRead (D3) == LOW) {vonesë (5); nëse (digitalRead (D3) == LOW) {ndërsa (digitalRead (D3) == LOW); kthehu MENU_KEY; }} if (digitalRead (D4) == LOW) {vonesë (5); nëse (digitalRead (D4) == LOW) {ndërsa (digitalRead (D4) == LOW); kthe UPLOAD_KEY; }} kthimi 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; çelësat int = getKeys (); nëse (çelësat == POWER_KEY) {karikatori statik i = 0; nëse (i) {ui.init (); display.flipScreenVertical (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (çelësat == MENU_KEY) {nëse (ngarkoni == false) {uiFrameIndex ++; nëse (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } tjetër {ui.switchToFrame (3); }} nëse (çelësat == UPLOAD_KEY) {nëse (ngarkoni == e vërtetë) {ngarkoni = false; ui.switchToFrame (uiFrameIndex); } tjetër {ngarkoni = e vërtetë; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.filloj (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int დარჩენილიTimeBudget = ui.update (); test statik intSum = 0; if ((testSum 0) {vonesë (დარჩენილიTimeBudget);} doKeysFunction (); timer.run ();}
Kujdes: Duhet të modifikoni cilësimet e Wi-Fi, pasaportën dhe AUTHTOKENS për veten tuaj.
char auth = "YourAuthToken"; // Kredencialet tuaja WiFi. // Vendosni fjalëkalimin në "" për rrjetet e hapura. char ssid = "Emri juaj i rrjetit"; char pass = "Fjalëkalimi juaj";
Hapi 3: Lidhja e harduerit
Lidhni OLED12864 dhe modulin e përshpejtimit me I2C, në fund me D2, D3, D4. Për më tepër, shtoni 51k rezistencë tërheqëse në fund për të arritur 3.3V, të treguar si më poshtë.
Kujdes: wrongshtë e gabuar lidhja e rezistencave tërheqëse me AREF, e drejta është në 3.3V
Imazhi i bashkimit të harduerit, i treguar si më poshtë:
Pas bashkimit, montimi i modulit të harduerit në kore, treguar si më poshtë:
Imazh i efektit gjithëpërfshirës
Recommended:
Konzola Atari Punk With a Baby Sequencer 8 hapash: 7 hapa (me fotografi)
Konsola Atari Punk With a Baby 8 Sequencer Step: Kjo strukturë e ndërmjetme është e gjithanshme në Atari Punk Console dhe Baby 8 Step Sequencer që mund të blini në Bantam Tools Desktop PCB Milling Machine. Përbëhet nga dy pllaka qarku: njëra është bordi i ndërfaqes së përdoruesit (UI) dhe tjetri është një ndërmarrje e shërbimeve
Si të bëni një numërues të monedhave: 3 hapa
Si të bëni një numërues monedhash: Ky udhëzues do të përshkruajë se si të krijoni një sportel të monedhave të derrkucit me një GreenPAK. Ky sportel i bankës së derrit do të përdorë tre përbërës kryesorë: GreenPAK SLG46531V: GreenPAK shërben si përkthyes midis sensorëve dhe ekranit
Si të ndërtoni një numërues të njerëzve me mjedër Pi dhe Ubidots: 6 hapa
Si të ndërtoni një numërues të njerëzve me Raspberry Pi dhe Ubidots: Në këtë projekt të thjeshtë ne do të përdorim një sensor lëvizjeje për të zbuluar nëse një objekt po kalon para Raspberry Pi tonë. Pastaj ne do të numërojmë sa herë ndodh kjo dhe do t'ia dërgojmë këtë vlerë Ubidots. Sportelet e njerëzve janë zakonisht pajisje të shtrenjta që përdoren në
Si të bëni një dron duke përdorur Arduino UNO - Bëni një kuadopter duke përdorur mikrokontrollues: 8 hapa (me fotografi)
Si të bëni një dron duke përdorur Arduino UNO | Bëni një Quadcopter Duke përdorur Mikrokontrolluesin: HyrjeVizitoni Kanalin Tim në YoutubeNjë drone është një vegël (produkt) shumë e shtrenjtë për të blerë. Në këtë postim do të diskutoj, si ta bëj me çmim të ulët ?? Dhe si mund ta bëni tuajin si ky me çmim të lirë … Epo në Indi të gjitha materialet (motorët, ESC -të
Si të bëni një numërues me mikrobit?: 9 hapa
Si të bëni një sportel me mikrobit?: Kur hipim në aeroplan, shpesh hasim në një situatë si kjo: një stjuardesë e bukur që mban një kuti të vogël argjendi e mban shtypur gjatë kalimit. Ajo është duke murmuritur: 1,2,3,4,5,6 …… Duhet ta merrni me mend-ajo po numëron numrin e përgjithshëm të