![Millis () ашиглан Arduino цаг хэмжих арга: 4 алхам Millis () ашиглан Arduino цаг хэмжих арга: 4 алхам](https://i.howwhatproduce.com/images/003/image-6834-7-j.webp)
Агуулгын хүснэгт:
2025 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2025-01-23 15:00
![Millis ашиглан Arduino цаг хэмжих арга () Millis ашиглан Arduino цаг хэмжих арга ()](https://i.howwhatproduce.com/images/003/image-6834-8-j.webp)
Энэ нийтлэлд бид millis () -ийг танилцуулж байна; функцийг ажиллуулж, цаг хугацааны янз бүрийн жишээг бий болгоход ашиглаарай.
Милис үү? Уруул синхрончлогчтой ямар ч холбоогүй … та милли-г мянганы нэгийн тоон угтвар гэж хүлээн зөвшөөрсөн гэж найдаж байна. хэмжих нэгжийг 0.001 -ээр үржүүлж байна (эсвэл сөрөг 3 -ын хүчээр арав).
Сонирхолтой нь манай Arduino системүүд ноорог ажиллаж эхэлснээс хойш тэмдэглэгдээгүй урт (32 бит [дөрвөн байт] бүхэл тоо) хувьсах хэлбэрт хадгалах боломжтой дээд хэмжээнд хүрэх хүртэл миллисекундийн тоог (мянга мянган секунд) тоолох болно. -тэгээс (2^32) -1 хооронд хэлбэлздэг. (2^32) -1, эсвэл 4294967295 миллисекундийг 49.71027 сондгой өдөр болгон хөрвүүлдэг.
Тоолуур нь Arduino -ийг дахин тохируулах үед хамгийн их утгад хүрэх эсвэл шинэ ноорог байршуулах үед дахин тохируулна. Тодорхой цэг дээр тоолуурын утгыг авахын тулд функцийг дуудах хэрэгтэй - жишээлбэл:
эхлэх = millis ();
Хаана эхлэх нь гарын үсэг зураагүй урт хувьсагч юм. Millis () -г үйлдэл дээр харуулах маш энгийн жишээ энд байна:
/ * millis () жагсаал */
гарын үсэг зураагүй урт эхлэл, дууссан, өнгөрсөн;
хүчингүй тохиргоо ()
{Serial.begin (9600); }
хоосон давталт ()
{Serial.println ("Эхлэх …"); эхлэх = millis (); саатал (1000); дууссан = millis (); Serial.println ("Дууссан"); өнгөрсөн = дууссан эхлэх; Цуваа.хэвлэх (өнгөрсөн); Serial.println ("миллисекунд өнгөрсөн"); Serial.println (); саатал (500); }
Ноорог нь одоогийн миллисын тооллогыг эхэнд нь хадгалж, нэг секунд хүлээгээд дараа нь миллисийн үнийг дууссан хэлбэрээр хадгална. Эцэст нь энэ нь хойшлогдсон хугацааг тооцоолно. Цуваа дэлгэцийн дараагийн дэлгэцийн овоолго дээр зураг дээрх шиг үргэлжлэх хугацаа нь үргэлж 1000 миллисекунд байгаагүй гэдгийг харж болно.
1-р алхам:
![Зураг Зураг](https://i.howwhatproduce.com/images/003/image-6834-9-j.webp)
Энгийнээр хэлэхэд millis функц нь таны Arduino -ийн зүрхэнд байгаа ATmega микроконтроллерийн дотоод тоолуурыг ашигладаг. Энэхүү тоолуур нь цагны мөчлөг бүрийг нэмэгдүүлдэг бөгөөд энэ нь (стандарт Arduino болон нийцтэй хувилбаруудад) 16 МГц давтамжтай болдог. Энэ хурдыг Arduino самбар дээрх болороор хянадаг (T16.000 тамгатай мөнгөн зүйл).
Алхам 2:
![Зураг Зураг](https://i.howwhatproduce.com/images/003/image-6834-10-j.webp)
Кристал нарийвчлал нь гаднах температур, талстын хүлцэл зэргээс хамаарч өөр өөр байж болно. Энэ нь эргээд таны миллис үр дүнгийн нарийвчлалд нөлөөлнө. Анекдотын туршлагаас харахад цаг хугацааны нарийвчлал 24 цаг тутамд ойролцоогоор 3-4 секунд байж болно.
Хэрэв та болор биш харин керамик резонатор ашиглаж байгаа самбар эсвэл өөрийн хувилбарыг ашиглаж байгаа бол тэдгээр нь тийм ч нарийвчлалтай биш бөгөөд дрифтийн түвшин өндөр байх магадлалтайг анхаарна уу. Хэрэв танд цаг хугацааны нарийвчлал илүү өндөр байх шаардлагатай бол Maxim DS3231 гэх мэт тодорхой таймерын IC -ийг анхаарч үзээрэй.
Одоо бид янз бүрийн цагийн функцүүдэд миллисийг ашиглаж болно. Өмнөх жишээн дээр харуулснаар бид өнгөрсөн хугацааг тооцоолж болно. Энэ санааг хэрэгжүүлэхийн тулд энгийн секунд хэмжигч хийцгээе. Үүнийг хийх нь аль болох энгийн эсвэл нарийн төвөгтэй байж болох ч энэ тохиолдолд бид энгийн зүйл рүү шилжих болно.
Тоног төхөөрөмжийн үүднээс авч үзвэл бид 2 товчлууртай байх болно-Start ба Stop-10к ом эсэргүүцэх эсэргүүцэл бүхий тоон тээглүүр 2 ба 3-т холбогдсон байна. Хэрэглэгч дарж эхлэхдээ ноорог нь миллисын утгыг тэмдэглэнэ. Дараа нь зогсоох товчийг дарсны дараа ноорог нь миллисийн утгыг дахин тэмдэглэж, өнгөрсөн хугацааг тооцоолж, харуулна. Хэрэглэгч процессыг давтах эсвэл шинэчлэгдсэн өгөгдлийг зогсоохын тулд эхлэх товчийг дарж болно. Энд ноорог байна:
/* Millis () ашиглан супер үндсэн секундомер; */
гарын үсэг зураагүй урт эхлэл, дууссан, өнгөрсөн;
хүчингүй тохиргоо ()
{Serial.begin (9600); pinMode (2, INPUT); // эхлэх товчлуур pinMode (3, INPUT); // зогсоох товч Serial.println ("Эхлэх/дахин тохируулахын тулд 1, өнгөрсөн хугацаанд 2 дарна уу"); }
void displayResult ()
{float h, m, s, ms; урт хугацаанд гарын үсэг зураагүй; өнгөрсөн = дууссан эхлэх; h = int (өнгөрсөн/3600000); хэтэрсэн = өнгөрсөн%3600000; m = int (60000 -аас дээш); дээш = 600%-иас дээш; s = int (1000 -аас дээш); ms =%1000 -аас дээш; Serial.print ("Түүхий цаг дууссан:"); Serial.println (өнгөрсөн); Serial.print ("Өнгөрсөн хугацаа:"); Цуваа.хэвлэх (h, 0); Serial.print ("h"); Цуваа.хэвлэх (м, 0); Serial.print ("m"); Цуваа.хэв (ууд, 0); Serial.print ("s"); Serial.print (ms, 0); Serial.println ("ms"); Serial.println (); }
хоосон давталт ()
{if (digitalRead (2) == HIGH) {start = millis (); саатал (200); // for debounce Serial.println ("Эхэлсэн …"); } if (digitalRead (3) == HIGH) {дууссан = millis (); саатал (200); // дебран гаргахын тулд displayResult (); }}
Delay () дуудлага нь унтраалгыг задлахад ашиглагддаг - эдгээр нь заавал биш бөгөөд тэдгээрийн хэрэглээ нь таны техник хангамжаас хамаарна. Энэ зураг нь ноорогны цуваа дэлгэцийн гаралтын жишээ юм - секундомер эхэлж, дараа нь хоёр товчлуурыг зургаан удаа дарна.
Алхам 3: Хурд хэмжигч…
![Image Image](https://i.howwhatproduce.com/images/003/image-6834-12-j.webp)
![](https://i.ytimg.com/vi/axuSWxFLOfQ/hqdefault.jpg)
Хэрэв танд тогтмол зайн эхэн ба төгсгөлд мэдрэгч байсан бол хурдыг тооцоолж болно: хурд = зай ÷ цаг.
Та дугуйтай хөдөлгөөний хурд хэмжигч хийж болно, жишээлбэл унадаг дугуй. Одоогийн байдлаар бидэнд унадаг дугуй байхгүй, гэхдээ үүнийг хийх явцыг тайлбарлаж болно - энэ бол маш энгийн зүйл юм. (Татгалзах мэдээлэл - үүнийг өөрийн эрсдэлээр хийх гэх мэт.)
Юуны өмнө шаардлагатай математикийг авч үзье. Та дугуйны тойргийг мэдэх хэрэгтэй. Тоног төхөөрөмж - танд мэдрэгч хэрэгтэй болно. Жишээлбэл - зэгс унтраалга ба соронз. Зэгсэн унтраалгыг ердийн нээлттэй товчлуур гэж үзээд ердийнх шигээ 10к ом эсэргүүцэх хүчээр холбоно уу.
Бусад нь танхимын эффект мэдрэгч ашиглаж болно-тус бүр өөрийн гэсэн). Математикийн хичээлээс тойргийг тооцоолохдоо дараах томъёог ашиглана уу: тойрог = 2πr, энд r нь тойргийн радиус юм.
Дугуйны тойрогтой болсон тул энэ утгыг бидний "тогтмол зай" гэж үзэж болох бөгөөд ингэснээр бүрэн эргэлтийн хоорондох хугацааг хэмжих замаар хурдыг тооцоолж болно.
Таны мэдрэгчийг суурилуулсны дараа эргэлт бүрт дарагддаг ердийн нээлттэй товчлууртай ижил аргаар ажиллах ёстой. Бидний ноорог нь мэдрэгчийн импульс бүрийн хоорондох хугацааг хэмжих болно.
Үүнийг хийхийн тулд бидний жишээ нь хурдыг тооцоолох тасалдлыг өдөөх тул мэдрэгчийн гаралтыг дижитал зүү 2 -тэй холбох болно. Ноорог нь хурдыг ердийн I2C интерфэйстэй LCD модуль дээр харуулах болно. I2C интерфэйсийг санал болгож байна, учир нь энэ нь Arduino самбараас LCD хүртэл 4 утас шаарддаг - утас бага байх тусмаа сайн.
Таны танилцах тоймыг энд оруулав.
/*Millis () ашиглан үндсэн хурд хэмжигч; */
I2C автобусны LCD -д зориулсан "Wire.h" // -г оруулна уу
#оруулах "LiquidCrystal_I2C.h" // I2C автобусны LCD модулийн хувьд - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27, 16, 2); // 16 тэмдэгт, 2 мөр дэлгэцийн хувьд LCD хаягийг 0x27 болгож тохируулна уу
хөвөх эхлэл, дууссан;
хөвөх хугацаа өнгөрсөн, цаг хугацаа; float circMetric = 1.2; // мэдрэгчийн байрлалтай харьцуулахад дугуйны тойрог (метрээр) хөвөх тойрог Империал; // 1 километр = 0.621371192 миль ашиглан хөвөх хурд, speedm; // хэмжигдэхүүн ба эзэнт гүрний тооцоолсон хурдны утгыг агуулдаг
хүчингүй тохиргоо ()
{attachInterrupt (0, speedCalc, RISING); // мэдрэгчид дижитал 2 өндөр (дугуйны эргэлт бүрт) илгээгдэх үед эхлэх тасалдал = millis (); // LCD lcd.init () тохируулах; // lcd lcd.backlight -ийг эхлүүлэх (); // LCD арын гэрлийг асаах lcd.clear (); lcd.println ("Дуулга өмс!"); саатал (3000); lcd.clear (); Цуваа.begin (115200); circImperial = circMetric*.62137; // MPH тооцоолохын тулд хэмжигдэхүүнийг эзэнт гүрэн болгон хөрвүүлэх}
void speedCalc ()
{elapsed = millis ()-эхлэх; эхлэх = millis (); speedk = (3600*circMetric)/өнгөрсөн; // км/цаг хурд = = 3600*тойрог Империал//өнгөрсөн; // Цагт миль}
хоосон давталт ()
{lcd.setCursor (0, 0); lcd.print (int (speedk)); lcd.print ("км/цаг"); lcd.print (int (speedm)); lcd.print ("MPH"); lcd.setCursor (0, 1); lcd.print (int (өнгөрсөн)); lcd.print ("ms/rev"); саатал (1000); // анивчихыг багасгахын тулд хувийн тохиргоогоо тохируулаарай}
Энэ нь тийм ч их зүйл болохгүй - дугуй нэг эргэлт хийх бүрт мэдрэгчийн дохио багаас өндөр рүү шилжих бөгөөд энэ нь speedCalc () функцийг дууддаг тасалдлыг өдөөдөг.
Энэ нь миллис () заалтыг авч дараа нь одоогийн уншилт ба өмнөх уншилтын хоорондох ялгааг тооцоолно. Энэ утга нь зайг давах цаг болдог (энэ нь мэдрэгчтэй харьцуулахад дугуйны тойрог юм)
float circMetric = 1.2;
ба метрээр хэмжигддэг). Эцэст нь хурдыг км/цаг болон MPH -ээр тооцоолно. Тасалдлын хооронд ноорог нь LCD дээр шинэчлэгдсэн хурдны мэдээлэл, мөн сониуч зангийн төлөө хувьсгал бүрийн цаг хугацааны үнэ цэнийг харуулдаг. Бодит амьдрал дээр хэн ч унадаг дугуй дээр LCD суурилуулахгүй гэж би боддог, магадгүй LED дэлгэц нь илүү хамааралтай байж магадгүй юм.
Энэ хооронд энэ жишээ хэрхэн ажилладагийг та дараах богино хэмжээний видео клипээс харж болно. Унадаг дугуйн дугуй, зэгс унтраалга/соронзны хослолын оронд би функцийн генераторын квадрат долгионы гаралтыг таслах зүү рүү холбосон бөгөөд энэ нь мэдрэгчийн импульсийг дуурайх боломжийг олгодог бөгөөд ингэснээр та хэрхэн ажилладаг талаар ойлголттой болно.
Алхам 4:
Энэ нь одоохондоо millis () хэрэглээг тоймлож байна. Мөн micros (); микросекунд тоолох функц.
Ардуиногийн ертөнцөөр дамжуулан илүү олон асуудлыг шийдвэрлэх боломжийг олгодог өөр нэг практик функц энд байна. Урьдын адил одоо хянаж чадах зүйлээ олж авах эсвэл бусад танил хүмүүстэй холбоо тогтоох нь таны болон таны төсөөллөөс шалтгаална.
Энэхүү бичлэгийг pmdway.com танд хүргэсэн бөгөөд энэ нь үйлдвэрлэгч болон цахилгаан бараа сонирхогчдод зориулагдсан бүх зүйлийг дэлхий даяар үнэгүй хүргэж өгөх болно.
Зөвлөмж болгож буй:
Цаг хэмжих (соронзон хальсны цаг): 5 алхам (зурагтай)
![Цаг хэмжих (соронзон хальсны цаг): 5 алхам (зурагтай) Цаг хэмжих (соронзон хальсны цаг): 5 алхам (зурагтай)](https://i.howwhatproduce.com/images/001/image-186-j.webp)
Цаг хэмжих (соронзон хальсны хэмжих цаг): Энэхүү төслийн хувьд бид (Алекс Фиел & Анна Линтон) өдөр тутмын хэмжих хэрэгслийг аваад цаг болгон хувиргасан. Анхны төлөвлөгөө нь одоо байгаа соронзон хальсны хэмжүүрийг моторжуулах явдал байв. Үүнийг хийхдээ бид өөрсдийнхөө бүрхүүлийг бүтээхэд илүү хялбар байх болно гэж шийдсэн
Инерцийн хэмжих нэгжийг ашиглах арга? 6 алхам
![Инерцийн хэмжих нэгжийг ашиглах арга? 6 алхам Инерцийн хэмжих нэгжийг ашиглах арга? 6 алхам](https://i.howwhatproduce.com/images/001/image-1173-59-j.webp)
Инерцийн хэмжих нэгжийг ашиглах арга уу?: Агуулга: Би хөгжилтэй байхын тулд байшин дотор бие даан шилжихийг хүсч буй роботыг бүтээж байна. Энэ бол урт ажил бөгөөд алхам алхмаар хийж байна. Би энэ сэдвээр 2 зааварчилгаа хэвлүүлсэн: нэг нь дугуй кодлогч хийх тухай, нөгөө талаар
Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: 7 алхам
![Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: 7 алхам Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: 7 алхам](https://i.howwhatproduce.com/images/011/image-30301-j.webp)
Зүрхний цохилтыг хэмжих нь хурууны үзүүрт байдаг: Зүрхний цохилтыг тодорхойлох фотоплетизмын арга: Photoplethysmograph (PPG) нь энгийн бөгөөд хямд өртөгтэй оптик техник бөгөөд үүнийг бичил судасны эд дэх цусны эзлэхүүний өөрчлөлтийг илрүүлэхэд ихэвчлэн ашигладаг. Энэ нь ихэвчлэн арьсны гадаргуу дээр хэмжилт хийхэд инвазив бус байдлаар ашиглагддаг, ихэвчлэн
DS1307 бодит цагийн цаг (RTC) модулийг ашиглан Arduino дээр суурилсан цаг ба 0.96: 5 алхам
![DS1307 бодит цагийн цаг (RTC) модулийг ашиглан Arduino дээр суурилсан цаг ба 0.96: 5 алхам DS1307 бодит цагийн цаг (RTC) модулийг ашиглан Arduino дээр суурилсан цаг ба 0.96: 5 алхам](https://i.howwhatproduce.com/images/001/image-2174-20-j.webp)
DS1307 Real Time Clock (RTC) модулийг ашиглан Arduino -д суурилсан цаг & 0.96: Сайн байна уу залуусаа энэ хичээлээр бид DS1307 бодит цагийн модулийг ашиглан ажлын цагийг хэрхэн хийхийг харах болно. OLED дэлгэцүүд Тиймээс бид цагийг DS1307 модулаас унших болно. Үүнийг OLED дэлгэц дээр хэвлэ
Arduino IDE ашиглан M5stick C ашиглан цаг хийх - M5stack M5stick-C-тэй RTC бодит цагийн цаг: 4 алхам
![Arduino IDE ашиглан M5stick C ашиглан цаг хийх - M5stack M5stick-C-тэй RTC бодит цагийн цаг: 4 алхам Arduino IDE ашиглан M5stick C ашиглан цаг хийх - M5stack M5stick-C-тэй RTC бодит цагийн цаг: 4 алхам](https://i.howwhatproduce.com/images/002/image-3337-33-j.webp)
Arduino IDE ашиглан M5stick C ашиглан цаг хийх | M5stack M5stick-C-тэй RTC бодит цагийн цаг: Сайн байна уу залуусаа, энэ зааварчилгаанд бид Arduino IDE ашиглан m5stack-ийн m5stick-C хөгжүүлэлтийн самбар ашиглан хэрхэн цаг хийхийг сурах болно. Тиймээс m5stick нь огноо, цаг, цагийг харуулах болно. дэлгэц дээр сарын долоо хоног