- Potreben material:
- ADC0804 Enokanalni 8-bitni modul ADC:
- Shema vezja in razlaga:
- Programiranje Raspberry Pi:
- Prikaz vrednosti Flex Sensor na LCD zaslonu z Raspberry Pi:
Raspberry Pi je plošča na osnovi procesorja ARM, zasnovana za elektronske inženirje in ljubitelje. PI je zdaj ena najbolj zaupanja vrednih platform za razvoj projektov. Z večjo hitrostjo procesorja in 1 GB RAM-a se PI lahko uporablja za številne odmevne projekte, kot sta obdelava slik in Internet stvari. S PI je mogoče narediti veliko kul stvari, toda ena žalostna lastnost je, da nima vgrajenega modula ADC.
Če se Raspberry Pi lahko poveže s senzorji, lahko spozna parametre resničnega sveta in z njimi komunicira. Večina senzorjev je analognih senzorjev, zato bi se morali naučiti uporabljati zunanji IC modul ADC z Raspberry Pi za vmesnik teh senzorjev. V tem projektu bomo izvedeli, kako lahko vmesnik Flex Sensor povežemo z Raspberry Pi in prikažemo njegove vrednosti na LCD zaslonu.
Potreben material:
- Raspberry Pi (kateri koli model)
- ADC0804 IC
- 16 * 2 LCD zaslon
- Flex senzor
- Upori in kondenzatorji
- Breadboard ali perf deska.
ADC0804 Enokanalni 8-bitni modul ADC:
Preden nadaljujemo, se naučimo o tem ADC0804 IC in kako ga uporabiti z malino pi. ADC0804 je enokanalna 8-bitna IC, kar pomeni, da lahko bere eno vrednost ADC in jo preslika v 8-bitne digitalne podatke. Te 8-bitne digitalne podatke lahko prebere Raspberry Pi, zato bo vrednost 0-255, saj je 2 ^ 8 256. Kot je razvidno iz spodnjih izrezov IC, se za branje teh digitalnih zatičev DB0 do DB7 uporabljajo vrednote.
Zdaj je tu še ena pomembna stvar: ADC0804 deluje pri 5V in tako zagotavlja izhod v 5V logičnem signalu. V 8-polnem izhodu (ki predstavlja 8 bitov) ima vsak pin + 5V izhod, ki predstavlja logiko '1'. Težava je torej v tem, da je logika PI + 3,3 v, zato ne morete dati + 5 V logike na + 3,3 V GPIO pin PI. Če kakemu GPIO zatiču PI daste + 5V, se plošča poškoduje.
Za znižanje logične ravni od + 5V bomo uporabili vezje delilnika napetosti. Že prej smo razpravljali o vezju delilnika napetosti, da bi ga dodatno pojasnili. Kar bomo storili, je, da z dvema uporoma razdelimo + 5V logiko na logiko 2 * 2,5V. Po razdelitvi bomo Raspberry Pi dali + 2.5v logiko. Torej, kadar koli ADC0804 predstavi logiko '1', bomo na PI GPIO Pin videli namesto + 5V + 2,5V. Več o ADC preberite tukaj: Uvod v ADC0804.
Spodaj je slika modula ADC z uporabo ADC0804, ki smo ga zgradili na Perf Board:
Shema vezja in razlaga:
Popoln diagram vezja za povezovanje Flex senzorja z Raspberry Pi je prikazan spodaj. Razlaga istega je naslednja.
To vezje senzorja Raspberry Pi flex se morda zdi nekoliko zapleteno z veliko žicami, toda če si ga natančneje ogledate, je večina žic neposredno povezana z LCD-jem in 8-bitnim podatkovnim zatičem na Raspberry pi. Naslednja tabela vam bo pomagala pri vzpostavljanju in preverjanju povezav.
Pripnite ime |
Številka maline |
Ime Raspberry Pi GPIO |
LCD Vss |
Zatič 4 |
Tla |
LCD Vdd |
Zatič 6 |
Vcc (+ 5V) |
LCD Vee |
Zatič 4 |
Tla |
LCD Rs |
Zatič 38 |
GPIO 20 |
LCD RW |
Zatič 39 |
Tla |
LCD E |
Zatič 40 |
GPIO 21 |
LCD D4 |
Zatič 3 |
GPIO 2 |
LCD D5 |
Zatič 5 |
GPIO 3 |
LCD D6 |
Zatič 7 |
GPIO 4 |
LCD D7 |
Zatič 11 |
GPIO 17 |
ADC0804 Vcc |
Zatič 2 |
Vcc (+ 5V) |
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 |
Zatič 33 (do 5.1K) |
GPIO 13 |
ADC0804 B6 |
Zatič 35 (do 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (do 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Zatič 15 |
GPIO 22 |
Z naslednjo sliko lahko določite številke pinov na Raspberryu od.
Kot vsi moduli ADC tudi za ADC0804 IC za delovanje potrebuje taktni signal. Na srečo ima ta IC tudi notranji vir ure, zato moramo le dodati vezje RC na nožice CLK in in CLK R, kot je prikazano v vezju. Uporabili smo vrednost 10K in 105pf, lahko pa uporabimo tudi katero koli vrednost blizu, kot je 1uf, 0.1uf, 0.01uf.
Nato smo za povezavo Flex senzorja uporabili potencialno delilno vezje z uporom 100K. Ko je senzor Flex upognjen, se bo upor na njem spreminjal in tudi potencialni padec na uporu. Ta padec izmeri ADC0804 IC in temu primerno se generirajo 8-bitni podatki.
Preverite še druge projekte, povezane s Flex Sensor:
- Vmesnik Flex senzorja z mikrokrmilnikom AVR
- Nadzornik igre Angry Bird, ki temelji na Arduinu s pomočjo Flex senzorja
- Krmiljenje servo motorja s pomočjo Flex senzorja
- Ustvarjanje tonov s tapkanjem prstov z uporabo Arduina
Programiranje Raspberry Pi:
Ko končamo s povezavami, moramo z uporabo Raspberry Pi prebrati stanje teh 8-bitov in jih pretvoriti v decimalke, da jih bomo lahko izkoristili. Program za enako in prikaz dobljenih vrednosti na LCD zaslonu je podan na koncu te strani. Nadalje je koda razložena spodaj v majhnih smeti.
Za povezavo LCD-ja s Pi potrebujemo knjižnico LCD. Za to uporabljamo knjižnico, ki jo je razvil shubham, ki nam bo pomagala povezati 16 * 2 LCD zaslon s Pi v štirižičnem načinu. Prav tako potrebujemo knjižnice, da izkoristimo čas in zatiči Pi GPIO.
Opomba : lcd.py je treba prenesti od tu in ga shraniti v isti imenik, kjer je ta program shranjen. Šele potem se bo koda zbrala.
import lcd #Import the LCD library by [email protected] import time #Import time import RPi.GPIO kot GPIO #GPIO bo prikazan samo kot GPIO
Za definicije LCD pin so dodeljene spremenljivk, kot je prikazano spodaj. Upoštevajte, da so te številke številke PIN GPIO in ne dejanske številke PIN. Z zgornjo tabelo lahko primerjate številke GPIO s številkami PIN. Binarno polje matrike bo vsebovalo številke podatkovnih zatičev, bitni nizi pa bodo shranili nastalo vrednost vseh zatičev GPIO.
# Definicije pinov LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys = (10,9,11,5,6,13,19,26) # Niz številk pinov se poveže z DB0- Bitov DB7 = # rezultatske vrednosti 8-bitnih podatkov
Zdaj moramo definirati vhodni in izhodni zatič. Sedem podatkovnih zatičev bo vhodni zatič, sprožilni zatič (RST in INTR) pa izhodni zatič. 8-bitne vrednosti podatkov lahko beremo z vhodnega zatiča samo, če izhodni zatič v določenem času sprožimo visoko v skladu s podatkovnim listom. Ker smo razglasila binarnih zatiče v binarys paleto lahko uporabite za zanko za izjavo, kot je prikazano spodaj.
za binarne datoteke v binarnih datotekah: GPIO.setup (binarni, GPIO.IN) # Vsi binarni zatiči so vhodni zatiči #Sprožilni zatič GPIO.setup (22, GPIO.OUT) #WR in INTR zatiči so izhodni
Zdaj z uporabo ukazov knjižnice LCD lahko inicializiramo modul LCD in prikažemo majhno uvodno sporočilo, kot je prikazano spodaj.
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 ()
Znotraj neskončne zanke while začnemo brati binarne vrednosti, jih pretvorimo v decimalke in rezultat posodobimo na LCD-ju. Kot smo že omenili, preden bi prebrali vrednosti ADC, bi morali sprožilni zatič določen čas postaviti visoko, da aktiviramo pretvorbo ADC. To naredimo z uporabo naslednjih vrstic.
GPIO.output (22, 1) #TURN ON Trigger time.sleep (0.1) GPIO.output (22, 0) #TURN OFF Trigger
Zdaj bi morali prebrati 8-podatkovne nožice in posodobiti rezultat v matriki bitov. Za to uporabimo zanko for za primerjavo vsakega vhodnega zatiča z True in False. Če je res, bo ustrezna matrika bitov narejena kot 1, drugače bo nastavljena kot 0. To je bilo, ker bodo vsi 8-bitni podatki postali 0 in 1 od prebranih vrednosti.
# Preberite vhodne nožice in posodobite rezultat v bitni matriki za i v obsegu (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Ko posodobimo matriko bitov, jo moramo pretvoriti v decimalno vrednost. To ni nič drugega kot pretvorba v binarno v decimalno. Za 8-bitne binarne podatke je 2 ^ 8 256. Tako bomo dobili decimalne podatke od 0 do 255. V pythonu se z operaterjem "**" najde moč katere koli vrednosti. Ker se bit začne z MSB, ga pomnožimo z 2 ^ (7-položaj). Na ta način lahko pretvorimo vse binarne vrednosti v decimalne podatke in jih nato prikažemo na LCD-prikazovalniku
# izračuna decimalno vrednost z uporabo bitne matrike za i v obsegu (8): decimal = decimal + (bitov * (2 ** (7-i)))
Ko poznamo decimalno vrednost, lahko enostavno izračunamo vrednost napetosti. Samo pomnožiti ga moramo z 19,63. Ker je za 8-bitni 5VADC vsak bit analogna 19,3 milivolta. Nastala vrednost napetosti je vrednost napetosti, ki se je pojavila na nožicah Vin + in Vin- ADC0804 IC.
# izračunajte vrednost napetosti Napetost = decimalna vrednost * 19,63 * 0,001 # ena enota je 19,3mV
Z uporabo vrednosti napetosti lahko ugotovimo, kako je bil upognjen senzor upognjen in v katero smer je bil upognjen. V spodnjih vrsticah sem ravno primerjal odčitane vrednosti napetosti z vnaprej določenimi vrednostmi napetosti, da označim položaj senzorja Flex na LCD zaslonu.
#primerjajte napetost in stanje prikaza senzorja mylcd.setCursor (1,1), če je (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("Stabilno")
Podobno lahko vrednost napetosti uporabite za izvajanje katere koli naloge, za katero želite, da jo izvede Raspberry Pi.
Prikaz vrednosti Flex Sensor na LCD zaslonu z Raspberry Pi:
Delo projekta je zelo preprosto. Ampak poskrbite, da ste prenesli lcd.py header datoteko in se jo postavi v isto mapo, kjer je prisotna vaš trenutni program. Nato naredite povezave, ki so prikazane v vezju, z uporabo plošče za plošče ali plošče za zagon in zaženite spodnji program na svojem Pi-ju, zato bi morali kaj delati. Nastavili bi morali izgledati približno takole spodaj.
Kot je prikazano, bo LCD prikazal decimalno vrednost, vrednost napetosti in položaj senzorja. Samo upognite senzor naprej ali nazaj in videli boste, kako se napetost in decimalna vrednost spreminjata, prikazalo se bo tudi besedilo stanja. Lahko priključite kateri koli senzor in opazite, da se napetost na njem spreminja.
Celotno delo vaje najdete na spodnjem videoposnetku. Upam, da ste projekt razumeli in uživali v gradnji podobnega. Če dvomite, jih pustite v oddelku za komentarje ali na forumih, jaz pa se bom potrudil, da odgovorim nanje.