Inhaltsverzeichnis:
- Schritt 1: Erstellen Sie ein Blynk-Projekt
- Schritt 2: Programme auf FireBeetle Board-ESP32 herunterladen
- Schritt 3: Hardwareverbindung
Video: Wie erstelle ich einen Schrittzähler?: 3 Schritte (mit Bildern)
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Früher habe ich bei vielen Sportarten gute Leistungen gezeigt: Gehen, Laufen, Fahrrad fahren, Badminton spielen usw.
Ich liebe es zu reiten, um in Kürze herumzureisen. Nun, sieh dir meinen beleibten Bauch an……
Jedenfalls beschließe ich, wieder Sport zu treiben. Welche Ausrüstung soll ich vorbereiten? Außer Sportanlage ja! Ich brauche ein Instrument! Ich glaube, damit kann ich ein angemessenes Maß an Bewegung halten. Hier entsteht das Instrument. Beginnen wir mit einem Video~
Das Instrument kann nicht nur Schritte (und Kalorien) in Echtzeit aufzeichnen, sondern auch die Zeit anzeigen. Das Besondere ist, dass das Format der Show Pointer~ so cool ist! Ich mag es wirklich sehr!
Sie können Ihre Aufzeichnungen ins Internet hochladen
nur mit einem Klick. Alle Datensätze können von Blynk (einer zuvor eingeführten Smartphone-Software) angezeigt werden. Wie bei einer tragbaren Smartwatch erhält das Instrument die Zeit online (Sie brauchen also keine Angst vor der Aktualisierung von Leistung und Uhrzeit zu haben).
Hardware in meed:
FireBeetle-Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 Anzeigebildschirm
Beschleunigungsmodul
3,7V Batterie (online gekauft, die Lautstärke beträgt ca. 600mAH)
3 Flaschen (online gekauft))
Es ist sehr praktisch, dieses Projekt von Blybk zu bauen.
Schritt 1: Erstellen Sie ein Blynk-Projekt
Fügen Sie zwei Steuerelemente hinzu:
Wertanzeige * 1
Echtzeituhr * 1
Der Name der Wertanzeige sollte auf Schritte gesetzt werden, aber keine Einstellung für die Eigenschaften der Echtzeituhr. Wählen Sie V1 als Eingangspin, um das Layout der Steuerelemente anzupassen, wie unten gezeigt.
Schritt 2: Programme auf FireBeetle Board-ESP32 herunterladen
Klicken Sie hier, um den Quellcode für esp32 herunterzuladen. Der Quellcode besteht aus Bibliotheksdateien und 3D-Druckdateien. Sie sollten die Bibliotheksdatei in der lib von arduino speichern. Und die 3D-Dateien können Krusten direkt drucken.
Unten ist das Hauptprogramm
#include #include // Nur benötigt für Arduino 1.6.5 und früher #include "SSD1306.h" // Alias für `#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 Boolescher Upload = false; SSD1306-Anzeige (0x3c, 18, 0); OLEDDisplayUi-UI (&display); SimpleTimer-Timer; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = screenW/2; int clockCenterY = ((screenH-16)/2)+16; // oberer gelber Teil ist 16 px Höhe int clockRadius = 23; #define DEVICE (0x53) //ADXL345 Geräteadresse #define TO_READ (6) //Anzahl der Bytes, die wir jedes Mal lesen (zwei Bytes für jede Achse) byte buff[TO_READ]; ///6 Byte Puffer zum Speichern der vom Gerät gelesenen Daten char str[100]; // String-Puffer zum Transformieren von Daten vor dem Senden an den seriellen Port Int regAddress = 0x32; // erstes Achsbeschleunigungsdatenregister auf dem ADXL345 int xx, yy, zz; // dreiachsige Beschleunigungsdaten statisch Int currentValue = 0; statisch unsigned long stepsSum=0; char auth = "IhrAuthToken"; // Ihre WLAN-Zugangsdaten. // Passwort für offene Netzwerke auf "" setzen. char ssid = "IhrNetzwerkname"; char pass = "IhrPasswort"; 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, 00 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, 0x03, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1F, 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, 0xE0,8 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA,0,0 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x,F 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00, }; // Hilfsfunktion für die Digitaluhranzeige: druckt führende 0 String twoDigits (int digits) { if (digits <10) { String i = '0' + String (digits); Rückkehr ich; } Else { Return String (Ziffern); aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. Void analogClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) { display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // Stunde tickt for(int z=0; z drawLine(x2 + x, y2 + y, x3 + x, y3 + y); } // Sekundenzeiger float angle = second() * 6; angle = (angle / 57.29577951); // Grad in Bogenmaß umwandeln 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); // Minutenzeigerwinkel anzeigen = minute() * 6; angle = (angle / 57.29577951); // Grad in Bogenmaß umwandeln x3 = (clockCenterX + (sin(angle) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos(angle) * (clockRadius - (clockRadius / 4)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // Stundenzeigerwinkel anzeigen = hour() * 30 + int((minute() / 12) * 6); angle = (Winkel / 57,29577951); // Grad in Bogenmaß umwandeln 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(hour())+":"+twoDigits(minute())+":"+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, Datum); aufrechtzuerhalten. Void writeTo (int device, byte address, byte val) { Wire.beginTransmission (device); // Übertragung zum Gerät starten Wire.write (Adresse); // Registeradresse senden Wire.write (val); // Wert senden, um Wire.endTransmission() zu schreiben; // Übertragung beenden} // Liest Anzahl Bytes beginnend vom Adressregister auf dem Gerät in das Buff-Array void readFrom (int device, byte address, int num, byte buff) { Wire.beginTransmission (device); // Übertragung zum Gerät starten Wire.write (Adresse); // sendet Adresse zum Lesen von Wire.endTransmission (); // Übertragung beenden Wire.beginTransmission (Gerät); // Übertragung zum Gerät starten Wire.requestFrom(device, num); // 6 Byte vom Gerät anfordern Int i = 0; while(Wire.available()) //Gerät sendet möglicherweise weniger als angefordert (abnormal) { buff= Wire.read(); // ein Byte empfangen i++; } Wire.endTransmission(); // Übertragung beenden aufrechtzuerhalten. 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); aufrechtzuerhalten. Void uploadFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) { display->setFont (ArialMT_Plain_16); display->drawString(60, 45, "Daten hochladen …"); } // Dieses Array behält Funktionszeiger auf alle Frames // Frames sind die einzelnen Ansichten, die in FrameCallback geschoben werden frames = { analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // Wie viele Bilder gibt es? int frameCount = 4; // Overlays werden statisch auf einen Rahmen gezeichnet, zB. ein Clock-OverlayCallback-Overlays = {clockOverlay}; int overlaysCount = 1; Void uploadToBlynk (void) { if (upload == true) { Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, SchritteSum); aufrechtzuerhalten.}} 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(frames, frameCount); ui.setOverlays(Overlays, OverlaysCount); ui.disableAutoTransition(); ui.switchToFrame(2); ui.init(); display.flipScreenVertically(); aufrechtzuerhalten. Void adxl345Init (void) {writeTo (GERÄT, 0x2D, 0); writeTo(GERÄT, 0x2D, 16); writeTo(GERÄT, 0x2D, 8); aufrechtzuerhalten. Void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, Buff); // die Beschleunigungsdaten vom ADXL345 lesen 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 < aktueller Wert) { SchritteSum ++; } aktueller Wert = xx; } sprintf(str, "%d", stepsSum); aufrechtzuerhalten. Int getKeys (void) { if (digitalRead (D2) == LOW) { delay (5); if (digitalRead (D2) == LOW) { während (digitalRead (D2) == LOW); POWER_KEY zurückgeben; } } if (digitalRead (D3) == LOW) { Verzögerung (5); if (digitalRead (D3) == LOW) { während (digitalRead (D3) == LOW); MENÜ_SCHLÜSSEL zurückgeben; } } if (digitalRead (D4) == LOW) { Verzögerung (5); if (digitalRead (D4) == LOW) { während (digitalRead (D4) == LOW); UPLOAD_KEY zurückgeben; } } Rückgabe 0; aufrechtzuerhalten. Void doKeysFunction (void) { static int uiFrameIndex = 2; int-Schlüssel = getKeys(); if (keys == POWER_KEY) { statisches Zeichen i = 0; wenn (i) {ui.init (); display.flipScreenVertically(); display.displayOn(); }sonst{ display.displayOff(); } ich = ~i; } if(keys == MENU_KEY){ if(upload == false){ uiFrameIndex++; if(uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame(uiFrameIndex); }sonst{ ui.switchToFrame(3); }} if(keys == UPLOAD_KEY){ if(upload == true){ upload = false; ui.switchToFrame(uiFrameIndex); }sonst{ hochladen = wahr; ui.switchToFrame(3); } } } Void setup () {pinMode (D2, INPUT); PinMode (D3, EINGANG); PinMode (D4, EINGANG); Blynk.begin(auth, ssid, pass); rtc.begin(); uiInit(); adxl345Init(); timer.setInterval(30, updateAdxl345); timer.setInterval(100, uploadToBlynk); aufrechtzuerhalten. Void Schleife () { Int RestTimeBudget = ui.update (); statische int testSum = 0; if((testSum 0) { delay(remainingTimeBudget); } doKeysFunction(); timer.run(); }
Achtung: Sie sollten die WLAN-Einstellungen, den Reisepass und die AUTHTOKENS für sich selbst ändern.
char auth = "IhrAuthToken"; // Ihre WLAN-Zugangsdaten. // Passwort für offene Netzwerke auf "" setzen. char ssid = "IhrNetzwerkname"; char pass = "IhrPasswort";
Schritt 3: Hardwareverbindung
Verbinden Sie OLED12864 und Beschleunigungsmodul mit I2C, Unterseite mit D2, D3, D4. Fügen Sie außerdem 51k Pull-up-Widerstände zu den Böden hinzu, um 3,3 V zu erreichen, wie unten gezeigt.
Achtung: Es ist falsch, Pullup-Widerstände an AREF anzuschließen, der richtige ist an 3.3V
Das Hardware-Lötbild, wie unten gezeigt:
Nach dem Löten, Zusammenbauen des Hardwaremoduls zur Kruste, wie unten gezeigt:
Umfassendes Effektbild~
Empfohlen:
Wie erstelle ich eine Drohne mit Arduino UNO - Machen Sie einen Quadcopter mit Mikrocontroller - Gunook
Wie erstelle ich eine Drohne mit Arduino UNO | Machen Sie einen Quadcopter mit Mikrocontroller: EinführungBesuchen Sie meinen Youtube-KanalEine Drohne ist ein sehr teures Gerät (Produkt) zu kaufen. In diesem Beitrag werde ich diskutieren, wie ich es billig mache? Und wie können Sie so zu einem günstigen Preis Ihre eigenen herstellen … Nun, in Indien alle Materialien (Motoren, Regler
Wie erstelle ich einen Mini-PC: 4 Schritte (mit Bildern)
Wie man einen Mini-PC herstellt: Eine Geschichte, woher wir kamen: Die eine der drei klassischen Fragen der Philosophie --- Woher wir kamen, hat mich all die Jahre beschäftigt. Ich habe einmal versucht, Dinge wie einen Roman zu schreiben und habe hier eine gemäßigte Meinung zu der Frage abgegeben. Es sei
[Arduino-Roboter] Wie erstelle ich einen Motion-Capture-Roboter - Daumen Roboter - Servomotor - Quellcode: 26 Schritte (mit Bildern)
[Arduino-Roboter] Wie erstelle ich einen Motion-Capture-Roboter | Daumen Roboter | Servomotor | Quellcode: Thumbs Robot. Verwendet ein Potentiometer des Servomotors MG90S. Es macht sehr viel Spaß und ist einfach! Der Code ist sehr einfach. Es sind nur etwa 30 Zeilen. Es sieht aus wie ein Motion-Capture.Bitte hinterlassen Sie Fragen oder Feedback![Anleitung] Quellcode https://github.c
Wie erstelle ich einen FUZZ-Gitarreneffekt aus dem Aliexpress DIY-Kit: 20 Schritte (mit Bildern)
Wie man FUZZ-Gitarren-Effekt aus Aliexpress DIY-Kit macht: Ich habe DIY Fuzz-E-Gitarren-Effekt von AliExpress gekauft und es gab so bescheidene Informationen, dass ich beschlossen habe, ein Instructables für andere, weniger erfahrene Benutzer oder Käufer zu machen. Das ist also
Wie erstelle ich einen Zähler mit Microbit?: 9 Schritte
Wie erstelle ich mit Microbit einen Counter?: Wenn wir an Bord eines Flugzeugs gehen, erleben wir oft eine Situation wie diese: Eine schöne Stewardess, die eine kleine silberne Kiste trägt, drückt sie im Vorbeifahren. Sie murmelt: 1, 2, 3, 4, 5, 6…… Sie müssen es erraten – sie zählt die Gesamtzahl der