Cuprins:

Cronometre Arduino: 8 proiecte: 10 pași (cu imagini)
Cronometre Arduino: 8 proiecte: 10 pași (cu imagini)

Video: Cronometre Arduino: 8 proiecte: 10 pași (cu imagini)

Video: Cronometre Arduino: 8 proiecte: 10 pași (cu imagini)
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Iunie
Anonim
Cronometre Arduino: 8 proiecte
Cronometre Arduino: 8 proiecte

Arduino Uno sau Nano pot genera semnale digitale precise pe șase pini dedicați utilizând cele trei temporizatoare încorporate. Acestea necesită doar câteva comenzi pentru a configura și nu folosesc cicluri CPU pentru a rula!

Utilizarea cronometrelor poate fi intimidantă dacă porniți din foaia tehnică completă ATMEGA328, care are 90 de pagini dedicate descrierii lor! Mai multe comenzi Arduino încorporate folosesc deja temporizatoarele, de exemplu millis (), delay (), tone (), AnalogWrite () și servoteca. Dar, pentru a-și folosi puterea maximă, va trebui să le configurați prin registre. Împărtășesc aici câteva macrocomenzi și funcții pentru a face acest lucru mai ușor și mai transparent.

După o scurtă prezentare generală a temporizatoarelor, urmați 8 proiecte interesante care se bazează pe generarea semnalului cu temporizatoarele.

Pasul 1: Componente necesare

Componente necesare
Componente necesare

Pentru a realiza toate cele 8 proiecte, veți avea nevoie de:

  • Un Arduino Uno sau compatibil
  • Un scut prototip cu mini protoboard
  • 6 cabluri jumper pentru panou de rulare
  • 6 jumperi scurți pentru panouri (faceți-vă din sârmă de conectare cu miez solid de 10 cm)
  • 2 conducte de crocodil
  • 1 LED alb de 5 mm
  • un rezistor de 220 Ohm
  • un rezistor de 10kOhm
  • un potențiometru de 10kOhm
  • 2 condensatoare ceramice 1muF
  • 1 condensator electrolitic 10muF
  • 2 diode, 1n4148 sau similar
  • 2 micro servo motoare SG90
  • 1 difuzor de 8 Ohm
  • 20m de fir subțire emailat (0,13 mm)

Pasul 2: Prezentare generală a temporizatoarelor Arduino pentru generarea semnalului

Timer0 și timer2 sunt temporizatoare pe 8 biți, ceea ce înseamnă că pot conta de la 0 la 255 cel mult. Timer1 este un temporizator pe 16 biți, deci poate conta până la 65535. Fiecare temporizator are doi pini de ieșire asociați: 6 și 5 pentru temporizatorul0, 9 și 10 pentru temporizatorul1, 11 și 3 pentru temporizatorul2. Temporizatorul este incrementat la fiecare ciclu de ceas Arduino sau la o rată care este redusă cu un factor de precalare, care este fie 8, 64, 256 sau 1024 (32 și 128 sunt permise și pentru timer2). Temporizatoarele contează de la 0 la „TOP” și apoi din nou (PWM rapid) sau în jos (PWM corect de fază). Valoarea „TOP” determină astfel frecvența. Pinii de ieșire pot seta, reseta sau răsturna la valoarea registrului de comparare a ieșirii, astfel încât aceștia să determine ciclul de funcționare. Numai timer1 are capacitatea de a seta independent frecvența și ciclurile de funcționare pentru ambii pini de ieșire.

Pasul 3: LED-ul clipește

Image
Image
LED Clipește
LED Clipește
LED Clipește
LED Clipește

Cea mai mică frecvență care poate fi atinsă cu temporizatoarele de 8 biți este de 16 MHz / (511 * 1024) = 30, 6Hz. Deci, pentru a face un LED să clipească cu 1Hz, avem nevoie de timer1, care poate atinge frecvențe de 256 de ori mai mici, 0,12 Hz.

Conectați un LED cu anodul său (piciorul lung) la pin9 și conectați catodul cu un rezistor de 220 Ohm la masă. Încărcați codul. LED-ul va clipi exact la 1Hz cu un ciclu de funcționare de 50%. Funcția loop () este goală: cronometrul este inițializat la setup () și nu are nevoie de o atenție suplimentară.

Pasul 4: Dimmer LED

Image
Image
Dimmer LED
Dimmer LED
Dimmer LED
Dimmer LED

Modulația lățimii pulsului este o modalitate eficientă de a regla intensitatea unui LED. Cu un driver adecvat, este, de asemenea, metoda preferată de reglare a vitezei electromotoarelor. Deoarece semnalul este fie 100% pornit, fie 100% oprit, nu se pierde nicio energie la o rezistență de serie. Practic, este ca și cum intermitem LED-ul mai repede decât poate urmări ochiul. 50Hz este, în principiu, suficient, dar poate părea să pâlpâie puțin și atunci când LED-ul sau ochii se mișcă, poate rezulta o „urmă” enervantă necontinuă. Folosind o prescală de 64 cu un temporizator de 8 biți, obținem 16MHz / (64 * 256) = 977Hz, care se potrivește scopului. Alegem timer2, astfel încât timer1 să rămână disponibil pentru alte funcții și să nu interferăm cu funcția Arduino time (), care folosește timer0.

În acest exemplu, ciclul de funcționare, și astfel intensitatea, este reglat de un potențiometru. Un al doilea LED poate fi reglat independent cu același temporizator la pinul 3.

Pasul 5: Convertor digital-analog (DAC)

Image
Image
Convertor digital-analog (DAC)
Convertor digital-analog (DAC)
Convertor digital-analog (DAC)
Convertor digital-analog (DAC)

Arduino nu are o ieșire analogică adevărată. Unele module iau o tensiune analogică pentru a regla un parametru (contrastul afișajului, pragul de detecție etc.). Cu un singur condensator și rezistor, timer1 poate fi utilizat pentru a crea o tensiune analogică cu o rezoluție de 5mV sau mai bună.

Un filtru trece-jos poate „media” semnalul PWM la o tensiune analogică. Un condensator este conectat printr-un rezistor la un pin PWM. Caracteristicile sunt determinate de frecvența PWM și de valorile rezistorului și condensatorului. Rezoluția temporizatoarelor de 8 biți ar fi de 5V / 256 = 20mV, deci optăm pentru Timer1 pentru a obține rezoluție de 10 biți. Circuitul RC este un filtru trece-jos de ordinul întâi și va avea o anumită undă. Scara de timp a circuitului RC ar trebui să fie mult mai mare decât perioada semnalului PWM pentru a reduce ondularea. Perioada pe care o obținem pentru o precizie de 10 biți este de 1024 / 16MHz = 64mus. Dacă folosim un condensator 1muF și un rezistor de 10kOhm, RC = 10ms. Ondulația vârf-la-vârf este de cel mult 5V * 0,5 * T / (RC) = 16mV, ceea ce este considerat suficient aici.

Rețineți că acest DAC are o impedanță de ieșire foarte mare (10kOhm), astfel încât tensiunea va scădea semnificativ dacă atrage curent. Pentru a evita acest lucru, poate fi tamponat cu un opamp sau poate fi aleasă o altă combinație de R și C, de exemplu 1kOhm cu 10muF.

În exemplu, ieșirea DAC este direcționată cu un potențiometru. Un al doilea canal DAC independent poate fi rulat cu timer1 pe pinul 10.

Pasul 6: metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

Un metronom ajută la urmărirea ritmului atunci când redați muzică. Pentru impulsuri foarte scurte, ieșirea temporizatorului arduino poate fi alimentată direct către un difuzor, care va produce clicuri clar audibile. Cu un potențiometru, frecvența bătăilor poate fi reglată de la 40 la 208 bătăi pe minut, în 39 de pași. Timer1 este necesar pentru precizia necesară. Valoarea „TOP”, care determină frecvența, este modificată în interiorul funcției loop () și asta necesită atenție! Vedeți aici că modul WGM diferă de celelalte exemple care au o frecvență fixă: acest mod, cu TOP setat de registrul OCR1A, are tampon dublu și protejează împotriva TOP-ului lipsă și a obține o problemă lungă. Cu toate acestea, acest lucru înseamnă că putem folosi doar 1 pin de ieșire.

Pasul 7: Spectrul de sunet

Image
Image
Spectrul de sunet
Spectrul de sunet
Spectrul de sunet
Spectrul de sunet

Oamenii pot auzi peste 3 ordine de mărime a frecvențelor sunetului, de la 20Hz la 20kHz Acest exemplu generează spectrul complet cu un potențiometru. Un condensator de 10 uM este pus între difuzor și Arduino pentru a bloca curentul continuu. Timer1 produce o undă pătrată. Modul de generare a formelor de undă aici este PWM corect de fază. În acest mod, contorul începe să numere înapoi când ajunge la vârf, ceea ce duce la impulsuri care au media fixă, chiar și atunci când ciclul de funcționare variază. Cu toate acestea, are ca rezultat și o perioadă (aproape) dublă și se întâmplă doar că, cu prescala 8, timer1 acoperă întregul spectru sonor, fără a fi nevoie să schimbați prescala. De asemenea, aici, deoarece valoarea TOP este modificată din mers, folosind OCR1A ca top reduce problemele.

Pasul 8: Servomotoare

Image
Image
Servomotoare
Servomotoare
Servomotoare
Servomotoare

Există biblioteci servo puternice, dar dacă aveți doar două servouri pe care să le conduceți, puteți face acest lucru direct cu timer1 și, astfel, reduceți CPU, utilizarea memoriei și evitați întreruperile. Popularul servo SG90 preia un semnal de 50Hz, iar lungimea impulsului codifică poziția. Ideal pentru timer1. Frecvența este fixă, astfel încât ambele ieșiri de pe pin9 și pin 10 pot fi utilizate pentru a direcționa servo-urile în mod independent.

Pasul 9: Dublatorul de tensiune și invertorul

Dublatorul și invertorul de tensiune
Dublatorul și invertorul de tensiune
Dublatorul și invertorul de tensiune
Dublatorul și invertorul de tensiune
Dublatorul și invertorul de tensiune
Dublatorul și invertorul de tensiune

Uneori proiectul dvs. necesită o tensiune mai mare de 5V sau o tensiune negativă. Poate fi să rulați un MOSFET, să rulați un element piezo, să alimentați un opamp sau să resetați o EEPROM. Dacă consumul de curent este suficient de mic, până la ~ 5mA, o pompă de încărcare ar putea fi cea mai simplă soluție: doar 2 diode și doi condensatori conectați la un semnal pulsat de la un temporizator permit dublarea arduino-ului de 5V la 10V. În practică, există 2 picături de diodă, deci va fi mai mult ca 8,6V în practică pentru dubler, sau -3,6V pentru invertor.

Frecvența undei pătrate ar trebui să fie suficientă pentru a pompa suficientă încărcare prin diode. Un condensator de 1muF mută 5muC de schimbare când tensiunea se schimbă între 0 și 5V, deci pentru un curent de 10mA, frecvența trebuie să fie de cel puțin 2kHz. În practică, o frecvență mai mare este mai bună, deoarece reduce ondularea. Cu timer2 numărând de la 0 la 255 fără prescalare, frecvența este de 62,5 kHz, ceea ce funcționează bine.

Pasul 10: Transfer de energie fără fir

Image
Image
Transfer de energie wireless
Transfer de energie wireless
Transfer de energie wireless
Transfer de energie wireless

Nu este neobișnuit să încărcați un ceas inteligent fără cabluri, dar același lucru poate face cu ușurință parte dintr-un proiect Arduino. O bobină cu semnal de înaltă frecvență poate transfera puterea către o altă bobină din apropiere prin inducție, fără contact electric.

Pregătiți mai întâi bobinele. Am folosit o rolă de hârtie de 8,5 cm diametru și sârmă emailată de 0,13 mm diametru pentru a face 2 bobine: primarul cu 20 de spire, secundarul cu 50 de spire. Autoinductanța acestui tip de bobină cu N înfășurări și o rază R este de ~ 5muH * N ^ 2 * R. Deci, pentru N = 20 și R = 0,0425 se obține L = 85muH, ceea ce a fost confirmat cu testerul de componente. Producem un semnal cu o frecvență de 516kHz, rezultând o impedanță de 2pi * f * L = 275Ohm. Acest lucru este suficient de mare pentru ca Arduino să nu intre în supracurent.

Pentru a rula cel mai eficient bobina, am dori să folosim o adevărată sursă de curent alternativ. Există un truc care se poate face: cele două ieșiri ale unui temporizator pot fi rulate în fază opusă, inversând una dintre ieșiri. Pentru a o face și mai asemănătoare cu o undă sinusoidală, folosim PWM corect de fază. În acest fel, între pinul 9 și 10, tensiunea alternează între ambii 0V, pinul 9 + 5V, ambii 0V, pinul 10 + 5V. Efectul este prezentat în imagine dintr-o urmă de lunetă (cu o prescală 1024, această lunetă de jucărie nu are prea multă lățime de bandă).

Conectați bobina primară la pinii 9 și 10. Conectați un LED la bobina secundară. Când bobina secundară este apropiată de cea primară, LED-ul se aprinde puternic.

Recomandat: