- Potreban materijal:
- ADC0804 Jednokanalni 8-bitni ADC modul:
- Kružni dijagram i objašnjenje:
- Programiranje Raspberry Pi:
- Prikazivanje vrijednosti Flex senzora na LCD-u pomoću Raspberry Pi:
Raspberry Pi je ploča zasnovana na ARM arhitekturi zasnovana za elektroničke inženjere i hobiste. PI je jedna od trenutno najpouzdanijih platformi za razvoj projekata. S većom brzinom procesora i 1 GB RAM-a, PI se može koristiti za mnoge projekte visokog profila poput obrade slika i Interneta stvari. Puno je cool stvari koje se mogu učiniti s PI-jem, ali jedna tužna značajka je ta što nema ugrađeni ADC modul.
Samo, ako Raspberry Pi može biti povezan sa senzorima, on će moći upoznati parametre stvarnog svijeta i komunicirati s njim. Većina senzora vani ima analogni senzor i zato bismo trebali naučiti koristiti vanjski IC ADC modula s Raspberry Pi za povezivanje tih senzora. U ovom ćemo projektu naučiti kako možemo povezati Flex senzor s Raspberry Pi i prikazati njegove vrijednosti na LCD zaslonu.
Potreban materijal:
- Raspberry Pi (bilo koji model)
- ADC0804 IC
- LCD zaslon od 16 * 2
- Flex senzor
- Otpornici i kondenzatori
- Breadboard ili perf odbora.
ADC0804 Jednokanalni 8-bitni ADC modul:
Prije nego što nastavimo dalje, naučimo o ovom ADC0804 IC i kako ga koristiti s malinom pi. ADC0804 je jednokanalni 8-bitni IC, što znači da može očitati jednu vrijednost ADC-a i preslikati ga na 8-bitne digitalne podatke. Ove 8-bitne digitalne podatke može pročitati Raspberry Pi, pa će vrijednost biti 0-255, jer je 2 ^ 8 256. Kao što je prikazano u pinoutima IC-a dolje, pinovi DB0 do DB7 koriste se za čitanje tih digitalnih vrijednosti.

Sada je ovdje još jedna važna stvar, ADC0804 radi na 5V i tako daje izlaz u 5V logičkom signalu. U 8-polnom izlazu (koji predstavlja 8-bit), svaki pin ima + 5V izlaza koji predstavlja logiku '1'. Dakle, problem je u tome što je PI logika od + 3,3 v, tako da ne možete dati + 5 V logiku na + 3,3 V GPIO pinu PI. Ako dajete + 5V na bilo koji GPIO pin PI, ploča se oštećuje.
Dakle, za spuštanje logičke razine od + 5V, koristit ćemo krug djelitelja napona. Ranije smo razgovarali o krugu djelitelja napona, a prethodno smo ga istražili radi daljnjeg pojašnjenja. Ono što ćemo učiniti je da koristimo dva otpora da podijelimo + 5V logiku u logiku 2 * 2,5V. Dakle, nakon podjele dat ćemo + 2.5v logike Raspberry Pi-u. Dakle, kad god ADC0804 predstavi logiku '1' vidjet ćemo + 2,5V na PI GPIO Pinu, umjesto + 5V. Ovdje saznajte više o ADC: Uvod u ADC0804.
Ispod je slika ADC modula koji koristi ADC0804 koji smo izgradili na Perf Boardu:

Kružni dijagram i objašnjenje:
Kompletna shema sklopa za povezivanje Flex senzora s Raspberry Pi prikazana je u nastavku. Objašnjenje istog je sljedeće.

Ovaj sklop senzora Raspberry Pi flex može se činiti pomalo složenim s puno žica, ali ako bolje pogledate, većina žica je izravno povezana s LCD-om i 8-bitnim podatkovnim pinom na Raspberry pi. Sljedeća tablica pomoći će vam tijekom uspostavljanja i provjere veza.
|
Naziv pribadače |
Broj pinke od maline |
Raspberry Pi GPIO naziv |
|
LCD Vss |
Pribadača 4 |
Prizemlje |
|
LCD Vdd |
Pribadača 6 |
Vcc (+ 5 V) |
|
LCD Vee |
Pribadača 4 |
Prizemlje |
|
LCD Rs |
Pribadača 38 |
GPIO 20 |
|
LCD RW |
Pin 39 |
Prizemlje |
|
LCD E |
Pribadača 40 |
GPIO 21 |
|
LCD D4 |
Pin 3 |
GPIO 2 |
|
LCD D5 |
Pribadača 5 |
GPIO 3 |
|
LCD D6 |
Pribadača 7 |
GPIO 4 |
|
LCD D7 |
Pribadača 11 |
GPIO 17 |
|
ADC0804 Vcc |
Pin 2 |
Vcc (+ 5 V) |
|
ADC0804 B0 |
Pin 19 (do 5.1K) |
GPIO 10 |
|
ADC0804 B1 |
Pin 21 (do 5.1K) |
GPIO 9 |
|
ADC0804 B2 |
Pin 23 (do 5.1K) |
GPIO 11 |
|
ADC0804 B3 |
Pin 29 (do 5.1K) |
GPIO 5 |
|
ADC0804 B4 |
Pin 31 (do 5.1K) |
GPIO 6 |
|
ADC0804 B5 |
Pin 33 (do 5,1 K) |
GPIO 13 |
|
ADC0804 B6 |
Pin 35 (do 5.1K) |
GPIO 19 |
|
ADC0804 B7 |
Pin 37 (do 5.1K) |
GPIO 26 |
|
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Sljedeću sliku možete koristiti za određivanje pin brojeva na Raspberryu od.

Kao i svi ADC moduli, i ADC0804 IC za rad zahtijeva signal takta, srećom ovaj IC ima unutarnji izvor takta, tako da samo moramo dodati RC krug na CLK u i CLK R pinove kako je prikazano u krugu. Koristili smo vrijednost od 10K i 105pf, ali možemo koristiti bilo koju vrijednost blisku poput 1uf, 0.1uf, 0.01uf koja bi također trebala raditi.
Zatim smo za povezivanje Flex senzora koristili potencijalni djeliteljski krug pomoću otpornika 100K. Kako je Flex senzor savijen, otpor na njemu će varirati, a tako će i potencijal pada na otporu. Ovaj pad mjeri se ADC0804 IC i u skladu s tim generiraju se 8-bitni podaci.

Provjerite ostale projekte koji se odnose na Flex senzor:
- Flex senzor sučelja s AVR mikrokontrolerom
- Arduino kontroler igre Angry Bird pomoću Flex senzora
- Upravljanje servo motorom pomoću Flex senzora
- Generiranje tonova tapkanjem prstiju pomoću Arduina
Programiranje Raspberry Pi:
Kad završimo s vezama, trebali bismo pročitati status ovih 8-bitova pomoću Raspberry Pi i pretvoriti ih u decimalne da bismo ih mogli iskoristiti. Program za isto i prikaz rezultirajućih vrijednosti na LCD zaslonu dan je na kraju ove stranice. Dalje, kôd je objašnjen u nastavku.
Za povezivanje LCD-a i Pi potrebna nam je biblioteka LCD-a. Za to koristimo knjižnicu koju je razvio shubham koja će nam pomoći da spojimo LCD zaslon 16 * 2 s Pi-om u četverožičnom načinu rada. Također nam trebaju knjižnice da iskoristimo vrijeme i Pi GPIO pinove.
Napomena : lcd.py treba preuzeti odavde i smjestiti ga u isti direktorij u kojem je ovaj program spremljen. Tek tada će se kod sastaviti.
import lcd # Uvoz LCD biblioteke [email protected] vrijeme uvoza # Vrijeme uvoza import RPi.GPIO kao GPIO #GPIO bit će prikazan samo kao GPIO
A LCD pin definicije su dodijeljeni varijablama kako je prikazano u nastavku. Imajte na umu da su ovi brojevi GPIO pin brojevi, a ne stvarni pin brojevi. Gornju tablicu možete koristiti za usporedbu GPIO brojeva s pin brojevima. Binarni niz će sadržavati sve brojeve podatkovnih pinova, a bitovi polja pohranit će rezultirajuću vrijednost svih GPIO pinova.
# LCD definicije pinova D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys = (10,9,11,5,6,13,19,26) # Niz brojeva pinova povezuje se s DB0- DB7 bitovi = # rezultirajuće vrijednosti 8-bitnih podataka
Sada moramo definirati ulazne i izlazne pinove. Sedam podatkovnih pinova bit će ulazni, a izlazni pin (RST i INTR). 8-bitne vrijednosti podataka možemo pročitati s ulaznog pina samo ako izlazni pin okidamo visoko određeno vrijeme u skladu s podacima. Budući da smo deklarirali binarne pinove u polju binarys, možemo koristiti for petlju za deklaraciju kao što je prikazano dolje.
za binarne datoteke u binarnim datotekama: GPIO.setup (binarni, GPIO.IN) # Svi binarni pinovi su ulazne igle #Izvod okidača GPIO.setup (22, GPIO.OUT) #WR i INTR pinovi se izlaze
Sada pomoću naredbi LCD biblioteke možemo inicijalizirati LCD modul i prikazati malu uvodnu poruku kao što je prikazano dolje.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry" Pi ") time.sleep (2) mylcd.clear ()
Unutar beskonačne while petlje počinjemo čitati binarne vrijednosti, pretvaramo ih u decimalne i ažuriramo rezultat na LCD-u. Kao što je rečeno ranije, prije nego što pročitamo vrijednosti ADC-a , trebali bismo učiniti da pin okidača bude visok određeno vrijeme kako bi se aktivirala ADC konverzija. To se postiže pomoću sljedećih redaka.
GPIO.output (22, 1) #Uključi okidač time.sleep (0.1) GPIO.output (22, 0) #Isključi okidač
Sada bismo trebali pročitati pinove s 8 podataka i ažurirati rezultat u bitskom polju. Da bismo to učinili, koristimo for petlju za usporedbu svakog ulaznog pina s True i False. Ako je tačno, odgovarajući niz bitova bit će napravljen kao 1, tada će biti izrađen kao 0. Ovo je bilo da će svi 8-bitni podaci biti 0 i 1 od pročitanih vrijednosti.
# Pročitajte ulazne igle i ažurirajte rezultat u bitnom nizu za i u rasponu (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Nakon što ažuriramo bitski niz, trebali bismo ga pretvoriti u decimalnu vrijednost. Ovo nije ništa drugo nego binarna u decimalnu pretvorbu. Za 8-bitne binarne podatke 2 ^ 8 je 256. Tako ćemo dobiti decimalne podatke od 0 do 255. U pythonu se operator "**" koristi za pronalaženje snage bilo koje vrijednosti. Budući da bitovi počinju s MSB-om, množimo ga s 2 ^ (7-pozicija). Na taj način možemo pretvoriti sve binarne vrijednosti u decimalne podatke, a zatim ih prikazati na LCD-u
# izračunajte decimalnu vrijednost pomoću bitnog polja za i u rasponu (8): decimal = decimal + (bitovi * (2 ** (7-i)))
Jednom kada znamo decimalnu vrijednost lako je izračunati vrijednost napona. Moramo ga samo pomnožiti sa 19,63. Jer za 8-bitni 5VADC svaki bit je analogija od 19,3 mili volta. Rezultirajuća vrijednost napona vrijednost je napona koji se pojavio na iglama Vin + i Vin- ADC0804 IC.
# izračunajte vrijednost napona Napon = decimalni * 19,63 * 0,001 #jedna jedinica je 19,3mV
Pomoću vrijednosti napona možemo utvrditi kako je savijen flex senzor i u kojem smjeru je savijen. U donjim sam retcima upravo usporedio očitane vrijednosti napona s unaprijed zadanim vrijednostima napona kako bih naznačio položaj Flex senzora na LCD zaslonu.
#porediti napon i status prikaza senzora mylcd.setCursor (1,1) ako je (Napon> 3,8): mylcd.Print ("Savijeno prema naprijed") elif (Napon <3,5): mylcd.Print ("Savijeno unazad") else: mylcd.Print ("Stabilno")
Slično tome, vrijednost napona možete koristiti za izvršavanje bilo kojeg zadatka koji želite da izvrši Raspberry Pi.
Prikazivanje vrijednosti Flex senzora na LCD-u pomoću Raspberry Pi:
Rad na projektu je vrlo jednostavan. Ali obavezno preuzmite datoteku zaglavlja lcd.py i stavite je u isti direktorij u kojem je prisutan vaš trenutni program. Zatim napravite da su veze prikazane na shemi krugova pomoću ploče ili perf ploče i pokrenite donji program na vašem Pi i trebali biste pokrenuti stvar. Postavljeni trebali biste izgledati ovako nekako u nastavku.

Kao što je prikazano, LCD će prikazati decimalnu vrijednost, vrijednost napona i položaj senzora. Dovoljno je saviti senzor naprijed ili nazad i trebali biste vidjeti kako napon i decimalna vrijednost variraju, a prikazat će se i tekst statusa. Možete spojiti bilo koji senzor i primijetiti kako napon na njemu varira.
Cjelovit rad tutorijala možete pronaći na dolje navedenom videozapisu. Nadam se da ste razumjeli projekt i uživali u izgradnji nečeg sličnog. Ako sumnjate, ostavite ih u odjeljku za komentare ili na forumima, a ja ću se potruditi odgovoriti na njih.
