Daftar Isi:
- Langkah 1: Buat Proyek Blynk
- Langkah 2: Unduh Program ke FireBeetle Board-ESP32
- Langkah 3: Koneksi Perangkat Keras
Video: Cara Membuat Penghitung Langkah?: 3 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Saya dulu berprestasi baik di banyak olahraga: berjalan, berlari, mengendarai sepeda, bermain bulu tangkis, dll.
Saya suka naik untuk bepergian sebelum lama. Nah, lihat perutku yang gendut……
Yah, bagaimanapun, saya memutuskan untuk memulai kembali untuk berolahraga. Peralatan apa yang harus saya siapkan? Selain fasilitas olahraga, ya! Aku butuh instrumen! Saya percaya dengan itu, saya bisa menjaga jumlah latihan yang tepat. Di sini instrumen muncul. Mari kita mulai dengan video~
Instrumen tidak hanya dapat merekam langkah (dan kalori) secara real time, tetapi juga menunjukkan waktu. Yang spesial adalah format tayangannya adalah pointer~ keren banget! Aku benar-benar menyukainya!
Anda dapat mengunggah catatan Anda ke Internet
hanya dengan satu klik. Semua catatan dapat ditampilkan oleh Blynk (perangkat lunak ponsel pintar yang diperkenalkan sebelumnya). Sama seperti jam tangan pintar yang dapat dipakai, instrumen mendapatkan waktu on line (Jadi Anda tidak perlu takut dengan kekuatan dan pembaruan waktu).
Perangkat keras di media:
Papan FireBeetle-ESP32
FireBeetle Covers-Proto Board
Layar tampilan OLED12864
Modul akselerasi
Baterai 3.7V (dibeli online, volumenya sekitar 600mAH)
3 botton (dibeli online)
Sangat nyaman untuk membangun proyek ini oleh Blybk.
Langkah 1: Buat Proyek Blynk
Tambahkan dua kontrol:
Tampilan Nilai * 1
Jam waktu nyata * 1
Nama Tampilan Nilai harus diatur ke langkah, tetapi tidak ada pengaturan untuk properti Jam waktu nyata. Pilih V1 sebagai pin input untuk mengatur tata letak kontrol, seperti di bawah ini.
Langkah 2: Unduh Program ke FireBeetle Board-ESP32
Klik di sini untuk mengunduh kode sumber ke esp32. Kode sumber terdiri dari file perpustakaan dan file pencetakan 3D. Anda harus menyimpan file perpustakaan ke lib arduino. Dan file 3D dapat mencetak kerak secara langsung.
Di bawah ini adalah program utama
#include #include // Hanya diperlukan untuk Arduino 1.6.5 dan sebelumnya #include "SSD1306.h" // alias untuk `#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; Layar SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (&tampilan); Pengatur waktu sederhana; WidgetRTC rtc; int layarW = 128; int layarH = 64; int clockCenterX = layarW/2; int clockCenterY = ((layarH-16)/2)+16; // bagian atas kuning adalah 16 px tinggi int clockRadius = 23; #define DEVICE (0x53) //ADXL345 alamat perangkat #define TO_READ (6) //jumlah byte yang akan kita baca setiap kali (dua byte untuk setiap sumbu) byte buff[TO_READ]; //6 byte buffer untuk menyimpan data yang dibaca dari perangkat char str[100]; //string buffer untuk mengubah data sebelum dikirim ke port serial int regAddress = 0x32; //register data-percepatan-sumbu pertama pada ADXL345 int xx, yy, zz; //data percepatan tiga sumbu static int currentValue = 0; langkah panjang statis yang tidak ditandatanganiSum=0; char auth = "YourAuthToken"; // Kredensial WiFi Anda. // Setel kata sandi ke "" untuk jaringan terbuka. char ssid = "NamaJaringanAnda"; char pass = "Kata Sandi 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 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, 0x00 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00 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, 0x05 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0x03, 0xFC 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x0F, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00, }; // fungsi utilitas untuk tampilan jam digital: mencetak awalan 0 String twoDigits(int digits){ if(digits <10) { String i = '0'+String(digits); kembali saya; } else { kembalikan String(digit); } } void clockOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) { if((hour()==0) && (minute()==0) && (second()==0)) stepsSum = 0; } void analogClockFrame(OLEDDisplay *display, status OLEDDisplayUiState*, int16_t x, int16_t y) { display->drawCircle(clockCenterX + x, clockCenterY + y, 2); //hour ticks for(int z=0; z drawLine(x2 + x, y2 + y, x3 + x, y3 + y); } // menampilkan second hand float angle = second() * 6; angle = (angle / 57.29577951); //Mengonversi derajat ke radian int x3 = (Pusat jamX + (sin(sudut) * (Radius jam - (Radius jam / 5)))); int y3 = (Pusat jamY - (cos(sudut) * (Radius jam - (clockRadius / 5)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // menampilkan sudut jarum menit = menit() * 6; sudut = (sudut / 57.29577951); //Mengonversi derajat ke radian x3 = (Pusat jamX + (sin(sudut) * (Radius jam - (Radius jam / 4)))); y3 = (Pusat jam - (cos(sudut) * (Radius jam - (Radius jam / 4)))); display->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // menampilkan sudut jarum jam = jam() * 30 + int((minute() / 12) * 6); sudut = (sudut / 57.29577951); //Konversi derajat ke radian x3 = (Pusat jamX + (sin(sudut) * (Radius jam - (Radius jam / 2)))); y3 = (Pusat jamY - (cos(sudut) * (clockRadius - (clockRa dius / 2)))); tampilan->drawLine(clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame(OLEDDisplay *display, status OLEDDisplayUiState*, int16_t x, int16_t y) { String tanggal = String(year())+"/"+twoDigits(month())+"/"+twoDigits(day()); String waktu sekarang = String(jam())+":"+duaDigit(menit())+":"+duaDigit(kedua()); tampilan->setTextAlignment(TEXT_ALIGN_CENTER); tampilan->setFont(ArialMT_Plain_24); display->drawString(clockCenterX + x, 20, timenow); tampilan->setFont(ArialMT_Plain_16); tampilan->drawString(60, 45, tanggal); } void writeTo(perangkat int, alamat byte, val byte) { Wire.beginTransmission(perangkat); //mulai transmisi ke perangkat Wire.write(alamat); // kirim alamat register Wire.write(val); // kirim nilai untuk menulis Wire.endTransmission(); //end transmission } //membaca num byte mulai dari address register pada device ke buff array void readFrom(int device, byte address, int num, byte buff) { Wire.beginTransmission(device); //mulai transmisi ke perangkat Wire.write(alamat); //mengirim alamat untuk dibaca dari Wire.endTransmission(); //akhiri transmisi Wire.beginTransmission(perangkat); //mulai transmisi ke perangkat Wire.requestFrom(device, num); // meminta 6 byte dari perangkat int i = 0; while(Wire.available()) //perangkat mungkin mengirim kurang dari yang diminta (abnormal) { buff= Wire.read(); // menerima satu byte i++; } Wire.endTransmission(); //end transmission } void runningFrame(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { float calValue = stepsSum*0.4487; tampilan->setTextAlignment(TEXT_ALIGN_CENTER); tampilan->setFont(ArialMT_Plain_24); tampilan->drawString(clockCenterX, clockCenterY, str); sprintf(str, "%.2fcal", calValue); tampilan->setTextAlignment(TEXT_ALIGN_CENTER); tampilan->setFont(ArialMT_Plain_10); tampilan->drawString(100, 20, str); tampilan->drawXbm(10, 14, 34, 50, running_Logo_bits); } void uploadFrame(OLEDDisplay *display, status OLEDDisplayUiState*, int16_t x, int16_t y) { display->setFont(ArialMT_Plain_16); display->drawString(60, 45, "upload data …"); } // Array ini menyimpan pointer fungsi ke semua frame // frame adalah tampilan tunggal yang meluncur di FrameCallback frames = { analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // ada berapa frame? int frameCount = 4; // Hamparan digambar secara statis di atas bingkai, mis. jam OverlayCallback overlay = { clockOverlay }; int overlay Hitung = 1; void uploadToBlynk(void){ if(upload == true){ Blynk.virtualWrite(V0, stepsSum); Blynk.virtualWrite(V1, jumlah langkah); } } void uiInit(void){ ui.setTargetFPS(30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(Symbol tidak aktif); ui.setIndicatorPosition(TOP); ui.setIndicatorDirection(LEFT_RIGHT); ui.setFrameAnimation(SLIDE_LEFT); ui.setFrames(frame, frameCount); ui.setOverlay(overlay, overlayCount); ui.disableAutoTransition(); ui.switchToFrame(2); ui.init(); display.flipScreenVertikal(); } void adxl345Init(void){ writeTo(DEVICE, 0x2D, 0); writeTo(PERANGKAT, 0x2D, 16); writeTo(PERANGKAT, 0x2D, 8); } void updateAdxl345(void){ readFrom(DEVICE, regAddress, TO_READ, buff); //membaca data akselerasi dari ADXL345 xx = (((int)buff[1]) << 8) | penggemar[0]; yy = (((int)buff[3])<< 8) | penggemar [2]; zz = (((int)penggemar[5]) << 8) | penggemar [4]; if(xx 80){ if(xx < currentValue){ langkahJumlah++; } nilai saat ini = xx; } sprintf(str, "%d", jumlah langkah); } int getKeys(void){ if(digitalRead(D2) == RENDAH){ delay(5); if(digitalRead(D2) == LOW){ while(digitalRead(D2) == LOW); kembali POWER_KEY; } } if(digitalRead(D3) == RENDAH){ delay(5); if(digitalRead(D3) == LOW){ while(digitalRead(D3) == LOW); kembali MENU_KEY; } } if(digitalRead(D4) == RENDAH){ delay(5); if(digitalRead(D4) == LOW){ while(digitalRead(D4) == LOW); kembali UPLOAD_KEY; } } kembalikan 0; } void doKeysFunction(void){ static int uiFrameIndex = 2; int kunci = getKeys(); if(keys == POWER_KEY){ static char i = 0; if(i){ ui.init(); display.flipScreenVertikal(); tampilan.displayOn(); }else{ tampilan.displayOff(); } saya = ~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{ unggah = benar; ui.switchToFrame(3); } } } void setup() { pinMode(D2, INPUT); pinMode(D3, INPUT); pinMode(D4, INPUT); Blynk.begin(auth, ssid, pass); rtc.mulai(); uiInit(); adxl345Init(); timer.setInterval(30, perbaruiAdxl345); timer.setInterval(100, uploadToBlynk); } void loop() { int sisaWaktuBudget = ui.update(); static int testSum = 0; if((testSum 0) { delay(remainingTimeBudget); } doKeysFunction(); timer.run(); }
Perhatian: Anda harus mengubah pengaturan Wi-Fi, paspor, dan AUTHTOKENS untuk diri Anda sendiri.
char auth = "YourAuthToken"; // Kredensial WiFi Anda. // Setel kata sandi ke "" untuk jaringan terbuka. char ssid = "NamaJaringanAnda"; char pass = "Kata Sandi Anda";
Langkah 3: Koneksi Perangkat Keras
Hubungkan OLED12864 dan modul akselerasi ke I2C, bagian bawah ke D2, D3, D4. Selain itu, tambahkan resistor pull-up 51k ke bagian bawah untuk mencapai 3.3V, yang ditunjukkan seperti di bawah ini.
Perhatian: Salah menghubungkan resistor pull-up ke AREF, yang benar ke 3.3V
Gambar penyolderan perangkat keras, ditunjukkan seperti di bawah ini:
Setelah disolder, merakit modul hardware menjadi kerak, terlihat seperti di bawah ini:
Gambar efek yang komprehensif~
Direkomendasikan:
Cara Membuat Penghitung Koin: 3 Langkah
Cara Membuat Penghitung Koin: Instruksi ini akan menjelaskan cara membuat penghitung koin celengan dengan GreenPAK™. Penghitung celengan ini akan menggunakan tiga komponen utama: GreenPAK SLG46531V: GreenPAK berfungsi sebagai interpreter antara sensor dan tampilan
Cara Membuat Drone Menggunakan Arduino UNO - Membuat Quadcopter Menggunakan Mikrokontroler: 8 Langkah (dengan Gambar)
Cara Membuat Drone Menggunakan Arduino UNO | Membuat Quadcopter Menggunakan Mikrokontroler: PendahuluanKunjungi Saluran Youtube Saya Drone adalah gadget (produk) yang sangat mahal untuk dibeli. Pada postingan kali ini saya akan membahas, bagaimana cara membuatnya dengan harga murah?? Dan Bagaimana Anda bisa membuat sendiri seperti ini dengan harga murah … Nah di India semua bahan (motor, ESC
Music Reactive Light--Cara Membuat Lampu Reaktif Musik Super Sederhana untuk Membuat Desktop Menakjubkan.: 5 Langkah (dengan Gambar)
Music Reactive Light||Cara Membuat Lampu Reaktif Musik Super Sederhana untuk Membuat Desktop Mengagumkan.: Hai apa kabar, Hari ini kita akan membuat proyek yang sangat menarik. Hari ini kita akan membuat lampu reaktif musik. LED akan berubah kecerahannya sesuai dengan bass yang sebenarnya adalah sinyal audio frekuensi rendah. Pembuatannya sangat mudah. Kami akan
Bagaimana Cara Membuat Penghitung Dengan Microbit?: 9 Langkah
Cara Membuat Counter Dengan Microbit?: Saat kita hendak menaiki pesawat, kita sering menjumpai situasi seperti ini: seorang pramugari cantik yang membawa kotak perak kecil terus menekannya saat lewat. Dia bergumam:1,2,3,4,5,6…… Anda harus menebaknya--dia sedang menghitung jumlah
Cara Membuat Kalender Kakek & Scrapbook (Bahkan Jika Anda Tidak Tahu Cara Membuat Scrapbook): 8 Langkah (dengan Gambar)
Cara Membuat Kalender Kakek & Scrapbook (bahkan Jika Anda Tidak Tahu Cara Membuat Scrapbook): Ini adalah hadiah liburan yang sangat ekonomis (dan sangat dihargai!) untuk kakek-nenek. Saya membuat 5 kalender tahun ini dengan harga masing-masing kurang dari $7. Bahan: 12 foto bagus anak Anda, anak-anak, keponakan, anjing, kucing, atau kerabat lainnya12 bagian berbeda