- Material requerit:
- ADC0804 Mòdul ADC monocanal de 8 bits:
- Diagrama del circuit i explicació:
- Programació del Raspberry Pi:
- Es mostra el valor del sensor Flex a la pantalla LCD mitjançant Raspberry Pi:
Raspberry Pi és una placa basada en processadors d'arquitectura ARM dissenyada per a enginyers electrònics i aficionats. El PI és ara una de les plataformes de desenvolupament de projectes amb més confiança. Amb una velocitat de processador més alta i 1 GB de RAM, el PI es pot utilitzar per a molts projectes de gran perfil com el processament d’imatges i Internet de les coses. Hi ha moltes coses interessants que es poden fer amb un PI, però una trista característica és que no té un mòdul ADC integrat.
Només si el Raspberry Pi es pogués connectar amb sensors, pot conèixer els paràmetres del món real i interactuar-hi. La majoria dels sensors que hi ha són analògics i, per tant, hauríem d’aprendre a utilitzar un mòdul ADC extern IC amb Raspberry Pi per connectar aquests sensors. En aquest projecte coneixerem com podem intercanviar el sensor flexible amb Raspberry Pi i mostrar-ne els valors a la pantalla LCD.
Material requerit:
- Raspberry Pi (qualsevol model)
- ADC0804 IC
- Pantalla LCD de 16 * 2
- Sensor flexible
- Resistències i condensadors
- Taula de pa o tauler de perf.
ADC0804 Mòdul ADC monocanal de 8 bits:
Abans de continuar, anem a conèixer aquest ADC0804 IC i com utilitzar-lo amb raspberry pi. ADC0804 és un IC de 8 bits d’un sol canal, és a dir, que pot llegir un valor ADC únic i assignar-lo a dades digitals de 8 bits. Aquestes dades digitals de 8 bits poden ser llegides pel Raspberry Pi, de manera que el valor serà de 0 a 255, ja que 2 ^ 8 és 256. Tal com es mostra als pinouts del CI a continuació, els pins DB0 a DB7 s’utilitzen per llegir-los valors.

Ara una altra cosa important aquí és que l' ADC0804 funciona a 5V i, per tant, proporciona sortida en senyal lògic de 5V. A la sortida de 8 pins (que representa 8 bits), cada pin proporciona una sortida de + 5 V per representar la lògica '1'. Per tant, el problema és que la lògica PI és de + 3,3 v, de manera que no podeu donar una lògica de + 5 V al pin GPIO de + 3,3 V de PI. Si doneu + 5 V a qualsevol pin GPIO de PI, la placa es fa malbé.
Per tant, per reduir el nivell lògic de + 5V, farem servir un circuit divisor de tensió. Hem comentat que el circuit divisor de tensió el va examinar prèviament per obtenir més aclariments. El que farem és que utilitzem dues resistències per dividir la lògica de + 5V en lògiques de 2 * 2,5V. Per tant, després de la divisió donarem una lògica de + 2,5 v a Raspberry Pi. Per tant, sempre que ADC0804 presenti la lògica '1', veurem + 2,5 V al pin PI GPIO, en lloc de + 5 V. Obteniu més informació sobre ADC aquí: Introducció a ADC0804.
A continuació es mostra la imatge del mòdul ADC que utilitza ADC0804 que hem creat a Perf Board:

Diagrama del circuit i explicació:
A continuació es mostra el diagrama complet del circuit per a la interfície del sensor flex amb Raspberry Pi. L’explicació del mateix és la següent.

Aquest circuit del sensor de flexió de raspberry pi pot semblar una mica complex amb molts cables, però si analitzeu més de prop la majoria dels cables es connecten directament des de la pantalla LCD i el pin de dades de 8 bits al Raspberry pi. La taula següent us ajudarà a fer i verificar les connexions.
|
Nom del pin |
Número de Pin de gerds |
Nom GPIO de Raspberry Pi |
|
LCD Vss |
Pin 4 |
Terra |
|
LCD Vdd |
Pin 6 |
Vcc (+ 5 V) |
|
Vee LCD |
Pin 4 |
Terra |
|
Rs LCD |
Pin 38 |
GPIO 20 |
|
LCD RW |
Pin 39 |
Terra |
|
LCD E |
Pin 40 |
GPIO 21 |
|
LCD D4 |
Pin 3 |
GPIO 2 |
|
LCD D5 |
Pin 5 |
GPIO 3 |
|
LCD D6 |
Pin 7 |
GPIO 4 |
|
LCD D7 |
Pin 11 |
GPIO 17 |
|
ADC0804 Vcc |
Pin 2 |
Vcc (+ 5 V) |
|
ADC0804 B0 |
Pin 19 (fins a 5,1K) |
GPIO 10 |
|
ADC0804 B1 |
Pin 21 (fins a 5,1K) |
GPIO 9 |
|
ADC0804 B2 |
Pin 23 (fins a 5,1K) |
GPIO 11 |
|
ADC0804 B3 |
Pin 29 (fins a 5,1K) |
GPIO 5 |
|
ADC0804 B4 |
Pin 31 (fins a 5,1K) |
GPIO 6 |
|
ADC0804 B5 |
Pin 33 (fins a 5,1K) |
GPIO 13 |
|
ADC0804 B6 |
Pin 35 (fins a 5,1K) |
GPIO 19 |
|
ADC0804 B7 |
Pin 37 (fins a 5,1K) |
GPIO 26 |
|
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Podeu utilitzar la imatge següent per determinar els números de pins a Raspberry des de llavors.

Com tots els mòduls ADC, l' IC ADC0804 també requereix un senyal de rellotge per funcionar, per sort aquest IC té una font de rellotge interna, de manera que només hem d'afegir el circuit RC als pins CLK i CLK R tal com es mostra al circuit. Hem utilitzat un valor de 10K i 105pf, però podem utilitzar qualsevol valor proper com 1uf, 0.1uf, 0.01uf també hauria de funcionar.
Després, per connectar el sensor Flex, hem utilitzat un circuit divisor de potencials mitjançant una resistència de 100K. A mesura que el sensor Flex estigui doblegat, la resistència del mateix variarà i també la caiguda potencial a la resistència. Aquesta caiguda es mesura mitjançant l'IC ADC0804 i es generen dades de 8 bits en conseqüència.

Consulteu altres projectes relacionats amb Flex Sensor:
- Interfície del sensor flexible amb microcontrolador AVR
- Controlador de jocs Angry Bird basat en Arduino que utilitza el sensor Flex
- Control del servomotor mitjançant sensor Flex
- Generació de tons tocant els dits amb Arduino
Programació del Raspberry Pi:
Un cop hàgim acabat les connexions, hauríem de llegir l’estat d’aquests 8 bits mitjançant Raspberry Pi i convertir-los a Decimal per poder fer-ne ús. El programa per fer el mateix i mostrar els valors resultants a la pantalla LCD es dóna al final d'aquesta pàgina. A continuació, el codi s'explica en petits idiomes a continuació.
Necessitem una biblioteca LCD per connectar LCD amb Pi. Per a això fem servir la biblioteca desenvolupada per shubham que ens ajudarà a connectar una pantalla LCD de 16 * 2 amb un Pi en mode de quatre fils. També necessitem biblioteques per fer ús del temps i dels pins GPIO Pi.
Nota : El lcd.py s'ha de descarregar des d'aquí i col·locar-lo al mateix directori on es guarda aquest programa. Només llavors es compilarà el codi.
importa lcd # Importa la biblioteca LCD per [email protected] temps d’importació # Importa temps importa RPi.GPIO com a GPIO #GPIO es referirà només a GPIO
Les definicions de pins LCD s’assignen a les variables com es mostra a continuació. Tingueu en compte que aquests números són els números de pin GPIO i no els números de pin reals. Podeu utilitzar la taula anterior per comparar els números GPIO amb els números de pin. El binari de matriu inclourà tots els números de pins de dades i els bits de matriu emmagatzemaran el valor resultant de tots els pins GPIO.
# Definicions de pins LCD: D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binaris = (10,9,11,5,6,13,19,26) # Matriu de números de pin connectats a DB0- DB7 bits = #resultant valors de dades de 8 bits
Ara hem de definir els pins d'entrada i sortida. Els set pins de dades seran el pin d’entrada i el pin de disparador (RST i INTR) el pin de sortida. Podem llegir els valors de dades de 8 bits del pin d’entrada només si activem el pin de sortida alt durant un temps concret segons el full de dades. Ja que hem declarat els passadors binaris en binarys array podem utilitzar un per de bucle per a la declaració com es mostra a continuació.
per a binaris en binaris: GPIO.setup (binari, GPIO.IN) #Tots els pins binaris són pins d'entrada #Pinador de desencadenament GPIO.setup (22, GPIO.OUT) #Puntatges WR i INTR
Ara, mitjançant les ordres de la biblioteca LCD, podem inicialitzar el mòdul LCD i mostrar un petit missatge d'introducció, tal com es mostra a continuació.
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 ()
Dins del bucle infinit mentre comencem a llegir els valors binaris, els convertim en decimals i actualitzem el resultat a la pantalla LCD. Com s'ha dit abans abans de llegir els valors de l'ADC , hauríem de fer que el pin de desencadenament estigui elevat durant un temps determinat per activar la conversió de l'ADC. Això es fa utilitzant les línies següents.
GPIO.output (22, 1) #TURN ON Trigger time.sleep (0.1) GPIO.output (22, 0) #TURN OFF Trigger
Ara hauríem de llegir els pins de 8 dades i actualitzar el resultat a la matriu de bits. Per fer-ho, fem servir un bucle for per comparar cada pin d'entrada amb True i False. Si és cert, la matriu de bits respectiva es convertirà en 1 altra, es convertirà en 0. Totes les dades de 8 bits es faran 0 i 1 respectius dels valors llegits.
#Llegiu els pins d'entrada i actualitzeu el resultat en la matriu de bits per a l'interval (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Un cop hem actualitzat la matriu de bits, hauríem de convertir aquesta matriu en valor decimal. Això no és altra cosa que la conversió binària a decimal. Per a les dades binàries de 8 bits, 2 ^ 8 és 256. Així obtindrem dades decimals de 0 a 255. En python s'utilitza l'operador "**" per trobar la potència de qualsevol valor. Com que els bits comencen per MSB, el multipliquem per 2 ^ (posició 7). D’aquesta manera podem convertir tots els valors binaris en dades decimals i després mostrar-los a la pantalla LCD
#calculeu el valor decimal mitjançant la matriu de bits per a l’interval (8): decimal = decimal + (bits * (2 ** (7-i)))
Un cop sabem el valor decimal és fàcil calcular el valor de la tensió. Només l’hem de multiplicar per 19,63. Perquè per a un 5VADC de 8 bits, cada bit és una analogia de 19,3 mili volts. El valor de la tensió resultant és el valor de la tensió que ha aparegut a través dels pins Vin + i Vin- de l'ADC0804 IC.
#calcula el valor de la tensió Voltatge = decimal * 19,63 * 0,001 #una unitat és de 19,3 mV
Utilitzant el valor de la tensió podem determinar com s’ha doblegat el sensor de flexió i en quina direcció s’ha doblegat. A les línies següents, acabo de comparar els valors de tensió llegits amb valors de tensió predeterminats per indicar la posició del sensor Flex a la pantalla LCD.
#compare voltatge i estat de visualització del sensor mylcd.setCursor (1,1) si (Voltatge> 3,8): mylcd.Print ("Bent Forward") elif (Voltage <3,5): mylcd.Print ("Bent Backward") més: mylcd.Print ("estable")
De la mateixa manera, podeu utilitzar el valor de tensió per realitzar qualsevol tasca que vulgueu que faci Raspberry Pi.
Es mostra el valor del sensor Flex a la pantalla LCD mitjançant Raspberry Pi:
El funcionament del projecte és molt senzill. Però assegureu-vos que heu descarregat el fitxer de capçalera lcd.py i que l'heu situat al mateix directori on hi ha el vostre programa actual. A continuació, feu que les connexions es mostrin al diagrama del circuit mitjançant una taula de perfils o una placa de perfecció i executeu el programa següent al vostre Pi i hauríeu de funcionar. La configuració hauria de tenir un aspecte semblant a continuació.

Com es mostra, la pantalla LCD mostrarà el valor decimal, el valor de la tensió i la posició del sensor. Simplement doblegueu el sensor cap endavant o cap enrere i hauríeu de poder veure la variació del voltatge i del valor decimal, també es mostrarà un text d'estat. Podeu connectar qualsevol sensor i notar que el voltatge a través d’ell varia.
El funcionament complet del tutorial es pot trobar al vídeo que es mostra a continuació. Espero que hagueu entès el projecte i us hagi agradat construir alguna cosa similar. Si teniu cap dubte, deixeu-los a la secció de comentaris o als fòrums i faré tot el possible per respondre-hi.
