Tahometru. Un exemplu de lucru cu un fotorezistor și un afișaj LCD HD44780 pe arduino


32:20 - Algoritmi pentru firmware-ul 16 și 18
36:50 - Variabile pentru firmware
40:40 - Încercări ale senzorului Hall

După ce am asamblat și testat regulatorul descris aici: https://shenrok.blog...t=1489156293398
Putem începe să instalăm firmware care va menține viteza dată. Dar mai întâi, să ne uităm la problema senzorului Hall.
Înlocuirea tahogeneratorului cu un senzor Hall nu este deloc dificilă. Vorbesc despre asta în detaliu în videoclipul de la 5:48. Dar pe care să-l pun? Avem nevoie de un senzor Hall digital, de preferință bipolar. Deoarece va produce de 2 ori mai multe semnale. Și acest lucru este foarte important pentru viteze mici. Acesta este cel din motorul meu SS441 .

Să luăm în considerare PID_12:
La începutul schiței avem linii în care trebuie să introducem valorile de care avem nevoie:

int obMax = 6000; //introduceți viteza maximă

float kImp = 120; //introduceți numărul de impulsuri la 10 rotații

În prima linie introducem numărul de rotații maxime de care avem nevoie. În al doilea - minim. În a treia linie punem numărul de impulsuri ale senzorului nostru la 10 rotații ale arborelui. În a patra linie trebuie să introduceți un număr care va limita curentul de viteză minimă. Va depinde de numărul de rotații minime și de sarcinile aplicate. Și în al cincilea - numărul la care motorul începe să se rotească pe firmware-ul nr. 6 (am acordat atenție acestui lucru).
Urmează cea mai importantă chestiune. Este necesar să configurați (selectați) coeficienții controlerului PID. Sunt în rândul 19 al schiței:
PID myPID(&Intrare, &Ieșire, &Punctul de referință, 0.01 , 0.2 , 0 , DIRECT);

Căutarea oferă mai multe metode de configurare, puteți folosi oricare. Dar, să fiu sincer, nu mi-a plăcut acest regulator. Sau poate că nu am avut răbdarea să-l pun la punct.

Să luăm în considerare _16:
Principalele variabile ale schiței sunt aceleași ca și în controlerul PID:

int obMin = 200; //introduceți viteza minimă


int minzn = 115; // valoarea minimă a triacului la care începe rotația.
int ogrmin = 70 ; // limitând triacul la viteza minimă.
int mindimming = 80; //valoare triac când mașina este blocată (impuls inițial)

Și sunt instalate în același mod. Dar s-au adăugat 2 sensuri. Acest valoarea triac atunci când mașina este blocată (impuls inițial) Se alege asa. Pe firmware-ul nr. 6 punem o sarcină mică pe arbore, minimă, atâta timp cât arborele nu este inactiv. Și începem să rotim regulatorul. Este necesar să se noteze numărul la care arborele începe să se rotească. Avem nevoie de această valoare pentru a da un impuls inițial mașinii noastre. Numărul este foarte arbitrar și permite anumite toleranțe. Iar variabila principală care va necesita configurare și selecție este toleranță de viteză în minus și plus. Înseamnă în ce limite se vor stabiliza revoluțiile motorului nostru. Găsim valoarea minimă la care motorul se va învârti fără smucitură atât la ralanti, cât și la sarcină la turații diferite. Acest firmware oferă deja o bună stabilizare a vitezei în limitele specificate și poate că acest lucru va fi deja suficient. Dacă este necesară o stabilizare precisă a vitezei, atunci trecem la următoarea coasere.

Să luăm în considerare _18:

Toate valorile sunt transferate din firmware-ul anterior:

int obMin = 200; //introduceți viteza minimă
int obMax = 9000; //introduceți viteza maximă
int kImp = 120; //introduceți numărul de impulsuri la 10 rotații
int minzn = 115; // valoarea minimă a triacului la care începe rotația.
int ogrmin = 70 ; // limitând triacul la viteza minimă.
int mindimming = 80; //valoare triac când mașina este blocată (impuls inițial)
int admitere = 200 ; //alocația de rotații în minus și plus
int razgon = 50; //variabila de accelerație 1 - 100

S-a adăugat doar valoarea accelerației sau netezimea. Cu o valoare de 1, stabilizarea are loc fără probleme cu valori în creștere, accelerația este mai severă. Limita superioară este foarte mare, dar după 100 (în cazul meu) nu există modificări.

Dezvoltare paralela: http://www.motor-r.i...og-page_19.html

Opțiunea de reglare a producătorului de cipuri:

O mulțime de întrebări despre detalii, unde se comandă. Am comandat un set pentru mine și îl împărtășesc cu voi.

Și am comandat un bloc de relee pentru inversare și protecție. Vom adăuga mai multe.

Pe baza întrebărilor dumneavoastră, articolul va fi completat. Așa că întrebăm.

Deci, să continuăm reglarea și perfecționarea controlerului nostru de viteză în buclă închisă.
Începeți de aici:
1 Idee și dezvoltare
2 Controler PID
3 Asamblarea regulatorului, instrucțiuni pas cu pas
4 Întrebări - răspunsuri, sfaturi, algoritm de lucru
5 Setarea toleranței, eliminarea smucirilor asociate cu preaplinul, comutator basculant pentru viteza 2, releu de protecție împotriva defectării triacului.

Cei care au făcut deja acest regulator au întâmpinat o problemă: este foarte dificil să selectezi o toleranță variabilă. Metoda forței brute este lungă și incomodă. Și s-a dovedit că toleranța la viteze mici și mari poate diferi. Prin urmare, a fost scris firmware care ajută la selectarea foarte precisă a acestei valori atât la viteze minime, cât și la viteze maxime simultan.
Pentru a face acest lucru, trebuie să lipim temporar o rezistență variabilă de 10 kOhm cu contactul central la pinul A3, Arduino nostru. Ca întotdeauna, lipim contactele extreme ale rezistenței la + și -.
Acum, după încărcarea firmware-ului nastroyka_dopuska , în care vom introduce mai întâi toate variabilele referitoare la mașina sau motorul nostru. Principalele vor fi rotațiile minime și maxime necesare pe mașină, precum și numărul de impulsuri la 10 rotații ale axului.
Selectăm toleranța așa cum se arată în videoclip. După aceasta, putem introduce datele primite în firmware-ul 18 și le putem folosi. Acest firmware îmbunătățește afișajul afișajului. Exact cum ai întrebat.
Firmware: https://drive.google...iew?usp=sharing


Următoarea problemă pe care am avut-o a fost că la anumite turații ale motorului au apărut „smucituri”. Pentru a înțelege motivul, a fost realizat un firmware care a trimis valoarea variabilei tic către computer. Acesta este numărul de cicluri de ceas care trece între semnalele de la senzorul Hall. Datele au fost afișate în programul SerialPortPlotter sub formă grafică.




În urma consultărilor, s-a dovedit că defecțiunile apar dacă semnalul de la senzor sosește simultan cu depășirea contorului, care are loc după 65535 cicluri de ceas. Mi-au spus și cum să evit astfel de eșecuri, pentru care sunt foarte recunoscător.

Sarcina suplimentară cu care ne-am confruntat a fost să implementăm protecția împotriva defecțiunii triacului folosind un releu. Astfel încât dacă viteza depășește valoarea setată cu un anumit număr, releul va funcționa și va opri motorul.
Vom folosi un bloc de relee din 4 piese, deoarece în viitor vom implementa inversarea motorului prin ele. Dar dacă nu aveți nevoie de marșarier, atunci vă puteți descurca cu un singur releu.


Aplicăm minus la contactele GND, aplicăm plus 5 volți la VCC, conectăm IN3 și IN4 la contactul A1 al arduino, acesta este pentru invers, și IN2 la contactul A2. Acest contact va fi responsabil pentru deconectarea plăcii de alimentare. Încărcarea firmware-ului proverka_rele , iar releele noastre ar trebui să pornească și să se oprească alternativ timp de 1 secundă. Două perechi și unul separat. Dacă totul funcționează corect, atunci puteți rula firul care merge la placa de alimentare prin acest singur releu și puteți încărca firmware-ul roos_zashita_1 și folosiți regulatorul. Aici smuciturile sunt eliminate și este implementată protecția.

De asemenea, putem instala și conecta imediat un comutator basculant pentru marșarier în 3 poziții și un comutator basculant care ne va împărți intervalul de viteză așa cum ne dorim. Pentru mașina mea am făcut prima turație pentru strunjire, de la 100 rpm la 2000 rpm, iar a doua pentru șlefuit, de la 1500 rpm la 5000 rpm. Le conectăm conform acestei scheme:

Pentru a verifica, încărcați schița proverka_tumblerov iar când schimbați poziția comutatoarelor comutatoare, numerele de pe ecran se vor schimba. Dacă apar modificări, puteți încărca firmware-ul roos_zashita_2skorosti si foloseste-l.

Nu uitați că pe tot firmware-ul trebuie să introduceți valorile de care aveți nevoie.
Firmware:
Signet ---- cu două relee pentru marșarier și frânare https://wdfiles.ru/dr8k

Signet ---- cu componente SMD și blocarea pulsului sursă de alimentare pentru carcasa D6MG https://drive.google...T0JOd2pFZjI3SmM

Pentru releele de 12 V, mutați jumperul la marcajul 12
Pentru relee 5v este deja la marcajul 5
Lipiți diodele de pe relee direct pe placă din partea conductorului.
Pentru plăcile cu ULN2003, diodele de pe releu nu sunt necesare.

Lista de piese se modifică în funcție de garnitura pe care o alegeți.

rezistență 10k 0,25W-2buc
rezistență 4.7k 0.25W - 1 bucată
rezistență 2k 0,25W - 1 bucată
rezistență 470 0,25W-1 bucată
rezistență 100 2W-1buc
rezistenta 360 0.25w-2buc
rezistență 5k 0,25W-1 bucată (buton invers)
rezistență de tăiere 10k-1 buc (pentru afișaj LCD)
rezistor variabil 10k-1 buc (controlul vitezei)
rezistență de tăiere 10k (pe picior A3)
dioda RL205 1buc
condensator 100n 600V-1buc C4
condensator 0,05 MF - 1 bucată C3
triac BTA24-600 (BTA16-600) Pe calorifer
PC817C-1buc
MOC3021-1 buc (MOC3023)
L7805CV-1buc
punte de diode, cum ar fi pe placa GBL04-E3/51 (KBL04), punte de diode 4A 400V
blocuri terminale pe placă - duble - 7 buc.,
releu JS1-12V 2buc, 5V posibil
condensatori electrolitici 100 uF *25V -2 buc (C1 și C2)
cip ULN2003A - 1 bucată

transformator - orice ai găsi (1,5-3W)
comutator cu trei poziții - 1 bucată
priză pentru Arduino - 1 bucată

Pe tablă, nu pe listă
Rezistorul de pe circuitul de sub Arduino este de 10k (este pe marginea pistelor sau nu are nicio diferență?) Pe placă pe partea conductorilor, dar poate fi plasat și deasupra. Și este necesar pentru cei care vor împărți intervalul de control al vitezei în două sub-domeni.
diode cu reversul placi pentru releu - care? răspuns - orice RL205 posibil
tranzistoare BC 550 - 2 buc tranzistoare, de asemenea oricare cu arr. emite. puteți folosi KT 315 sau KT3102

Opțiunea de schemă
Versiune ajustată a schemei

Imagini atasate




Postare editată de orio55: 01 mai 2017 - 20:05

Un turometru este un instrument util pentru a număra RPM (rotațiile pe minut) unei roți sau a oricărui lucru care se învârte. Cel mai simplu mod de a face un turometru este să folosești un transmițător și un receptor IR. Când conexiunea dintre ele este întreruptă, știi că ceva se învârte și poți folosi codul pentru a calcula RPM pe baza frecvenței întreruperii comunicării.

În acest articol, ne vom uita la cum să folosim un transmițător și un receptor IR pentru a face un tahometru folosind Arduino. Rezultatul este afișat pe un afișaj LCD 16x2.

Scopul acestui proiect este de a crea un sistem cu o singură intrare și o singură ieșire. La intrarea dispozitivului există un semnal care se schimbă de la nivelul ridicat (+5V) la nivelul scăzut (+0V) atunci când comunicarea este întreruptă. Conform acestui semnal, Arduino va crește valoarea contorului intern. Apoi să fie efectuat prelucrare suplimentarăși calcul, iar când declanșatorul este întrerupt, RPM calculat va fi afișat pe afișajul LCD.

Pentru comunicare vom folosi un fascicul IR de la un LED IR conectat printr-un rezistor cu rezistență scăzută, astfel încât să strălucească puternic. Vom folosi un fototranzistor ca receptor, care se „închide” în absența luminii de la LED-ul IR. Un ventilator al computerului va fi plasat între transmițătorul IR și receptor și va fi pornit. Un receptor IR conectat printr-un circuit tranzistor va genera întreruperi. Pentru a scoate rezultatul va fi folosit LCD Arduino interfață astfel încât să putem afișa valoarea finală RPM pe LCD.

Elemente:

Placa de dezvoltare

Rezistor trimmer 5 kOhm

Jumperii

Conectori SIP

2x 2N2222 tranzistor NPN

LED infrarosu

Fototranzistor

rezistor de 10 ohmi

Rezistor 100 kOhm

Rezistor 15 kOhm sau 16 kOhm

Ventilator calculator

Lista detaliată a articolelor

Toate elementele utilizate în proiect sunt enumerate mai sus, dar voi descrie mai detaliat funcțiile elementelor principale.

Arduino UNO

Aceasta este placa Arduino pe care o vom folosi pentru a procesa impulsurile de la întreruperea fasciculului IR care indică prezența unei lame a ventilatorului computerului între receptor și senzor. Arduino va folosi aceste impulsuri împreună cu un temporizator pentru a calcula RPM-ul ventilatorului.

LCD 16×2

Odată ce Arduino a calculat RPM, această valoare va fi afișată pe afișaj într-un mod ușor de utilizat.

Rezistor trimmer 5 kOhm

Acest trimmer va fi folosit pentru a regla contrastul LCD-ului 16x2. Oferă o tensiune analogică cuprinsă între 0 și +5V, permițându-vă să reglați luminozitatea afișajului LCD.

LED cu infraroșu și fototranzistor

Fototranzistorul se pornește când o lumină IR puternică îl lovește. Deci, atunci când LED-ul IR este aprins, menține fototranzistorul deschis, dar dacă LED-ul IR este acoperit de o lamă a ventilatorului, de exemplu, atunci fototranzistorul este închis.

2N3904 și 2N3906

Acești tranzistori sunt utilizați pentru a converti nivelul semnalului pentru a furniza impulsuri de ieșire de la fototranzistor la Arduino, în care nu există alte tensiuni decât +0 și +5V.

Diagrama schematică


În circuit, interfața de comunicare cu afișajul LCD este simplificată și are doar 2 linii de control și 4 linii de date.

Caracteristicile schemei

Interfață LCD 16×2

2 pini de control și 4 pentru transferul de date sunt conectați de la Arduino la afișajul LCD. Acesta este ceea ce îi spune LCD-ului ce să facă și când să o facă.

Circuit de întrerupere a fasciculului IR

Semnalul de întrerupere a fasciculului IR trece la al 2-lea digital Pin Arduino. Acest lucru întrerupe Arduino, permițându-i să numere pulsul și permițând turometrului să primească datele.

Biblioteca LCD Arduino

Pentru acest proiect vom folosi biblioteca Arduino LCD. Practic, vom actualiza valoarea RPM de pe a doua linie la cea nouă.

Pentru a vă pregăti, aruncați o privire la codul de mai jos, care folosește această bibliotecă pentru a afișa „Hello, World!” pe ecranul LCD. În turometru vom folosi cod similar, în special: „lcd.print(millis()/1000);”.


Înțelegeți funcțiile acestei biblioteci LCD cât mai detaliat posibil înainte de a merge mai departe. Nu este prea complicat și este bine documentat pe site-ul Arduino.

Calcularea RPM folosind Arduino

Deoarece vom calcula RPM-ul unui ventilator de computer, trebuie să înțelegem că folosim întreruperea fasciculului IR pentru calcul. Acest lucru este foarte convenabil, dar trebuie să ținem cont de faptul că ventilatorul computerului are 7 pale. Aceasta înseamnă că 7 întreruperi echivalează cu 1 revoluție.

Dacă urmărim întreruperi, trebuie să știm că fiecare a șaptea întrerupere înseamnă că tocmai a avut loc o rotație completă. Dacă ținem evidența timpului necesar pentru a finaliza o revoluție, putem calcula cu ușurință RPM.

Timp de prima revoluție = P * (µS/revoluție)

RPM = rpm = 60.000.000 * (µS/min) * (1/P) = (60.000.000 / P) * (rpm)

Pentru a calcula RPM vom folosi formula de mai sus. Formula este precisă, iar acuratețea depinde de cât de bine poate Arduino să țină evidența timpului dintre întreruperi și să numere numărul de rotații complete.

Ansamblu circuit

În fotografia de mai jos puteți vedea totul detaliile necesareși jumperi ca în diagramă.


Mai întâi, conectați +5V și liniile de date/control ale afișajului LCD. Apoi afișaj LCD, potențiometru de contrast și LED de alimentare.


Se montează întreruperea circuitului fasciculului IR. Încercați să păstrați o anumită distanță între LED-ul IR și fototranzistor. Această fotografie arată distanța dintre LED-ul IR și fototranzistorul unde voi plasa ventilatorul computerului.


Destul de discuții hardware! Să începem să facem firmware-ul/programul pentru a vedea cum funcționează dispozitivul!

Partea software

Există două părți principale ale codului, care sunt prezentate și detaliate mai jos:

Ciclu de reîmprospătare LCD de bază

Întreruperea timpului de actualizare

În ciclul principal, sunt numărate revoluțiile și actualizările afișajului LCD. Deoarece bucla principală este o buclă uriașă while(1), aceasta va funcționa întotdeauna, RPM va fi numărat, iar LCD-ul va fi actualizat de câteva ori pe secundă. Funcția din întrerupere numără timpul dintre întreruperile IR, astfel încât să puteți număra RPM în bucla principală.

Amintiți-vă că un ventilator de computer are 7 pale, așa că acest tahometru este proiectat să funcționeze numai cu acele ventilatoare. Dacă ventilatorul sau alt dispozitiv produce doar 4 impulsuri pe rotație, schimbați codul în „(timp*4)”.

Iată un videoclip demonstrativ despre cum funcționează turometrul.

Cele două ventilatoare funcționează la aproximativ 3000 rpm și 2600 rpm, cu o eroare de aproximativ +/-100 rpm.

Revizuirea turometrului pe Arduino

Ventilatorul generează impulsuri de întrerupere, iar la ieșire vedem RPM. Deși acuratețea nu este de 100%, ci de aproximativ 95%, costul elementelor fiind de 10 USD, este logic să construiți acest tahometru pe Arduino.

Ce să faci acum?

Sistemele bazate pe întreruperea fasciculului sunt utile nu numai pentru măsurătorile RPM, ci și ca alți senzori. De exemplu, vrei să știi dacă o ușă este deschisă sau închisă. Poate vrei să știi dacă ceva a trecut pe sub robot. Există multe utilizări pentru întreruperea fasciculului, iar circuitul folosit aici este atât de simplu încât există multe modalități de a-l îmbunătăți și de a construi alte dispozitive uimitoare.

Concluzie

În general, consider acest proiect un succes... Dar este o chestiune de timp și experiență.. Într-un fel sau altul, sistemul funcționează conform intenției și destul de fiabil și am obținut rezultatul așteptat. Sper că ți-a plăcut să citești acest articol și să înveți cum să-ți faci propriul tahometru folosind Arduino!

Articol original pe engleză(traducere: Alexandru Kasyanov pentru site-ul cxem.net)

Modulul senzorului de turație a motorului este conceput în primul rând pentru a detecta viteza de rotație a arborelui motorului. Acest modul, împreună cu un microcontroler, poate determina, pe lângă viteză, numărul de impulsuri și poziția arborelui.



De obicei, senzorii măsoară o cantitate prin înregistrarea anumitor evenimente, apoi raportând numărul de evenimente la perioada de timp în care au avut loc.


Deci, în acest caz, viteza este măsurată - evenimentele aici înseamnă impulsuri primite ca urmare a funcționării unui senzor optic în timpul rotării unui disc cu sloturi. Senzorul este format dintr-un LED și un fototranzistor, care detectează prezența sau absența luminii din LED.


Sistem


Circuitul prezentat poate fi folosit pentru a trimite impulsuri înregistrate către un microcontroler. Baza schemei este senzor optic OS25B10 (OC1) cu LED și ieșire fototranzistor.


Urmează LM393 dual comparator IC (IC1), configurat ca un simplu declanșator Schmitt. LED verde(LED1) indică prezența tensiunii aplicate circuitului, iar LED-ul roșu (LED2) monitorizează ieșirea modulului senzorului de turație a motorului. Recomandat tensiune de operare modulul este de la 4,5 la 5,5 V.




Rețineți că rezistorul R1 (180 ohmi) este utilizat aici pentru a limita curentul de funcționare al LED-ului din interiorul senzorului optic OS25B10 (OC1). Dacă este necesar, îi puteți modifica valoarea pentru prototipul dvs. De asemenea, puteți ajusta valoarea rezistenței R2 (10 kOhm) pentru a obține tensiunea necesară pentru circuitul dvs. Rezistorul R7 (10K) este un rezistor de tragere opțional.


Disc codificator


Un disc codificator plasat în slotul senzorului desparte senzorul optic astfel încât să existe un LED pe o parte a discului și un fototranzistor pe cealaltă parte. Dacă calea fasciculului de lumină de la LED nu este blocată de disc, fototranzistorul va trece curent, altfel va fi închis.


Un turometru este un dispozitiv care este folosit pentru a măsura numărul de rotații ale unui obiect într-un interval de timp dat. De obicei, valoarea este exprimată în rotații pe minut sau rpm. Anterior, tahometrele erau dispozitive pur mecanice în care rotația era transmisă turometrului printr-o conexiune mecanică (cablu sau arbore), numărul de rotații pe minut era determinat folosind transmisie cu trepteși a fost afișat pe o scară circulară. De la apariția electronicii moderne, tahometrele s-au schimbat foarte mult. Acest articol descrie un tahometru digital fără contact pornit Bazat pe Arduino. Viteza motorului poate fi de asemenea controlată folosind un circuit similar. Numărul de rotații pe minut și alte informații sunt afișate pe un afișaj LCD 16×2. Schema electrica Tahometrul digital bazat pe Arduino este prezentat mai jos.

Schema electrica


Senzor RPM
Un fototranzistor cu infraroșu și un LED cu infraroșu formează senzorul. Un fototranzistor în infraroșu este un tip de fototranzistor care răspunde numai la undele infraroșii. Utilizarea unui fototranzistor în infraroșu poate evita influența altor interferențe luminoase mediu. Fototranzistorul și LED-ul infraroșu sunt dispuse în paralel. Rezistorul R2 limitează curentul prin dioda infraroșu. Banda de ghidaj reflectorizant este lipită de obiectul rotativ (arbore, disc sau ventilator) în linie cu senzorul. Am folosit un ventilator de răcire cu o tensiune de alimentare de 9V/100mA. Distanța dintre senzor și banda de ghidare reflectorizant nu trebuie să depășească 1 cm. Când banda de ghidaj reflectorizant trece prin fața senzorului, undele infraroșii sunt reflectate înapoi la fototranzistor. Fototranzistorul conduce mai mult la un moment dat și, ca urmare, tensiunea pe R3 (rezistor de 68K) crește rapid. Rezultatul va fi un semnal a cărui formă este prezentată mai jos la emițătorul fototranzistorului. Numărul de rotații pe minut poate fi determinat prin calcularea numărului de impulsuri ascendente într-un interval de timp dat.


Calculul rotațiilor pe minut
Arduino este folosit pentru a calcula valoarea RPM și pentru a afișa această valoare pe LCD. Emițătorul fototranzistorului este conectat la pinul Interrupt 0 (pinul digital 2) al Arduino. Întreruperea Arduino este configurată să fie declanșată de o margine ascendentă. Ca rezultat, o întrerupere este procesată pentru fiecare impuls ascendent din forma de undă emițătorului. Numărul de întreruperi primite la un moment dat este calculat prin incrementarea variabilei, utilizând programul de serviciu de întreruperi. Timpul scurs în timpul unui ciclu de calcul este determinat folosind funcția millis(). Funcția millis() returnează numărul de milisecunde care au trecut de când placa Arduino a fost pornită. Apelarea funcției millis() înainte și după ciclul de calcul și calcularea diferenței lor oferă timpul scurs în timpul ciclului de calcul. Valoarea (numărul de întreruperi/ori pe milisecundă) * 60000 va determina numărul de rotații pe minut (RPM).

Controlul vitezei motorului
Un dispozitiv pentru controlul vitezei motorului cu ajutorul unui potențiometru este de asemenea inclus în circuit. Tranzistorul Q1 este folosit pentru a controla motorul. Baza sa este conectată la pinul PWM 9 al Arduino prin intermediul rezistenței de limitare a curentului R1. Motorul potențiometrului de control al vitezei R4 este conectat la pinul analogic A0 al Arduino. Tensiunea de la acest pin este convertită la o valoare între 0 și 1023 folosind funcția anlogRead. Această valoare este apoi împărțită la patru pentru a obține intervalul de la 0 la 255. După aceasta valoare dată este scris pe pinul PWM 9 folosind funcția anlogWrite. Rezultatul este o undă pătrată la pinul 9 al cărei ciclu de lucru este proporțional cu valoarea scrisă folosind funcția analogWrite. De exemplu, dacă valoarea este 255, ciclul de lucru va fi de 100%, iar dacă valoarea este 127, ciclul de lucru va fi de aproximativ 50%. D1 este o diodă cu roată liberă și C1 este un condensator de suprimare a zgomotului (decuplator). RPM și ciclul de funcționare sunt afișate pe ecranul LCD folosind biblioteca standard LiquidCrystal. Citiți acest articol: Display LCD de interfață pentru Arduino. Codul complet pentru turometrul digital bazat pe Arduino este prezentat mai jos.

Cod program
#include LCD cristal lichid(12,11,6,5,4,3); int pwm=9; int pot=A0; valoare float=0; int procent; float rev=0; int rpm; int vechime=0; int timp; void isr() //rutina serviciului de întrerupere (rev++; ) void setup() ( lcd.begin(16,2); //inițializați LCD attachInterrupt(0,isr,RISING); //atașarea întreruperii) void loop() ( delay(1000); detachInterrupt(0); //detașează timpul de întrerupere=millis()-oldtime; //găsește timpul rpm=(rev/time)*60000; //calculează rpm oldtime=millis(); / /salvează timpul curent rev=0; 100;
Note
Pe Placa Arduino Puteți furniza o tensiune de alimentare de 9 V printr-o priză externă.
Tensiunea de 5V necesară pentru unele componente ale circuitului poate fi furnizată de la o sursă de 5V de pe placa Arduino.
Ventilatorul folosit folosește o tensiune de 9V/100mA. Tranzistorul 2N2222 poate rezista doar la curent de până la 800mA. Țineți cont de acest lucru atunci când alegeți o încărcătură.
LCD-ul folosit este JHD162A.
Potențiometrul R5 poate fi utilizat pentru a regla contrastul afișajului LCD. Când este conectat, nu va fi afișat nimic pe afișaj. Reglați R5 până când pe afișaj apare o imagine. Tensiunea optimă pe cursorul potențiometrului R5 este în intervalul de la 0,4 la 1V.
Fototranzistorul în infraroșu și dioda în infraroșu au fost scoase din modulul de întrerupere foto LTH-1550.
Suprafața laterală a fototranzistorului trebuie acoperită cu bandă electrică.
Poziția senzorului este prezentată în figura de mai jos.