Innehållsförteckning:
- Steg 1: Obligatoriska komponenter
- Steg 2: Översikt över Arduino -timer för signalgenerering
- Steg 3: LED -blinkning
- Steg 4: LED -dimmer
- Steg 5: Digital-till-analog omvandlare (DAC)
- Steg 6: Metronom
- Steg 7: Ljudspektrum
- Steg 8: Servomotorer
- Steg 9: Spänningsdubblare och växelriktare
- Steg 10: Trådlös kraftöverföring
Video: Arduino -timer: 8 projekt: 10 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
Arduino Uno eller Nano kan generera exakta digitala signaler på sex dedikerade stift med hjälp av de tre inbyggda timern. De kräver bara några få kommandon för att konfigurera och använder inga CPU -cykler för att köra!
Att använda timern kan vara skrämmande om du utgår från ATMEGA328 fullständiga datablad, som har 90 sidor dedikerade till deras beskrivning! Flera inbyggda Arduino-kommandon använder redan timern, till exempel millis (), delay (), tone (), AnalogWrite () och servobiblioteket. Men för att använda deras fulla kraft måste du konfigurera dem genom registren. Jag delar här några makron och funktioner för att göra detta enklare och mer transparent.
Efter en mycket kort översikt över timers, följ 8 coola projekt som är beroende av signalgenerering med timers.
Steg 1: Obligatoriska komponenter
För att göra alla 8 projekt behöver du:
- En Arduino Uno eller kompatibel
- En prototypsköld med mini protoboard
- 6 hopkopplade kablar
- 6 korta breadboardhoppare (gör dig själv från 10 cm solid -core -anslutningstråd)
- 2 krokodilledningar
- 1 vit 5 mm LED
- ett 220 Ohm motstånd
- ett 10kOhm motstånd
- en 10 kOhm potentiometer
- 2 keramiska 1muF kondensatorer
- 1 elektrolytisk 10 muF kondensator
- 2 dioder, 1n4148 eller liknande
- 2 mikro servomotorer SG90
- 1 8 Ohm högtalare
- 20 m tunn (0,13 mm) emaljerad tråd
Steg 2: Översikt över Arduino -timer för signalgenerering
Timer0 och timer2 är 8-bitars timers, vilket betyder att de kan räkna från 0 till 255 som mest. Timer1 är en 16-bitars timer, så den kan räkna upp till 65535. Varje timer har två tillhörande utgångspinnar: 6 och 5 för timer0, 9 och 10 för timer1, 11 och 3 för timer2. Timern ökas vid varje Arduino -klockcykel eller med en hastighet som reduceras med en förskalningsfaktor, som antingen är 8, 64, 256 eller 1024 (32 och 128 är också tillåtna för timer2). Tidsuret räknas från 0 till ‘TOP’ och sedan om igen (snabb PWM) eller nedåt (fas korrekt PWM). Värdet på "TOP" avgör således frekvensen. Utgångsstiften kan ställa in, återställa eller vända på värdet för Output Compare -registret, så att de bestämmer driftscykeln. Endast timer1 har möjlighet att självständigt ställa in frekvensen och arbetscyklerna för båda utgångsstiften.
Steg 3: LED -blinkning
Den lägsta frekvensen som kan nås med 8-bitars timers är 16MHz/(511*1024) = 30, 6Hz. Så för att få en LED att blinka med 1 Hz behöver vi timer1, som kan nå frekvenser 256 gånger mindre, 0,12 Hz.
Anslut en LED med sin anod (långa ben) till pin9 och anslut dess katod med ett 220 Ohm motstånd till jord. Ladda upp koden. Lysdioden blinkar med exakt 1 Hz med en driftscykel på 50%. Loop () -funktionen är tom: timern initieras vid setup () och behöver ingen ytterligare uppmärksamhet.
Steg 4: LED -dimmer
Pulsbreddsmodulering är ett effektivt sätt att reglera intensiteten hos en LED. Med en rätt förare är det också den föredragna metoden för att reglera elektromotorernas hastighet. Eftersom signalen antingen är 100% på eller 100% av, slösas ingen effekt på ett seriemotstånd. I grund och botten är det som att blinka lysdioden snabbare än ögat kan följa. 50Hz är i princip tillräckligt, men det kan fortfarande tyckas flimra lite och när lysdioden eller ögonen rör sig kan det bli ett irriterande icke-kontinuerligt "spår". Med en förskala på 64 med en 8-bitars timer får vi 16MHz/(64*256) = 977Hz, vilket passar syftet. Vi väljer timer2, så att timer1 förblir tillgänglig för andra funktioner, och vi stör inte Arduino time () -funktionen, som använder timer0.
I detta exempel regleras arbetscykeln, och därmed intensiteten, av en potentiometer. En andra lysdiod kan regleras oberoende med samma timer på stift 3.
Steg 5: Digital-till-analog omvandlare (DAC)
Arduino har inte en sann analog utgång. Vissa moduler tar en analog spänning för att reglera en parameter (displaykontrast, detekteringströskel etc). Med bara en kondensator och motstånd kan timer1 användas för att skapa en analog spänning med en upplösning på 5mV eller bättre.
Ett lågpassfilter kan "medel" PWM-signalen till en analog spänning. En kondensator är ansluten via ett motstånd till ett PWM -stift. Egenskaperna bestäms av PWM -frekvensen och värdena för motståndet och kondensatorn. Upplösningen för 8-bitars timers skulle vara 5V/256 = 20mV, så vi väljer Timer1 för att få 10-bitars upplösning. RC-kretsen är ett första ordnings lågpassfilter och det kommer att ha en viss krusning. Tidsskalan för RC-kretsen bör vara mycket större än perioden för PWM-signalen för att minska krusningen. Perioden vi får för en 10-bitars precision är 1024/16MHz = 64mus. Om vi använder en 1muF kondensator och ett 10kOhm motstånd är RC = 10ms. Rippeln från topp till topp är högst 5V*0,5*T/(RC) = 16mV, vilket anses vara tillräckligt här.
Observera att denna DAC har en mycket hög utgångsimpedans (10 kOhm), så spänningen kommer att sjunka avsevärt om den drar ström. För att undvika det kan det buffras med en opamp, eller en annan kombination av R och C kan väljas, till exempel 1kOhm med 10muF.
I exemplet styrs DAC -utgången med en potentiometer. En andra oberoende DAC -kanal kan köras med timer1 på stift 10.
Steg 6: Metronom
En metronom hjälper till att hålla koll på rytmen när du spelar musik. För mycket korta pulser kan arduino -timerutgången matas direkt till en högtalare, vilket ger tydligt hörbara klick. Med en potentiometer kan slagfrekvensen regleras från 40 till 208 slag per minut, i 39 steg. Timer1 behövs för den precision som krävs. Värdet på 'TOP', som bestämmer frekvensen, ändras inuti loop () -funktionen, och det kräver uppmärksamhet! Du ser här att WGM -läget skiljer sig från de andra exemplen som har fast frekvens: detta läge, med TOP ställt in av OCR1A -registret, har dubbel buffring och skyddar mot att missa TOP och få en lång glitch. Detta betyder dock att vi bara kan använda en utgångsstift.
Steg 7: Ljudspektrum
Människor kan höra över 3 storleksordningar av ljudfrekvenser, från 20Hz till 20kHz Detta exempel genererar hela spektrumet med en potentiometer. En 10muF kondensator sätts mellan högtalaren och Arduino för att blockera likströmmen. Timer1 producerar en fyrkantvåg. Waveform-genereringsläget här är Fas-korrekt PWM. I det läget börjar räknaren räkna bakåt när den når toppen, vilket resulterar i pulser som har sitt medelvärde fast, även när arbetscykeln varierar. Men det resulterar också i en period som är (nästan) dubbel, och det händer bara att med förskalning 8 täcker timer1 hela det hörbara spektrumet, utan att behöva ändra förskalning. Också här, eftersom värdet på TOP ändras när du är på språng, med hjälp av OCR1A som topp minskar fel.
Steg 8: Servomotorer
Det finns kraftfulla servobibliotek, men om du bara har två servon att köra kan du lika gärna göra det direkt med timer1 och därmed minska CPU, minnesanvändning och undvika avbrott. Den populära SG90 -servon tar en 50Hz -signal och pulslängden kodar positionen. Perfekt för timer1. Frekvensen är fast, så båda utgångarna på pin9 och pin 10 kan användas för att styra servon oberoende av varandra.
Steg 9: Spänningsdubblare och växelriktare
Ibland kräver ditt projekt en spänning som är högre än 5V eller en negativ spänning. Det kan vara att köra en MOSFET, att köra ett piezoelement, att driva en opamp eller återställa en EEPROM. Om strömförbrukningen är tillräckligt liten, upp till ~ 5mA, kan en laddningspump vara den enklaste lösningen: bara 2 dioder och två kondensatorer anslutna till en pulsad signal från en timer gör det möjligt att fördubbla arduino 5V till 10V. I praktiken finns det 2 dioddroppar, så det kommer att vara mer som 8,6V i praktiken för dubblaren eller -3,6V för växelriktaren.
Kvadratvågens frekvens bör vara tillräcklig för att pumpa tillräckligt med laddning genom dioderna. En 1muF kondensator flyttar 5 muC förändring när spänningen växlar mellan 0 och 5 V, så för en 10 mA ström måste frekvensen vara minst 2 kHz. I praktiken är en högre frekvens bättre, eftersom det minskar krusningen. Med timer2 som räknas från 0 till 255 utan förskalning är frekvensen 62,5 kHz, vilket fungerar bra.
Steg 10: Trådlös kraftöverföring
Det är inte ovanligt att ladda en smart klocka utan kablar, men samma kan lätt vara en del av ett Arduino -projekt. En spole med en högfrekvenssignal kan överföra ström till en annan närliggande spole genom induktion, utan elektrisk kontakt.
Förbered först spolarna. Jag använde en pappersrulle med 8,5 cm diameter och emaljerad tråd med 0,13 mm diameter för att göra 2 spolar: den primära med 20 varv, den sekundära med 50 varv. Självinduktansen för denna typ av spole med N-lindningar och en radie R är ~ 5muH * N^2 * R. Så för N = 20 och R = 0,0425 ger L = 85muH, vilket bekräftades med komponenttestaren. Vi producerar en signal med en frekvens på 516 kHz, vilket resulterar i en impedans på 2pi*f*L = 275Ohm. Detta är tillräckligt högt för att Arduino inte ska överströms.
För att köra spolen mest effektivt vill vi använda en riktig AC -källa. Det finns ett trick som kan göras: de två utgångarna från en timer kan köras i motsatt fas genom att invertera en av utgångarna. För att göra den ännu mer lik en sinusvåg använder vi den fas-korrekta PWM. På detta sätt, mellan stift 9 och 10, växlar spänningen mellan båda 0V, stift 9 +5V, båda 0V, stift 10 +5V. Effekten visas på bilden från ett omfångsspår (med en förskala på 1024 har denna leksaksomfång inte mycket bandbredd).
Anslut primärspolen till stift 9 och 10. Anslut en lysdiod till sekundärspolen. När sekundärspolen kommer nära primären tänds lysdioden starkt.
Rekommenderad:
Trådlös kommunikation med NRF24L01 -sändtagarmodul för Arduino -baserade projekt: 5 steg (med bilder)
Trådlös kommunikation med NRF24L01-sändtagarmodul för Arduino-baserade projekt: Detta är min andra instruerbara handledning om robotar och mikrokontroller. Det är verkligen fantastiskt att se din robot leva och fungera som förväntat och tro mig det kommer att bli roligare om du styr din robot eller andra trådlösa saker med snabb och
10 grundläggande Arduino -projekt för nybörjare! Gör minst 15 projekt med en enda bräda !: 6 steg
10 grundläggande Arduino -projekt för nybörjare! Gör minst 15 projekt med en enda bräda !: Arduino Project &Handledningstavla; Innehåller 10 grundläggande Arduino -projekt. Alla källkoder, Gerber -filen och mer. Ingen SMD! Enkel lödning för alla. Lätt avtagbara och utbytbara komponenter. Du kan göra minst 15 projekt med en enda
Hur man gör ett tecknat projekt med luftblock och papperskoppar: 8 steg (med bilder)
Hur man gör ett tecknat projekt med Airblock och Paper Cups: Hej alla, Airblock uppmuntrar alltid människor att skapa sina egna DIY -projekt. Idag lär vi dig hur du gör ett tecknat projekt med Airblock och papperskoppar. Den modulära och programmerbara startdrönaren. Konstruera din dröm! Mer information: http: // kc
4 projekt i 1 med DFRobot FireBeetle ESP32 & LED Matrix Cover: 11 steg (med bilder)
4 projekt i 1 med DFRobot FireBeetle ESP32 & LED Matrix Cover: Jag tänkte göra en instruerbar för vart och ett av dessa projekt - men till slut bestämde jag mig för att den största skillnaden är programvaran för varje projekt jag trodde att det var bättre att bara göra en stor instruerbar! Hårdvaran är densamma för alla
Automatiserade hemmagardiner - Mini -projekt med MakerChips’BluChip (nRF51 BLE) -modul: 7 steg (med bilder)
Automatiserade hemmagardiner - Mini -projekt med MakerChips 'BluChip (nRF51 BLE) -modul: Tänk dig att vakna upp och vilja få en solstråle genom dina fönster, eller stänga gardinerna så att du kan sova längre, utan ansträngning att komma dig nära till gardinerna utan snarare med en knapptryckning på din smartph