Innholdsfortegnelse:

Arduino -tidtakere: 8 prosjekter: 10 trinn (med bilder)
Arduino -tidtakere: 8 prosjekter: 10 trinn (med bilder)

Video: Arduino -tidtakere: 8 prosjekter: 10 trinn (med bilder)

Video: Arduino -tidtakere: 8 prosjekter: 10 trinn (med bilder)
Video: 8 Cool Arduino Science Projects 2024, Juni
Anonim
Arduino -tidtakere: 8 prosjekter
Arduino -tidtakere: 8 prosjekter

Arduino Uno eller Nano kan generere nøyaktige digitale signaler på seks dedikerte pinner ved å bruke de tre innebygde tidtakerne. De krever bare noen få kommandoer for å sette opp og bruker ingen CPU -sykluser for å kjøre!

Å bruke tidtakerne kan være skremmende hvis du starter fra ATMEGA328 hele databladet, som har 90 sider dedikert til beskrivelsen! Flere innebygde Arduino-kommandoer bruker allerede tidtakerne, for eksempel millis (), delay (), tone (), AnalogWrite () og servobiblioteket. Men for å bruke full kraft må du sette dem opp gjennom registerene. Jeg deler her noen makroer og funksjoner for å gjøre dette enklere og mer gjennomsiktig.

Etter en veldig kort oversikt over tidtakerne, følg 8 kule prosjekter som er avhengige av signalgenerering med tidtakerne.

Trinn 1: Nødvendige komponenter

Nødvendige komponenter
Nødvendige komponenter

For å lage alle 8 prosjektene trenger du:

  • En Arduino Uno eller kompatibel
  • En prototypeskjold med mini protoboard
  • 6 startkabler for brødbrett
  • 6 korte breadboardhoppere (lag deg selv av en 10 cm solid kjerne)
  • 2 krokodilleder
  • 1 hvit 5 mm LED
  • en 220 Ohm motstand
  • en 10 kOhm motstand
  • et 10 kOhm potensiometer
  • 2 keramiske 1muF kondensatorer
  • 1 elektrolytisk 10muF kondensator
  • 2 dioder, 1n4148 eller lignende
  • 2 mikro servomotorer SG90
  • 1 8 Ohm høyttaler
  • 20 meter tynn (0,13 mm) emaljert tråd

Trinn 2: Oversikt over Arduino -tidtakere for signalgenerering

Timer0 og timer2 er 8-biters, noe som betyr at de kan telle fra 0 til 255 på det meste. Timer1 er en 16-biters timer, så den kan telle opptil 65535. Hver timer har to tilhørende utgangspinner: 6 og 5 for timer0, 9 og 10 for timer1, 11 og 3 for timer2. Timeren økes ved hver Arduino -klokkesyklus, eller med en hastighet som reduseres med en forhåndsskaleringsfaktor, som enten er 8, 64, 256 eller 1024 (32 og 128 er også tillatt for timer2). Tidtakerne teller fra 0 til ‘TOP’ og deretter igjen (rask PWM) eller nedover (fasekorrigert PWM). Verdien på ‘TOP’ bestemmer dermed frekvensen. Utgangspinnene kan angi, tilbakestille eller vende på verdien til Output Compare Register, slik at de bestemmer driftssyklusen. Bare timer1 har muligheten til uavhengig å stille inn frekvensen og driftssyklusene for begge utgangspinnene.

Trinn 3: LED -blink

Image
Image
LED blinker
LED blinker
LED blinker
LED blinker

Den laveste frekvensen som kan nås med 8-biters timere er 16MHz/(511*1024) = 30, 6Hz. Så for å få en LED til å blinke med 1 Hz, trenger vi timer1, som kan nå frekvenser 256 ganger mindre, 0,12 Hz.

Koble en LED med anoden (langt ben) til pin9 og koble katoden med en 220 Ohm motstand til jord. Last opp koden. Lysdioden blinker nøyaktig 1 Hz med en driftssyklus på 50%. Loop () -funksjonen er tom: Timeren initialiseres ved oppsett () og trenger ikke ytterligere oppmerksomhet.

Trinn 4: LED -dimmer

Image
Image
LED Dimmer
LED Dimmer
LED Dimmer
LED Dimmer

Pulsbreddemodulering er en effektiv måte å regulere intensiteten til en LED. Med en skikkelig driver er det også den foretrukne metoden for å regulere hastigheten på elektromotorer. Siden signalet enten er 100% på eller 100% av, går det ikke bort noe strøm på seriemotstand. I utgangspunktet er det som å blinke LED -en raskere enn øyet kan følge. 50Hz er i prinsippet tilstrekkelig, men det kan fortsatt se ut til å flimre litt, og når lysdioden eller øynene beveger seg, kan det oppstå en irriterende ikke-kontinuerlig "sti". Ved å bruke en forhåndsskala på 64 med en 8-biters timer, får vi 16MHz/(64*256) = 977Hz, som passer formålet. Vi velger timer2, slik at timer1 forblir tilgjengelig for andre funksjoner, og vi forstyrrer ikke Arduino time () -funksjonen, som bruker timer0.

I dette eksemplet reguleres driftssyklusen, og dermed intensiteten, av et potensiometer. En andre LED kan reguleres uavhengig med samme timer på pin 3.

Trinn 5: Digital-til-analog omformer (DAC)

Image
Image
Digital-til-analog omformer (DAC)
Digital-til-analog omformer (DAC)
Digital-til-analog omformer (DAC)
Digital-til-analog omformer (DAC)

Arduino har ikke en ekte analog utgang. Noen moduler tar en analog spenning for å regulere en parameter (displaykontrast, deteksjonsgrense osv.). Med bare en kondensator og motstand kan timer1 brukes til å lage en analog spenning med en oppløsning på 5mV eller bedre.

Et lavpassfilter kan "gjennomsnittlig" PWM-signalet til en analog spenning. En kondensator er koblet gjennom en motstand til en PWM -pinne. Karakteristikkene bestemmes av PWM -frekvensen og verdiene til motstanden og kondensatoren. Oppløsningen til 8-biters timere ville være 5V/256 = 20mV, så vi velger Timer1 for å få 10-biters oppløsning. RC-kretsen er et første-ordens lavpassfilter, og det vil ha litt krusninger. Tidsskalaen til RC-kretsen bør være mye større enn perioden for PWM-signalet for å redusere krusningen. Perioden vi får for en 10-bits presisjon er 1024/16MHz = 64mus. Hvis vi bruker en 1muF kondensator og en 10kOhm motstand, er RC = 10ms. Rippelen fra topp til topp er maksimalt 5V*0,5*T/(RC) = 16mV, noe som anses som tilstrekkelig her.

Vær oppmerksom på at denne DAC har en veldig høy utgangsimpedans (10 kOhm), så spenningen vil falle betydelig hvis den trekker strøm. For å unngå det kan den bufres med en opamp, eller en annen kombinasjon av R og C kan velges, for eksempel 1kOhm med 10muF.

I eksemplet styres DAC -utgangen med et potensiometer. En annen uavhengig DAC -kanal kan kjøres med timer1 på pin 10.

Trinn 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

En metronom hjelper deg å holde oversikt over rytmen når du spiller musikk. For veldig korte pulser kan arduino -timerutgangen mates direkte til en høyttaler, noe som gir tydelig hørbare klikk. Med et potensiometer kan slagfrekvensen reguleres fra 40 til 208 slag per minutt, i 39 trinn. Timer1 er nødvendig for nødvendig presisjon. Verdien av ‘TOP’, som bestemmer frekvensen, endres inne i loop () -funksjonen, og det krever oppmerksomhet! Du ser her at WGM -modusen skiller seg fra de andre eksemplene som har fast frekvens: denne modusen, med TOP angitt av OCR1A -registret, har dobbel buffering og beskytter mot å miste TOPP og få en lang feil. Dette betyr imidlertid at vi bare kan bruke en utgangspinne.

Trinn 7: Lydspektrum

Image
Image
Lydspektrum
Lydspektrum
Lydspektrum
Lydspektrum

Mennesker kan høre over 3 størrelsesordener av lydfrekvenser, fra 20Hz til 20kHz Dette eksemplet genererer hele spekteret med et potensiometer. En 10muF kondensator settes mellom høyttaleren og Arduino for å blokkere likestrømmen. Timer1 produserer en firkantbølge. Waveform-generasjonsmodusen her er fasekorrekt PWM. I den modusen begynner telleren å telle bakover når den når toppen, noe som resulterer i pulser som har gjennomsnittet fast, selv når driftssyklusen varierer. Imidlertid resulterer det også i en periode som er (nesten) dobbel, og det skjer bare at med forhåndsskala 8 dekker timer1 hele det hørbare spekteret, uten at du trenger å endre forhåndsskala. Også her, siden verdien av TOP endres når du er på farten, ved å bruke OCR1A som topp reduserer feil.

Trinn 8: Servomotorer

Image
Image
Servomotorer
Servomotorer
Servomotorer
Servomotorer

Det er kraftige servobiblioteker, men hvis du bare har to servoer å kjøre, kan du like godt gjøre det direkte med timer1, og dermed redusere CPU, minnebruk og unngå avbrudd. Den populære SG90 -servoen tar et 50Hz -signal, og pulslengden koder posisjonen. Ideell for timer1. Frekvensen er fast, så begge utgangene på pin9 og pin 10 kan brukes til å styre servoene uavhengig.

Trinn 9: Spenningsdobbler og omformer

Spenningsdobbler og omformer
Spenningsdobbler og omformer
Spenningsdobbler og omformer
Spenningsdobbler og omformer
Spenningsdobbler og omformer
Spenningsdobbler og omformer

Noen ganger krever prosjektet en spenning som er høyere enn 5V eller en negativ spenning. Det kan være å kjøre en MOSFET, å kjøre et piezo -element, for å drive en opamp eller tilbakestille en EEPROM. Hvis strømforsyningen er liten nok, opptil ~ 5mA, kan en ladningspumpe være den enkleste løsningen: bare 2 dioder og to kondensatorer koblet til et pulssignal fra en tidtaker tillater å doble arduino 5V til 10V. I praksis er det 2 diodedråper, så det vil være mer som 8,6V i praksis for dobleren, eller -3,6V for omformeren.

Frekvensen til firkantbølgen bør være tilstrekkelig til å pumpe nok ladning gjennom dioder. En 1muF kondensator beveger seg 5muC endring når spenningen endres mellom 0 og 5V, så for en 10mA strøm må frekvensen være minst 2kHz. I praksis er en høyere frekvens bedre, siden den reduserer krusningen. Med timer2 som teller fra 0 til 255 uten forhåndsskala, er frekvensen 62,5 kHz, noe som fungerer bra.

Trinn 10: Trådløs strømoverføring

Image
Image
Trådløs strømoverføring
Trådløs strømoverføring
Trådløs strømoverføring
Trådløs strømoverføring

Det er ikke uvanlig å lade en smartklokke uten kabler, men det samme kan lett være en del av et Arduino -prosjekt. En spole med et høyfrekvent signal kan overføre strøm til en annen spole i nærheten gjennom induksjon, uten elektrisk kontakt.

Forbered først spolene. Jeg brukte en papirrull med en diameter på 8,5 cm og en emaljert tråd med en diameter på 0,13 mm for å lage to spoler: den primære med 20 omdreininger, den sekundære med 50 omdreininger. Selvinduktansen til denne typen spoler med N viklinger og en radius R er ~ 5muH * N^2 * R. Så for N = 20 og R = 0,0425 gir L = 85muH, som ble bekreftet med komponenttester. Vi produserer et signal med en frekvens på 516 kHz, noe som resulterer i en impedans på 2pi*f*L = 275Ohm. Dette er høyt nok til at Arduino ikke går inn i overstrøm.

For å kjøre spolen mest effektivt, vil vi gjerne bruke en ekte vekselstrømskilde. Det er et triks som kan gjøres: de to utgangene til en timer kan kjøres i motsatt fase ved å invertere en av utgangene. For å gjøre den enda mer lik en sinusbølge, bruker vi den fasekorrigerte PWM. På denne måten, mellom pin 9 og 10, veksler spenningen mellom begge 0V, pin 9 +5V, begge 0V, pin 10 +5V. Effekten vises på bildet fra et omfangsspor (med en forhåndsskala på 1024 har dette leketøyomfanget ikke mye båndbredde).

Koble primærspolen til pinne 9 og 10. Koble en LED til den sekundære spolen. Når sekundærspolen bringes nær primæren, lyser LED -en sterkt.

Anbefalt: