- Nødvendig materiale:
- ADC0804 8-biters ADC-modul med en kanal:
- Kretsdiagram og forklaring:
- Programmering av Raspberry Pi:
- Viser Flex Sensor-verdi på LCD ved hjelp av Raspberry Pi:
Raspberry Pi er et ARM-arkitekturbasert kort designet for elektroniske ingeniører og hobbyister. PI er en av de mest pålitelige plattformene for prosjektutvikling der ute nå. Med høyere prosessorhastighet og 1 GB RAM kan PI brukes til mange høyprofilerte prosjekter som bildebehandling og tingenes internett. Det er mange kule ting som kan gjøres med en PI, men en trist funksjon er at den ikke har en innebygd ADC-modul.
Bare hvis Raspberry Pi kunne ha grensesnitt med sensorer, kan den bli kjent med de virkelige parametrene og samhandle med den. De fleste av sensorene der ute er analoge sensorer, og derfor bør vi lære å bruke en ekstern ADC-modul IC med Raspberry Pi for å grensesnitt disse sensorene. I dette prosjektet vil vi lære hvordan vi kan grensesnitt Flex Sensor med Raspberry Pi og vise dens verdier på LCD-skjermen.
Nødvendig materiale:
- Raspberry Pi (hvilken som helst modell)
- ADC0804 IC
- 16 * 2 LCD-skjerm
- Flex-sensor
- Motstander og kondensatorer
- Brettbrett eller perfebrett.
ADC0804 8-biters ADC-modul med en kanal:
Før vi går videre, la oss lære om denne ADC0804 IC og hvordan du bruker denne med bringebær pi. ADC0804 er en enkeltkanals 8-biters IC, noe som betyr at den kan lese en enkelt ADC-verdi og kartlegge den til 8-bits digitale data. Disse 8-bits digitale dataene kan leses av Raspberry Pi, og verdien vil derfor være 0-255 siden 2 ^ 8 er 256. Som vist i pinouts på IC nedenfor, benyttes pinnene DB0 til DB7 til å lese disse digitale verdier.
En annen viktig ting her er at ADC0804 opererer på 5V, og det gir utgang i 5V logisk signal. I 8-pins utgang (som representerer 8bits) gir hver pin + 5V-utgang for å representere logikk '1'. Så problemet er at PI-logikken er på + 3.3v, så du kan ikke gi + 5V-logikk til + 3.3V GPIO-pinnen på PI. Hvis du gir + 5V til en hvilken som helst GPIO-pin av PI, blir kortet skadet.
Så for å trappe ned logikknivået fra + 5V, vil vi bruke spenningsdelerkrets. Vi har diskutert Voltage Divider Circuit tidligere undersøkt det for ytterligere avklaring. Det vi skal gjøre er, vi bruker to motstander for å dele + 5V-logikk i 2 * 2,5V-logikk. Så etter divisjon vil vi gi + 2.5v logikk til Raspberry Pi. Så når logikk '1' presenteres av ADC0804, vil vi se + 2.5V på PI GPIO Pin, i stedet for + 5V. Lær mer om ADC her: Introduksjon til ADC0804.
Nedenfor er bildet av ADC-modulen ved hjelp av ADC0804 som vi har bygget på Perf Board:
Kretsdiagram og forklaring:
Det komplette kretsskjemaet for grensesnitt mellom Flex Sensor og Raspberry Pi er vist nedenfor. Forklaringen på det samme er som følger.
Denne bringebær-pi-flex- sensorkretsen kan synes å være litt kompleks med mange ledninger, men hvis du ser nærmere på, er de fleste ledningene direkte koblet fra LCD-skjermen og 8-biters datapinnen til Raspberry pi. Tabellen nedenfor vil hjelpe deg når du oppretter og verifiserer tilkoblingene.
Pin-navn |
Bringebær Pin-nummer |
Raspberry Pi GPIO-navn |
LCD Vss |
Pin 4 |
Bakke |
LCD Vdd |
Pin 6 |
Vcc (+ 5V) |
LCD-skjerm |
Pin 4 |
Bakke |
LCD Rs |
Pin 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Bakke |
LCD E |
Pin 40 |
GPIO 21 |
LCD D4 |
Pinne 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 (+ 5V) |
ADC0804 B0 |
Pin 19 (gjennom 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (gjennom 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (gjennom 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (gjennom 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (gjennom 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (gjennom 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (gjennom 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (gjennom 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Du kan bruke følgende bilde for å bestemme pin-tallene på bringebær siden.
Som alle ADC-moduler krever ADC0804 IC også et klokkesignal for å fungere, heldigvis har denne ICen en intern klokkilde, så vi må bare legge RC-kretsen til CLK in og CLK R-pinnene som vist i kretsen. Vi har brukt en verdi på 10K og 105pf, men vi kan bruke en hvilken som helst verdi nær som 1uf, 0.1uf, 0.01uf skal også fungere.
For å koble til Flex-sensoren har vi brukt en potensiell delerkrets ved hjelp av en 100K motstand. Ettersom Flex-sensoren er bøyd, vil motstanden tvers over den variere, og potensialet vil også falle over motstanden. Dette fallet måles av ADC0804 IC, og 8-biters data genereres tilsvarende.
Sjekk andre prosjekter relatert til Flex Sensor:
- Flex Sensor-grensesnitt med AVR Microcontroller
- Arduino-basert Angry Bird Game Controller ved hjelp av Flex Sensor
- Servomotorstyring av Flex-sensor
- Genererer toner ved å trykke på fingrene ved hjelp av Arduino
Programmering av Raspberry Pi:
Når vi er ferdige med tilkoblingene, bør vi lese statusen til disse 8-bitene ved hjelp av Raspberry Pi og konvertere dem til desimal slik at vi kan gjøre bruk av dem. Programmet for å gjøre det samme og vise de resulterende verdiene på LCD-skjermen er gitt på slutten av denne siden. Videre blir koden forklart i små klynger nedenfor.
Vi trenger et LCD- bibliotek for å grensesnitt LCD med Pi. For dette bruker vi biblioteket utviklet av shubham, som vil hjelpe oss å grensesnitt en 16 * 2 LCD-skjerm med en Pi i firetrådsmodus. Vi trenger også biblioteker for å bruke tid og Pi GPIO-pinner.
Merk : lcd.py skal lastes ned herfra og plasseres i samme katalog der dette programmet er lagret. Først da vil koden kompileres.
importer lcd #Import the LCD library by [email protected] import time #Import time import RPi.GPIO as GPIO #GPIO will be refered as GPIO only
De LCD pinne definisjonene tilordnes de variablene som er vist nedenfor. Merk at disse tallene er GPIO-pin-tallene og ikke de faktiske pin-tallene. Du kan bruke tabellen ovenfor for å sammenligne GPIO-tall med pin-tall. Matrisen binær vil omfatte alle datapinnetallene, og matrisen bits vil lagre den resulterende verdien av alle GPIO pinnene.
#LCD pin definisjoner D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binære = (10,9,11,5,6,13,19,26) #Array av pin tall koble til DB0- DB7 bits = #resulting verdier for 8-bit data
Nå må vi definere inngangs- og utgangspinnene. De syv datapinnene vil være inngangspinnen og utløserpinnen (RST og INTR) vil være utgangspinnen. Vi kan bare lese 8-biters dataverdier fra inngangspinnen hvis vi utløser utgangspinnen høy for en bestemt tid i henhold til databladet. Siden vi har deklarert binære pinner i binær array, kan vi bruke en for loop for erklæring som vist nedenfor.
for binær i binær: GPIO.setup (binær, GPIO.IN) #Alle binære pinner er inngangspinner #Trigger pin GPIO.setup (22, GPIO.OUT) #WR og INTR pinner er utdata
Ved å bruke LCD-bibliotekets kommandoer kan vi initialisere LCD-modulen og vise en liten intro-melding som vist nedenfor.
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 ()
Inne i den uendelige mens sløyfen begynner vi å lese de binære verdiene konvertere dem til desimal og oppdatere resultatet på LCD. Som sagt tidligere før vi leste ADC-verdiene, bør vi gjøre at utløserpinnen er høy i en bestemt tid for å aktivere ADC-konverteringen. Dette gjøres ved å bruke følgende linjer.
GPIO.output (22, 1) #Turn ON Trigger time. Sleep (0.1) GPIO.output (22, 0) #Turn OFF Trigger
Nå skal vi lese 8-datapinnene og oppdatere resultatet i bits-arrayet. For å gjøre dette bruker vi en for loop for å sammenligne hver inngangspinne med True og False. Hvis det er sant, vil den respektive bitmatrisen bli laget som 1, vil den bli laget som 0. Dette var alle 8-biters data vil bli gjort 0 og 1 av verdiene som er lest.
#Les inngangspinnene og oppdater resultatet i bitoppstilling for i i rekkevidde (8): hvis (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Når vi har oppdatert bitsmatrisen, bør vi konvertere denne matrisen til desimalverdi. Dette er bare binær til desimal konvertering. For 8-bits binære data er 2 ^ 8 256. Så vi får desimaldata fra 0 til 255. I python brukes operatoren “**” for å finne kraften til en hvilken som helst verdi. Siden bits starter med MSB multipliserer vi det med 2 ^ (7-posisjon). På denne måten kan vi konvertere alle binære verdier til desimaldata og deretter vise dem på LCD-skjermen
#beregn desimalverdien ved hjelp av bitarray for i i området (8): desimal = desimal + (bits * (2 ** (7-i)))
Når vi vet desimalverdien, er det enkelt å beregne spenningsverdien. Vi må bare multiplisere den med 19.63. For hver 8-bits 5VADC er hver bit en analogi på 19,3 milli volt. Den resulterende spenningsverdien er verdien av spenningen som har dukket opp over pinnene Vin + og Vin- til ADC0804 IC.
# beregne spenningsverdi Spenning = desimal * 19,63 * 0,001 # en enhet er 19,3 mV
Ved å bruke verdien av spenningen kan vi bestemme hvordan flex-sensoren er bøyd og i hvilken retning den er bøyd. I linjene nedenfor har jeg nettopp sammenlignet avlesespenningsverdiene med forhåndsbestemte verdier for spenning for å indikere posisjonen til Flex-sensoren på LCD-skjermen.
#compare voltage and display status of sensor mylcd.setCursor (1,1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("Stabil")
På samme måte kan du bruke spenningsverdien til å utføre en hvilken som helst oppgave du ønsker at Raspberry Pi skal utføre.
Viser Flex Sensor-verdi på LCD ved hjelp av Raspberry Pi:
Arbeidet med prosjektet er veldig enkelt. Men sørg for at du har lastet ned headerfilen lcd.py og plassert den i samme katalog der det nåværende programmet er til stede. Gjør så at tilkoblingene vises i kretsskjemaet ved hjelp av et brødbrett eller et perfbrett, og kjør programmet nedenfor på Pi-en din, og du bør få ting til å fungere. Du setter opp skal se ut som dette nedenfor.
Som vist vil LCD-skjermen vise desimalverdi, spenningsverdi og sensorposisjon. Bare bøy sensoren fremover eller bakover, og du bør kunne se spenningen og desimalverdien bli variert, også vises en statustekst. Du kan koble til en hvilken som helst sensor og legge merke til at spenningen over den blir variert.
Komplett arbeid av opplæringen finner du i videoen nedenfor. Håper du forsto prosjektet og likte å bygge noe lignende. Hvis du er i tvil, la dem være i kommentarseksjonen eller på forumet, så vil jeg prøve mitt beste for å svare på dem.