![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 14:51
![Millis көмегімен Arduino хронометраждық әдістері () Millis көмегімен Arduino хронометраждық әдістері ()](https://i.howwhatproduce.com/images/003/image-6834-8-j.webp)
Бұл мақалада біз millis () енгіземіз; функциясын қолданыңыз және оны әр түрлі уақыт мысалдарын жасау үшін қолданыңыз.
Милис? Ерін синхрондауыштармен ешқандай байланысы жоқ … сіз мыңды мыңдық сандық префикс ретінде таныдыңыз деп үміттенемін; бұл өлшем бірлігін 0,001 -ге көбейту (немесе ондықтың теріс мәніне он).
Бір қызығы, біздің Arduino жүйелері эскиздің басынан бастап белгісіз ұзын (32-биттік [төрт байт] бүтін санды сақтауға болатын максималды санға жеткенге дейін миллисекунд санын (мың секунд) есептейді. -бұл нөлден (2^32) -1-ге дейін. (2^32) -1 немесе 4294967295 миллисекунд 49.71027-тақ күндерге түрлендіріледі.
Есептегіш Arduino қалпына келтірілгенде, ол максималды мәнге жетеді немесе жаңа эскиз жүктеледі. Белгілі бір уақытта есептегіштің мәнін алу үшін функцияға қоңырау шалыңыз - мысалы:
бастау = millis ();
Мұндағы бастау - белгісіз ұзақ айнымалы. Милис () әрекетін көрсететін өте қарапайым мысал:
/ * millis () демонстрация */
қол қойылмаған ұзақ бастау, аяқталған, өткен;
жарамсыз орнату ()
{Serial.begin (9600); }
бос цикл ()
{Serial.println («Бастау …»); бастау = millis (); кешіктіру (1000); дайын = millis (); Serial.println («Аяқталды»); elapsed = аяқтау-бастау; Serial.print (өткен); Serial.println («миллисекундтар өтті»); Serial.println (); кешіктіру (500); }
Эскизде ағымдағы миллиллердің саны сақталады, содан кейін бір секунд күтеді, содан кейін миллис мәні дайын күйінде сақталады. Соңында ол кідірістің өткен уақытын есептейді. Сериялық монитордың келесі экрандық үйіндісінде сіз суретте көрсетілгендей ұзақтығы әрқашан дәл 1000 миллисекунд емес екенін көре аласыз.
1 -қадам:
![Кескін Кескін](https://i.howwhatproduce.com/images/003/image-6834-9-j.webp)
Қарапайым тілмен айтқанда, millis функциясы ATmega микроконтроллерінің ішкі есептегішін сіздің Arduino орталығында қолданады. Бұл есептегіш әр сағаттық циклді жоғарылатады - бұл стандартты Arduino мен үйлесімділерде 16 МГц жиілігінде болады. Бұл жылдамдықты Arduino тақтасындағы кристал басқарады (күміс заттаңбада T16.000 бар).
2 -қадам:
![Кескін Кескін](https://i.howwhatproduce.com/images/003/image-6834-10-j.webp)
Кристалл дәлдігі сыртқы температураға және кристалдың төзімділігіне байланысты өзгеруі мүмкін. Бұл өз кезегінде миллис нәтиженің дәлдігіне әсер етеді. Анекдоттық тәжірибе уақыт дәлдігінің өзгеруі жиырма төрт сағат ішінде шамамен үш-төрт секунд болуы мүмкін екенін көрсетті.
Егер сіз тақтаны немесе кристалдың орнына керамикалық резонаторды қолданатын өзіңіздің нұсқаңызды қолдансаңыз, олардың дәл емес екенін ескеріңіз және дрейф деңгейінің жоғарылау мүмкіндігін көрсетеді. Егер сізге уақыт дәлдігінің әлдеқайда жоғары деңгейі қажет болса, Maxim DS3231 сияқты арнайы таймер IC -лерін қарастырыңыз.
Енді біз миллиллерді әр түрлі уақыт функциялары үшін пайдалана аламыз. Алдыңғы мысалда көрсетілгендей, біз өткен уақытты есептей аламыз. Бұл идеяны алға жылжыту үшін қарапайым секундомер жасайық. Бұл қарапайым немесе қажет болғанша күрделі болуы мүмкін, бірақ бұл жағдайда біз қарапайымға қарай бет бұрамыз.
Аппараттық перспективада бізде екі түйме болады-Іске қосу және Тоқтату-тиісінше цифрлық 2 және 3 түйреуіштеріне қосылған 10к Ом тартылатын резисторлар. Пайдаланушы басуды басқан кезде эскиз миллис мәніне назар аударады, содан кейін тоқтау басылғаннан кейін эскиз миллис мәнін қайтадан еске түсіреді, өткен уақытты есептейді және көрсетеді. Пайдаланушы процесті қайталау немесе жаңартылған деректерді тоқтату үшін бастау түймесін басуы мүмкін. Міне нобай:
/* Millis () көмегімен супер негізгі секундомер; */
қол қойылмаған ұзақ бастау, аяқталған, өткен;
жарамсыз орнату ()
{Serial.begin (9600); pinMode (2, INPUT); // бастау батырмасы pinMode (3, INPUT); // тоқтату түймесі Serial.println («Бастау/қалпына келтіру үшін 1 басыңыз, өткен уақыт үшін 2 басыңыз»); }
void displayResult ()
{float h, m, s, ms; ұзақ қол қойылмаған; elapsed = аяқтау-бастау; h = int (өткен/3600000); артық = өткен%3600000; m = int (60000 -ден жоғары); артық =%60000 -ден жоғары; s = int (1000 -нан жоғары); ms =%1000 -нан жоғары; Serial.print («Өткен уақыт:»); Serial.println (өткен); Serial.print («Өткен уақыт:»); Serial.print (h, 0); Serial.print («h»); Serial.print (m, 0); Serial.print («m»); Serial.print (s, 0); Serial.print («s»); Serial.print (ms, 0); Serial.println («ms»); Serial.println (); }
бос цикл ()
{if (digitalRead (2) == HIGH) {start = millis (); кешіктіру (200); // шығару үшін Serial.println («Басталды…»); } if (digitalRead (3) == HIGH) {done = 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 интерфейсінің қалыпты СКД модулінде жылдамдықты көрсетеді. I2C интерфейсі ұсынылады, себебі Arduino тақтасынан СКД -ге тек 4 сым қажет - сымдар аз болған сайын жақсы.
Міне, сіздің қарауыңыздың эскизі:
/*Миллис () көмегімен негізгі спидометр; */
#қосу «Wire.h» // I2C шинасы үшін
#қосу «LiquidCrystal_I2C.h» // I2C шинасының СКД модулі үшін - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27, 16, 2); // 16 таңба мен 2 жолды дисплей үшін СКД мекенжайын 0x27 етіп орнатыңыз
өзгермелі старт, аяқталды;
қалқып шығу, уақыт; float circMetric = 1.2; // доңғалақтың шеңбері сенсордың орналасуына қатысты (метрмен) өзгермелі айналымImperial; // 1 километрді пайдалану = 0.621371192 миль жүзу жылдамдығы, speedm; // метрикалық және империялық жылдамдықтардың есептік мәндерін ұстайды
жарамсыз орнату ()
{attachInterrupt (0, speedCalc, RISING); // сенсорлар цифрлық 2 жоғары жіберген кезде шақырылатын үзіліс (дөңгелектің әр айналуы) старт = миллис (); // LCD lcd.init () орнату; // lcd lcd.backlight () инициализациялау; // LCD артқы жарығын қосу lcd.clear (); lcd.println («дулыға киіңіз!»); кешіктіру (3000); lcd.clear (); Serial.begin (115200); circImperial = circMetric*.62137; // MPH есептеулері үшін метриканы империяға түрлендіру}
бос жылдамдықCalc ()
{elapsed = millis ()-бастау; бастау = millis (); speedk = (3600*circMetric)/өткен; // км/сағ жылдамдық = (3600*circImperial)/өткен; // миль сағатына}
бос цикл ()
{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 дисплейді велосипедке ешкім орнатпайды деп ойлаймын, мүмкін жарықдиодты дисплей маңызды болар.
Бұл арада сіз бұл мысалдың қалай жұмыс істейтінін келесі қысқа бейнеклиптен көре аласыз. Велосипед дөңгелегі мен қамыс қосқышы/магнит комбинациясының орнына мен сенсордан импульсті имитациялау үшін функция генераторынан квадрат толқынды шығуды үзу түйреуішіне жалғадым, осылайша сіз оның қалай жұмыс істейтіні туралы түсінік ала аласыз.
4 -қадам:
Бұл әзірше millis () қолданылуын қорытындылайды. Сонымен қатар micros () бар; микросекундтарды есептейтін функция.
Міне, сізде - бұл басқа проблемалар Arduino әлемі арқылы шешуге мүмкіндік беретін тағы бір практикалық функция. Әдеттегідей, енді сіздің бақылауыңызда бір нәрсе табу немесе сіздің қиялыңызға байланысты.
Бұл хабарламаны pmdway.com сізге жеткізді - бұл өндірушілер мен электроникаға әуесқойлар үшін, бүкіл әлем бойынша ақысыз жеткізу.
Ұсынылған:
Arduino көмегімен Led Strip көмегімен аналогтық сағат пен сандық сағатты қалай жасауға болады: 3 қадам
![Arduino көмегімен Led Strip көмегімен аналогтық сағат пен сандық сағатты қалай жасауға болады: 3 қадам Arduino көмегімен Led Strip көмегімен аналогтық сағат пен сандық сағатты қалай жасауға болады: 3 қадам](https://i.howwhatproduce.com/images/002/image-3577-j.webp)
Arduino көмегімен Led Strip көмегімен аналогтық сағат пен сандық сағатты қалай жасауға болады: Бүгін біз аналогты сағатты жасайтын боламыз. Led Strip және MAX7219 нүктелік модулі бар Arduino цифрлық сағаты жергілікті уақыт белдеуімен уақытты түзетеді. Аналогтық сағат ұзағырақ жарықдиодты жолақты қолдана алады, сондықтан оны суретші болу үшін қабырғаға іліп қоюға болады
Millis () пен PfodApp көмегімен Arduino күнін/уақытын жоспарлау/тіркеу: 11 қадам
![Millis () пен PfodApp көмегімен Arduino күнін/уақытын жоспарлау/тіркеу: 11 қадам Millis () пен PfodApp көмегімен Arduino күнін/уақытын жоспарлау/тіркеу: 11 қадам](https://i.howwhatproduce.com/images/002/image-3710-26-j.webp)
Millis () пен PfodApp көмегімен Arduino күнін/уақытын жоспарлау/тіркеу: Arduino немесе Android бағдарламалаудың қажеті жоқ. Сондай -ақ, RTC және GPS модульдері де қолдау көрсетеді. Уақыт белдеулерін автоматты түрде түзету, RTC дрейфі мен GPS жетіспейтін секундтар Кіріспе Бұл оқу құралы Arduino millis -ті қалай пайдалану керектігін көрсетеді. ) деректерді құруға арналған уақыт белгілері
Дизайн ойлау әдістері бар картон шыныаяқ жобалау: 7 қадам
![Дизайн ойлау әдістері бар картон шыныаяқ жобалау: 7 қадам Дизайн ойлау әдістері бар картон шыныаяқ жобалау: 7 қадам](https://i.howwhatproduce.com/images/003/image-6399-j.webp)
Дизайн ойлау әдістері бар картон шыныаяқ жасаңыз: Сәлеметсіз бе, дизайн ойлау әдістеріне сәйкес жасалған картон шыныаяқ, мұнда. Мұны қараңыз және түсініктеме беріңіз. Мен сіздің пікірлеріңізбен өз жобамды жетілдіремін :) Үлкен рахмет ---------------------------- Мерхаба, Дизайн мені ойлайды
Arduino көмегімен Arduino көмегімен CubeSat қалай құруға болады: 9 қадам
![Arduino көмегімен Arduino көмегімен CubeSat қалай құруға болады: 9 қадам Arduino көмегімен Arduino көмегімен CubeSat қалай құруға болады: 9 қадам](https://i.howwhatproduce.com/images/004/image-9406-14-j.webp)
Arducam көмегімен Arduino көмегімен CubeSat қалай құруға болады: Бірінші суретте бізде Arduino бар және оны «Arduino Uno» деп атайды. Екінші суретте бізде Arducam бар, ол «Arducam OV2640» деп аталады 2MP шағын. &Quot; Екінші суреттен басқа сізге қажет материалдар бар
Ультрадыбыстық сенсор мен Funduino су датчигін пайдаланып Arduino су деңгейін анықтау әдістері: 4 қадам
![Ультрадыбыстық сенсор мен Funduino су датчигін пайдаланып Arduino су деңгейін анықтау әдістері: 4 қадам Ультрадыбыстық сенсор мен Funduino су датчигін пайдаланып Arduino су деңгейін анықтау әдістері: 4 қадам](https://i.howwhatproduce.com/images/003/image-8298-21-j.webp)
Ультрадыбыстық сенсор мен Funduino су датчигінің көмегімен Arduino су деңгейін анықтау әдістері: Бұл жобада мен сізге екі әдісті қолдана отырып, қымбат емес су детекторын қалай жасау керектігін көрсетемін: 1. Ультрадыбыстық сенсор (HC-SR04) .2. Funduino су сенсоры