Isi kandungan:
- Langkah 1: Buat Projek Blynk
- Langkah 2: Muat turun Program ke FireBeetle Board-ESP32
- Langkah 3: Sambungan Perkakasan
Video: Bagaimana Membuat Pembilang Langkah? 3 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Saya pernah menunjukkan prestasi yang baik di banyak sukan: berjalan, berlari, menunggang basikal, bermain badminton dll.
Saya gemar menunggang perjalanan jauh-jauh. Baiklah, lihatlah perut saya yang pucat ……
Bagaimanapun, saya memutuskan untuk memulakan semula untuk bersenam. Peralatan apa yang harus saya sediakan? Selain kemudahan sukan, ya! Saya memerlukan instrumen! Saya percaya dengan itu, saya dapat melakukan senaman yang sesuai. Di sinilah instrumen itu wujud. Mari mulakan dengan video ~
Instrumen ini bukan sahaja dapat merakam langkah (dan kalori) pada waktu nyata, tetapi menunjukkan waktu. Yang istimewa ialah format penunjuk adalah penunjuk ~ sangat keren! Saya sangat suka!
Anda boleh memuat naik rekod anda ke Internet
hanya dengan satu klik. Semua rekod boleh dipaparkan oleh Blynk (perisian telefon pintar yang diperkenalkan sebelumnya). Sama seperti jam tangan pintar yang boleh dipakai, alat ini mendapat masa dalam talian (Oleh itu, anda tidak perlu takut dengan kekuatan dan masa mengemas kini).
Perkakasan dalam meed:
Papan FireBeetle-ESP32
FireBeetle Covers-Proto Board
Skrin pelupusan OLED12864
Modul pecutan
Bateri 3.7V (dibeli dalam talian, jumlahnya sekitar 600mAH)
3 botol (dibeli dalam talian)
Sangat senang untuk membina projek ini oleh Blybk.
Langkah 1: Buat Projek Blynk
Tambahkan dua kawalan:
Paparan Nilai * 1
Jam masa nyata * 1
Nama Paparan Nilai harus diatur ke beberapa langkah, tetapi tidak ada pengaturan untuk sifat jam Waktu Nyata. Pilih V1 sebagai pin input untuk mengatur susun atur kawalan, seperti di bawah.
Langkah 2: Muat turun Program ke FireBeetle Board-ESP32
Klik di sini untuk memuat turun kod sumber ke esp32. Kod sumber terdiri daripada fail perpustakaan dan fail percetakan 3D. Anda harus menyimpan fail perpustakaan ke lib of arduino. Dan fail 3D boleh mencetak kerak secara langsung.
Berikut adalah program utama
#include #include // Hanya diperlukan untuk Arduino 1.6.5 dan lebih awal #include "SSD1306.h" // alias untuk `#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # sertakan #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 # tentukan UPLOAD_KEY 3 boolean upload = false; Paparan SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (& display); Pemasa SimpleTimer; WidgetRTC rtc; int skrinW = 128; int skrinH = 64; int clockCenterX = skrinW / 2; int clockCenterY = ((skrinH-16) / 2) +16; // bahagian kuning atas ialah 16 px tinggi int clockRadius = 23; #define DEVICE (0x53) // alamat peranti ADXL345 #define TO_READ (6) // jumlah bait yang akan kita baca setiap kali (dua bait untuk setiap paksi) buff byte [TO_READ]; // 6 bait penyangga untuk menyimpan data yang dibaca dari peranti peranti [100]; // string buffer untuk mengubah data sebelum menghantarnya ke port serial int regAddress = 0x32; // daftar paksi-pecutan pertama-data pada ADXL345 int xx, yy, zz; // data pecutan tiga paksi statik int currentValue = 0; langkah panjang yang tidak ditandatangani statikSum = 0; char auth = "YourAuthToken"; // Kelayakan WiFi anda. // Tetapkan kata laluan ke "" untuk rangkaian terbuka. char ssid = "YourNetworkName"; char pass = "Kata Laluan Anda"; 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, 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1F, 0x1F, 0x1F 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, 0x0, 0x00, 0x00, 0x00, 0x00, 0x 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x 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, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // fungsi utiliti untuk paparan jam digital: cetakan yang memimpin 0 String twoDigits (int digit) {if (digit <10) {String i = '0' + String (digit); pulangan i; } lain {String kembali (digit); }} kekosongan jam Overlay (paparan OLEDDisplay *, keadaan OLEDDisplayUiState *) {if ((jam () == 0) && (minit () == 0) && (kedua () == 0)) langkahSum = 0; } void analogClockFrame (paparan OLEDDisplay *, keadaan OLEDDisplayUiState *, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // kutu jam untuk (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // paparkan sudut apungan terpakai = kedua () * 6; sudut = (sudut / 57.29577951); // Tukar darjah ke radian 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); // paparan sudut tangan minit = minit () * 6; sudut = (sudut / 57.29577951); // Tukar darjah ke radian x3 = (clockCenterX + (sin (sudut) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (angle) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // sudut paparan jam tangan = jam () * 30 + int ((minit () / 12) * 6); angle = (angle / 57.29577951); // Tukar darjah ke radian 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 (tahun ()) + "/" + twoDigits (bulan ()) + "/" + duaDigits (hari ()); String timenow = Rentetan (jam ()) + ":" + twoDigits (minit ()) + ":" + twoDigits (kedua ()); paparan-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); paparan-> drawString (clockCenterX + x, 20, timenow); display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, tarikh); } batal writeTo (int device, byte address, byte val) {Wire.beginTransmission (peranti); // mulakan penghantaran ke peranti Wire.write (alamat); // hantar alamat daftar Wire.write (val); // hantar nilai untuk menulis Wire.endTransmission (); // transmisi akhir} // membaca bilangan bait bermula dari daftar alamat pada peranti ke array buff void readFrom (int device, alamat byte, int num, byte buff ) {Wire.beginTransmission (device); // mulakan penghantaran ke peranti Wire.write (alamat); // menghantar alamat untuk dibaca dari Wire.endTransmission (); // akhir penghantaran Wire.beginTransmission (peranti); // mulakan penghantaran ke peranti Wire.requestFrom (peranti, nombor); // minta 6 bait dari peranti int i = 0; sementara (Wire.available ()) // peranti boleh menghantar kurang daripada yang diminta (tidak normal) {buff = Wire.read (); // terima byte i ++; } Wire.endTransmission (); // end transmission} void runningFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {float calValue = stepSum * 0.4487; paparan-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); paparan-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); paparan-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); display-> drawXbm (10, 14, 34, 50, running_Logo_bits); } batal uploadFrame (paparan OLEDDisplay *, keadaan OLEDDisplayUiState *, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "muat naik data …"); } // Array ini menyimpan penunjuk fungsi ke semua bingkai // bingkai adalah pandangan tunggal yang meluncur dalam bingkai FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // berapakah bilangan bingkai yang ada? int frameCount = 4; // Lapisan dilukis secara statik di atas bingkai misalnya. jam OverlayCallback overlay = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepSum); Blynk.virtualWrite (V1, StepSum); }} 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 (bingkai, frameCount); ui.setOverlays (overlay, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } batal adxl345Init (tidak sah) {writeTo (PERANTI, 0x2D, 0); writeTo (PERANTI, 0x2D, 16); writeTo (PERANTI, 0x2D, 8); } kemas kini batalAdxl345 (tidak sah) {readFrom (PERANTI, regAddress, TO_READ, buff); // baca data pecutan dari 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) {langkahSum ++; } currentValue = xx; } sprintf (str, "% d", langkahSum); } int getKeys (batal) {if (digitalRead (D2) == RENDAH) {kelewatan (5); jika (digitalRead (D2) == RENDAH) {manakala (digitalRead (D2) == RENDAH); pulangkan POWER_KEY; }} jika (digitalRead (D3) == RENDAH) {kelewatan (5); jika (digitalRead (D3) == RENDAH) {manakala (digitalRead (D3) == RENDAH); pulangkan MENU_KEY; }} jika (digitalRead (D4) == RENDAH) {kelewatan (5); jika (digitalRead (D4) == RENDAH) {manakala (digitalRead (D4) == RENDAH); pulangkan UPLOAD_KEY; }} pulangkan 0; } void doKeysFunction (void) {stat ui int uiFrameIndex = 2; kunci int = getKeys (); jika (kunci == POWER_KEY) {char static = =; jika (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } lain {display.displayOff (); } i = ~ i; } if (kunci == MENU_KEY) {if (muat naik == palsu) {uiFrameIndex ++; jika (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } lain {ui.switchToFrame (3); }} if (kunci == UPLOAD_KEY) {if (muat naik == benar) {muat = salah; ui.switchToFrame (uiFrameIndex); } lain {muat naik = benar; ui.switchToFrame (3); }}} persediaan tidak sah () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, kemas kiniAdxl345); timer.setInterval (100, uploadToBlynk); } gelung void () {int tersisaTimeBudget = ui.update (); ujian int statikSum = 0; if ((testSum 0) {delay (sisaTimeBudget);} doKeysFunction (); timer.run ();}
Awas: Anda harus mengubah sendiri tetapan Wi-Fi, pasport dan AUTHTOKENS.
char auth = "YourAuthToken"; // Kelayakan WiFi anda. // Tetapkan kata laluan ke "" untuk rangkaian terbuka. char ssid = "YourNetworkName"; char pass = "Kata Laluan Anda";
Langkah 3: Sambungan Perkakasan
Sambungkan OLED12864 dan modul pecutan ke I2C, bahagian bawah ke D2, D3, D4. Lebih-lebih lagi, tambahkan resistor pull-up 51k ke bahagian bawah hingga mencapai 3.3V, seperti di bawah.
Awas: Tidak betul menyambungkan perintang tarik ke AREF, yang betul ialah 3.3V
Gambar pematerian perkakasan, ditunjukkan seperti di bawah:
Selepas pateri, memasang modul perkakasan ke kerak, seperti di bawah:
Imej kesan komprehensif ~
Disyorkan:
Bagaimana Saya Membuat Mesin Tinju Sendiri?: 11 Langkah (dengan Gambar)
Bagaimana Saya Membuat Mesin Tinju Sendiri ?: Tidak ada kisah menakjubkan di sebalik projek ini - saya selalu menyukai mesin tinju, yang terletak di pelbagai tempat yang popular. Saya memutuskan untuk membina tambang
Bagaimana Saya Membuat Lampu suluh Paling Canggih: 10 Langkah (dengan Gambar)
Bagaimana Saya Membuat Lampu suluh Paling Canggih: Reka bentuk PCB adalah titik lemah saya. Saya sering mendapat idea mudah dan memutuskan untuk merealisasikannya sesempurna dan sesempurna mungkin. Oleh itu, saya pernah kelihatan lama " tentera " Lampu suluh 4.5V dengan mentol biasa yang mengumpulkan habuk a. Keluaran cahaya dari b
Bagaimana Membuat Gerbang WIFI Sendiri untuk Menghubungkan Rangkaian Arduino Anda ke IP?: 11 Langkah (dengan Gambar)
Bagaimana Membuat Gerbang WIFI Anda Sendiri untuk Menghubungkan Arduino Anda ke Rangkaian IP?: Seperti banyak orang yang anda fikir Arduino adalah penyelesaian yang sangat baik untuk melakukan automasi rumah dan robot! Tetapi dari segi komunikasi, Arduino hanya datang dengan pautan bersiri. Saya sedang mengusahakan robot yang perlu dihubungkan secara kekal dengan pelayan yang menjalankan
Cara Membuat Pembilang Syiling: 3 Langkah
Cara Membuat Kaunter Koin: Instructable ini akan menerangkan bagaimana membuat kaunter duit syiling piggy bank dengan GreenPAK ™. Kaunter piggy bank ini akan menggunakan tiga komponen utama: GreenPAK SLG46531V: GreenPAK berfungsi sebagai jurubahasa antara sensor dan penggerak
Arduino - Balance - Menyeimbangkan Robot - Bagaimana Membuat?: 6 Langkah (dengan Gambar)
Arduino - Balance - Menyeimbangkan Robot | Bagaimana Membuat?: Dalam tutorial ini kita akan belajar bagaimana membuat robot Ardoino (keseimbangan) yang mengimbangi dirinya sendiri. Mula-mula anda boleh melihat tutorial video di atas