Përmbajtje:

Kohëmatësit Arduino: 8 Projekte: 10 Hapa (me fotografi)
Kohëmatësit Arduino: 8 Projekte: 10 Hapa (me fotografi)

Video: Kohëmatësit Arduino: 8 Projekte: 10 Hapa (me fotografi)

Video: Kohëmatësit Arduino: 8 Projekte: 10 Hapa (me fotografi)
Video: Lecture 08: Arduino Conditional Statements | Robojax Arduino Step By Step Course 2024, Qershor
Anonim
Kohëmatësit Arduino: 8 Projekte
Kohëmatësit Arduino: 8 Projekte

Arduino Uno ose Nano mund të gjenerojnë sinjale të sakta dixhitale në gjashtë kunja të dedikuar duke përdorur tre kohëmatës të integruar. Ata kërkojnë vetëm disa komanda për të vendosur dhe përdorur cikle CPU për të ekzekutuar!

Përdorimi i kohëmatësve mund të jetë frikësues nëse filloni nga fleta e të dhënave të plota ATMEGA328, e cila ka 90 faqe të dedikuara për përshkrimin e tyre! Disa komanda të integruara Arduino tashmë përdorin kohëmatësit, për shembull millis (), delay (), tone (), AnalogWrite () dhe bibliotekën servo. Por për të përdorur fuqinë e tyre të plotë, do t'ju duhet t'i vendosni ato përmes regjistrave. Unë ndaj këtu disa makro dhe funksione për ta bërë këtë më të lehtë dhe më transparente.

Pas një pasqyre shumë të shkurtër të kohëmatësve, ndiqni 8 projekte interesante që mbështeten në gjenerimin e sinjalit me kohëmatësit.

Hapi 1: Komponentët e kërkuar

Komponentët e kërkuar
Komponentët e kërkuar

Për të bërë të 8 projektet do t'ju duhet:

  • Një Arduino Uno ose i pajtueshëm
  • Një mburojë prototip me mini protoboard
  • 6 kabllo kërcyes me dërrasë buke
  • 6 kërcyes të shkurtër të dërrasës së bukës (bëjini vetes nga tela lidhëse prej 10 cm të ngurta)
  • 2 plumba krokodili
  • 1 LED i bardhë 5 mm
  • një rezistencë 220 Ohm
  • një rezistencë 10kOhm
  • një potenciometër 10kOhm
  • 2 kondensatorë qeramikë 1muF
  • 1 kondensator elektrolitik 10muF
  • 2 dioda, 1n4148 ose të ngjashme
  • 2 mikro servo motorë SG90
  • 1 altoparlant 8 Ohm
  • 20m tela të hollë (0.13mm) të emaluar

Hapi 2: Pasqyrë e Kohëmatësve Arduino për Gjenerimin e Sinjalit

Timer0 dhe timer2 janë kohëmatës 8-bit, që do të thotë se ata mund të numërojnë nga 0 në 255 më së shumti. Timer1 është një kohëmatës 16-bit, kështu që mund të numërojë deri në 65535. Çdo kohëmatës ka dy kunja dalëse të lidhura: 6 dhe 5 për timer0, 9 dhe 10 për timer1, 11 dhe 3 për timer2. Kohëmatësi rritet në secilin cikël të orës Arduino, ose me një normë që zvogëlohet nga një faktor i parashkruar, i cili është ose 8, 64, 256 ose 1024 (32 dhe 128 lejohen gjithashtu për kohëmatësin2). Kohëmatësit numërohen nga 0 në 'TOP' dhe pastaj përsëri (PWM e shpejtë) ose poshtë (PWM e saktë në fazë). Vlera e 'TOP' përcakton kështu frekuencën. Kunjat e daljes mund të vendosin, rivendosin ose rrokullisen në vlerën e Regjistrit të Krahasimit të Daljeve, kështu që ato përcaktojnë ciklin e punës. Vetëm timer1 ka aftësinë për të vendosur në mënyrë të pavarur frekuencën dhe ciklet e punës për të dy kunjat e daljes.

Hapi 3: Pulsim LED

Image
Image
Pulsim LED
Pulsim LED
Pulsim LED
Pulsim LED

Frekuenca më e ulët që mund të arrihet me kohëmatësit 8-bit është 16MHz/(511*1024) = 30, 6Hz. Pra, për të bërë një dritë të ndezur LED me 1Hz, ne kemi nevojë për kohëmatës 1, i cili mund të arrijë frekuenca 256 herë më të vogla, 0.12 Hz.

Lidhni një LED me anodën e tij (këmbën e gjatë) në pin9 dhe lidhni katodën e tij me një rezistencë 220 Ohm në tokë. Ngarko kodin. LED do të pulsojë saktësisht në 1Hz me një cikël pune prej 50%. Funksioni loop () është bosh: kohëmatësi inicializohet në konfigurimin () dhe nuk ka nevojë për ndonjë vëmendje të mëtejshme.

Hapi 4: Dimmer LED

Image
Image
Dimmer LED
Dimmer LED
Dimmer LED
Dimmer LED

Modulimi i gjerësisë së pulsit është një mënyrë efektive për të rregulluar intensitetin e një LED. Me një drejtues të duhur, është gjithashtu metoda e preferuar për të rregulluar shpejtësinë e elektromotorëve. Meqenëse sinjali është ose 100% aktiv ose 100% off, asnjë energji nuk humbet në një rezistencë serike. Në thelb, është sikur të ndezësh LED më shpejt sesa syri mund të ndjekë. Parimi 50Hz është në parim i mjaftueshëm, por mund të duket se po dridhet pak dhe kur LED ose sytë lëvizin, mund të rezultojë një "shteg" i bezdisshëm jo i vazhdueshëm. Duke përdorur një para-shkallë prej 64 me një kohëmatës 8-bit, marrim 16MHz/(64*256) = 977Hz, që i përshtatet qëllimit. Ne zgjedhim timer2, në mënyrë që timer1 të jetë i disponueshëm për funksione të tjera, dhe ne nuk ndërhyjmë në funksionin Arduino time (), i cili përdor timer0.

Në këtë shembull cikli i punës, dhe kështu intensiteti, rregullohet nga një potenciometër. Një LED i dytë mund të rregullohet në mënyrë të pavarur me të njëjtin kohëmatës në pin 3.

Hapi 5: Konvertuesi dixhital në analog (DAC)

Image
Image
Konvertuesi dixhital në analog (DAC)
Konvertuesi dixhital në analog (DAC)
Konvertuesi dixhital në analog (DAC)
Konvertuesi dixhital në analog (DAC)

Arduino nuk ka një dalje të vërtetë analoge. Disa module marrin një tension analog për të rregulluar një parametër (kontrasti i ekranit, pragu i zbulimit, etj.). Me vetëm një kondensator dhe rezistencë, kohëmatësi1 mund të përdoret për të krijuar një tension analog me një rezolucion prej 5mV ose më mirë.

Një filtër me kalim të ulët mund të ‘mesatarizojë’ sinjalin PWM në një tension analog. Një kondensator është i lidhur përmes një rezistence me një kunj PWM. Karakteristikat përcaktohen nga frekuenca PWM dhe vlerat e rezistencës dhe kondensatorit. Rezolucioni i kohëmatësve 8-bit do të ishte 5V/256 = 20mV, kështu që ne zgjedhim që Timer1 të marrë rezolucion 10-bit. Qarku RC është një filtër i rendit të parë me kalim të ulët dhe do të ketë një valëzim. Shkalla kohore e qarkut RC duhet të jetë shumë më e madhe se periudha e sinjalit PWM për të zvogëluar valëzimin. Periudha që marrim për një saktësi 10-bit është 1024/16MHz = 64mus. Nëse përdorim një kondensator 1muF dhe një rezistencë 10kOhm, RC = 10ms. Valëzimi kulmin-kulmin është maksimumi 5V*0.5*T/(RC) = 16mV, i cili konsiderohet i mjaftueshëm këtu.

Vini re se ky DAC ka një rezistencë shumë të lartë dalëse (10kOhm), kështu që tensioni do të bjerë ndjeshëm nëse tërheq rrymë. Për të shmangur këtë, mund të ruhet me një opamp, ose mund të zgjidhet një kombinim tjetër i R dhe C, për shembull 1kOhm me 10muF.

Në shembullin, dalja DAC drejtohet me një potenciometër. Një kanal i dytë i pavarur DAC mund të ekzekutohet me timer1 në pin 10.

Hapi 6: Metronome

Image
Image
Metronome
Metronome
Metronome
Metronome

Një metronom ndihmon për të mbajtur nën kontroll ritmin kur luani muzikë. Për impulse shumë të shkurtra, dalja e kohëmatësit arduino mund të furnizohet drejtpërdrejt me një altoparlant, i cili do të prodhojë klikime të dëgjueshme qartë. Me një potenciometër, frekuenca e rrahjeve mund të rregullohet nga 40 në 208 rrahje në minutë, në 39 hapa. Timer1 është i nevojshëm për saktësinë e kërkuar. Vlera e 'TOP', e cila përcakton frekuencën, modifikohet brenda funksionit loop (), dhe kjo kërkon vëmendje! Ju shikoni këtu se modaliteti WGM ndryshon nga shembujt e tjerë që kanë frekuencë fikse: kjo mënyrë, me TOP të vendosur nga regjistri OCR1A, ka buffering të dyfishtë dhe mbron nga mungesa e TOP dhe marrja e një defekti të gjatë. Sidoqoftë, kjo do të thotë që ne mund të përdorim vetëm 1 pin dalës.

Hapi 7: Spektri i zërit

Image
Image
Spektri i zërit
Spektri i zërit
Spektri i zërit
Spektri i zërit

Njerëzit mund të dëgjojnë mbi 3 renditje të madhësisë së frekuencave të zërit, nga 20Hz në 20kHz Ky shembull gjeneron spektrin e plotë me një potenciometër. Një kondensator 10muF vendoset midis altoparlantit dhe Arduino për të bllokuar rrymën DC. Timer1 prodhon një valë katrore. Mënyra e gjenerimit të Waveform këtu është PWM e saktë në fazë. Në atë mënyrë, numëruesi fillon të numërojë prapa kur të arrijë në majë, gjë që rezulton në impulse që mesatarja e tyre është fikse, edhe kur cikli i punës ndryshon. Sidoqoftë, rezulton gjithashtu në një periudhë që është (pothuajse) e dyfishtë, dhe thjesht ndodh që me parashkollën 8, kohëmatësi 1 të mbulojë spektrin e plotë të dëgjueshëm, pa pasur nevojë të ndryshojë paracaktimin. Gjithashtu këtu, meqenëse vlera e TOP po ndryshohet në lëvizje, duke përdorur OCR1A si maja zvogëlon defektet.

Hapi 8: Servo Motors

Image
Image
Servo Motors
Servo Motors
Servo Motors
Servo Motors

Ka biblioteka të fuqishme servo, por nëse keni vetëm dy servos për të përzënë, mund ta bëni këtë drejtpërdrejt me timer1, dhe kështu të zvogëloni CPU -në, përdorimin e kujtesës dhe të shmangni ndërprerjet. Servo i njohur SG90 merr një sinjal 50Hz, dhe gjatësia e pulsit kodon pozicionin. Ideale për kohëmatësin1. Frekuenca është fikse, kështu që të dy daljet në pin9 dhe pin 10 mund të përdoren për të drejtuar servotët në mënyrë të pavarur.

Hapi 9: Dyfishimi i tensionit dhe inverteri

Dyfishues i tensionit dhe inverter
Dyfishues i tensionit dhe inverter
Dyfishues i tensionit dhe inverter
Dyfishues i tensionit dhe inverter
Dyfishues i tensionit dhe inverter
Dyfishues i tensionit dhe inverter

Ndonjëherë projekti juaj kërkon një tension që është më i lartë se 5V ose një tension negativ. Mund të jetë për të drejtuar një MOSFET, për të drejtuar një element piezo, për të fuqizuar një opamp ose rivendosur një EEPROM. Nëse tërheqja aktuale është mjaft e vogël, deri në m 5mA, një pompë ngarkimi mund të jetë zgjidhja më e thjeshtë: vetëm 2 dioda dhe dy kondensatorë të lidhur me një sinjal të pulsuar nga një kohëmatës lejojnë të dyfishojnë arduino 5V në 10V. Në praktikë, ka 2 rënie të diodës, kështu që do të jetë më shumë si 8.6V në praktikë për dyfishin, ose -3.6V për inverterin.

Frekuenca e valës katrore duhet të jetë e mjaftueshme për të pompuar ngarkesë të mjaftueshme përmes diodave. Një kondensator 1muF lëviz 5muC ndryshim kur tensioni ndryshon midis 0 dhe 5V, kështu që për një rrymë 10mA, frekuenca duhet të jetë së paku 2kHz. Në praktikë, një frekuencë më e lartë është më e mirë, pasi zvogëlon valëzimin. Me numërimin e kohëmatësit2 nga 0 në 255 pa parashkrim, frekuenca është 62.5kHz, e cila funksionon mirë.

Hapi 10: Transferimi i energjisë pa tel

Image
Image
Transferimi i energjisë pa tel
Transferimi i energjisë pa tel
Transferimi i energjisë pa tel
Transferimi i energjisë pa tel

Nuk është e pazakontë të ngarkosh një orë inteligjente pa kabllo, por e njëjta lehtë mund të jetë pjesë e një projekti Arduino. Një spirale me një sinjal të frekuencës së lartë mund të transferojë fuqinë në një spirale tjetër aty pranë përmes induksionit, pa kontakt elektrik.

Së pari përgatitni mbështjelljet. Kam përdorur një rrotull letre me diametër 8.5cm dhe tel të emaluar me diametër 0.13mm për të bërë 2 mbështjellje: parësore me 20 kthesa, e mesme me 50 kthesa. Vetë-induktueshmëria e këtij lloji të spirales me mbështjellje N dhe rreze R është ~ 5muH * N^2 * R. Pra, për N = 20 dhe R = 0.0425 jep L = 85muH, e cila u konfirmua me testuesin përbërës. Ne prodhojmë një sinjal me një frekuencë prej 516kHz, duke rezultuar në një rezistencë prej 2pi*f*L = 275Ohm. Kjo është aq e lartë sa që Arduino nuk kalon në një rrymë të tepërt.

Për të drejtuar spiralen në mënyrë më efektive, ne do të donim të përdorim një burim të vërtetë AC. Ekziston një truk që mund të bëhet: dy daljet e një kohëmatësi mund të ekzekutohen në një fazë të kundërt, duke përmbysur njërën nga daljet. Për ta bërë atë edhe më të ngjashëm me një valë sinus, ne përdorim PWM të Fazës së saktë. Në këtë mënyrë, midis pin 9 dhe 10, tensioni alternohet midis të dyve 0V, pin 9 +5V, të dyve 0V, pin 10 +5V. Efekti tregohet në figurë nga një gjurmë fushëveprimi (me një shkallë paraprake 1024, kjo fushë lodrash nuk ka shumë gjerësi brezi).

Lidhni spiralen primare në kunjat 9 dhe 10. Lidhni një LED në spiralen dytësore. Kur spiralja dytësore afrohet me atë primare, LED ndizet shkëlqyeshëm.

Recommended: