Arduino brojač impulsa sa senzora. Spojimo Arduino na mjerač električne energije. Dijagram za spajanje na telemetrijski izlaz

Tahometar je koristan alat za brojanje okretaja u minuti (okretaja u minuti) kotača ili bilo čega što se okreće. Najlakši način za izradu tahometra je korištenje IR odašiljača i prijemnika. Kada se veza između njih prekine, znate da se nešto vrti i pomoću koda možete izračunati RPM na temelju učestalosti prekida komunikacije.

U ovom članku ćemo pogledati kako koristiti IR odašiljač i prijemnik za izradu tahometra pomoću Arduina. Rezultat se prikazuje na 16x2 LCD zaslonu.

Cilj ovog projekta je stvoriti sustav s jednim ulazom i jednim izlazom. Na ulazu uređaja postoji signal koji se mijenja od visoke (+5V) do niske (+0V) razine kada je komunikacija poremećena. U skladu s ovim signalom, Arduino će povećati internu vrijednost brojača. Zatim se provodi dodatna obrada i izračun, a kada se okidač prekine, izračunati RPM će biti prikazan na LCD zaslonu.

Za komunikaciju ćemo koristiti IR zraku IR LED-a spojenog preko otpornika niskog otpora tako da svijetli jako. Kao prijemnik koristit ćemo fototranzistor koji se “zatvara” u nedostatku svjetla IR LED diode. Računalni ventilator će se postaviti između IR odašiljača i prijemnika i uključiti. IR prijemnik spojen preko tranzistorskog kruga će generirati prekide. Arduino LCD sučelje će se koristiti za ispis rezultata, tako da možemo ispisati konačnu vrijednost RPM na LCD-u.

Elementi:
Arduino UNO
16x2 LCD
Daska za kruh
Trimer otpornik 5 kOhm
Skakači
SIP konektori
2x 2N2222 NPN tranzistor
Infracrveni LED
fototranzistor
otpornik od 10 ohma
Otpornik 100 kOhm
Otpornik 15 kOhm ili 16 kOhm
Ventilator za računalo

Detaljan popis artikala

Gore su navedeni svi elementi korišteni u projektu, ali ću detaljnije opisati funkcije glavnih elemenata.

Arduino UNO
Ovo je Arduino ploča koju ćemo koristiti za obradu impulsa iz prekida IR zraka koji ukazuju na prisutnost lopatice računalnog ventilatora između prijemnika i senzora. Arduino će koristiti te impulse zajedno s mjeračem vremena za izračunavanje broja okretaja ventilatora.

LCD 16x2
Nakon što Arduino izračuna broj okretaja u minuti, ova će vrijednost biti prikazana na zaslonu na jednostavan način.

Trimer otpornik 5 kOhm
Ovaj trimer će se koristiti za podešavanje kontrasta 16x2 LCD-a. Omogućuje analogni napon u rasponu od 0 do +5 V, što vam omogućuje podešavanje svjetline LCD zaslona.

Infracrveni LED i fototranzistor
Fototranzistor se uključuje kada ga pogodi snažno IR svjetlo. Dakle, kada IR LED svijetli, fototranzistor ostaje otvoren, ali ako je IR LED prekriven lopaticom ventilatora, na primjer, tada je fototranzistor zatvoren.

2N3904 i 2N3906
Ovi tranzistori se koriste za pretvaranje razine signala kako bi se osigurali izlazni impulsi od fototranzistora do Arduina, u kojem nema napona osim +0 i +5V.

Shematski dijagram

U krugu je komunikacijsko sučelje s LCD zaslonom pojednostavljeno i ima samo 2 kontrolne linije i 4 podatkovne linije.

Značajke sheme

16x2 LCD sučelje
2 kontrolna pina i 4 za prijenos podataka povezani su s Arduina na LCD zaslon. To je ono što govori LCD-u što i kada treba učiniti.

Krug prekida IR zrake
Signal prekida IC zrake ide do 2. digitalnog pina Arduina. Ovo prekida Arduino, dopuštajući mu da broji puls i dopušta tahometru da primi podatke.

Arduino LCD biblioteka

Za ovaj projekt koristit ćemo Arduino LCD knjižnicu. U osnovi ćemo samo ažurirati RPM vrijednost u drugom retku na novu.

Da biste se pripremili, pogledajte donji kod koji koristi ovu biblioteku za prikaz "Hello, World!" na LCD-u. U tahometru ćemo koristiti sličan kod, posebno: "lcd.print(millis()/1000);".

Razumite funkcije ove LCD biblioteke što je moguće detaljnije prije nego krenete naprijed. Nije previše komplicirano i dobro je dokumentirano na Arduino web stranici.

Izračunavanje RPM-a pomoću Arduina

Budući da ćemo izračunati broj okretaja u minuti računalnog ventilatora, moramo razumjeti da za izračun koristimo prekid IR zraka. Ovo je vrlo zgodno, ali moramo uzeti u obzir da ventilator računala ima 7 lopatica. To znači da je 7 prekida jednako 1 okretaju.

Ako pratimo prekide, moramo znati da svaki 7. prekid znači da se upravo dogodila 1 puna rotacija. Ako pratimo vrijeme potrebno za završetak okretaja, lako možemo izračunati RPM.

Vrijeme 1. okretaja = P * (µS/okretaj)
RPM = rpm = 60 000 000 * (µS/min) * (1/P) = (60 000 000 / P) * (rpm)

Za izračun RPM koristit ćemo formulu danu gore. Formula je precizna, a točnost ovisi o tome koliko dobro Arduino može pratiti vrijeme između prekida i brojiti broj punih okretaja.

Na slici ispod možete vidjeti sve potrebne dijelove i skakače kao na dijagramu.

Prvo spojite +5V i podatkovne/upravljačke vodove LCD zaslona. Zatim LCD zaslon, potenciometar za kontrast i LED za napajanje.

Prekid strujnog kruga IC zraka je sastavljen. Pokušajte zadržati razmak između IR LED-a i fototranzistora. Ova fotografija prikazuje udaljenost između IR LED-a i fototranzistora gdje ću postaviti ventilator računala.

Dosta priče o hardveru! Počnimo raditi firmware/program da vidimo kako uređaj radi!

Softverski dio

Postoje dva glavna dijela koda, koji su prikazani i detaljno navedeni u nastavku:
-Glavni ciklus osvježavanja LCD-a
- Ažuriranje vremena prekida

Glavni ciklus broji okretaje i ažuriranja LCD zaslona. Budući da je glavna petlja ogromna while(1) petlja, ona će uvijek raditi, RPM će se brojati, a LCD će se ažurirati nekoliko puta u sekundi. Funkcija u prekidu broji vrijeme između IR prekida, tako da možete brojati RPM u glavnoj petlji.

Zapamtite da računalni ventilator ima 7 lopatica, tako da je ovaj tahometar dizajniran za rad samo s tim ventilatorima. Ako vaš ventilator ili drugi uređaj proizvodi samo 4 impulsa po okretaju, promijenite kod u "(vrijeme*4)".

Dva ventilatora rade na otprilike 3000 okretaja u minuti i 2600 okretaja u minuti, s pogreškom od oko +/-100 okretaja u minuti.

Pregled tahometra na Arduinu

Ventilator generira prekidne impulse, a na izlazu vidimo RPM. Iako točnost nije 100%, već približno 95%, s cijenom elemenata od 10 USD, ima smisla izgraditi ovaj tahometar na Arduinu.

Pa što je sada?

Sustavi koji se temelje na prekidu snopa korisni su ne samo za mjerenja broja okretaja u minuti, već i kao drugi senzori. Na primjer, želite znati jesu li vrata otvorena ili zatvorena. Možda želite znati je li nešto prolazilo ispod robota. Postoje mnoge upotrebe za rezanje snopa, a krug koji se ovdje koristi je toliko jednostavan da postoji mnogo načina za poboljšanje i izgradnju drugih nevjerojatnih uređaja.

Zaključak

Sve u svemu, ovaj projekt smatram uspješnim... Ali to je pitanje vremena i iskustva... Ovako ili onako, sustav radi kako je zamišljeno i prilično pouzdano, a dobili smo očekivani rezultat. Nadam se da ste uživali čitajući ovaj članak i naučili kako napraviti svoj vlastiti tahometar koristeći Arduino!

Popis radioelemenata

Oznaka Tip Vjeroispovijest Količina BilješkaDućanMoja bilježnica
Arduino ploča

Arduino Uno

1 U bilježnicu
T2, T3 Bipolarni tranzistor

2N2222

2 2N3904 i 2N3906 U bilježnicu
R1 Otpornik

10 ohma

1 U bilježnicu
R2 Otpornik

100 kOhm

1 U bilježnicu
R3 Otpornik

16 kOhm

1

Implementiran signal PWM 25 kHz. Nemam osciloskop, ali želim provjeriti rezultat. Izrađujemo brojač pulsa i provjeravamo rad.

Zadatak

Na bazi ATmega 328P implementirati brojač impulsa za provjeru PWM 25 kHz, nije potrebna točnost mjerenja do pulsa, ali se mora znati redoslijed.

Riješenje

Logika rješenja je jednostavna, pratimo impulse kojima povećavamo globalnu varijablu tijekom sekunde. Akumulirana vrijednost bit će frekvencija dolaznog signala.

Za čitanje impulsa koristit ćemo vanjske prekide, oni su opisani na stranicama 87-96 dokumentaciju od proizvođača. U Atmega 328P postoje dva ulaza pomoću kojih možemo pratiti vanjske prekide INT0(PD2) I INT1(PD3), za rješavanje problema koristit ćemo se INT0.

Konfiguriranje vanjskih prekida

Prvo što trebate učiniti je konfigurirati port D kao ulaz, a da izbjegnem smetnje spojit ću pull-up otpornik.

Da biste odredili koji će događaji pokrenuti rukovatelja prekidom, trebate konfigurirati registar ERICA. Komadići ISC00 I ISC01 su odgovorni za INT0, A ISC10 I ISC11 iza INT1. Konfiguracija nadziranih događaja je identična, osim razlike u bitovima:

00 — Niska razina signala;
01 — Svaka logična promjena u signalu;
10 — silazni rub signala;
11 — Uzlazni rub signala.

Da biste izravno omogućili ulaze prekida, koristite registar EIMSK, komadići INT0 I INT1 odgovorni su za istoimene izlaze. Koristeći gore navedeno pišemo kod

Void int0_initial(void) ( DDRD = 0x00; // Port D kao ulaz PORTD = (1<< 2); // Включение подтягивающего регистра EICRA = (1 << ISC00) | (1 << ISC01); // Восходящий фронт сигнала EIMSK = (1 << INT0); // Включение входа прерывания sei(); // Разрешаем прерывания }

Rukovanje vanjskim prekidima

Konfigurirao sam prekide, sada ih trebam obraditi. U tu svrhu postoji funkcija prekida. ISR(), koji treba specificirati vrstu prekida, u mom slučaju INT0_vect. U funkciji ćemo povećati varijablu Tic_Count:

ISR(INT0_vect) ( Tic_Count ++; )

Izlaz rezultata

Kako bih olakšao izlaz rezultata, kako ne bih zeznuo zaslon, upotrijebio sam nečistu ATmega 328P, A Arduino UNO I Arduino NANO, na brodu koji je isti MK.

Kao što sam gore napisao, točnost mjerenja nije toliko važna, stoga neću postavljati tajmere, već jednostavno prikazati akumuliranu vrijednost varijable u glavnoj petlji jednom u sekundi Tic_Count i resetirajte ga. Tijekom ovih radnji zaustavljam obradu prekida.

Ispod je kompletan kod za rješavanje problema s komentarima:

#definiraj F_CPU 1600000UL #uključi #uključi volatile unsigned int Tic_Count = 0; // Vanjski rukovatelj prekidima INT0 ISR(INT0_vect) ( Tic_Count ++; ) void setup() ( int0_initial(); Serial.begin(9600); ) void loop() ( cli(); // Onemogući prekide Serial.println( Tic_Count); Tic_Count = 0; sei(); // Omogući kašnjenje prekida (1000); ) void int0_initial(void) ( DDRD = 0x00; // Port D kao ulaz PORTD = (1<< 2); // Включение подтягивающего регистра EICRA = (1 << ISC00) | (1 << ISC01); // Восходящий фронт сигнала EIMSK = (1 << INT0); // Включение входа прерывания sei(); // Разрешаем прерывания }

Sada preostaje samo spojiti PWM signal na PD2 pin i otvoriti monitor serijskog porta. Također možete generirati i testirati signal na jednom MK.

Izlazna očitanja približno su jednaka prethodno izračunatoj frekvenciji, očekuju se manje razlike zbog implementacije. Za točno mjerenje vjerojatno je ispravnije računati vrijeme između impulsa i iz toga izračunati frekvenciju.

Za dodatni zadatak

Shematski dijagram

Shema na matičnoj ploči

Bilješka

    U ovom eksperimentu po prvi put koristimo čip, u ovom slučaju 74HC595 izlazni pomakni registar. Mikrosklopovi su korisni jer vam omogućuju rješavanje određenog problema bez sastavljanja standardnog kruga svaki put.

    Izlazni pomakni registar nam omogućuje da "spasimo" digitalne izlaze korištenjem samo 3 umjesto 8. Kaskada registara bi nam omogućila da proizvedemo 16, itd. signalizira kroz ista tri pina.

    Prije korištenja mikro kruga, morate pažljivo proučiti njegov dijagram povezivanja u podatkovnoj tablici. Da biste razumjeli gdje brojati noge mikro kruga, s jedne strane nalazi se polukružni zarez. Ako naš 74HC595 postavimo s urezom ulijevo, tada će donji red imati noge 1-8, a gornji red 16-9.

    U dijagramu strujnog kruga našeg eksperimenta, kraci su raspoređeni drugačijim redoslijedom kako bi se izbjegla zabuna u vezama. Dodjela pinova prema podatkovnoj tablici označena je unutar slike mikro kruga, brojevi pinova su izvana.

    Podsjetimo se da je slika indikatora sa sedam segmenata označena brojevima njegovih nogu i njihovom korespondencijom sa segmentima.

Skica

Kako bismo prenijeli dio podataka koji će se dalje poslati kroz registar posmaka, moramo primijeniti LOW na zasun (ST cp ulaz čipa), zatim prenijeti podatke, a zatim poslati HIGH na zasun, nakon čega se odaslana kombinacija visoke i niske razine signala.

Za prijenos podataka koristili smo funkciju shiftOut(dataPin, clockPin, bitOrder, value) . Funkcija ne vraća ništa, ali to treba reći kao parametre

  • Arduino pin, koji je spojen na DS ulaz čipa (data pin),

DIY mjerač električne energije pomoću Arduina

U ovom ćete članku naučiti kako napraviti mjerač električne energije vlastitim rukama, pratiti napon napajanja i struju.

Dakle, ovaj instrument mjeri snagu struje u vašem domu kroz strujni transformator, a zatim izvodi nekoliko izračuna kako bi saznao vrijednost snage, maksimalnu snagu i količinu potrošene električne energije. Također je vrlo jednostavno dodati svoju lokalnu tarifu i prikazati trošak električne energije potrošen po danu.

Što će vam trebati za kućni mjerač električne energije

Arduino (Uno korišten u ovom vodiču)
LCD ekran
CT strujni transformator - Talema AC1030 (Pogledajte dolje za različite opcije i veze za kupnju)
Otpornik od 56 ohma
10μF kondenzator
2 x 100KOhm zajednički otpornici

Kako napraviti mjerač električne energije

Najprije morate započeti s sastavljanjem komponenti na CT ili matičnoj ploči kako biste stvorili svoj trenutni senzor koji proizvodi signal koji vaš Arduino može razumjeti. Arduino ima samo analogne naponske ulaze koji mjere 0-5V DC, tako da trebate pretvoriti izlaznu struju CT-a u referentni napon i zatim skalirati referentni napon u rasponu 0-5V.

Sastavljanje komponenti

Ako ćete negdje instalirati mjerač snage na dulje vrijeme, možete zalemiti otpornike i kondenzator izravno na CT.

Ispod je osnovni dijagram povezivanja CT-a na Arduino:


LCD zaslon već koristi analogne ulaze, ali zaslon koristi samo A0. Jednostavno zalemite tri žice od vašeg trenutnog senzora na igle na oklopu i koristite A1 kao ulaz senzora kao što je prikazano u nastavku.


Nakon što povežete sve svoje komponente, trebate spojiti senzor na ono što želite pratiti.
U svakom slučaju, trebate postaviti CT oko jednog od kabela za napajanje, po mogućnosti crvenog kabela (faza). Provjerite je li instaliran samo oko 1, jer neće raditi ako je oko oba, i ne može se spojiti oko žice za uzemljenje (žuta, zelena gola žica) jer energija ne teče kroz tu žicu. Ako ga spajate na mrežno napajanje, spojite ga na jednu od izlaznih žica nakon glavnog prekidača, kao što je prikazano dolje.

Odabir različitih komponenti

U biti postoje četiri komponente koje se moraju odabrati ili ispravno izračunati za vas.

Izbor strujnog transformatora

Prvi je strujni transformator. Ovdje korišten Talema AC1030, koji može prihvatiti nazivnu struju od 30 A i maksimalnu struju od 75 A. Na 220 V teoretski može podnijeti do 16,5 kW u kratkim vremenskim razdobljima, ali je procijenjeno da može podnijeti 6,6 kW energije kontinuirano, prikladno za malo kućanstvo. Da biste saznali koliko ampera trebate potrošiti, uzmite maksimalnu kontinuiranu snagu koju očekujete da ćete potrošiti i podijelite je s naponom (obično 110 V ili 220 V, ovisno o vašoj zemlji).

Kalibracija otpornika opterećenja

Zatim trebate odrediti vrijednost otpornika R3, to će vašu CT struju pretvoriti u referentni naponski signal. Započnite dijeljenjem primarne struje (maksimum kako se koristi gore) omjerom strujnog transformatora (dostupan u podatkovnoj tablici). To bi trebalo biti reda veličine 500-5000 prema 1. Ovaj je članak radio na 42 A s omjerom 1000:1, dajući sekundarnu struju od 0,042 A ili 42 mA. Vaš analogni referentni napon na Arduinu je 2,5 V, pa za određivanje otpora koji koristite, R = V / I - R = 2,5 / 0,042 = 59,5 ohma. Najbliža standardna vrijednost otpornika je 56 ohma, pa je to korišteno.

Evo nekoliko opcija za različite CT-ove i njihove idealne otpornike opterećenja (u standardnim veličinama):

  • Murata 56050C – 10A – 50:1 – 13Ω
  • Talema AS-103 – 15A – 300:1 – 51Ω
  • Talema AC-1020 – 20A – 1000:1 – 130Ω
  • Alttec L01-6215 – 30A – 1000:1 – 82Ω
  • Alttec L01-6216 – 40A – 1000:1 – 62Ω
  • Talema ACX-1050 – 50A – 2500:1 – 130Ω
  • Alttec L01-6218 – 60A – 1000:1 – 43Ω
  • Talema AC-1060 – 60A – 1000:1 – 43Ω
  • Alttec L01-6219 – 75A – 1000:1 – 33Ω
  • Alttec L01-6221 – 150A – 1000:1 – 18Ω
  • CTYRZCH SCT-013-000 – 100A
  • TOOGOO SCT-013-000 – 100A
Korišteni kondenzator je 10uF, što bi trebalo biti dovoljno za većinu CT raspona za kućnu primjenu.

Na kraju, potrebna su vam dva otpornika za razdvajanje kako biste dobili referentni napon od 2,5 V od Arduina. Trebali bi biti isti, dakle R1 = R2, i ne treba nam velika struja, zbog čega se u ovim člancima koriste dva otpornika od 100K ohma.

Sada možete preuzeti skicu na svoj Arduino ako već niste, a zatim slijedite ovaj vodič da biste započeli.

Ažuriranje - kôd je u međuvremenu izmijenjen za korištenje funkcije millis(), pogledajte kraj odjeljka za ažurirani kôd.

Preuzmi datoteku: (preuzimanja: 357)

Ako ne želite koristiti ili nemate LCD zaslon, također možete modificirati skicu za izlaz u Arduino IDE serijski prozor kao što je prikazano u nastavku.

Preuzmi datoteku: (preuzimanja: 340)

Ažuriranje koda

Kod je od tada modificiran za korištenje ugrađene funkcije millis(), koja izračunava točno vrijeme ciklusa za svaki ciklus radi poboljšanja točnosti. Ovo čini samo oko pola posto poboljšanja u točnosti izračuna, ali to je najbolji način za to.

Evo poboljšanog koda: Preuzmi datoteku: (preuzimanja: 516) Za one od vas koji su pročitali da se funkcija millis() prelijeva nakon otprilike 49 dana, kod automatski vrši resetiranje.


Kalibrirajte trenutna očitanja

Kao što je gore spomenuto, budući da vaše postavke, CT, otpornici i ulazni napon mogu biti drugačiji, postoji faktor skaliranja u skici koji ćete morati promijeniti prije nego dobijete točne rezultate.

Kako biste kalibrirali svoj mjerač energije, morate biti sigurni da je struja koju proizvodi vaš mjerač izmjerena točno onako kako očekujete. Da biste to učinili točno, morate pronaći kalibrirano opterećenje. To nije lako pronaći u prosječnom kućanstvu, pa ćete morati pronaći onaj koji koristi određenu i dosljednu količinu energije. Koristio sam nekoliko žarulja sa žarnom niti, dolaze u različitim veličinama i njihova je potrošnja prilično slična onoj na naljepnici, što znači da žarulja od 100 W koristi vrlo blizu 100 W stvarne snage budući da je to gotovo u potpunosti čisto otporno opterećenje.

Priključite malu žarulju (100 W ili tako nešto) i pogledajte koje je opterećenje prikazano. Sada trebate konfigurirati korištenje faktora skaliranja u retku izračuna:

Dvostruka RMSCstruja = ((maks. struja - 516) * 0,707) /11,8337

U ovom slučaju to je 11,8337, može biti veći ili niži ovisno o vašoj aplikaciji. Ili upotrijebite linearno skaliranje za izračun ove brojke, ili ako ste loši u matematici, igrajte se s različitim vrijednostima dok se opterećenje koje ste učitali ne prikaže na zaslonu mjerača energije.

Nakon što je vaš mjerač energije kalibriran, resetirati ćete ga i ostaviti da radi svoj posao. Ispod su dvije slike koje se koriste za malu i veliku snagu.