- Nødvendigt materiale:
- ADC0804 Single Channel 8-bit ADC-modul:
- Kredsløbsdiagram og forklaring:
- Programmering af Raspberry Pi:
- Viser Flex Sensor-værdi på LCD ved hjælp af Raspberry Pi:
Raspberry Pi er et ARM-arkitekturbaseret kort designet til elektroniske ingeniører og hobbyister. PI er en af de mest pålidelige projektudviklingsplatforme derude nu. Med højere processorhastighed og 1 GB RAM kan PI bruges til mange højt profilerede projekter som billedbehandling og Internet of Things. Der er mange seje ting, der kan gøres med en PI, men en trist funktion er, at den ikke har et indbygget ADC-modul.
Kun hvis Raspberry Pi kunne forbindes med sensorer, kan den lære om de virkelige verdens parametre og interagere med den. De fleste sensorer derude er analoge sensorer, og derfor bør vi lære at bruge et eksternt ADC-modul IC med Raspberry Pi til at interface disse sensorer. I dette projekt lærer vi, hvordan vi kan interface Flex Sensor med Raspberry Pi og vise dens værdier på LCD-skærmen.
Nødvendigt materiale:
- Raspberry Pi (enhver model)
- ADC0804 IC
- 16 * 2 LCD-skærm
- Flex-sensor
- Modstande og kondensatorer
- Brødbræt eller perfbræt.
ADC0804 Single Channel 8-bit ADC-modul:
Før vi går videre, lad os lære om denne ADC0804 IC, og hvordan man bruger dette med hindbær pi. ADC0804 er en enkeltkanals 8-bit IC, hvilket betyder, at den kan læse en enkelt ADC-værdi og kortlægge den til 8-bit digitale data. Disse 8-bit digitale data kan læses af Raspberry Pi, så værdien vil være 0-255, da 2 ^ 8 er 256. Som vist i pinouts på IC nedenfor, benyttes stifterne DB0 til DB7 til at læse disse digitale værdier.
Nu er en anden vigtig ting her, ADC0804 fungerer ved 5V, og det giver output i 5V logisk signal. I 8-pin output (repræsenterer 8 bit) giver hver pin + 5V output til at repræsentere logik '1'. Så problemet er, at PI-logikken er på + 3.3v, så du kan ikke give + 5V-logik til + 3.3V GPIO-stiften på PI. Hvis du giver + 5V til en hvilken som helst GPIO-pin af PI, bliver kortet beskadiget.
Så for at nedtone det logiske niveau fra + 5V bruger vi spændingsdelerkredsløb. Vi har diskuteret Voltage Divider Circuit tidligere undersøgt det for yderligere afklaring. Hvad vi vil gøre er, vi bruger to modstande til at opdele + 5V-logik i 2 * 2,5V-logik. Så efter division vil vi give + 2,5v logik til Raspberry Pi. Så når logik '1' præsenteres af ADC0804, vil vi se + 2.5V ved PI GPIO Pin i stedet for + 5V. Lær mere om ADC her: Introduktion til ADC0804.
Nedenfor er billedet af ADC-modulet ved hjælp af ADC0804, som vi har bygget på Perf Board:
Kredsløbsdiagram og forklaring:
Det komplette kredsløbsdiagram til grænseflade mellem Flex-sensor og Raspberry Pi er vist nedenfor. Forklaringen på det samme er som følger.
Dette hindbær pi flex sensorkredsløb kan synes at være lidt komplekst med mange ledninger, men hvis du ser nærmere på, er de fleste ledninger direkte forbundet fra LCD og 8-bit datapind til Raspberry pi. Følgende tabel hjælper dig med at oprette og verificere forbindelserne.
Pin-navn |
Hindbær pin nummer |
Raspberry Pi GPIO navn |
LCD Vss |
Pin 4 |
Jord |
LCD Vdd |
Pin 6 |
Vcc (+ 5V) |
LCD-skærm |
Pin 4 |
Jord |
LCD Rs |
Pin 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Jord |
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 (+ 5V) |
ADC0804 B0 |
Pin 19 (gennem 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (gennem 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (gennem 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (gennem 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (gennem 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (gennem 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (gennem 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (gennem 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Du kan bruge følgende billede til at bestemme pin-numrene på Raspberry siden.
Som alle ADC-moduler kræver ADC0804 IC også et ursignal for at fungere, heldigvis har denne IC en intern urkilde, så vi skal bare tilføje RC-kredsløbet til CLK in og CLK R-stifter som vist i kredsløbet. Vi har brugt en værdi på 10K og 105pf, men vi kan bruge enhver værdi tæt som 1uf, 0.1uf, 0.01uf skal også fungere.
Derefter for at forbinde Flex-sensoren har vi brugt et potentielt skillekredsløb ved hjælp af en 100K modstand. Da Flex-sensoren er bøjet, vil modstanden henover den variere, og potentialet vil også falde over modstanden. Dette fald måles af ADC0804 IC, og 8-bit data genereres i overensstemmelse hermed.
Tjek andre projekter relateret til Flex Sensor:
- Flex-sensorgrænseflade med AVR-mikrocontroller
- Arduino-baseret Angry Bird Game Controller ved hjælp af Flex Sensor
- Servomotorstyring med Flex-sensor
- Generering af toner ved at trykke på fingre ved hjælp af Arduino
Programmering af Raspberry Pi:
Når vi er færdige med forbindelserne, skal vi læse status for disse 8-bits ved hjælp af Raspberry Pi og konvertere dem til decimal, så vi kan gøre brug af dem. Programmet til at gøre det samme og vise de resulterende værdier på LCD-skærmen findes i slutningen af denne side. Yderligere forklares koden i små junks nedenfor.
Vi har brug for et LCD- bibliotek for at interface LCD med Pi. Til dette bruger vi biblioteket udviklet af shubham, som vil hjælpe os med at interface en 16 * 2 LCD-skærm med en Pi i firetrådstilstand. Vi har også brug for biblioteker for at gøre brug af tid og Pi GPIO-ben.
Bemærk : lcd.py skal downloades herfra og placeres i samme bibliotek, hvor dette program er gemt. Først derefter kompileres koden.
import 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 pin definitioner er tildelt variablerne som vist nedenfor. Bemærk, at disse tal er GPIO-pin-numre og ikke de faktiske pin-numre. Du kan bruge tabellen ovenfor til at sammenligne GPIO-numre med pin-numre. Array-binæret vil omfatte alle datapinnetallene, og array-bitene gemmer den resulterende værdi af alle GPIO-benene.
#LCD pin-definitioner D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binære = (10,9,11,5,6,13,19,26) #Array af pin-numre forbinder til DB0- DB7 bits = #resulterende værdier for 8-bit data
Nu skal vi definere input- og outputpindene. De syv datapinde vil være indgangsstiften, og udløserstiften (RST og INTR) vil være udgangsstiften. Vi kan kun læse 8-bit dataværdier fra input pin, hvis vi udløser output pin høj i en bestemt tid ifølge databladet. Da vi har deklareret de binære ben i binær array, kan vi bruge en for loop til deklaration som vist nedenfor.
for binær i binær: GPIO.setup (binær, GPIO.IN) #Alle binære ben er input pins #Trigger pin GPIO.setup (22, GPIO.OUT) #WR og INTR pins er output
Nu ved hjælp af LCD-bibliotekets kommandoer kan vi initialisere LCD-modulet og vise en lille introduktionsmeddelelse 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 ()
Inde i den uendelige mens løkke begynder vi at læse de binære værdier konvertere dem til decimal og opdatere resultatet på LCD. Som sagt tidligere, før vi læser ADC-værdierne, skal vi gøre udløsertappen til høj i et bestemt tidspunkt for at aktivere ADC-konverteringen. Dette gøres ved hjælp af følgende linjer.
GPIO.output (22, 1) #Turn ON Trigger time. Sleep (0.1) GPIO.output (22, 0) # Sluk OFF trigger
Nu skal vi læse 8-datapindene og opdatere resultatet i bitsarrayet. For at gøre dette bruger vi en for- sløjfe til at sammenligne hver input-pin med True og False. Hvis det er sandt, bliver de respektive bitarrays lavet som 1 ellers, bliver de lavet som 0. Dette var alle 8-bit-dataene, der blev lavet 0 og 1 af de læste værdier.
#Læs inputpindene, og opdater resultatet i bitarray for i inden for rækkevidde (8): hvis (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Når vi har opdateret bits-arrayet, skal vi konvertere dette array til decimalværdi. Dette er intet andet end binær til decimal konvertering. For 8-bit binære data er 2 ^ 8 256. Så vi får decimaldata fra 0 til 255. I python bruges operatoren “**” til at finde styrken af enhver værdi. Da bits starter med MSB, multiplicerer vi det med 2 ^ (7-position). På denne måde kan vi konvertere alle de binære værdier til decimaldata og derefter vise dem på LCD'et
#beregn decimalværdien ved hjælp af bitarray for i i området (8): decimal = decimal + (bits * (2 ** (7-i)))
Når vi først kender decimalværdien, er det let at beregne spændingsværdien. Vi skal bare gange det med 19.63. Fordi for en 8-bit 5VADC er hver bit en analogi på 19,3 milli volt. Den resulterende spændingsværdi er den værdi af spænding, der er vist over stifterne Vin + og Vin- på ADC0804 IC.
#beregn spændingsværdi Spænding = decimal * 19,63 * 0,001 # en enhed er 19,3 mV
Ved hjælp af værdien af spændingen kan vi bestemme, hvordan flex-sensoren er bøjet, og i hvilken retning den er bøjet. I nedenstående linjer har jeg lige sammenlignet de læste spændingsværdier med forudbestemte spændingsværdier for at indikere Flex-sensorens position på LCD-skærmen.
#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åde kan du bruge spændingsværdien til at udføre enhver opgave, som du ønsker, at Raspberry Pi skal udføre.
Viser Flex Sensor-værdi på LCD ved hjælp af Raspberry Pi:
Arbejdet med projektet er meget simpelt. Men sørg for, at du har downloadet headerfilen lcd.py og har placeret den i den samme mappe, hvor dit nuværende program er til stede. Derefter skal forbindelserne vises i kredsløbsdiagrammet ved hjælp af et brødbræt eller et perfkort, og kør nedenstående program på din Pi, og du skal få ting til at fungere. Du oprettet skal se sådan ud nedenfor.
Som vist vil LCD'et vise decimalværdi, spændingsværdi og sensorposition. Bøj bare sensoren fremad eller bagud, og du skal kunne se spændingen og decimalværdien blive varieret, også vises en statustekst. Du kan forbinde en hvilken som helst sensor og bemærke, at spændingen på tværs af den bliver varieret.
Den komplette bearbejdning af vejledningen kan findes i videoen nedenfor. Håber du forstod projektet og nød at bygge noget lignende. Hvis du er i tvivl, skal du lade dem være i kommentarsektionen eller på foraene, så prøver jeg mit bedste for at besvare dem.