![Arduino metode mjerenja s Millisom (): 4 koraka Arduino metode mjerenja s Millisom (): 4 koraka](https://i.howwhatproduce.com/images/003/image-6834-7-j.webp)
Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
![Arduino metode mjerenja s Millisom () Arduino metode mjerenja s Millisom ()](https://i.howwhatproduce.com/images/003/image-6834-8-j.webp)
U ovom članku predstavljamo millis (); funkciju i staviti je u funkciju stvaranja različitih primjera mjerenja vremena.
Millis? Nema veze sa usnim sincerima … nadamo se da ste prepoznali milli kao numerički prefiks za tisućinke; to je množenje mjerne jedinice s 0,001 (ili deset na stupanj minus 3).
Zanimljivo je da će naši Arduino sustavi brojati broj milisekundi (tisuće sekundi) od početka izvođenja skice sve dok broj ne dosegne najveći broj koji se može pohraniti u varijablu tipa unsigned long (32-bitni [četiri bajta] cijeli broj -to se kreće od nule do (2^32) -1. (2^32) -1, ili 4294967295 milisekundi pretvara se u 49.71027-neparnih dana.
Brojač se resetira kada se Arduino resetira, dostigne maksimalnu vrijednost ili se prenese nova skica. Da biste dobili vrijednost brojača u određenom trenutku, samo pozovite funkciju - na primjer:
početak = millis ();
Gdje je start bezznačna duga varijabla. Evo vrlo jednostavnog primjera koji vam prikazuje millis () na djelu:
/ * demonstracija millis () */
nepotpisani dugi početak, završen, protekao;
void setup ()
{Serial.begin (9600); }
void loop ()
{Serial.println ("Pokreni …"); početak = millis (); kašnjenje (1000); gotov = millis (); Serial.println ("Završeno"); proteklo = gotov start; Serijski.ispis (proteklo); Serial.println ("protekle milisekunde"); Serial.println (); kašnjenje (500); }
Skica sprema trenutni broj milisa u početak, zatim čeka jednu sekundu, a zatim vrijednost milisa ponovno sprema u gotovom. Na kraju izračunava proteklo vrijeme kašnjenja. Na sljedećem ispisu zaslona serijskog monitora možete vidjeti da trajanje nije uvijek bilo točno 1000 milisekundi, kao što je prikazano na slici.
Korak 1:
![Slika Slika](https://i.howwhatproduce.com/images/003/image-6834-9-j.webp)
Jednostavno rečeno, funkcija millis koristi unutarnji brojač unutar ATmega mikrokontrolera u srcu vašeg Arduina. Ovaj brojač povećava svaki ciklus takta - što se događa (u standardnom Arduinu i kompatibilnim uređajima) pri taktu od 16 Mhz. Ovom brzinom upravlja kristal na Arduino ploči (srebrna stvar s utisnutim T16.000).
Korak 2:
![Slika Slika](https://i.howwhatproduce.com/images/003/image-6834-10-j.webp)
Točnost kristala može varirati ovisno o vanjskoj temperaturi i toleranciji samog kristala. To će opet utjecati na točnost vašeg rezultata u milisima. Anegdotsko iskustvo je izvijestilo da odstupanje u točnosti mjerenja vremena može biti oko tri ili četiri sekunde u razdoblju od dvadeset četiri sata.
Ako koristite ploču ili vlastitu verziju koja koristi keramički rezonator umjesto kristala, imajte na umu da nisu toliko točni i da će uvesti mogućnost veće razine zanošenja. Ako vam je potrebna mnogo veća razina točnosti mjerenja vremena, razmislite o specifičnim IC mjeračima vremena, poput Maxim DS3231.
Sada možemo koristiti milise za različite funkcije mjerenja vremena. Kao što je pokazano u prethodnom primjeru skice, možemo izračunati proteklo vrijeme. Kako bismo ovu ideju unaprijedili, napravimo jednostavnu štopericu. To može biti jednostavno ili složeno koliko je potrebno, ali u ovom slučaju ćemo skrenuti prema jednostavnom.
Što se tiče hardvera, imat ćemo dva gumba-Start i Stop-s 10k ohmskim pull-down otpornicima spojenim na digitalne pinove 2 odnosno 3. Kada korisnik pritisne start, skica će zabilježiti vrijednost za milise - tada će nakon pritiska na skicu skica ponovno zabilježiti vrijednost za milise, izračunati i prikazati proteklo vrijeme. Korisnik tada može pritisnuti start da ponovi postupak ili zaustaviti radi ažuriranja podataka. Evo skice:
/* Super-bazična štoperica pomoću millis (); */
nepotpisani dugi početak, završen, protekao;
void setup ()
{Serial.begin (9600); pinMode (2, INPUT); // gumb za pokretanje pinMode (3, INPUT); // gumb za zaustavljanje Serial.println ("Pritisnite 1 za start/reset, 2 za proteklo vrijeme"); }
void displayResult ()
{float h, m, s, ms; bez potpisa odavno; proteklo = gotov start; h = int (proteklo/3600000); preko = proteklo%3600000; m = int (preko/60000); preko = preko 600000; s = int (više od/1000); ms = preko%1000; Serial.print ("Sirovo proteklo vrijeme:"); Serial.println (proteklo); Serial.print ("Proteklo vrijeme:"); Serijski ispis (h, 0); Serial.print ("h"); Serijski.tisak (m, 0); Serial.print ("m"); Serijski.ispis (s, 0); Serial.print ("s"); Serial.print (ms, 0); Serial.println ("ms"); Serial.println (); }
void loop ()
{if (digitalRead (2) == HIGH) {start = millis (); kašnjenje (200); // za debounce Serial.println ("Započeto …"); } if (digitalRead (3) == HIGH) {gotov = millis (); kašnjenje (200); // za debounce displayResult (); }}
Pozivi delay () koriste se za uklanjanje prekidača - oni su izborni i njihova će uporaba ovisiti o vašem hardveru. Slika je primjer izlaza serijskog monitora skice - štoperica je pokrenuta, a zatim je dva puta pritisnuta tipka dva šest puta.
Korak 3: Brzinomjer …
![Image Image](https://i.howwhatproduce.com/images/003/image-6834-12-j.webp)
![](https://i.ytimg.com/vi/axuSWxFLOfQ/hqdefault.jpg)
Ako ste imali senzor na početku i na kraju fiksne udaljenosti, brzina bi se mogla izračunati: brzina = udaljenost ÷ vrijeme.
Također možete napraviti brzinomjer za oblik kretanja na kotačima, na primjer bicikl. U ovom trenutku nemamo bicikl s kojim bismo se mogli petljati, međutim možemo opisati postupak za to - prilično je jednostavan. (Odricanje od odgovornosti - učinite to na vlastitu odgovornost itd.)
Prije svega, pregledajmo potrebnu matematiku. Morat ćete znati opseg kotača. Hardver - trebat će vam senzor. Na primjer - trska i magnet. Smatrajte da je trska sklopka normalno otvoreni gumb i spojite je kao i obično s otpornikom od 10 k ohma.
Drugi mogu koristiti senzor Hall-efekta-svaki za sebe). Zapamtite iz matematike, za izračun opsega - upotrijebite formulu: opseg = 2πr gdje je r polumjer kruga.
Sada kada imate opseg kotača, ova se vrijednost može smatrati našom 'fiksnom udaljenošću', pa se stoga brzina može izračunati mjerenjem proteklog vremena između potpune rotacije.
Vaš senzor-jednom postavljen-trebao bi djelovati na isti način kao i normalno otvoreni gumb koji se pritisne pri svakom okretanju. Naša skica će mjeriti vrijeme koje je proteklo između svakog impulsa sa senzora.
Kako bismo to učinili, u našem primjeru izlaz osjetnika bit će spojen na digitalni pin 2 - jer će pokrenuti prekid za izračunavanje brzine. Skica će inače prikazivati brzinu na normalnom LCD modulu sa sučeljem I2C. Predlaže se I2C sučelje jer za to su potrebne samo 4 žice od Arduino ploče do LCD -a - što manje žica to bolje.
Evo skice za vaš pregled:
/*Osnovni brzinomjer pomoću millis (); */
#include "Wire.h" // za I2C sabirnicu LCD
#include "LiquidCrystal_I2C.h" // za LCD modul sabirnice I2C - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27, 16, 2); // postavite LCD adresu na 0x27 za prikaz od 16 znakova i 2 retka
float start, završio;
float proteklo, vrijeme; plovak circMetric = 1,2; // opseg kotača u odnosu na položaj senzora (u metrima) float circImperial; // pomoću 1 kilometra = 0,621371192 milja float speedk, speedm; // drži izračunate valove brzine u metričkim i imperijalnim vrijednostima
void setup ()
{attachInterrupt (0, speedCalc, RISING); // prekid koji se poziva kada senzori pošalju digitalno 2 visoko (pri svakom okretanju kotača) start = millis (); // postavljanje LCD lcd.init (); // inicijalizira lcd lcd.backlight (); // uključivanje LCD pozadinskog osvjetljenja lcd.clear (); lcd.println ("Nosite kacigu!"); kašnjenje (3000); lcd.clear (); Serial.begin (115200); circImperial = circMetric*.62137; // pretvori metričko u imperijalno za MPH izračune}
void speedCalc ()
{elapsed = millis ()-početak; početak = millis (); speedk = (3600*circMetric)/proteklo; // km/h brzinam = (3600*circImperial)/proteklo; // Milja na sat }
void loop ()
{lcd.setCursor (0, 0); lcd.print (int (speedk)); lcd.print ("km/h"); lcd.print (int (speedm)); lcd.print ("MPH"); lcd.setCursor (0, 1); lcd.print (int (proteklo)); lcd.print ("ms/rev"); kašnjenje (1000); // prilagođavanje prema osobnim željama kako bi se smanjilo treperenje}
Ne događa se toliko - svaki put kada kotač završi jedan okretaj signal s senzora preći će s niskog na visoko - pokrećući prekid koji poziva funkciju speedCalc ().
Ovo uzima očitanje u milisu (), a zatim izračunava razliku između trenutnog očitanja i prethodnog očitanja - ta vrijednost postaje vrijeme za prelazak udaljenosti (što je opseg kotača u odnosu na senzor) - pohranjeno u
plovak circMetric = 1,2;
a mjeri se u metrima). Konačno izračunava brzinu u km/h i MPH. Između prekida skica prikazuje ažurirane podatke o brzini na LCD -u, kao i sirovu vrijednost vremena za svaki okret radi znatiželje. U stvarnom životu mislim da nitko ne bi montirao LCD na bicikl, možda bi LED zaslon bio relevantniji.
U međuvremenu možete vidjeti kako ovaj primjer funkcionira u sljedećem kratkom video isječku. Umjesto kotača bicikla i sklopke trska/magneta, spojio sam izlaz kvadratnog vala iz generatora funkcija na iglu za prekid kako bih simulirao impulse s senzora, tako da možete steći predodžbu o tome kako to radi.
Korak 4:
To zasad sumira uporabu millis () za sada. Tu je i mikro ((); funkcija koja broji mikrosekunde.
Evo ga - još jedna praktična funkcija koja može omogućiti rješavanje više problema putem svijeta Arduina. Kao i uvijek, sada je na vama i vašoj mašti da pronađete nešto čime ćete kontrolirati ili doći do drugih smicalica.
Ovaj post vam donosi pmdway.com - sve za proizvođače i ljubitelje elektronike, uz besplatnu dostavu diljem svijeta.
Preporučeni:
Mjerenja trenutnog senzora ACS724 s Arduinom: 4 koraka
![Mjerenja trenutnog senzora ACS724 s Arduinom: 4 koraka Mjerenja trenutnog senzora ACS724 s Arduinom: 4 koraka](https://i.howwhatproduce.com/images/007/image-18077-j.webp)
Mjerenja trenutnog senzora ACS724 s Arduinom: U ovom uputstvu ćemo eksperimentirati s povezivanjem ACS724 osjetnika struje s Arduinom radi mjerenja struje. U ovom slučaju trenutni senzor je varijacija +/- 5A koja daje 400 mv/A. Arduino Uno ima 10-bitni ADC, pa dobra pitanja
Arduino laserski sustav mjerenja vremena: 6 koraka (sa slikama)
![Arduino laserski sustav mjerenja vremena: 6 koraka (sa slikama) Arduino laserski sustav mjerenja vremena: 6 koraka (sa slikama)](https://i.howwhatproduce.com/images/009/image-24918-j.webp)
Arduino Laser-based Timing System: Kao dio mog učenja, trebao mi je sustav za točno mjerenje brzine modela vozila koje je prešlo 10 metara. U početku sam mislio da ću kupiti jeftin gotov sustav s eBaya ili Aliexpressa, ti su sustavi općenito poznati kao svjetlosna vrata, fo
Projekt mjerenja snage vlastitim rukama pomoću Arduino Pro Mini: 5 koraka
![Projekt mjerenja snage vlastitim rukama pomoću Arduino Pro Mini: 5 koraka Projekt mjerenja snage vlastitim rukama pomoću Arduino Pro Mini: 5 koraka](https://i.howwhatproduce.com/images/009/image-26269-j.webp)
Projekt mjerača snage vlastitim rukama pomoću Arduino Pro Mini: Uvod Pozdrav, elektronička zajednica! Danas ću vam predstaviti projekt koji vam omogućuje mjerenje napona i struje uređaja i prikaz zajedno s vrijednostima snage i energije. Mjerenje struje/napona Ako želite mjeriti
IoT modul napajanja: Dodavanje značajke mjerenja IoT energije u moj solarni regulator punjenja: 19 koraka (sa slikama)
![IoT modul napajanja: Dodavanje značajke mjerenja IoT energije u moj solarni regulator punjenja: 19 koraka (sa slikama) IoT modul napajanja: Dodavanje značajke mjerenja IoT energije u moj solarni regulator punjenja: 19 koraka (sa slikama)](https://i.howwhatproduce.com/images/010/image-29236-j.webp)
IoT Power Module: Dodavanje značajke IoT mjerenja energije u moj solarni regulator punjenja: Pozdrav svima, nadam se da ste svi super! U ovom uputstvu pokazat ću vam kako sam napravio IoT modul za mjerenje energije koji izračunava količinu energije koju generiraju moji solarni paneli, a koju koristi moj solarni regulator punjenja t
IoT Hydroponics - Korištenje IBM -ovog Watsona za PH i EC mjerenja: 7 koraka (sa slikama)
![IoT Hydroponics - Korištenje IBM -ovog Watsona za PH i EC mjerenja: 7 koraka (sa slikama) IoT Hydroponics - Korištenje IBM -ovog Watsona za PH i EC mjerenja: 7 koraka (sa slikama)](https://i.howwhatproduce.com/images/003/image-6706-15-j.webp)
IoT Hydroponics - Korištenje IBM -ovog Watsona za PH i EC mjerenja: Ova instrukcija će pokazati kako nadzirati EC, pH i temperaturu postavljanja hidroponike i učitavati podatke u IBM -ovu Watson uslugu. Watson je slobodan za početak. Postoje plaćeni planovi, ali besplatni plan je više nego dovoljan za ovaj projekt