În acest proiect folosim conceptul ADC (Analog to Digital Conversion) în ARDUINO UNO. Vom folosi un senzor Hall Effect și Arduino uno pentru a măsura intensitatea câmpului unui magnet. Senzorul pe care l-am folosit aici este UGN3503U. Acesta este un senzor hol care detectează intensitatea câmpului magnetic și oferă o tensiune variabilă la ieșire proporțională cu intensitatea câmpului. Acest senzor preia intensitatea câmpului în unitățile „ GAUSS ”.
Deci, cu acest senzor vom avea intensitatea câmpului ca tensiune variabilă. Prin utilizarea caracteristicii ADC vom converti această tensiune într-un număr. Acest număr reprezintă intensitatea câmpului și este afișat pe ecranul LCD.
Arduino are șase canale ADC. În acestea, oricare dintre ele sau toate pot fi utilizate ca intrări pentru tensiunea analogică. UNO ADC are o rezoluție de 10 biți (deci valorile întregi de la (0- (2 ^ 10) 1023)). Aceasta înseamnă că va mapa tensiunile de intrare între 0 și 5 volți în valori între 0 și 1023. Deci pentru fiecare (5/1024 = 4,9mV) pe unitate.
În toate acestea, vom conecta un potențiometru sau o potă la canalul 'A0' și vom arăta rezultatul ADC într-un afișaj simplu. Afișajele simple sunt unități de afișare 16x1 și 16x2. Unitatea de afișare 16x1 va avea 16 caractere și se află într-un singur rând. 16x2 va avea 32 de caractere în total 16 în prima linie și alte 16 în a doua linie. Aici trebuie să înțelegem că în fiecare caracter există 5x10 = 50 pixeli, deci pentru a afișa un caracter toți cei 50 pixeli trebuie să funcționeze împreună, dar nu trebuie să ne facem griji pentru că există un alt controler (HD44780) în unitatea de afișare care face sarcina de a controla pixelii (o puteți vedea în unitatea LCD, este ochiul negru din spate).
Componente necesare
Hardware: ARDUINO UNO, sursă de alimentare (5v), JHD_162ALCD (16x2LCD), condensator 100uF (2 bucăți), UGn3503U.
Software: arduino IDE (Arduino seara)
Diagrama și explicația circuitului
Figura de mai sus prezintă schema circuitului pentru măsurarea câmpului magnetic folosind arduino uno.
În ecranul LCD 16x2 există 16 pini peste tot dacă există o lumină din spate, dacă nu există lumină din spate vor exista 14 pini. Se poate alimenta sau lăsa pinii luminii din spate. Acum, în cele 14 pinii există 8 pini de date (7-14 sau D0-D7), 2 pini de alimentare (1 & 2 sau VSS & VDD sau GND & + 5v), 3 rd PIN pentru controlul contrastului (VEE-control cât de gros personajele ar trebui să fie prezentate) și 3 pini de control (RS & RW & E).
În circuitul de mai sus, puteți observa că am luat doar doi pini de control, bitul de contrast și READ / WRITE nu sunt adesea folosite, astfel încât acestea pot fi scurtcircuitate la masă. Acest lucru pune LCD în cel mai mare contrast și modul de citire. Trebuie doar să controlăm ENABLE și pinii RS pentru a trimite caractere și date în consecință.
Conexiunile care se fac pentru LCD sunt date mai jos:
PIN1 sau VSS la masă
PIN2 sau VDD sau VCC la + 5v putere
PIN3 sau VEE la sol (oferă un contrast maxim optim pentru un începător)
PIN4 sau RS (Selecție înregistrare) la PIN8 din ARDUINO UNO
PIN5 sau RW (citire / scriere) la masă (pune LCD în modul de citire facilitează comunicarea pentru utilizator)
PIN6 sau E (Activare) la PIN9 din ARDUINO UNO
PIN11 sau D4 până la PIN10 ale ARDUINO UNO
PIN12 sau D5 până la PIN11 ale ARDUINO UNO
PIN13 sau D6 până la PIN12 ale ARDUINO UNO
PIN14 sau D7 până la PIN13 ale ARDUINO UNO
IDE ARDUINO permite utilizatorului să utilizeze LCD în modul 4 biți. Acest tip de comunicare permite utilizatorului să reducă utilizarea pinului pe ARDUINO, spre deosebire de alte dispozitive, ARDUINO nu trebuie să fie programat separat pentru a-l utiliza în modul 4 it deoarece implicit ARDUINO este configurat să comunice în modul 4 biți. În circuit puteți vedea că am folosit comunicarea pe 4 biți (D4-D7). Deci, din simpla observare din tabelul de mai sus, conectăm 6 pini de LCD la controler, în care 4 pini sunt pini de date și 2 pini pentru control.
Lucru
Pentru interfața unui LCD cu ARDUINO UNO, trebuie să știm câteva lucruri.
|
În primul rând, canalele UNO ADC au o valoare de referință implicită de 5V. Aceasta înseamnă că putem oferi o tensiune maximă de intrare de 5V pentru conversia ADC la orice canal de intrare. Deoarece unii senzori furnizează tensiuni de la 0-2,5V, cu o referință de 5V obținem o precizie mai mică, deci avem o instrucțiune care ne permite să schimbăm această valoare de referință. Deci, pentru schimbarea valorii de referință avem („analogReference ();”)
În mod implicit, obținem rezoluția maximă ADC a plăcii, care este de 10 biți, această rezoluție poate fi modificată folosind instrucțiuni („analogReadResolution (biți);”). Această modificare a rezoluției poate fi utilă în unele cazuri.
Acum, dacă condițiile de mai sus sunt setate la valorile implicite, putem citi valoarea din ADC a canalului '0' apelând direct funcția „analogRead (pin);”, aici „pin” reprezintă pinul unde am conectat semnalul analogic, în acest caz ar fi fii „A0”. Valoarea din ADC poate fi luată într-un număr întreg ca „int ADCVALUE = analogRead (A0); ”, Prin această instrucțiune, valoarea după ce ADC este stocată în întregul„ ADCVALUE ”.
ACUM să vorbim puțin despre LCD 16x2. Mai întâi trebuie să activăm fișierul antet ('#include
În al doilea rând, trebuie să spunem tabloului ce tip de LCD folosim aici. Deoarece avem atât de multe tipuri diferite de LCD (cum ar fi 20x4, 16x2, 16x1 etc.). Aici vom interfața un LCD 16x2 la UNO, astfel încât să obținem „lcd.begin (16, 2);”. Pentru 16x1 obținem „lcd.begin (16, 1);”.
În această instrucțiune vom spune plăcii unde am conectat pinii. Pinii conectați trebuie să fie reprezentați în ordine ca „RS, En, D4, D5, D6, D7”. Acești pini trebuie să fie reprezentați corect. Deoarece am conectat RS la PIN0 și așa mai departe, așa cum se arată în schema de circuite, reprezentăm numărul pinului de pe placă ca „LiquidCrystal lcd (0, 1, 8, 9, 10, 11);”.
După ce mai sus nu mai rămâne decât trimiterea de date, datele care trebuie afișate pe LCD trebuie scrise ca „cd.print („ salut, lume! ”);”. Cu această comandă ecranul LCD afișează „salut, lume!”. După cum puteți vedea, nu trebuie să ne facem griji în legătură cu altceva, trebuie doar să inițializăm și ONU va fi gata să afișeze date. Nu trebuie să scriem o buclă de program pentru a trimite datele BYTE cu BYTE aici.
Odată ce un magnet este adus lângă senzor, senzorul reprezintă o tensiune la ieșire proporțională cu câmpul, această valoare este preluată de Uno și afișată în LCD. Funcționarea acestui proiect de măsurare a câmpului magnetic este explicată în continuare prin codul C de mai jos.