- Material som krävs:
- ADC0804 Single Channel 8-bit ADC-modul:
- Kretsschema och förklaring:
- Programmering av Raspberry Pi:
- Visar Flex Sensor-värde på LCD med Raspberry Pi:
Raspberry Pi är ett ARM-arkitekturbaserat kort designat för elektroniska ingenjörer och hobbyister. PI är en av de mest betrodda projektutvecklingsplattformarna där ute nu. Med högre processorhastighet och 1 GB RAM kan PI användas för många högprofilerade projekt som bildbehandling och Internet of Things. Det finns många häftiga saker som kan göras med en PI, men en sorglig funktion är att den inte har en inbyggd ADC-modul.
Endast om Raspberry Pi kunde kopplas ihop med sensorer kan den lära känna de verkliga världens parametrar och interagera med den. De flesta av sensorerna där ute är analoga sensorer och därför bör vi lära oss att använda en extern ADC-modul IC med Raspberry Pi för att gränssnitt dessa sensorer. I det här projektet kommer vi att lära oss hur vi kan koppla Flex Flex Sensor med Raspberry Pi och visa dess värden på LCD-skärmen.
Material som krävs:
- Raspberry Pi (vilken modell som helst)
- ADC0804 IC
- 16 * 2 LCD-skärm
- Flex-sensor
- Motstånd och kondensatorer
- Brödbräda eller perfbräda.
ADC0804 Single Channel 8-bit ADC-modul:
Innan vi fortsätter, låt oss lära oss om denna ADC0804 IC och hur man använder den med hallon pi. ADC0804 är en 8-bitars IC med en kanal, vilket betyder att den kan läsa ett enda ADC-värde och mappa det till 8-bitars digital data. Dessa 8-bitars digitala data kan läsas av Raspberry Pi, så värdet kommer att vara 0-255 eftersom 2 ^ 8 är 256. Som visas i uttagen på IC nedan, används stiften DB0 till DB7 för att läsa dessa digitala värden.
Nu är en annan viktig sak här, ADC0804 arbetar vid 5V och så ger den utdata i 5V logisk signal. I 8-stiftsutgång (representerande 8bits) ger varje stift + 5V-utgång för att representera logik '1'. Så problemet är att PI-logiken är + 3.3v, så du kan inte ge + 5V-logik till + 3.3V GPIO-stiftet på PI. Om du ger + 5V till någon GPIO-stift av PI, skadas kortet.
Så för att minska logiknivån från + 5V kommer vi att använda spänningsdelarkretsen. Vi har diskuterat Voltage Divider Circuit tidigare undersökt det för ytterligare förtydligande. Vad vi ska göra är att vi använder två motstånd för att dela + 5V-logik i 2 * 2,5V-logik. Så efter division kommer vi att ge + 2,5v-logik till Raspberry Pi. Så när logik '1' presenteras av ADC0804 ser vi + 2.5V vid PI GPIO-stiftet, istället för + 5V. Läs mer om ADC här: Introduktion till ADC0804.
Nedan är bilden av ADC-modulen med ADC0804 som vi har byggt på Perf Board:
Kretsschema och förklaring:
Det fullständiga kretsschemat för gränssnitt mellan Flex Sensor och Raspberry Pi visas nedan. Förklaringen av detsamma är som följer.
Denna hallon pi flex sensorkrets kan tyckas vara lite komplex med många kablar, men om du tittar närmare på är de flesta kablarna direkt anslutna från LCD-skärmen och 8-bitars datapinnen till Raspberry pi. Följande tabell hjälper dig när du skapar och verifierar anslutningarna.
Pin-namn |
Hallon Pin-nummer |
Raspberry Pi GPIO-namn |
LCD Vss |
Stift 4 |
Jord |
LCD Vdd |
Stift 6 |
Vcc (+ 5V) |
LCD-skärm |
Stift 4 |
Jord |
LCD Rs |
Stift 38 |
GPIO 20 |
LCD RW |
Stift 39 |
Jord |
LCD E |
Stift 40 |
GPIO 21 |
LCD D4 |
Stift 3 |
GPIO 2 |
LCD D5 |
Stift 5 |
GPIO 3 |
LCD D6 |
Stift 7 |
GPIO 4 |
LCD D7 |
Stift 11 |
GPIO 17 |
ADC0804 Vcc |
Stift 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Stift 19 (till och med 5.1K) |
GPIO 10 |
ADC0804 B1 |
Stift 21 (till och med 5.1K) |
GPIO 9 |
ADC0804 B2 |
Stift 23 (till och med 5.1K) |
GPIO 11 |
ADC0804 B3 |
Stift 29 (till och med 5.1K) |
GPIO 5 |
ADC0804 B4 |
Stift 31 (till och med 5.1K) |
GPIO 6 |
ADC0804 B5 |
Stift 33 (till och med 5.1K) |
GPIO 13 |
ADC0804 B6 |
Stift 35 (till och med 5.1K) |
GPIO 19 |
ADC0804 B7 |
Stift 37 (till och med 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Stift 15 |
GPIO 22 |
Du kan använda följande bild för att bestämma pin-numren på Raspberry sedan.
Liksom alla ADC-moduler kräver ADC0804 IC också en klocksignal för att fungera, lyckligtvis har denna IC en intern klockkälla, så vi måste bara lägga till RC-kretsen till CLK in- och CLK R-stiften som visas i kretsen. Vi har använt ett värde på 10K och 105pf, men vi kan använda vilket värde som helst som 1uf, 0.1uf, 0.01uf bör också fungera.
För att ansluta Flex-sensorn har vi använt en potentialdelarkrets med ett 100K-motstånd. Eftersom Flex-sensorn är böjd kommer motståndet över att variera och potentialen kommer också att falla över motståndet. Denna nedgång mäts av ADC0804 IC och 8-bitars data genereras därefter.
Kontrollera andra projekt relaterade till Flex Sensor:
- Flex-sensorgränssnitt med AVR-mikrokontroller
- Arduino-baserad Angry Bird Game Controller med Flex Sensor
- Servomotorstyrning med flexsensor
- Generera toner genom att knacka på fingrar med Arduino
Programmering av Raspberry Pi:
När vi är klara med anslutningarna bör vi läsa status för dessa 8-bitar med hjälp av Raspberry Pi och konvertera dem till decimal så att vi kan använda dem. Programmet för att göra detsamma och visa de resulterande värdena på LCD-skärmen ges i slutet av denna sida. Vidare förklaras koden i små junks nedan.
Vi behöver ett LCD- bibliotek för att koppla ihop LCD med Pi. För detta använder vi biblioteket som utvecklats av shubham som hjälper oss att gränssnitt en 16 * 2 LCD-skärm med en Pi i fyrtrådsläge. Vi behöver också bibliotek för att använda tid och Pi GPIO-stift.
Obs! Lcd.py ska laddas ner härifrån och placeras i samma katalog där programmet sparas. Först då kompileras koden.
importera lcd #Importera LCD-biblioteket av [email protected] importtid #Importera tid importera RPi.GPIO som GPIO #GPIO refereras endast till GPIO
De LCD stift definitioner tilldelas variablerna enligt nedan. Observera att dessa siffror är GPIO-pin-numren och inte de faktiska pin-numren. Du kan använda tabellen ovan för att jämföra GPIO-nummer med PIN-nummer. Matrisen binär kommer att innehålla alla datapinnnummer och arraybitarna kommer att lagra det resulterande värdet på alla GPIO-pinnar.
#LCD-stiftdefinitioner D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binärer = (10,9,11,5,6,13,19,26) # Matris med stiftnummer anslut till DB0- DB7 bitar = #resultatvärden för 8-bitars data
Nu måste vi definiera in- och uttapparna. De sju datapinnarna är ingångsstiftet och utlösarstiftet (RST och INTR) kommer att vara utgångsstiftet. Vi kan bara läsa 8-bitars datavärden från ingångsstiftet om vi utlöser utgångsstiftet högt under en viss tid enligt databladet. Eftersom vi har deklarerat binära stift i binära array kan vi använda en for loop för deklaration som visas nedan.
för binär i binär: GPIO.setup (binär, GPIO.IN) # Alla binära stift är ingångsstift # Triggerstift GPIO.setup (22, GPIO.OUT) #WR och INTR-stift matas ut
Nu med hjälp av kommandona för LCD-biblioteket kan vi initiera LCD-modulen och visa ett litet introduktionsmeddelande enligt nedan.
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 ()
Inuti det oändliga medan slingan börjar vi läsa de binära värdena omvandla dem till decimal och uppdatera resultatet på LCD. Som sagt tidigare innan vi läser ADC-värdena bör vi göra att utlösningsstiftet är högt under en viss tid för att aktivera ADC-omvandlingen. Detta görs med följande rader.
GPIO.output (22, 1) # Turn ON Trigger time.sleep (0.1) GPIO.output (22, 0) # Turn OFF Trigger
Nu ska vi läsa 8-datapinnarna och uppdatera resultatet i bitmatrisen. För att göra detta använder vi en for- loop för att jämföra varje ingångsstift med True och False. Om det är sant kommer respektive bitmatris att göras som 1, annars kommer det att göras som 0. Detta var all 8-bitars data kommer att göras 0 respektive 1 av de lästa värdena.
#Läs inmatningsstiften och uppdatera resultatet i bitmatrisen för i inom intervallet (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
När vi har uppdaterat bitmatrisen bör vi konvertera denna matris till decimalvärde. Detta är inget annat än binär till decimalomvandling. För 8-bitars binär data är 2 ^ 8 256. Så vi får decimaldata från 0 till 255. I python används operatören "**" för att hitta kraften i vilket värde som helst. Eftersom bitar börjar med MSB multiplicerar vi det med 2 ^ (7-position). På så sätt kan vi konvertera alla binära värden till decimaldata och sedan visa det på LCD-skärmen
#beräkna decimalvärdet med hjälp av bitmatris för i i intervallet (8): decimal = decimal + (bitar * (2 ** (7-i)))
När vi väl vet decimalvärdet är det lätt att beräkna spänningsvärdet. Vi måste bara multiplicera det med 19,63. För en 8-bitars 5VADC är varje bit en analogi på 19,3 milli volt. Det resulterande spänningsvärdet är det spänningsvärde som har dykt upp över stiften Vin + och Vin- på ADC0804 IC.
#beräkna spänningsvärde Spänning = decimal * 19,63 * 0,001 # en enhet är 19,3 mV
Med hjälp av spänningsvärdet kan vi bestämma hur flex-sensorn har böjts och i vilken riktning den har böjts. I nedanstående rader har jag just jämfört de lästa spänningsvärdena med förutbestämda spänningsvärden för att indikera Flex-sensorns 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å samma sätt kan du använda spänningsvärdet för att utföra alla uppgifter som du vill att Raspberry Pi ska utföra.
Visar Flex Sensor-värde på LCD med Raspberry Pi:
Arbetet med projektet är mycket enkelt. Men se till att du har laddat ner rubrikfilen lcd.py och placerat den i samma katalog där ditt aktuella program finns. Gör sedan anslutningarna som visas i kretsschemat med hjälp av ett brödbräda eller ett perfekt kort och kör programmet nedan på din Pi så ska du få saker att fungera. Du ställer in ska se ut så här nedan.
Som visas visar LCD-skärmen decimalvärde, spänningsvärde och sensorposition. Böj bara sensorn framåt eller bakåt så kan du se att spänningen och decimalvärdet blir varierat, också visas en statustext. Du kan ansluta vilken sensor som helst och märka att spänningen över den blir varierad.
Hela arbetet med handledningen finns i videon nedan. Hoppas att du förstod projektet och gillade att bygga något liknande. Om du är tveksam, lämna dem i kommentarsektionen eller på forumet så försöker jag göra mitt bästa för att svara på dem.