- Material necesar:
- ADC0804 Modul ADC monocanal pe 8 biți:
- Schema și explicația circuitului:
- Programarea Raspberry Pi:
- Se afișează valoarea senzorului flexibil pe ecranul LCD folosind Raspberry Pi:
Raspberry Pi este o placă bazată pe procesor de arhitectură ARM, concepută pentru ingineri electronici și pasionați. PI este una dintre cele mai de încredere platforme de dezvoltare a proiectelor de acum. Cu o viteză mai mare a procesorului și 1 GB RAM, PI poate fi utilizat pentru multe proiecte de profil înalt, cum ar fi procesarea imaginilor și Internetul obiectelor. Există o mulțime de lucruri interesante care pot fi făcute cu un PI, dar o caracteristică tristă este că nu are un modul ADC încorporat.
Numai dacă Raspberry Pi ar putea fi interfațat cu senzori, acesta poate cunoaște parametrii lumii reale și interacționa cu acesta. Majoritatea senzorilor de acolo sunt senzori analogici și, prin urmare, ar trebui să învățăm să folosim un modul ADC extern IC cu Raspberry Pi pentru a interfața acești senzori. În acest proiect vom învăța cum putem interfața senzorul flexibil cu Raspberry Pi și să-i afișăm valorile pe ecranul LCD.
Material necesar:
- Raspberry Pi (orice model)
- ADC0804 IC
- Afisaj LCD 16 * 2
- Senzor flexibil
- Rezistoare și condensatoare
- Panou sau panou perf.
ADC0804 Modul ADC monocanal pe 8 biți:
Înainte de a continua, lăsați-ne să aflăm despre acest ADC0804 IC și cum să utilizați acest lucru cu raspberry pi. ADC0804 este un IC cu 8 biți cu un singur canal, ceea ce înseamnă că poate citi o singură valoare ADC și o poate asocia cu 8 biți de date digitale. Aceste date digitale pe 8 biți pot fi citite de Raspberry Pi, astfel valoarea va fi 0-255, deoarece 2 ^ 8 este 256. După cum se arată în pinout-urile IC de mai jos, pinii DB0 la DB7 sunt utilizați pentru a citi aceste date digitale valori.
Acum, un alt lucru important aici este că ADC0804 funcționează la 5V și astfel oferă ieșire în semnal logic de 5V. În ieșirea cu 8 pini (reprezentând 8 biți), fiecare pin furnizează o ieșire de + 5V pentru a reprezenta logica „1”. Deci problema este că logica PI este de + 3.3v, deci nu puteți da logică + 5V pinului + 3.3V GPIO al PI. Dacă dați + 5V oricărui pin GPIO de PI, placa se deteriorează.
Deci, pentru a reduce nivelul logic de la + 5V, vom folosi circuitul divizor de tensiune. Am discutat despre circuitul divizorului de tensiune pentru a le analiza anterior pentru clarificări suplimentare. Ceea ce vom face este să folosim două rezistențe pentru a împărți logica + 5V în logici 2 * 2.5V. Deci, după divizare, vom da logică + 2,5v pentru Raspberry Pi. Deci, ori de câte ori logica „1” este prezentată de ADC0804, vom vedea + 2,5V la pinul GPIO PI, în loc de + 5V. Aflați mai multe despre ADC aici: Introducere în ADC0804.
Mai jos este imaginea modulului ADC folosind ADC0804 pe care l-am construit pe Perf Board:
Schema și explicația circuitului:
Schema completă a circuitului pentru interfața senzorului flexibil cu Raspberry Pi este prezentată mai jos. Explicația acestora este următoarea.
Acest circuit al senzorului de raspberry pi flex poate părea un pic complex cu multe fire, dar dacă aruncați o privire mai atentă, majoritatea firelor sunt conectate direct de pe ecranul LCD și pinul de date pe 8 biți la Raspberry pi. Tabelul următor vă va ajuta în timp ce realizați și verificați conexiunile.
Numele pinului |
Număr Pin zmeură |
Numele Raspberry Pi GPIO |
LCD Vss |
Pinul 4 |
Sol |
LCD Vdd |
Pinul 6 |
Vcc (+ 5V) |
Vee LCD |
Pinul 4 |
Sol |
LCD Rs |
Pinul 38 |
GPIO 20 |
LCD RW |
Pinul 39 |
Sol |
LCD E |
Pinul 40 |
GPIO 21 |
LCD D4 |
Pinul 3 |
GPIO 2 |
LCD D5 |
Pinul 5 |
GPIO 3 |
LCD D6 |
Pinul 7 |
GPIO 4 |
LCD D7 |
Pinul 11 |
GPIO 17 |
ADC0804 Vcc |
Pinul 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pinul 19 (până la 5,1K) |
GPIO 10 |
ADC0804 B1 |
Pinul 21 (până la 5,1K) |
GPIO 9 |
ADC0804 B2 |
Pinul 23 (până la 5,1K) |
GPIO 11 |
ADC0804 B3 |
Pinul 29 (până la 5,1K) |
GPIO 5 |
ADC0804 B4 |
Pinul 31 (până la 5,1K) |
GPIO 6 |
ADC0804 B5 |
Pinul 33 (până la 5,1K) |
GPIO 13 |
ADC0804 B6 |
Pinul 35 (până la 5,1K) |
GPIO 19 |
ADC0804 B7 |
Pinul 37 (până la 5,1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pinul 15 |
GPIO 22 |
Puteți utiliza următoarea imagine pentru a determina numerele de pin de pe Raspberry de atunci.
La fel ca toate modulele ADC, IC-ul ADC0804 necesită și un semnal de ceas pentru a funcționa, din fericire, acest IC are o sursă de ceas internă, așa că trebuie doar să adăugăm circuitul RC la pinii CLK și CLK R așa cum se arată în circuit. Am folosit o valoare de 10K și 105pf, dar putem folosi orice valoare apropiată, cum ar fi 1uf, 0.1uf, 0.01uf ar trebui să funcționeze.
Apoi, pentru a conecta senzorul Flex, am folosit un circuit divizor de potențial folosind un rezistor de 100K. Pe măsură ce senzorul Flex este îndoit, rezistența de-a lungul acestuia va varia și la fel va cădea potențialul peste rezistor. Această scădere este măsurată de ADC0804 IC și datele de 8 biți sunt generate în consecință.
Verificați alte proiecte legate de Flex Sensor:
- Interfațarea senzorului flexibil cu microcontrolerul AVR
- Controler de joc Angry Bird bazat pe Arduino folosind senzor flexibil
- Control servomotor prin senzor flexibil
- Generarea tonurilor prin atingerea degetelor folosind Arduino
Programarea Raspberry Pi:
Odată ce am terminat cu conexiunile, ar trebui să citim starea acestor 8 biți folosind Raspberry Pi și să le convertim în Decimal, astfel încât să le putem folosi. Programul pentru a face același lucru și pentru a afișa valorile rezultate pe ecranul LCD este dat la sfârșitul acestei pagini. Mai departe, codul este explicat în mici junks de mai jos.
Avem nevoie de o bibliotecă LCD pentru a interfața LCD cu Pi. Pentru aceasta folosim biblioteca dezvoltată de shubham, care ne va ajuta să interfațăm un ecran LCD de 16 * 2 cu un Pi în modul cu patru fire. De asemenea, avem nevoie de biblioteci pentru a folosi timpul și pinii GPIO Pi.
Notă : lcd.py ar trebui descărcat de aici și plasat în același director în care este salvat acest program. Numai atunci codul se va compila.
import lcd #Import biblioteca LCD de către [email protected] timp de import #Import timp import RPi.GPIO ca GPIO #GPIO va fi referit doar ca GPIO
Cele Definițiile pini LCD sunt atribuite variabilelor așa cum se arată mai jos. Rețineți că aceste numere sunt numerele de pin GPIO și nu numerele de pin reale. Puteți utiliza tabelul de mai sus pentru a compara numerele GPIO cu numerele PIN. Binarul matricei va include toate numerele pinilor de date, iar biții matricei vor stoca valoarea rezultată a tuturor pinilor GPIO.
# Definiții pin PIN LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binare = (10,9,11,5,6,13,19,26) # Matrice de numere pin conectate la DB0- DB7 biți = #valori rezultate ale datelor pe 8 biți
Acum, trebuie să definim pinii de intrare și ieșire. Cei șapte pini de date vor fi pinul de intrare și pinul de declanșare (RST și INTR) vor fi pinul de ieșire. Putem citi valorile de date pe 8 biți de la pinul de intrare numai dacă declanșăm pinul de ieșire ridicat pentru un anumit timp, conform fișei tehnice. Din moment ce am declarat pinii binare din binarys matrice putem folosi o pentru buclă pentru declararea așa cum se arată mai jos.
pentru binare în binare: GPIO.setup (binar, GPIO.IN) #Toți pinii binari sunt pinii de intrare #Pinul de declanșare GPIO.setup (22, GPIO.OUT) #Pinii WR și INTR sunt ieșiți
Acum folosind comenzile bibliotecii LCD putem inițializa modulul LCD și afișa un mic mesaj introductiv așa cum se arată mai jos.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Mesaj mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
În interiorul buclei infinite while , începem să citim valorile binare, le convertim în zecimal și actualizăm rezultatul pe LCD. Așa cum am spus mai devreme înainte de a citi valorile ADC, ar trebui să facem pinul de declanșare să fie ridicat pentru un anumit moment pentru a activa conversia ADC. Acest lucru se face folosind următoarele rânduri.
GPIO.output (22, 1) #TURN ON Trigger time.sleep (0.1) GPIO.output (22, 0) #TURN OFF Trigger
Acum, ar trebui să citim pinii de 8 date și să actualizăm rezultatul în matricea de biți. Pentru a face acest lucru, folosim o buclă for pentru a compara fiecare pin de intrare cu True și False. Dacă este adevărat, matricea de biți respectivă va fi făcută ca 1 altceva, va fi făcută ca 0. Aceasta a fost toate datele de 8 biți vor fi făcute 0 și 1 respectiv cu valorile citite.
#Citiți pinii de intrare și actualizați rezultatul în matricea de biți pentru i în intervalul (8): if (GPIO.input (binarys) == True): biți = 1 if (GPIO.input (binarys) == False): bits = 0
Odată ce am actualizat matricea de biți, ar trebui să convertim această matrice în valoare zecimală. Aceasta nu este altceva decât conversia binară în zecimală. Pentru datele binare pe 8 biți 2 ^ 8 este 256. Deci vom obține date zecimale de la 0 la 255. În python se folosește operatorul „**” pentru a găsi puterea oricărei valori. Deoarece biții încep cu MSB, îl înmulțim cu 2 ^ (poziția 7). Astfel putem converti toate valorile binare în date zecimale și apoi să le afișăm pe ecranul LCD
#calculați valoarea zecimală utilizând matricea de biți pentru i în intervalul (8): zecimal = zecimal + (biți * (2 ** (7-i)))
Odată ce cunoaștem valoarea zecimală, este ușor să calculăm valoarea tensiunii. Trebuie doar să-l înmulțim cu 19,63. Deoarece pentru un 5VADC pe 8 biți fiecare bit este o analogie de 19,3 mili volți. Valoarea tensiunii rezultate este valoarea tensiunii care a apărut pe pinii Vin + și Vin- ai ADC0804 IC.
#calculează valoarea tensiunii Tensiune = zecimală * 19,63 * 0,001 # o unitate este 19,3mV
Folosind valoarea tensiunii putem determina modul în care senzorul flex a fost îndoit și în ce direcție a fost îndoit. În liniile de mai jos tocmai am comparat valorile tensiunii citite cu valorile prestabilite ale tensiunii pentru a indica poziția senzorului Flex pe ecranul LCD.
#compare tensiunea și afișarea stării senzorului mylcd.setCursor (1,1) dacă (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") altfel: mylcd.Print („Stabil”)
În mod similar, puteți utiliza valoarea tensiunii pentru a efectua orice activitate pe care doriți să o efectueze Raspberry Pi.
Se afișează valoarea senzorului flexibil pe ecranul LCD folosind Raspberry Pi:
Funcționarea proiectului este foarte simplă. Dar asigurați-vă că ați descărcat fișierul antet lcd.py și l-ați plasat în același director în care este prezent programul dvs. curent. Apoi asigurați-vă că conexiunile sunt afișate în schema de circuite folosind o placă de calcul sau o placă de perfecționare și rulați programul de mai jos pe Pi și ar trebui să funcționați. Configurați-vă ar trebui să arate așa ceva mai jos.
După cum se arată, ecranul LCD va afișa valoarea zecimală, valoarea tensiunii și poziția senzorului. Îndoiți senzorul înainte sau înapoi și ar trebui să puteți vedea tensiunea și valoarea zecimală variind, de asemenea, va fi afișat un text de stare. Puteți conecta orice senzor și puteți observa că tensiunea variază de-a lungul acestuia.
Funcționarea completă a tutorialului poate fi găsită la videoclipul prezentat mai jos. Sper că ați înțeles proiectul și v-a plăcut să construiți ceva similar. Dacă aveți vreo îndoială, lăsați-le în secțiunea de comentarii sau pe forumuri și voi încerca tot posibilul să le răspund.