Talaan ng mga Nilalaman:
- Hakbang 1: Lumikha ng isang Blynk Project
- Hakbang 2: Mag-download ng Mga Program sa FireBeetle Board-ESP32
- Hakbang 3: Koneksyon sa Hardware
Video: Paano Gumawa ng isang Hakbang Counter ?: 3 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Naging mahusay akong gumanap sa maraming palakasan: paglalakad, pagtakbo, pagsakay sa bisikleta, paglalaro ng badminton atbp.
Gusto kong sumakay upang maglakbay sa paligid ng hindi masyadong matagal. Kaya, tingnan ang aking portly tiyan ……
Sa gayon, gayon pa man, nagpasiya akong mag-restart upang mag-ehersisyo. Anong kagamitan ang dapat kong ihanda? Bukod sa pasilidad sa palakasan, oo! Kailangan ko ng instrumento! Naniniwala ako kasama nito, mapapanatili ko ang naaangkop na dami ng ehersisyo. Dito nagmula ang instrumento. Magsimula tayo sa isang video ~
Ang instrumento ay hindi lamang maaaring magtala ng mga hakbang (at calories) sa real time, ngunit magpakita ng oras. Ano ang espesyal na ang format ng pagpapakita ay pointer ~ so cool! Talagang gusto ko talaga!
Maaari mong i-upload ang iyong mga tala sa Internet
sa pamamagitan lamang ng isang pag-click. Ang lahat ng mga tala ay maaaring ipakita ni Blynk (isang software ng smart-phone na ipinakilala dati). Kapareho ng naisusuot na matalinong relo, nakakakuha ng oras ang instrumento sa linya (Kaya't hindi mo kailangang matakot sa pag-update ng lakas at oras).
Ang hardware sa meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 dispaly screen
Module ng pagpapabilis
3.7V na baterya (binili online, ang dami ay halos 600mAH)
3 botelya (binili online)
Napakadali na itayo ang proyektong ito ng Blybk.
Hakbang 1: Lumikha ng isang Blynk Project
Magdagdag ng dalawang kontrol:
Pagpapakita ng Halaga * 1
Oras ng real-time * 1
Ang pangalan ng Display Display ay dapat itakda sa mga hakbang, ngunit walang setting para sa mga pag-aari ng orasan na Real-time. Piliin ang V1 bilang input pin upang ayusin ang layout ng mga kontrol, ipinakita tulad ng sa ibaba.
Hakbang 2: Mag-download ng Mga Program sa FireBeetle Board-ESP32
Mag-click dito upang i-download ang source code sa esp32. Ang source code ay binubuo ng mga file ng library at mga file sa pag-print ng 3D. Dapat mong i-save ang file ng library sa lib ng arduino. At ang mga 3D file ay maaaring direktang mai-print ang mga crust.
Nasa ibaba ang pangunahing programa
#include #include // Kailangan lang para sa Arduino 1.6.5 at mas maaga #include "SSD1306.h" // alias para sa "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "na mga imahe.h" # isama ang # isama ang # isama ang # isama ang # isama ang # tukuyin ang POWER_KEY 1 # tukuyin ang MENU_KEY 2 # tukuyin ang UPLOAD_KEY 3 boolean upload = false; Ipakita ang SSD1306 (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; // top dilaw na bahagi ay 16 px taas int clockRadius = 23; #define DEVICE (0x53) // ADXL345 address ng aparato # tukuyin ang TO_READ (6) // bilang ng mga byte na babasahin namin sa bawat oras (dalawang byte para sa bawat axis) byte buff [TO_READ]; // 6 bytes buffer para sa pag-save ng data na nabasa mula sa aparato char str [100]; // string buffer upang ibahin ang data bago ipadala ito sa serial port int regAddress = 0x32; // unang rehistro ng axis-acceleration-data sa ADXL345 int xx, yy, zz; // three axis acceleration data static int currentValue = 0; static unsigned mahabang hakbangSum = 0; char auth = "YourAuthToken"; // Ang iyong mga kredensyal sa WiFi. // Itakda ang password sa "" para sa mga bukas na network. char ssid = "YourNetworkName"; pass pass = "YourPassword"; 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, 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, 0x60, 0xF1, 0x07, 0x00, 0x60, 0xF1, 0x07, 0x 0 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x0x, 0x 0 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 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, 0x8 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x 0, 0x 0 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,}; // utility function para sa pagpapakita ng digital na orasan: mga print na humahantong sa 0 String twoDigits (int digit) {kung (mga digit <10) {String i = '0' + String (mga digit); ibalik i; } iba pa {ibalik ang String (mga digit); }} void na orasanOverlay (display OLEDDisplay *, estado ng OLEDDisplayUiState) {kung ((oras () == 0) && (minuto () == 0) && (pangalawa () == 0)) stepsSum = 0; } walang bisa analogClockFrame (OLEDDisplay * display, OLEDDisplayUiState * estado, 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);} // display second hand float anggulo = pangalawa () * 6; anggulo = (anggulo / 57.29577951); // I-convert ang mga degree sa radians int x3 = (clockCenterX + (sin (anggulo) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (anggulo) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // display minute hand anggulo = minuto () * 6; anggulo = (anggulo / 57.29577951); // convert degrees to radians x3 = (clockCenterX + (sin (anggulo) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (anggulo) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // display hour hand anggulo = oras () * 30 + int ((minuto () / 12) * 6); anggulo = (anggulo / 57.29577951); // I-convert ang mga degree sa mga radian x3 = (clockCenterX + (sin (anggulo) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (anggulo) * (orasanRadius - (orasanRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } walang bisa digitalClockFrame (OLEDDisplay * display, OLEDDisplayUiState * estado, int16_t x, int16_t y) {String date = String (year ()) + "/" + twoDigits (month ()) + "/" + twoDigits (day ()); String timenow = String (hour ()) + ":" + twoDigits (minuto ()) + ":" + twoDigits (pangalawa ()); 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, petsa); } walang bisa ang magsulatTo (int aparato, byte address, byte val) {Wire.beginTransmission (aparato); // simulan ang paghahatid sa aparato Wire.write (address); // send register address Wire.write (val); // send halaga upang isulat ang Wire.endTransmission (); // end transmission} // nagbabasa ng mga byte na nagsisimula sa pagrehistro sa address sa aparato upang i-buff ang array na walang bisa readFrom (int device, byte address, int num, byte buff ) {Wire.beginTransmission (aparato); // simulan ang paghahatid sa aparato Wire.write (address); // nagpapadala ng address upang mabasa mula sa Wire.endTransmission (); // end transmission Wire.beginTransmission (aparato); // simulan ang paghahatid sa aparato Wire.requestFrom (aparato, num); // request 6 bytes from device int i = 0; habang (Wire.available ()) // aparato ay maaaring magpadala ng mas mababa kaysa sa hiniling (abnormal) {buff = Wire.read (); // makatanggap ng isang byte i ++; } Wire.endTransmission (); // end transmission} void runningFrame (display OLEDDisplay *, estado ng OLEDDisplayUiState *, 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); } void uploadFrame (OLEDDisplay * display, OLEDDisplayUiState * estado, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "upload data …"); } // Ang array na ito ay nagpapanatili ng mga point point ng pag-andar sa lahat ng mga frame // mga frame ay ang nag-iisang view na slide sa FrameCallback frame = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // ilan ang mga frame doon? int frameCount = 4; // Overlay ay statically iginuhit sa tuktok ng isang frame hal. isang orasan na OverlayCallback na overlay = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (walang bisa) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (mga frame, frameCount); ui.setOverlays (overlay, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } walang bisa adxl345Init (walang bisa) {writeTo (DEVICE, 0x2D, 0); isulatTo (DEVICE, 0x2D, 16); isulatTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // basahin ang data ng pagpabilis mula sa ADXL345 xx = ((((int) buff [1]) << 8) | buff [0]; yy = ((((int) buff [3]) << 8) | buff [2]; zz = ((((int) buff [5]) << 8) | buff [4]; kung (xx 80) {kung (xx <currentValue) {stepsSum ++; } kasalukuyangValue = xx; } sprintf (str, "% d", stepsSum); } int getKeys (walang bisa) {kung (digitalRead (D2) == LOW) {pagkaantala (5); kung (digitalRead (D2) == LOW) {habang (digitalRead (D2) == LOW); ibalik ang POWER_KEY; }} kung (digitalRead (D3) == LOW) {pagkaantala (5); kung (digitalRead (D3) == LOW) {habang (digitalRead (D3) == LOW); ibalik ang MENU_KEY; }} kung (digitalRead (D4) == LOW) {pagkaantala (5); kung (digitalRead (D4) == LOW) {habang (digitalRead (D4) == LOW); ibalik ang UPLOAD_KEY; }} ibalik ang 0; } walang bisa doKeysFunction (walang bisa) {static int uiFrameIndex = 2; int key = getKeys (); kung (key == POWER_KEY) {static char i = 0; kung (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } iba pa {display.displayOff (); } i = ~ i; } kung (mga key == MENU_KEY) {kung (mag-upload == maling) {uiFrameIndex ++; kung (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } iba pa {ui.switchToFrame (3); }} kung (mga key == UPLOAD_KEY) {kung (mag-upload == totoo) {upload = false; ui.switchToFrame (uiFrameIndex); } iba pa {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 leftTimeBudget = ui.update (); static int testSum = 0; kung ((testSum 0) {pagkaantala (natitirangTimeBudget);} doKeysFunction (); timer.run ();}
Pag-iingat: Dapat mong baguhin ang setting ng Wi-Fi, pasaporte at AUTHTOKENS sa iyong sarili.
char auth = "YourAuthToken"; // Ang iyong mga kredensyal sa WiFi. // Itakda ang password sa "" para sa mga bukas na network. char ssid = "YourNetworkName"; pass pass = "YourPassword";
Hakbang 3: Koneksyon sa Hardware
Ikonekta ang OLED12864 at ang module ng pagpapabilis sa I2C, sa ilalim sa D2, D3, D4. Bukod dito, magdagdag ng 51k pull-up resistors sa ilalim upang maabot ang 3.3V, na ipinakita tulad ng sa ibaba.
Pag-iingat: Maling kumonekta sa mga resistors ng pull-up sa AREF, ang tama ay sa 3.3V
Ang imahe ng paghihinang ng hardware, ipinakita tulad ng sa ibaba:
Pagkatapos ng panghinang, pag-iipon ng module ng hardware sa crust, ipinakita tulad ng sa ibaba:
Comprehensive epekto ng imahe ~
Inirerekumendang:
Alamin Kung Paano Gumawa ng isang Portable Baterya na Pinapatakbo ng Monitor na Maaari ring Magpagana ng isang Raspberry Pi: 8 Hakbang (na may Mga Larawan)
Alamin Kung Paano Gumawa ng isang Portable Battery Powered Monitor Na Maaari ring Paandarin ang isang Raspberry Pi: Nais mo bang i-code ang python, o magkaroon ng isang output output para sa iyong Raspberry Pi Robot, on the Go, o kailangan ng isang portable na pangalawang display para sa iyong laptop o camera? Sa proyektong ito, gagawa kami ng isang portable na monitor na pinapatakbo ng baterya at
Paano Gumawa ng isang Drone Gamit ang Arduino UNO - Gumawa ng isang Quadcopter Gamit ang Microcontroller: 8 Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Drone Gamit ang Arduino UNO | Gumawa ng isang Quadcopter Gamit ang Microcontroller: PanimulaBisitahin ang Aking Youtube Channel Ang isang Drone ay isang napakamahal na gadget (produkto) na bibilhin. Sa post na ito tatalakayin ko, kung paano ko ito magagawa sa murang ?? At Paano mo magagawa ang iyong sarili tulad nito sa murang presyo … Sa India ang lahat ng mga materyales (motor, ESC
Paano Gumawa ng isang Pasadyang PCB Gamit ang isang Mababang Power Laser Engraver: 8 Hakbang (na may Mga Larawan)
Paano Gumawa ng Pasadyang PCB Gamit ang isang Mababang Power Laser Engraver: Pagdating sa paggawa ng isang lutong bahay na PCB, maaari kang makahanap ng maraming mga pamamaraan sa online: mula sa pinakaprudimentaryong, gamit lamang ang isang panulat, sa mas sopistikadong gamit ang mga 3D printer at iba pang kagamitan. At ang tutorial na ito ay nahuhulog sa huling kaso na iyon! Sa proyektong ito,
Paano Gumawa ng isang Inverter sa Bahay Na May MOSFET: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Inverter sa Home Sa MOSFET: Kumusta, may mga kaibigan ngayon ay gagawa kami ng isang inverter sa bahay na may Mosfet transistor at isang espesyal na oscillator board. Ang isang power inverter, o inverter, ay isang elektronikong aparato o circuitry na nagbabago ng direktang kasalukuyang (DC ) sa alternating kasalukuyang (AC)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: Ito ang aking entry para sa hamon sa iRobot Lumikha. Ang pinakamahirap na bahagi ng buong prosesong ito para sa akin ay ang pagpapasya kung ano ang gagawin ng robot. Nais kong ipakita ang mga cool na tampok ng Lumikha, habang nagdaragdag din sa ilang robo flair. Lahat ng akin