- Potrebný materiál:
- ADC0804 jednokanálový 8-bitový modul ADC:
- Schéma zapojenia a vysvetlenie:
- Programovanie Raspberry Pi:
- Zobrazenie hodnoty senzora Flex na LCD pomocou Raspberry Pi:
Raspberry Pi je doska založená na procesore ARM architektúry určená pre elektronických inžinierov a fandov. PI je jednou z najdôveryhodnejších platforiem pre vývoj projektov. Vďaka vyššej rýchlosti procesora a 1 GB RAM môže byť PI použitý pre mnoho významných projektov, ako je spracovanie obrazu a internet vecí. S PI sa dá urobiť veľa skvelých vecí, ale jednou smutnou vlastnosťou je, že nemá zabudovaný modul ADC.
Iba ak je možné Raspberry Pi prepojiť so senzormi, môže získať informácie o parametroch skutočného sveta a interagovať s nimi. Väčšina snímačov existuje analógových snímačov, a preto by sme sa mali naučiť používať na ich prepojenie externý modul ADC s integrovaným obvodom Raspberry Pi. V tomto projekte sa dozvieme, ako môžeme prepojiť snímač Flex s Raspberry Pi a zobraziť jeho hodnoty na obrazovke LCD.
Potrebný materiál:
- Raspberry Pi (akýkoľvek model)
- ADC0804 IC
- 16 * 2 LCD displej
- Flex senzor
- Rezistory a kondenzátory
- Doska na varenie alebo doska na dokončenie.
ADC0804 jednokanálový 8-bitový modul ADC:
Predtým, ako budeme pokračovať, sa dozvieme viac o tomto ADC0804 IC a o tom, ako ho používať s malinovou pi. ADC0804 je jednokanálový 8-bitový integrovaný obvod, čo znamená, že dokáže načítať jednu hodnotu ADC a mapovať ju na 8-bitové digitálne údaje. Tieto 8-bitové digitálne dáta dokáže načítať Raspberry Pi, takže ich hodnota bude 0-255, pretože 2 ^ 8 je 256. Ako je znázornené na obrázkoch IC nižšie, na ich čítanie sa používajú piny DB0 až DB7 hodnoty.
Ďalšou dôležitou vecou je, že ADC0804 pracuje pri 5 V, a preto poskytuje výstup v 5 V logickom signáli. Na 8 pinovom výstupe (predstavuje 8 bitov) poskytuje každý pin + 5 V výstup, ktorý predstavuje logickú hodnotu „1“. Takže problém je v tom, že PI logika je +3,3 V, takže nemôžete dať + 5V logiku na +3,3 V GPIO pin PI. Ak dáte + 5 V akémukoľvek pinu GPIO PI, doska sa poškodí.
Takže na zostupnú logickú úroveň z + 5 V budeme používať obvod deliča napätia. Diskutovali sme o obvode Divider Divider Circuit, ktorý sme predtým podrobnejšie preskúmali. Čo urobíme je, že pomocou dvoch rezistorov rozdelíme logiku + 5V na 2 * 2,5V logiku. Takže po rozdelení dáme Raspberry Pi logiku + 2,5 V. Takže kedykoľvek ADC0804 predstavuje logiku „1“, uvidíme na PI GPIO Pin + 2,5 V namiesto + 5 V. Viac informácií o ADC sa dozviete tu: Úvod do ADC0804.
Nižšie je uvedený obrázok modulu ADC využívajúceho modul ADC0804, ktorý sme vytvorili na doske Perf Board:
Schéma zapojenia a vysvetlenie:
Kompletná schéma zapojenia pre prepojenie senzora Flex s Raspberry Pi je uvedená nižšie. Vysvetlenie toho istého je nasledujúce.
Tento obvod senzora maliny pi flex sa môže javiť ako trochu zložitý s množstvom vodičov, ale ak sa pozriete bližšie, väčšina vodičov je priamo pripojená z LCD a 8-bitového dátového kolíka k Raspberry pi. Nasledujúca tabuľka vám pomôže pri vytváraní a overovaní pripojení.
Názov špendlíka |
Číslo malinového špendlíka |
Názov GPIO Raspberry Pi |
LCD Vss |
Pin 4 |
Uzemnenie |
LCD Vdd |
Pin 6 |
Vcc (+ 5 V) |
LCD Vee |
Pin 4 |
Uzemnenie |
LCD Rs |
Kolík 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Uzemnenie |
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 (do 5,1 kB) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (do 5,1 kB) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (do 5,1 kB) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (do 5,1 kB) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (do 5,1 kB) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (do 5,1 kB) |
GPIO 13 |
ADC0804 B6 |
Kolík 35 (do 5,1 kB) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (do 5,1 kB) |
GPIO 26 |
ADC0804 WR / INTR |
Kolík 15 |
GPIO 22 |
Na nasledujúcom obrázku môžete určiť čísla pinov na Raspberry.
Rovnako ako všetky moduly ADC, aj IC ADC0804 vyžaduje na svoju činnosť hodinový signál. Našťastie má tento IC interný zdroj hodín, takže musíme len pridať obvod RC do pinov CLK in a CLK R, ako je to znázornené v obvode. Použili sme hodnotu 10K a 105pf, ale môžeme použiť akúkoľvek blízku hodnotu, napríklad 1uf, 0,1uf, 0,01uf by tiež malo fungovať.
Potom sme na pripojenie senzora Flex použili obvod deliča potenciálov pomocou 100K rezistora. Keď je snímač Flex ohnutý, odpor sa bude meniť a bude klesať aj potenciál cez odpor. Tento pokles sa meria pomocou ADC0804 IC a podľa toho sa generujú 8-bitové dáta.
Skontrolujte ďalšie projekty súvisiace s Flex Sensor:
- Prepojenie snímača ohybu s mikrokontrolérom AVR
- Herný ovládač Angry Bird na báze Arduina využívajúci snímač Flex
- Ovládanie servomotora pomocou Flex senzora
- Generovanie tónov klepnutím na prsty pomocou Arduina
Programovanie Raspberry Pi:
Po dokončení pripojení by sme mali prečítať stav týchto 8 bitov pomocou Raspberry Pi a previesť ich na desatinné miesto, aby sme ich mohli využiť. Program, ktorý robí to isté a zobrazuje výsledné hodnoty na obrazovke LCD, je uvedený na konci tejto stránky. Ďalej je kód vysvetlený do malých odkazov nižšie.
Na prepojenie LCD s Pi potrebujeme knižnicu LCD. K tomu používame knižnicu vyvinutú spoločnosťou shubham, ktorá nám pomôže prepojiť 16 * 2 LCD displej s Pi v štvorvodičovom režime. Potrebujeme tiež knižnice, aby využívali čas a kolíky Pi GPIO.
Poznámka : Súbor lcd.py by sa mal stiahnuť odtiaľto a umiestniť do rovnakého adresára, kde je uložený tento program. Až potom sa kód skompiluje.
import lcd # Import knižnice LCD na adrese [email protected] čas importu # čas importu import RPi.GPIO ako GPIO #GPIO bude odporúčané iba ako GPIO
Definície pinov LCD sú priradené premenným, ako je uvedené nižšie. Upozorňujeme, že tieto čísla sú čísla pinov GPIO, a nie skutočné čísla pinov. V tabuľke vyššie môžete porovnať čísla GPIO s číslami pinov. Binárny súbor poľa bude obsahovať všetky čísla pinov údajov a bity poľa uloží výslednú hodnotu všetkých pinov GPIO.
# Definície pinov LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binárnych súborov = (10,9,11,5,6,13,19,26) # Pole čísel pinov pripojených k DB0- Bity DB7 = #výsledné hodnoty 8-bitových údajov
Teraz musíme definovať vstupné a výstupné piny. Sedem dátových pinov bude vstupný pin a spúšťací pin (RST a INTR) bude výstupný pin. Hodnoty 8-bitových údajov môžeme načítať zo vstupného kolíka iba vtedy, ak podľa údajového listu aktivujeme výstupný kolík vysoko na konkrétny čas. Vzhľadom k tomu, aby sme vyhlásili binárne kolíky binarys poli môžeme použiť pre sláčiky na vyhlásenie, ako je uvedené nižšie.
pre binárne súbory v binárnych súboroch: GPIO.setup (binárne, GPIO.IN) # Všetky binárne kolíky sú vstupné kolíky # Spúšťací kolík GPIO.setup (22, GPIO.OUT) # Výstupné kolíky WR a INTR
Teraz pomocou príkazov knižnice LCD môžeme inicializovať modul LCD a zobraziť malú úvodnú správu, ako je uvedené nižšie.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) # Úvodná správa mylcd.Print ("Flex senzor s") mylcd.setCursor (2,1) mylcd.Print ("Raspberry" Pi ") time.sleep (2) mylcd.clear ()
Vnútri nekonečna , zatiaľ čo slučky, začneme čítať binárne hodnoty previesť na desatinné čiarky a aktualizovať výsledok na displeji. Ako sme už povedali skôr, ako sme si prečítali hodnoty ADC, mali by sme nastaviť spúšťací kolík tak, aby bol na určitý čas vysoko, aby sa aktivovala konverzia ADC. To sa deje pomocou nasledujúcich riadkov.
GPIO.output (22, 1) #Turn ON Trigger time.sleep (0,1) GPIO.output (22, 0) #Turn OFF Trigger
Teraz by sme si mali prečítať 8-dátové piny a výsledok aktualizovať v bitovom poli. Aby sme to dosiahli, použijeme slučku for na porovnanie každého vstupného pinu s True a False. Ak je to pravda, príslušné bitové pole sa urobí ako 1, inak sa urobí ako 0. To bolo všetko, 8-bitové dáta sa urobia 0 a 1 sa bude čítať z príslušných hodnôt.
# Prečítajte si vstupné piny a výsledkom aktualizácie je bitové pole pre i v rozsahu (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Keď sme aktualizovali pole bitov, mali by sme toto pole previesť na desatinnú hodnotu. Nejde o nič iné ako binárnu až desatinnú konverziu. Pre 8-bitové binárne dáta je 2 ^ 8 256. Takže dostaneme desatinné dáta od 0 do 255. V pythone sa operátor „**“ používa na vyhľadanie sily akejkoľvek hodnoty. Pretože bity začínajú MSB, vynásobíme ich 2 ^ (7-polohové). Týmto spôsobom môžeme previesť všetky binárne hodnoty na desatinné dáta a potom ich zobraziť na LCD
#vypočítajte desatinnú hodnotu pomocou bitového poľa pre i v rozsahu (8): decimal = decimal + (bits * (2 ** (7-i)))
Keď poznáme desatinnú hodnotu, je ľahké vypočítať hodnotu napätia. Musíme to ešte znásobiť 19,63. Pretože pre 8-bitový 5VADC je každý bit obdobou 19,3 mili voltov. Výsledná hodnota napätia je hodnota napätia, ktorá sa objavila na pinoch Vin + a Vin- na IC ADC0804.
# vypočítajte hodnotu napätia Napätie = desatinné miesto * 19,63 * 0,001 # jedna jednotka má 19,3 mV
Pomocou hodnoty napätia môžeme určiť, ako bol ohnutý flex senzor a v akom smere bol ohnutý. V nasledujúcich riadkoch som práve porovnal načítané hodnoty napätia s vopred určenými hodnotami napätia, aby som označil polohu snímača Flex na obrazovke LCD.
# porovnaj napatie a stav zobrazenia senzora mylcd.setCursor (1,1) if (Voltage> 3,8): mylcd.Print ("Bent Forward") elif (Voltage <3,5): mylcd.Print ("Bent Backward") else: mylcd.Print ("stabilný")
Podobne môžete použiť hodnotu napätia na vykonanie akejkoľvek úlohy, ktorú má Raspberry Pi vykonať.
Zobrazenie hodnoty senzora Flex na LCD pomocou Raspberry Pi:
Fungovanie projektu je veľmi jednoduché. Uistite sa však, že ste si stiahli hlavičkový súbor lcd.py a umiestnili ho do rovnakého adresára, v ktorom je aktuálny program. Potom urobte zapojenia zobrazené v schéme zapojenia pomocou nepájivej dosky alebo dosky perf a spustite nasledujúci program na vašom Pi a mali by ste začať pracovať. Nižšie by ste mali nastaviť niečo podobné.
Ako je znázornené, na LCD displeji sa zobrazí desatinná hodnota, hodnota napätia a poloha snímača. Stačí ohnúť senzor dopredu alebo dozadu a mali by ste vidieť, ako sa mení napätie a desatinná hodnota, taktiež sa zobrazí stavový text. Môžete pripojiť akýkoľvek snímač a všimnúť si, že sa napätie na ňom mení.
Kompletné fungovanie tutoriálu nájdete na videu uvedenom nižšie. Dúfam, že ste pochopili projekt a radi ste stavali niečo podobné. Ak máte pochybnosti, nechajte ich v sekcii komentárov alebo na fórach a ja sa pokúsim v ich silách odpovedať.