Arduino počítadlo impulzov zo senzora. Arduino pripojíme k elektromeru. Schéma pripojenia k telemetrickému výstupu

Tachometer je užitočný nástroj na počítanie otáčok za minútu (otáčky za minútu) kolesa alebo čohokoľvek, čo sa točí. Najjednoduchší spôsob, ako vyrobiť tachometer, je použiť IR vysielač a prijímač. Keď sa spojenie medzi nimi preruší, viete, že sa niečo točí a môžete pomocou kódu vypočítať RPM na základe frekvencie prerušenia komunikácie.

V tomto článku sa pozrieme na to, ako použiť IR vysielač a prijímač na výrobu tachometra pomocou Arduina. Výsledok sa zobrazí na LCD displeji 16x2.

Cieľom tohto projektu je vytvoriť systém s jedným vstupom a jedným výstupom. Na vstupe zariadenia je signál, ktorý sa pri prerušení komunikácie mení z vysokej (+5V) na nízku (+0V). Podľa tohto signálu Arduino zvýši hodnotu interného počítadla. Potom sa vykoná ďalšie spracovanie a výpočet a po prerušení spúšte sa vypočítané otáčky zobrazia na LCD displeji.

Na komunikáciu použijeme IR lúč z IR LED pripojenej cez odpor s nízkym odporom tak, aby jasne žiaril. Ako prijímač použijeme fototranzistor, ktorý sa pri nedostatku svetla z IR LED „zatvára“. Počítačový ventilátor sa umiestni medzi IR vysielač a prijímač a zapne sa. IR prijímač pripojený cez tranzistorový obvod bude generovať prerušenia. Na výstup výsledku sa použije rozhranie Arduino LCD, takže konečnú hodnotu otáčok môžeme vypísať na LCD.

Prvky:
Arduino UNO
LCD 16x2
Doska na chlieb
Trimrový odpor 5 kOhm
Prepojky
SIP konektory
2x 2N2222 NPN tranzistor
Infračervená LED
Fototranzistor
10 ohmový odpor
Rezistor 100 kOhm
Rezistor 15 kOhm alebo 16 kOhm
Počítačový ventilátor

Podrobný zoznam položiek

Všetky prvky použité v projekte sú uvedené vyššie, ale podrobnejšie popíšem funkcie hlavných prvkov.

Arduino UNO
Toto je doska Arduino, ktorú použijeme na spracovanie impulzov z prerušenia IR lúča, ktoré indikujú prítomnosť lopatky ventilátora počítača medzi prijímačom a snímačom. Arduino použije tieto impulzy spolu s časovačom na výpočet otáčok ventilátora.

LCD 16x2
Keď Arduino vypočíta RPM, táto hodnota sa zobrazí na displeji užívateľsky príjemným spôsobom.

Trimrový odpor 5 kOhm
Tento trimr sa použije na nastavenie kontrastu LCD 16x2. Poskytuje analógové napätie v rozsahu od 0 do +5 V, čo vám umožňuje nastaviť jas LCD displeja.

Infračervená LED a fototranzistor
Fototranzistor sa zapne, keď naň dopadá silné IR svetlo. Takže keď svieti IR LED, udržiava fototranzistor otvorený, ale ak je IR LED zakrytá napríklad lopatkou ventilátora, potom je fototranzistor zatvorený.

2N3904 a 2N3906
Tieto tranzistory sa používajú na konverziu úrovne signálu s cieľom poskytnúť výstupné impulzy z fototranzistora do Arduina, v ktorom nie sú iné napätia ako +0 a +5V.

Schematický diagram

V obvode je komunikačné rozhranie s LCD displejom zjednodušené a má len 2 riadiace linky a 4 dátové linky.

Vlastnosti schémy

16x2 LCD rozhranie
Z Arduina sú k LCD displeju pripojené 2 ovládacie piny a 4 pre prenos dát. To je to, čo hovorí LCD, čo má robiť a kedy to robiť.

Prerušovací obvod IR lúča
Signál prerušenia IR lúča ide na 2. digitálny kolík Arduina. To preruší Arduino, čo mu umožní počítať pulz a umožní tachometru prijímať údaje.

LCD knižnica Arduino

Pre tento projekt použijeme knižnicu Arduino LCD. V podstate len aktualizujeme hodnotu RPM na druhom riadku na novú.

Na prípravu si pozrite nižšie uvedený kód, ktorý používa túto knižnicu na zobrazenie „Hello, World!“ na LCD. V tachometri použijeme podobný kód, najmä: "lcd.print(millis()/1000);".

Pochopte funkcie tejto knižnice LCD čo najpodrobnejšie predtým, ako sa pohnete vpred. Nie je to príliš zložité a je to dobre zdokumentované na webovej stránke Arduino.

Výpočet RPM pomocou Arduina

Keďže ideme počítať otáčky ventilátora počítača, musíme pochopiť, že na výpočet používame prerušenie IR lúča. To je veľmi pohodlné, ale musíme vziať do úvahy, že ventilátor počítača má 7 lopatiek. To znamená, že 7 prerušení sa rovná 1 otáčke.

Ak sledujeme prerušenia, musíme vedieť, že každé 7. prerušenie znamená, že práve nastala 1 úplná rotácia. Ak sledujeme čas potrebný na dokončenie revolúcie, môžeme ľahko vypočítať RPM.

Čas 1. otáčky = P * (µS/ot.)
RPM = rpm = 60 000 000 * (µS/min) * (1/P) = (60 000 000 / P) * (rpm)

Na výpočet RPM použijeme vzorec uvedený vyššie. Vzorec je presný a presnosť závisí od toho, ako dobre dokáže Arduino sledovať čas medzi prerušeniami a počítať počet úplných otáčok.

Na fotografii nižšie môžete vidieť všetky potrebné časti a prepojky ako na obrázku.

Najprv pripojte +5V a dátové/riadiace linky LCD displeja. Ďalej LCD displej, kontrastný potenciometer a LED napájania.

Prerušenie obvodu IR lúča je zostavené. Pokúste sa zachovať určitú vzdialenosť medzi IR LED a fototranzistorom. Táto fotografia ukazuje vzdialenosť medzi IR LED a fototranzistorom, kde umiestnim ventilátor počítača.

Dosť bolo hardvérových rečí! Začnime robiť firmvér/program, aby sme videli, ako zariadenie funguje!

Softvérová časť

Existujú dve hlavné časti kódu, ktoré sú zobrazené a podrobne opísané nižšie:
- Hlavný obnovovací cyklus LCD
- Aktualizácia časov prerušenia

Hlavný cyklus počíta otáčky a aktualizácie LCD displeja. Keďže hlavná slučka je obrovská slučka while(1), bude vždy bežať, budú sa počítať otáčky za minútu a LCD sa bude aktualizovať niekoľkokrát za sekundu. Funkcia v prerušení počíta čas medzi IR prerušeniami, takže môžete počítať RPM v hlavnej slučke.

Pamätajte, že počítačový ventilátor má 7 lopatiek, takže tento tachometer je navrhnutý tak, aby fungoval iba s týmito ventilátormi. Ak váš ventilátor alebo iné zariadenie produkuje iba 4 impulzy na otáčku, zmeňte kód na „(time*4)“.

Dva ventilátory pracujú pri približne 3000 ot./min a 2600 ot./min., s chybou cca +/-100 ot./min.

Recenzia tachometra na Arduino

Ventilátor generuje prerušovacie impulzy a na výstupe vidíme otáčky. Hoci presnosť nie je 100%, ale približne 95%, pričom náklady na prvky sú 10 dolárov, má zmysel postaviť tento tachometer na Arduino.

Takže čo je teraz?

Systémy založené na prerušení lúča sú užitočné nielen na meranie otáčok, ale aj ako iné senzory. Napríklad chcete vedieť, či sú dvere otvorené alebo zatvorené. Možno chcete vedieť, či niečo prešlo pod robotom. Existuje mnoho spôsobov použitia rezu lúčom a obvod, ktorý sa tu používa, je taký jednoduchý, že existuje veľa spôsobov, ako zlepšiť a postaviť ďalšie úžasné zariadenia.

Záver

Celkovo hodnotím tento projekt ako vydarený... Ale je to otázka času a skúseností... Tak či onak systém funguje podľa predstáv a celkom spoľahlivo a dočkali sme sa očakávaného výsledku. Dúfam, že ste si užili čítanie tohto článku a naučili sa, ako si vyrobiť vlastný tachometer pomocou Arduina!

Zoznam rádioelementov

Označenie Typ Denominácia Množstvo PoznámkaObchodMôj poznámkový blok
Arduino doska

Arduino Uno

1 Do poznámkového bloku
T2, T3 Bipolárny tranzistor

2N2222

2 2N3904 a 2N3906 Do poznámkového bloku
R1 Rezistor

10 ohmov

1 Do poznámkového bloku
R2 Rezistor

100 kOhm

1 Do poznámkového bloku
R3 Rezistor

16 kOhm

1

Implementoval signál PWM 25 kHz. Nemám osciloskop, ale chcem skontrolovať výsledok. Vyrábame počítadlo impulzov a kontrolujeme prácu.

Úloha

Na základni ATmega 328P implementovať počítadlo impulzov na kontrolu PWM 25 kHz, presnosť meraní až do pulzu nie je potrebná, ale je potrebné poznať poradie.

Riešenie

Logika riešenia je jednoduchá, sledujeme impulzy, ktorými inkrementujeme globálnu premennú v priebehu sekundy. Akumulovaná hodnota bude frekvencia prichádzajúceho signálu.

Na čítanie impulzov použijeme externé prerušenia, sú popísané na stranách 87-96 dokumentáciu od výrobcu. IN Atmega 328P existujú dva vstupy, pomocou ktorých môžeme sledovať externé prerušenia INT0 (PD2) A INT1(PD3), na vyriešenie problému, ktorý použijeme INT0.

Konfigurácia externých prerušení

Prvá vec, ktorú musíte urobiť, je nakonfigurovať port D ako vstup a aby som sa vyhol rušeniu pripojím pull-up rezistor.

Ak chcete určiť, ktoré udalosti spustia obsluhu prerušenia, musíte nakonfigurovať register ERICA. Bity ISC00 A ISC01 sú zodpovedné za INT0, A ISC10 A ISC11 pozadu INT1. Konfigurácia monitorovaných udalostí je identická, až na rozdiel v bitoch:

00 — Nízka úroveň signálu;
01 — Akákoľvek logická zmena signálu;
10 — zostupná hrana signálu;
11 — Nástupná hrana signálu.

Ak chcete priamo povoliť vstupy prerušení, použite register EIMSK, bitov INT0 A INT1 zodpovedajú za rovnomenné výstupy. Pomocou vyššie uvedeného napíšeme kód

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

Spracovanie vonkajších prerušení

Nakonfiguroval som prerušenia, teraz ich musím spracovať. Na tento účel existuje funkcia prerušenia. ISR(), ktorý potrebuje špecifikovať typ prerušenia, v mojom prípade INT0_vect. Vo funkcii budeme inkrementovať premennú Tic_Count:

ISR(INT0_vect) (Tic_Count ++; )

Výstup výsledku

Na uľahčenie výstupu výsledku, aby nedošlo k priskrutkovaniu displeja, som použil nečistý ATmega 328P, A Arduino UNO A Arduino NANO, na palube ktorej je ten istý MK.

Ako som napísal vyššie, presnosť meraní nie je taká dôležitá, preto nebudem nastavovať časovače, ale jednoducho zobrazím nahromadenú hodnotu premennej v hlavnej slučke raz za sekundu Tic_Count a resetujte ho. Počas týchto akcií zastavím spracovanie prerušení.

Nižšie je uvedený úplný kód na vyriešenie problému s komentármi:

#define F_CPU 1600000UL #include #include volatile unsigned int Tic_Count = 0; // Externá obsluha prerušení INT0 ISR(INT0_vect) ( Tic_Count ++; ) void setup() ( int0_initial(); Serial.begin(9600); ) void loop() ( cli(); // Zakázať prerušenia Serial.println( Tic_Count); Tic_Count = 0; sei(); // Povolenie oneskorenia prerušení (1000); ) void int0_initial(void) ( DDRD = 0x00; // Port D ako vstup PORTD = (1<< 2); // Включение подтягивающего регистра EICRA = (1 << ISC00) | (1 << ISC01); // Восходящий фронт сигнала EIMSK = (1 << INT0); // Включение входа прерывания sei(); // Разрешаем прерывания }

Teraz už zostáva len pripojiť PWM signál na pin PD2 a otvoriť monitor sériového portu. Na jednom MK môžete tiež generovať a testovať signál.

Výstupné hodnoty sú približne rovnaké ako predtým vypočítaná frekvencia, v dôsledku implementácie sa očakávajú menšie rozdiely. Pre presné meranie je asi správnejšie počítať čas medzi impulzmi a z toho vypočítať frekvenciu.

Pre dodatočnú úlohu

Schematický diagram

Schéma na doske

Poznámka

    V tomto experimente po prvýkrát používame čip, v tomto prípade výstupný posuvný register 74HC595. Mikroobvody sú užitočné, pretože vám umožňujú vyriešiť konkrétny problém bez toho, aby ste zakaždým museli zostavovať štandardný obvod.

    Výstupný posuvný register nám umožňuje „uložiť“ digitálne výstupy použitím iba 3 namiesto 8. Kaskáda registrov by nám umožnila vyrobiť 16 atď. signály cez rovnaké tri kolíky.

    Pred použitím mikroobvodu si musíte pozorne preštudovať jeho schému zapojenia v údajovom liste. Aby ste pochopili, kde počítať nohy mikroobvodu, na jednej strane je polkruhový zárez. Ak umiestnime náš 74HC595 so zárezom doľava, spodný rad bude mať nohy 1-8 a horný rad bude mať 16-9.

    V schéme zapojenia nášho experimentu sú nohy usporiadané v inom poradí, aby sa predišlo zámene v pripojeniach. Priradenia pinov podľa údajového listu sú označené vo vnútri obrázku mikroobvodu, čísla pinov sú na vonkajšej strane.

    Pripomeňme si, že obrázok sedemsegmentového indikátora je označený číslami jeho nôh a ich korešpondenciou so segmentmi.

Skica

Aby sme mohli preniesť časť údajov, ktoré budú odoslané cez posuvný register ďalej, musíme použiť LOW na západkový kolík (ST cp vstup čipu), potom preniesť údaje a potom poslať HIGH na západkový kolík, po ktorej sa prenáša kombinácia vysokej a nízkej úrovne signálu.

Na prenos dát sme použili funkciu shiftOut(dataPin, clockPin, bitOrder, value) . Funkcia nevracia nič, ale treba to povedať ako parametre

  • Arduino pin, ktorý je pripojený k DS vstupu čipu (dátový kolík),

Urob si sám elektromer pomocou Arduina

V tomto článku sa dozviete, ako vyrobiť elektromer vlastnými rukami, sledovať napájacie napätie a prúd.

Tento prístroj teda meria prúd vo vašej domácnosti cez prúdový transformátor a potom vykoná niekoľko výpočtov, aby zistil hodnotu výkonu, maximálny výkon a množstvo spotrebovanej elektriny. Je tiež veľmi jednoduché pridať miestnu tarifu a zobraziť náklady na spotrebovanú elektrinu za deň.

Čo budete potrebovať na domáci elektromer

Arduino (v tomto návode nie je použité)
LCD obrazovka
Prúdový transformátor CT - Talema AC1030 (Rôzne možnosti a odkazy na nákup nájdete nižšie)
56 ohmový odpor
10μF kondenzátor
2 x 100 KOhm zdieľané odpory

Ako vyrobiť elektromer

Najprv musíte začať zostavením komponentov na CT alebo doske, aby ste vytvorili aktuálny senzor, ktorý produkuje signál, ktorému vaše Arduino rozumie. Arduino má iba analógové napäťové vstupy, ktoré merajú 0-5V DC, takže musíte previesť prúdový výstup CT na referenčné napätie a potom škálovať referenčné napätie v rozsahu 0-5V.

Zostava komponentov

Ak sa chystáte inštalovať svoj merač výkonu niekde na dlhší čas, môžete rezistory a kondenzátor prispájkovať priamo na CT.

Nižšie je uvedený základný diagram pripojenia CT k Arduinu:


Obrazovka LCD už používa analógové vstupy, ale obrazovka používa iba A0. Jednoducho prispájkujte tri vodiče z vášho aktuálneho snímača na kolíky na štíte a použite A1 ako vstup snímača, ako je znázornené nižšie.


Keď máte všetky komponenty pripojené, musíte pripojiť senzor k tomu, čo chcete monitorovať.
V každom prípade musíte umiestniť CT okolo jedného z napájacích káblov, najlepšie červeného kábla (fázy). Uistite sa, že je nainštalovaný iba okolo 1, pretože nebude fungovať, ak bude okolo oboch, a nemôže byť pripojený okolo uzemňovacieho vodiča (žltý, zelený holý vodič), pretože týmto vodičom nepreteká žiadna energia. Ak ho pripájate k elektrickej sieti, pripojte ho k jednému z výstupných vodičov za hlavným vypínačom, ako je znázornené nižšie.

Výber rôznych komponentov

Existujú v podstate štyri komponenty, ktoré je potrebné vybrať alebo správne vypočítať za vás.

Výber prúdového transformátora

Prvým je prúdový transformátor. Tu je použitý Talema AC1030, ktorý dokáže akceptovať menovitý prúd 30A a maximálny prúd 75A. Pri 220 V teoreticky zvládne krátkodobo až 16,5 kW, no je dimenzovaný na nepretržitý výkon 6,6 kW, vhodný pre malú domácnosť. Ak chcete zistiť, koľko ampérov potrebujete použiť, vezmite maximálny trvalý výkon, ktorý očakávate, a vydeľte ho napätím (zvyčajne 110 V alebo 220 V v závislosti od vašej krajiny).

Kalibrácia záťažového odporu

Ďalej musíte určiť hodnotu odporu R3, čím sa váš prúd CT prevedie na referenčný signál napätia. Začnite vydelením primárneho prúdu (maximálne, ako je použité vyššie) pomerom prúdového transformátora (dostupný v údajovom liste). To by malo byť rádovo 500-5000 ku 1. Tento článok bežal pri 42A s pomerom 1000:1, čo dáva sekundárny prúd 0,042A alebo 42mA. Vaše analógové referenčné napätie na Arduine je 2,5 V, takže na určenie odporu, ktorý používate, R = V / I - R = 2,5 / 0,042 = 59,5 ohmov. Najbližšia hodnota štandardného odporu je 56 ohmov, takže bola použitá.

Tu je niekoľko možností pre rôzne CT a ich ideálne záťažové odpory (v štandardných veľkostiach):

  • 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
Použitý kondenzátor je 10uF, čo by malo stačiť pre väčšinu rozsahov CT pre domáce aplikácie.

Nakoniec potrebujete dva oddeľovacie odpory, aby ste získali referenčné napätie 2,5 V z Arduina. Mali by byť rovnaké, takže R1 = R2 a nepotrebujeme veľa prúdu, preto tieto články používajú dva odpory 100 kOhm.

Teraz si môžete stiahnuť náčrt do svojho Arduina, ak ste tak ešte neurobili, a potom začnite podľa tohto návodu.

Aktualizácia – Kód bol odvtedy upravený tak, aby používal funkciu millis(), aktualizovaný kód nájdete na konci časti.

Stiahnuť súbor: (stiahnutia: 357)

Ak nechcete používať alebo nemáte LCD obrazovku, môžete tiež upraviť náčrt tak, aby bol výstupom do sériového okna Arduino IDE, ako je znázornené nižšie.

Stiahnuť súbor: (stiahnutia: 340)

Aktualizácia kódu

Kód bol odvtedy upravený tak, aby používal vstavanú funkciu millis(), ktorá vypočítava presný čas cyklu pre každý cyklus, aby sa zlepšila presnosť. Vďaka tomu sa presnosť výpočtu zlepší len o pol percenta, ale je to najlepší spôsob, ako to urobiť.

Tu je vylepšený kód: Stiahnuť súbor: (stiahnutia: 516) Pre tých z vás, ktorí čítate, že funkcia millis() sa po približne 49 dňoch preplní, kód automaticky vykoná reset.


Kalibrujte aktuálne hodnoty

Ako je uvedené vyššie, keďže vaše nastavenie, CT, odpory a vstupné napätie sa môžu líšiť, v náčrte je faktor mierky, ktorý budete musieť zmeniť, aby ste získali presné výsledky.

Ak chcete kalibrovať váš elektromer, musíte si byť istí, že prúd na vašom elektromere je meraný presne tak, ako očakávate. Aby ste to urobili presne, musíte nájsť kalibrovanú záťaž. To nie je ľahké nájsť v priemernej domácnosti, takže budete musieť nájsť taký, ktorý spotrebuje určité a konzistentné množstvo energie. Použil som niekoľko žiaroviek, prichádzajú v rôznych veľkostiach a ich spotreba je veľmi blízka tomu, čo je uvedené na štítku, čo znamená, že 100W žiarovka využíva veľmi blízko 100W skutočného výkonu, pretože ide takmer výlučne o čisto odporovú záťaž.

Zapojte malú žiarovku (asi 100 W) a uvidíte, aké zaťaženie sa zobrazí. Teraz musíte nakonfigurovať použitie faktora mierky vo výpočtovom riadku:

Dvojitý RMSCurrent = ((maxCurrent - 516) * 0,707) /11,8337

V tomto prípade je to 11,8337, môže byť vyššie alebo nižšie v závislosti od vašej aplikácie. Na výpočet tohto čísla použite buď lineárne škálovanie, alebo ak ste zlí v matematike, hrajte sa s rôznymi hodnotami, kým sa na obrazovke merača energie nezobrazí zaťaženie, ktoré ste naložili.

Keď je váš elektromer nakalibrovaný, resetujete ho a necháte ho robiť svoju prácu. Nižšie sú dva obrázky používané pre nízky výkon a vysoký výkon.