Агуулгын хүснэгт:
- Алхам 1: Blynk төслийг бий болгох
- Алхам 2: FireBeetle Board-ESP32 дээр програм татаж авах
- Алхам 3: Тоног төхөөрөмжийн холболт
Видео: Шатны тоолуурыг хэрхэн яаж хийх вэ?: 3 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:00
Би спортын олон төрөлд сайн тоглодог байсан: алхах, гүйх, дугуй унах, бадминтон тоглох гэх мэт.
Би удалгүй тойрч аялах дуртай. За, миний гэдсийг хар даа ….
За ямар ч байсан дасгалаа дахин эхлүүлэхээр шийдлээ. Би ямар тоног төхөөрөмж бэлтгэх ёстой вэ? Спортын байгууламжаас гадна, тийм ээ! Надад багаж хэрэгтэй байна! Үүнтэй холбоотойгоор би зохих хэмжээний дасгал хийж чадна гэдэгт итгэж байна. Энд энэ хэрэгсэл бий болно. Видео бичлэгээс эхэлье ~
Энэхүү хэрэгсэл нь зөвхөн алхам (ба илчлэг) -ийг бодит цаг хугацаанд бүртгэж чаддаггүй, харин цагийг харуулдаг. Онцлог нь юу вэ гэвэл харуулах хэлбэр нь заагч юм ~ маш дажгүй! Надад үнэхээр, үнэхээр таалагдаж байна!
Та бичлэгээ интернетэд байршуулах боломжтой
зөвхөн нэг товшилтоор. Бүх бүртгэлийг Blynk (өмнө нь танилцуулсан ухаалаг утасны програм хангамж) харуулах боломжтой. Зүүж болох ухаалаг цагны нэгэн адил хэрэгсэл нь цаг тухайд нь авдаг (Тиймээс та хүч чадал, цаг шинэчлэхээс айх хэрэггүй).
Мэдээллийн техник хангамж:
FireBeetle Board-ESP32
FireBeetle хавтас-Прото самбар
OLED12864 дэлгэц
Хурдасгах модуль
3.7V батерей (онлайнаар худалдаж авсан, эзэлхүүн нь ойролцоогоор 600 мАч байна.
3 шил (онлайнаар худалдаж авсан.
Энэ төслийг Blybk -ээр бүтээх нь маш тохиромжтой.
Алхам 1: Blynk төслийг бий болгох
Хоёр хяналт нэмэх:
Утга харуулах * 1
Бодит цагийн цаг * 1
Утга харуулах нэрийг алхам алхамаар тохируулах ёстой боловч бодит цагийн цагийн шинж чанарыг тохируулах шаардлагагүй болно. Доор үзүүлсэн хяналтын байршлыг өөрчлөхийн тулд V1 -ийг оролтын зүү болгон сонгоно уу.
Алхам 2: FireBeetle Board-ESP32 дээр програм татаж авах
Эх кодыг esp32 руу татаж авахын тулд энд дарна уу. Эх код нь номын сангийн файлууд болон 3D хэвлэх файлуудаас бүрдэнэ. Та номын сангийн файлыг lidu arduino дээр хадгалах ёстой. Мөн 3D файлууд нь царцдасыг шууд хэвлэх боломжтой.
Үндсэн програмыг доор харуулав
#include #include // Зөвхөн Arduino 1.6.5 болон түүнээс өмнөх хувилбаруудад хэрэгтэй #include "SSD1306.h" // alias for `#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # оролцуулах SSD1306 дэлгэц (0x3c, 18, 0); OLEDDisplayUi ui (& харуулах); SimpleTimer таймер; WidgetRTC rtc; int дэлгэцW = 128; int дэлгэцH = 64; int clockCenterX = дэлгэцW/2; int clockCenterY = ((дэлгэцH-16)/2) +16; // дээд шар хэсэг нь 16 пиксел өндөр int clockRadius = 23; #DEVIN DEVICE (0x53) // ADXL345 төхөөрөмжийн хаягийг #тодорхойлох TO_READ (6) // бидний унших гэж буй байтын тоо (тэнхлэг тус бүрт хоёр байт) байтын буф [TO_READ]; // Төхөөрөмжөөс уншсан өгөгдлийг хадгалах 6 байтын буфер char str [100]; // өгөгдлийг цуваа порт руу илгээхээс өмнө хувиргах string буфер int regAddress = 0x32; // ADXL345 int xx, yy, zz дээрх анхны тэнхлэг-хурдатгал-өгөгдлийн бүртгэл; // гурван тэнхлэг хурдатгалын өгөгдөл static int currentValue = 0; статик гарын үсэг зураагүй урт алхамSum = 0; char auth = "YourAuthToken"; // Таны WiFi итгэмжлэлүүд. // Нээлттэй сүлжээнд нууц үгээ "" болгож тохируулна уу. char ssid = "Таны сүлжээний нэр"; char pass = "YourPassword"; Const Хорхой 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, 0x00, 0x00, 0x01 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xF, 0x00, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0x00, 0x00, 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, 0x00, 0x00, 0x00 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1, 0x1, 0x00, 0x1, 0x03 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // дижитал цаг харуулах хэрэгслийн функц: 0 String twoDigits (int digit) {if (оронтой тоо <10) {String i = '0'+String (цифрүүд); буцах i; } өөр {буцах String (цифрүүд); }} void clockOverlay (OLEDDisplay * дэлгэц, OLEDDisplayUiState * төлөв) {if ((hour () == 0) && (minutes () == 0) && ((секунд () == 0)) stepsSum = 0; } хүчингүй analogClockFrame (OLEDDisplay * дэлгэц, OLEDDisplayUiState * төлөв, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // цагийн тэмдэг (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // хоёр дахь гар хөвөх өнцөг = секунд () * 6; өнцөг = (өнцөг / 57.29577951); // Зэрэглэлийг радиус болгон хувиргах int x3 = (clockCenterX + (sin (өнцөг) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (өнцөг) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // дэлгэцийн минутын гар өнцөг = минут () * 6; өнцөг = (өнцөг / 57.29577951); // градусыг радиан болгон хөрвүүлэх x3 = (clockCenterX + (sin (өнцөг) * (clockRadius - (clockRadius / 4))))); y3 = (clockCenterY - (cos (өнцөг) * (clockRadius - (clockRadius / 4)) дэлгэц)> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // дэлгэцийн цагийн зүүний өнцөг = цаг () * 30 + int ((минут () / 12) * 6); өнцөг = (өнцөг / 57.29577951); // градусыг радиан болгон хөрвүүлэх x3 = (clockCenterX + (sin (өнцөг) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (өнцөг) *) цаг радиус - (цагRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } хүчингүй digitalClockFrame (OLEDDisplay * дэлгэц, OLEDDisplayUiState * төлөв, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()); String timenow = String (hour ())+":"+twoDigits (minutes ())+":"+twoDigits (second ()); дэлгэц-> setTextAlignment (TEXT_ALIGN_CENTER); дэлгэц-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX + x, 20, timenow); дэлгэц-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, огноо); } void writeTo (int device, byte address, byte val) {Wire.beginTransmission (төхөөрөмж); // Wire.write төхөөрөмж рүү дамжуулж эхлэх (хаяг); // бүртгэлийн хаягийг илгээх Wire.write (val); // Wire.endTransmission () бичихийн тулд утга илгээх; // дамжуулалтыг дуусгах} // төхөөрөмж дээрх хаягийн бүртгэлээс эхлэн тоо байтыг уншдаг. readFrom (int төхөөрөмж, байт хаяг, int num, байт buff ) {Wire.beginTransmission (төхөөрөмж); // Wire.write төхөөрөмж рүү дамжуулж эхлэх (хаяг); // хаягийг Wire.endTransmission () -аас уншихаар илгээдэг; // төгсгөлийн дамжуулалт Wire.beginTransmission (төхөөрөмж); // Wire.requestFrom төхөөрөмж рүү дамжуулж эхлэх (төхөөрөмж, тоо); // төхөөрөмжөөс 6 байт хүсэх int i = 0; while (Wire.available ()) // төхөөрөмж нь хүссэн хэмжээнээс бага хэмжээгээр илгээж болно (хэвийн бус) {buff = Wire.read (); // i ++ байт хүлээн авах; } Wire.endTransmission (); // дамжуулалтыг дуусгах} void runningFrame (OLEDDisplay*дэлгэц, OLEDDisplayUiState*төлөв, int16_t x, int16_t y) {float calValue = stepsSum*0.4487; дэлгэц-> setTextAlignment (TEXT_ALIGN_CENTER); дэлгэц-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); дэлгэц-> setTextAlignment (TEXT_ALIGN_CENTER); дэлгэц-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); display-> drawXbm (10, 14, 34, 50, running_Logo_bits); } хүчингүй uploadFrame (OLEDDisplay * дэлгэц, OLEDDisplayUiState * төлөв, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "өгөгдөл байршуулах …"); } // Энэ массив нь функцийн заагчийг бүх фрэймд хадгалж байдаг // хүрээ нь FrameCallback фрэймд гулсдаг ганц үзэл юм = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // хэдэн хүрээ байдаг вэ? int frameCount = 4; // Давхардлыг статик байдлаар хүрээ дээр зурсан болно, жишээ нь. цаг OverlayCallback давхцал = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} 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 (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (DEVICE, 0x2D, 16); writeTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // ADXL345 xx = (((int) buff [1]) << 8) -аас хурдатгалын өгөгдлийг уншина уу | буф [0]; yy = (((int) buff [3]) << 8) | буф [2]; zz = (((int) buff [5]) << 8) | буф [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {саатал (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); POWER_KEY буцаах; }} if (digitalRead (D3) == LOW) {саатал (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); буцах MENU_KEY; }} if (digitalRead (D4) == LOW) {саатал (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); UPLOAD_KEY буцаах; }} буцаах 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int түлхүүрүүд = getKeys (); if (түлхүүрүүд == POWER_KEY) {статик char i = 0; хэрэв (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } өөр {display.displayOff (); } би = ~ би; } if (key == MENU_KEY) {if (upload == false) {uiFrameIndex ++; хэрэв (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } өөр {ui.switchToFrame (3); }} if (key == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } өөр {байршуулах = үнэн; 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 kalanTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (kalanTimeBudget);} doKeysFunction (); timer.run ();}
Анхааруулга: Та Wi-Fi-ийн тохиргоо, паспорт, AUTHTOKENS-ийг өөртөө өөрчлөх хэрэгтэй.
char auth = "YourAuthToken"; // Таны WiFi итгэмжлэлүүд. // Нээлттэй сүлжээнд нууц үгээ "" болгож тохируулна уу. char ssid = "Таны сүлжээний нэр"; char pass = "YourPassword";
Алхам 3: Тоног төхөөрөмжийн холболт
OLED12864 болон хурдатгалын модулийг I2C -т, доод хэсгийг D2, D3, D4 -т холбоно уу. Дээрээс нь доор үзүүлсэн 3.3В хүрэхийн тулд ёроолд нь 51к татах эсэргүүцэл нэмж оруулаарай.
Анхааруулга: Татах эсэргүүцэлийг AREF-тэй холбох нь буруу, зөв нь 3.3V байна
Тоног төхөөрөмжийн гагнуурын зургийг доор харуулав.
Гагнуурын дараа тоног төхөөрөмжийн модулийг царцдас руу угсарч, доор харуулав.
Цогц нөлөө бүхий дүрс ~
Зөвлөмж болгож буй:
Шатны диаграммд тоолуурыг хэрхэн ашиглах вэ? - Delta WPLSoft: 15 алхам
Шатны диаграммд тоолуурыг хэрхэн ашиглах вэ? | Delta WPLSoft: Энэхүү гарын авлагад бид тоолуурыг бодит цагийн аппликейшнд хэрхэн ашиглахыг жишээ болгон харууллаа
Транзистор ашиглан VU тоолуурыг хэрхэн яаж хийх вэ: 10 алхам
Транзистор ашиглан VU тоолуурыг хэрхэн яаж хийх вэ: Сайн байна уу найз минь, өнөөдөр би зөвхөн нэг транзистор ашиглан VU тоолуурын хэлхээг хийх гэж байна. Энэ VU тоолуур дээр би 2N2222A транзисторыг ашиглах болно. Тодруулъя
Arduino Ohm тоолуурыг хэрхэн яаж хийх вэ: 5 алхам (зурагтай)
Arduino Ohm тоолуурыг хэрхэн яаж хийх вэ: Түүний эсэргүүцлийг олохын тулд резистор дээрх өнгөний кодыг уншихад хэцүү байдаг. Эсэргүүцлийн утгыг олоход тулгарч буй бэрхшээлийг даван туулахын тулд бид Arduino ашиглан энгийн Ом тоолуур бүтээх гэж байна. Энэхүү төслийн гол зарчим бол V
LM3914: 3 алхамыг ашиглан хоёр сувгийн Vu тоолуурыг хэрхэн яаж хийх вэ
LM3914 -ийг ашиглан хоёр сувгийн Vu тоолуурыг хэрхэн яаж хийх вэ: Энэ нийтлэлд би LM3914 IC ашиглан хоёр сувгийн Vu тоолуур хийх талаар хуваалцах болно. Та бичлэгийг хавсаргасан бичлэгийг үзэх боломжтой бөгөөд барилгын ажлыг дуусгах боломжтой болно. төслийн ажил эсвэл бичлэгийг үргэлжлүүлэн унших
Arduino ашиглан VU тоолуурыг хэрхэн яаж хийх вэ: 3 алхам (зурагтай)
Arduino ашиглан VU тоолуурыг хэрхэн яаж хийх вэ: VU тоолуур нь эзлэхүүний нэгж (VU) тоолуур эсвэл стандарт дууны үзүүлэлт (SVI) нь аудио төхөөрөмж дэх дохионы түвшинг харуулсан төхөөрөмж юм. Энэ нь аналог дохиог дүрслэхэд ашиглагддаг.Одоо би VU тоолуурыг хэрхэн яаж хийхийг зааж өгөх болно