blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
Programátor
deadawp



Otáčkomer na platforme Arduino Uno
pridal deadawp 1.9. 2019 o 2:40



Dnes si ukážeme implementáciu mikrokontroléra Arduino Uno (ATmega328P) v projekte infračerveného otáčkomera. Využijeme modul KY-032, nazývaný aj Obstacle Sensor (senzor prekážok). Modul obsahuje 2 diódy - vysielaciu a prijímaciu a digitálny výstup, označovaný ako DOUT. Vysielacia dióda má stále napájanie 5V a vyžaruje svetlo s frekvenciou 38 kHz na vlnovej dĺžke 950, resp. 940 nm (podľa modelu použitej diódy).

Prijímacia IR dióda je tmavá. Nazýva sa aj filtrom denného svetla. Takáto úprava do výraznej miery znižuje senzitivitu diódy na svetlo, čo môžeme v tomto prípade označiť za interferenciu. Prijímacia IR dióda je priamo pripojená na vývod modulu DOUT. Modul senzora je vybavený potenciometrom pre ovládanie citlivosti - reaguje na vzdialenosti objektu na akú ho bude detekovať.  Existuje niekoľko verzií týchto modulov, využil som prvú verziu v najjednoduchšom vyhotovení.

 

Nástupná verzia modulu KY-032 (verzia 2) má viacero potenciometrov pre ovládanie ďalších vplyvov na kvalitu načitaného signálu a citlivosti, ovládanie zisku. Poskytuje lepšiu filtráciu signálu, čo má za následok menšiu interferenciu v meraniach, teda zvyšuje aj spoľahlivosť výstupu z pohľadu zákmitov.

Funkčnosť senzora
Senzor reaguje na prekážku v určitej vzdialenosti (nastavená potenciometrom) 2-40 cm. Pri odraze vysielaného svetla a jeho odraze od prekážky ho dokáže prijať prijímacia LED dióda, ktorý je pripojená na DOUT. Tento digitálny výstup je pripojený na mikrokontróler Arduino Uno na jeho digitálny vstup s podporou prerušenia - D2, prípadne D3. Jednou z výhod IR senzorov je fakt, že svetlo sa z lesklých plôch odrazí efektívnejšie ako od plôch matných. V praxi to znamená, že v určitej vzdialenosti dokáže senzor detegovať svetlo z lesklej plochy, avšak z matnej nie. Môžeme tak využiť situáciu so záznamom lesklej plochy pri jej prechode (záznam otáčok kolesa, remenice).

Pre moju implementáciu otáčkomera som na remenicu kľukového hriadeľa nalepil prúžok pásky široký asi 1cm, prípadne je dobré použiť aj alobal, má veľmi dobré vlastnosti odrazu svetla. Intenzitu zisku som nastavil potenciometrom tak, aby mi v konštantnej vzdialenosti od remenice modul reagoval iba na pásku pri jej prechode popred modul pri každej otáčke kľukového hriadeľa, nie na remenicu samotnú. 

Zoberme si modelovú situáciu:
Motor naftového traktora má maximálne otáčky 2500 ot/min. To znamená, že pri maximálnych otáčkach motora za sekundu Arduino zaznamená 41 prechodov reflexného prvku. Medzi jednotlivými pulzami pri maximálnych otáčkach bude pauza 24 milisekúnd, ktorú je možné použiť napríklad aj pre softvérové vyhladenie zákmitov - Debouncing pre rozlíšenie dvoch za sebou idúcich pulzov.

Arduino v prerušení bude načítavať pulzy a inkrementovať premennú INT. Prerušenie bude reagovať na vzostupnú hranu signálu -  RISING. Na základe vyhodnocovania vzorcom každú sekundu (1 Hz obnovovacia frekvencia displeja s otáčkami) sa vypočíta počet otáčok motora za minútu a hodnota sa vypíše na LCD znakový displej, ktorý komunikuje s Arduinom. 

Vďaka I2C prevodníku stačia na prepojenie displeja a Arduina 4 vodiče. Napájanie (5V), zem (GND), hodinový signál (SCL), dáta (SDA). Otáčkomer je možné použiť na rôzne stroje, sledovanie otáčok remeníc traktorov, kombajnov, ale aj v priemysle pre monitorovanie procesov, prevádzky a aktivity strojov, rýchlosti posuvu. Štandardná implementácia využíva rýchlosť komunikácie s displejom 100 kHz, možno použiť až 400 kHz pre rýchlejší prepis displeja.

Vzorec prepočtu (1Hz rutina --> spúšťané každých 1000 ms):
time = akt_cas - posledny_cas;    //rozdiel casov
rpm = (pocet_pulzov/ time) * 60000;   //vyrataj otacky/min
oldtime = akt_cas;           //uloz aktualny cas
pocet_pulzov = 0;


Schéma zapojenia pre otáčkomer s displejom a infračerveným modulom KY-032:


Výsledná reprezentácia môže vyzerať napríklad takto:


Zjednodušená programová implementácia, ktorá je na stránke projektu dostupná nerieši odrušenie pred zákmitmi. Debounce je vhodné doimplementovať samostatne do výsledného programu. Pri nevyužívaní debouncingu môže byť miera chybovosti do +- 30%. 

Program základnej verzie pre otáčkomer nájdete na: 
http://arduino.clanweb.eu/otackomer.php
prípadne na Githube https://gist.github.com/martinius96/30ffcf9306ac5b10344d37f5f44cff7d

Rozšírený program
Využíva prepočet pauzy medzi jednotlivými pulzami v čase kompilácie na základe hodnoty z makra, ktoré predstavuje maximálne otáčky stroja, ktoré nadobúda. Oproti klasickému programu je integrovaná aj volatile premenná uint_32, ktorá uchováva čas posledného pulzu. To v kombinácii so známou pauzou zaručí správne pripočítanie pulzu bez zákmitu, ktoré sa môžu vyskytnúť. Meranie je presnejšie ako v klasickom programe. Rozšírený program nevyužíva delay(), nahradené funkciou millis() pre presnejšie časovanie každých 1000 ms bez oneskorenia spôsobeného vykreslovaním na displej (rádovo v pôvodnom programe 1000 ms delay + 3 ms vykonávanie výpisu na displej na každú iteráciu loopu).

Komunikácia s displejom je rýchlejšia, nakoľko je nastavený hodinový signál 400 kHz (Fast speed). Prekreslovanie znakov trvá 4-násobne kratšie ako v prípade štandardnej komunikačnej rýchlosti 100 kHz. Funkcie detach a attach interrupt nahradené s makrami cli(), sei(). Implementácia je vhodná aj pre projekty s vyšším počtom otáčok za minútu. 

Rozšírená verzia u autora: martinius96@gmail.com



Prístupov 9997
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Oplatí sa teplovodivá pasta z Aliexpress...
[ 4.4.2024] (príspevkov 0)
Recenzia 3D podznačky BEZ KOMPRESE
[ 4.4.2024] (príspevkov 0)
GTA IV fix spustenia na Windowse 10 N
[ 24.3.2024] (príspevkov 0)
RFID DOMINATOR licencia na predaj
[ 4.1.2024] (príspevkov 0)
ATtiny85 Digispark - programovanie, použ...
[ 28.12.2023] (príspevkov 0)
Prečo by som si už nekúpil ESPD-35 2.0 /...
[ 26.12.2023] (príspevkov 0)
ATtiny85 - programovanie Arduino as ISP
[ 19.12.2023] (príspevkov 0)
MasterTherm - webscraper ESP32
[ 25.11.2023] (príspevkov 0)
RFID DOMINATOR 2.0 - rozdiely s 1.0
[ 15.11.2023] (príspevkov 0)
Rozšírená realita (AR) - IoT dashboard
[ 29.10.2023] (príspevkov 0)