INHOUDSOPGAWE:

Arduino -timers: 8 projekte: 10 stappe (met foto's)
Arduino -timers: 8 projekte: 10 stappe (met foto's)

Video: Arduino -timers: 8 projekte: 10 stappe (met foto's)

Video: Arduino -timers: 8 projekte: 10 stappe (met foto's)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, November
Anonim
Arduino Timers: 8 projekte
Arduino Timers: 8 projekte

Die Arduino Uno of Nano kan akkurate digitale seine op ses toegewyde penne genereer deur die drie ingeboude timers te gebruik. Hulle benodig slegs 'n paar opdragte om op te stel en gebruik geen CPU -siklusse nie!

Die gebruik van die tydtellers kan intimiderend wees as u begin met die volledige datablad van ATMEGA328, met 90 bladsye wat toegewy is aan hul beskrywing! Verskeie ingeboude Arduino-opdragte gebruik reeds die tydtellers, byvoorbeeld millis (), delay (), tone (), AnalogWrite () en die servobiblioteek. Maar om hul volle krag te gebruik, moet u dit deur die registers opstel. Ek deel hier 'n paar makros en funksies om dit makliker en deursigtiger te maak.

Na 'n baie kort oorsig van die timers, volg 8 oulike projekte wat afhanklik is van seinopwekking met die timers.

Stap 1: Vereiste komponente

Vereiste komponente
Vereiste komponente

Om al 8 projekte te maak, benodig u:

  • 'N Arduino Uno of versoenbaar
  • 'N Prototipe skild met 'n mini protobord
  • 6 springbordkabels
  • 6 kortbroodspringers (maak jouself van 'n 10 cm -aansluitdraad met soliede kern)
  • 2 krokodille lei
  • 1 wit 5 mm LED
  • 'n weerstand van 220 Ohm
  • 'n weerstand van 10 kOhm
  • 'n 10kOhm potensiometer
  • 2 keramiek 1muF kapasitors
  • 1 elektrolitiese 10muF kapasitor
  • 2 diodes, 1n4148 of soortgelyk
  • 2 mikro -servomotore SG90
  • 1 8 Ohm luidspreker
  • 20 m dun (0,13 mm) geëmailleerde draad

Stap 2: Oorsig van die Arduino -timers vir seinopwekking

Timer0 en timer2 is 8-bis-timers, wat beteken dat hulle hoogstens van 0 tot 255 kan tel. Timer1 is 'n 16-bis timer, sodat dit tot 65535 kan tel. Elke timer het twee gepaardgaande uitsetpenne: 6 en 5 vir timer0, 9 en 10 vir timer1, 11 en 3 vir timer2. Die timer word verhoog by elke Arduino -kloksiklus, of teen 'n tempo wat verminder word met 'n voorskaalfaktor, wat 8, 64, 256 of 1024 is (32 en 128 is ook toegelaat vir timer2). Die tydtellers tel van 0 tot 'TOP' en dan weer (vinnig PWM) of afwaarts (fase korrekte PWM). Die waarde van 'TOP' bepaal dus die frekwensie. Die uitsetpenne kan die waarde van die uitvoervergelykingregister instel, herstel of omdraai, sodat dié die dienssiklus bepaal. Slegs timer1 het die vermoë om die frekwensie en die werksiklusse vir beide uitvoerpenne onafhanklik in te stel.

Stap 3: LED knipper

Image
Image
LED knipper
LED knipper
LED knipper
LED knipper

Die laagste frekwensie wat met die 8-bis-timers bereik kan word, is 16MHz/(511*1024) = 30, 6Hz. Om 'n LED met 1Hz te laat knip, benodig ons timer1, wat frekwensies 256 keer kleiner kan bereik, 0,12 Hz.

Koppel 'n LED met sy anode (langbeen) aan pin9 en verbind sy katode met 'n 220 Ohm -weerstand met die grond. Laai die kode op. Die LED sal met presies 1 Hz knip met 'n werkstyd van 50%. Die lus () -funksie is leeg: die timer word by die opstelling () geïnitialiseer en het geen verdere aandag nodig nie.

Stap 4: LED -dimmer

Image
Image
LED dimmer
LED dimmer
LED Dimmer
LED Dimmer

Pulswydte modulasie is 'n effektiewe manier om die intensiteit van 'n LED te reguleer. Met die regte bestuurder is dit ook die voorkeurmetode om die snelheid van elektromotors te reguleer. Aangesien die sein 100% aan of 100% af is, word daar geen krag vermors aan 'n reeksweerstand nie. Eintlik is dit soos om die LED vinniger te flits as wat die oog kan volg. 50Hz is in beginsel voldoende, maar dit lyk asof dit nog steeds 'n bietjie flikker, en as die LED of die oë beweeg, kan 'n irriterende, nie-deurlopende 'roete' ontstaan. Deur 'n voorskaal van 64 met 'n 8-bis-timer te gebruik, kry ons 16MHz/(64*256) = 977Hz, wat by die doel pas. Ons kies timer2, sodat timer1 beskikbaar bly vir ander funksies, en ons belemmer nie die Arduino time () -funksie, wat timer0 gebruik nie.

In hierdie voorbeeld word die pligsiklus, en dus die intensiteit, gereguleer deur 'n potensiometer. 'N Tweede LED kan onafhanklik gereguleer word met dieselfde timer op pen 3.

Stap 5: Digitaal-na-analoog-omskakelaar (DAC)

Image
Image
Digitaal na analoog omskakelaar (DAC)
Digitaal na analoog omskakelaar (DAC)
Digitaal na analoog omskakelaar (DAC)
Digitaal na analoog omskakelaar (DAC)

Die Arduino het nie 'n ware analoog uitset nie. Sommige modules neem 'n analoog spanning om 'n parameter te reguleer (vertoningskontras, opsporingsdrempel, ens.). Met slegs een kondensator en weerstand kan timer1 gebruik word om 'n analoog spanning met 'n resolusie van 5mV of beter te skep.

'N Laagdeurlaatfilter kan die PWM-sein' gemiddelde 'tot 'n analoog spanning. 'N Kondensator word deur 'n weerstand aan 'n PWM -pen gekoppel. Die eienskappe word bepaal deur die PWM -frekwensie en die waardes van die weerstand en kapasitor. Die resolusie van die 8-bis-timers is 5V/256 = 20mV, daarom kies ons Timer1 om 'n resolusie van 10 bit te kry. Die RC-kring is 'n eerste-orde laagdoorlaatfilter en het 'n paar rimpels. Die tydskaal van die RC-kring moet baie groter wees as die tydperk van die PWM-sein om die rimpel te verminder. Die tydperk wat ons kry vir 'n 10-bis presisie is 1024/16MHz = 64mus. As ons 'n 1muF -kondensator en 'n 10kOhm -weerstand gebruik, is RC = 10ms. Die piek-tot-piek rimpel is hoogstens 5V*0,5*T/(RC) = 16mV, wat hier as voldoende beskou word.

Let daarop dat hierdie DAC 'n baie hoë uitsetimpedansie (10kOhm) het, sodat die spanning aansienlik sal daal as dit stroom trek. Om dit te vermy, kan dit met 'n opamp gebuffer word, of 'n ander kombinasie van R en C kan gekies word, byvoorbeeld 1kOhm met 10muF.

In die voorbeeld word die DAC -uitset gestuur met 'n potensiometer. 'N Tweede onafhanklike DAC -kanaal kan met timer1 op pen 10 uitgevoer word.

Stap 6: Metronoom

Image
Image
Metronoom
Metronoom
Metronoom
Metronoom

'N Metronoom help om tred te hou met die ritme tydens die speel van musiek. Vir baie kort pulse kan die arduino -timer -uitset direk na 'n luidspreker gevoer word, wat duidelik hoorbare kliek sal lewer. Met 'n potensiometer kan die maat van 40 tot 208 slae per minuut in 39 stappe gereguleer word. Timer1 is nodig vir die vereiste presisie. Die waarde van 'TOP', wat die frekwensie bepaal, word binne die lus () -funksie gewysig, en dit verg aandag! U sien hier dat die WGM -modus verskil van die ander voorbeelde met 'n vaste frekwensie: hierdie modus, met TOP ingestel deur die OCR1A -register, het 'n dubbele buffering en beskerm teen die mis van TOP en 'n lang fout. Dit beteken egter dat ons slegs 1 uitvoerpen kan gebruik.

Stap 7: Klankspektrum

Image
Image
Klank spektrum
Klank spektrum
Klank spektrum
Klank spektrum

Mense kan meer as 3 orde van grootte van klankfrekwensies hoor, van 20Hz tot 20kHz. Hierdie voorbeeld genereer die volle spektrum met 'n potensiometer. 'N Kondensator van 10 muF word tussen die luidspreker en die Arduino geplaas om die gelykstroom te blokkeer. Timer1 produseer 'n vierkantgolf. Die golfvormgenereringsmodus hier is Fase-korrekte PWM. In die modus begin die teller agteruit tel wanneer dit boontoe kom, wat lei tot pulse wat hul gemiddelde bepaal, selfs as die werksiklus wissel. Dit lei egter ook tot 'n tydperk wat (byna) dubbel is, en dit gebeur net dat timer1 met voorskaal 8 die volle hoorbare spektrum dek, sonder dat die voorskaal hoef te verander. Aangesien die waarde van TOP onderweg ook verander word, verminder OCR1A as top foute.

Stap 8: Servomotors

Image
Image
Servomotors
Servomotors
Servomotors
Servomotors

Daar is kragtige servobiblioteke, maar as u slegs twee servo's het om te bestuur, kan u dit net sowel direk met timer1 doen, en sodoende die CPU, geheueverbruik verminder en onderbrekings vermy. Die gewilde SG90 -servo neem 'n 50Hz -sein, en die polslengte kodeer die posisie. Ideaal vir timer 1. Die frekwensie is vas, sodat beide uitsette op pin9 en pin 10 gebruik kan word om die servo's onafhanklik te stuur.

Stap 9: Spanningsverdubbelaar en omskakelaar

Spanningsverdubbelaar en omskakelaar
Spanningsverdubbelaar en omskakelaar
Spanningsverdubbelaar en omskakelaar
Spanningsverdubbelaar en omskakelaar
Spanningsverdubbelaar en omskakelaar
Spanningsverdubbelaar en omskakelaar

Soms benodig u projek 'n spanning wat hoër is as 5V of 'n negatiewe spanning. Dit kan wees om 'n MOSFET uit te voer, 'n piëzo -element uit te voer, 'n opamp aan te skakel of 'n EEPROM terug te stel. As die stroomopname klein genoeg is tot ~ 5mA, kan 'n laaipomp die eenvoudigste oplossing wees: slegs 2 diodes en twee kondensators wat aan 'n gepulseerde sein van 'n timer gekoppel is, laat die arduino 5V tot 10V verdubbel. In die praktyk is daar 2 diode -druppels, dus dit sal in die praktyk meer wees as 8,6V vir die verdubbelaar, of -3,6V vir die omskakelaar.

Die frekwensie van die vierkantgolf moet voldoende wees om genoeg lading deur die diodes te pomp. 'N 1mUF -kondensator beweeg 5muC verandering wanneer die spanning wissel tussen 0 en 5V, dus vir 'n stroom van 10 mA moet die frekwensie minstens 2 kHz wees. In die praktyk is 'n hoër frekwensie beter, aangesien dit die rimpel verminder. Met timer2 wat van 0 tot 255 sonder voorafskaal tel, is die frekwensie 62,5 kHz, wat goed werk.

Stap 10: Draadlose kragoordrag

Image
Image
Draadlose kragoordrag
Draadlose kragoordrag
Draadlose kragoordrag
Draadlose kragoordrag

Dit is nie ongewoon om 'n slim horlosie sonder kabels te laai nie, maar dieselfde kan maklik deel uitmaak van 'n Arduino -projek. 'N Spoel met 'n hoëfrekwensie sein kan krag deur middel van induksie na 'n ander nabygeleë spoel oordra, sonder elektriese kontak.

Berei eers die spoele voor. Ek het 'n papierrol van 8,5 cm in deursnee en geëmailleerde draad van 0,13 mm in deursnee gebruik om 2 spoele te maak: die primêre met 20 draaie, die sekondêre met 50 draaie. Die selfinduktansie van hierdie tipe spoel met N-wikkelinge en 'n radius R is ~ 5muH * N^2 * R. Dus vir N = 20 en R = 0,0425 gee L = 85muH, wat met die komponenttoetser bevestig is. Ons lewer 'n sein met 'n frekwensie van 516 kHz, wat 'n impedansie van 2pi*f*L = 275Ohm tot gevolg het. Dit is hoog genoeg dat die Arduino nie oorstroom word nie.

Om die spoel die doeltreffendste te laat loop, wil ons 'n ware AC -bron gebruik. Daar is 'n truuk wat gedoen kan word: die twee uitsette van 'n timer kan in die teenoorgestelde fase uitgevoer word deur een van die uitsette om te keer. Om dit nog meer soortgelyk aan 'n sinusgolf te maak, gebruik ons die Fase-korrekte PWM. Op hierdie manier, tussen pen 9 en 10, wissel die spanning tussen beide 0V, pen 9 +5V, beide 0V, pen 10 +5V. Die effek word op die foto getoon vanuit 'n scope -spoor (met 'n voorskaal van 1024 het hierdie speelgoedomvang nie veel bandwydte nie).

Koppel die primêre spoel aan pen 9 en 10. Koppel 'n LED aan die sekondêre spoel. As die sekondêre spoel naby die primêr gebring word, brand die LED helder.

Aanbeveel: