- Potřebný materiál:
- ADC0804 jednokanálový 8bitový modul ADC:
- Schéma zapojení a vysvětlení:
- Programování Raspberry Pi:
- Zobrazení hodnoty snímače Flex na LCD pomocí Raspberry Pi:
Raspberry Pi je deska založená na procesoru architektury ARM určená pro elektronické inženýry a fandy. PI je jednou z nejdůvěryhodnějších platforem pro vývoj projektů. Díky vyšší rychlosti procesoru a 1 GB RAM lze PI použít pro mnoho významných projektů, jako je zpracování obrazu a internet věcí. Existuje mnoho skvělých věcí, které lze udělat s PI, ale jedna smutná vlastnost je, že nemá vestavěný modul ADC.
Pouze pokud lze Raspberry Pi propojit se senzory, může se seznámit s parametry reálného světa a komunikovat s ním. Většina senzorů tam je analogový senzor, a proto bychom se měli naučit používat externí ADC modul IC s Raspberry Pi k propojení těchto senzorů. V tomto projektu se naučíme, jak můžeme propojit Flex Flex Sensor s Raspberry Pi a zobrazit jeho hodnoty na LCD obrazovce.
Potřebný materiál:
- Raspberry Pi (jakýkoli model)
- ADC0804 IC
- 16 * 2 LCD displej
- Flex senzor
- Rezistory a kondenzátory
- Prkénko nebo prkénko.
ADC0804 jednokanálový 8bitový modul ADC:
Než budeme pokračovat, pojďme se dozvědět více o této ADC0804 IC a jak ji používat s malinovou pi. ADC0804 je jednokanálový 8bitový integrovaný obvod, což znamená, že může číst jednu hodnotu ADC a mapovat ji na 8bitová digitální data. Tato 8bitová digitální data mohou číst Raspberry Pi, takže hodnota bude 0-255, protože 2 ^ 8 je 256. Jak je ukázáno v pinoutech IC níže, ke čtení těchto digitálních se používají piny DB0 až DB7 hodnoty.
Další důležitá věc je, že ADC0804 pracuje na 5V a tak poskytuje výstup v 5V logickém signálu. Na 8 pinovém výstupu (představujícím 8 bitů) poskytuje každý pin výstup + 5 V, který představuje logickou '1'. Takže problém je v tom, že PI logika je +3,3 V, takže nemůžete dát + 5V logiku na +3,3 V GPIO pin PI. Pokud dáte kterémukoli GPIO pinu PI + 5V, deska se poškodí.
Takže k sestupné logické úrovni z + 5V budeme používat obvod děliče napětí. Diskutovali jsme o obvodu děliče napětí dříve, abychom jej pro další objasnění prozkoumali. To, co uděláme, je použít dva odpory k rozdělení logiky + 5V na logiku 2 * 2,5V. Po rozdělení tedy dáme Raspberry Pi logiku + 2,5 V. Takže kdykoli ADC0804 prezentuje logiku „1“, uvidíme na PI GPIO Pinu + 2,5 V namísto + 5 V. Více informací o ADC se dozvíte zde: Úvod do ADC0804.
Níže je obrázek modulu ADC využívajícího ADC0804, který jsme postavili na Perf Board:
Schéma zapojení a vysvětlení:
Kompletní schéma zapojení rozhraní Flex Sensor s Raspberry Pi je uvedeno níže. Vysvětlení je následující.
Tento obvod senzoru Raspberry Pi Flex se může zdát trochu složitý se spoustou vodičů, ale pokud se podíváte blíže, většina vodičů je přímo připojena z LCD a 8bitového datového kolíku k Raspberry Pi. Následující tabulka vám pomůže při vytváření a ověřování připojení.
Název špendlíku |
Číslo malinového kolíku |
Název GPIO Raspberry Pi |
LCD Vss |
Pin 4 |
Přízemní |
LCD Vdd |
Kolík 6 |
Vcc (+ 5 V) |
LCD Vee |
Pin 4 |
Přízemní |
LCD Rs |
Kolík 38 |
GPIO 20 |
LCD RW |
Kolík 39 |
Přízemní |
LCD E |
Kolík 40 |
GPIO 21 |
LCD D4 |
Kolík 3 |
GPIO 2 |
LCD D5 |
Kolík 5 |
GPIO 3 |
LCD D6 |
Pin 7 |
GPIO 4 |
LCD D7 |
Kolík 11 |
GPIO 17 |
ADC0804 Vcc |
Pin 2 |
Vcc (+ 5 V) |
ADC0804 B0 |
Pin 19 (až 5,1 tis.) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (až 5,1 tis.) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (až 5,1 tis.) |
GPIO 11 |
ADC0804 B3 |
Kolík 29 (až 5,1 tis.) |
GPIO 5 |
ADC0804 B4 |
Kolík 31 (až 5,1 tis.) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (až 5,1 tis.) |
GPIO 13 |
ADC0804 B6 |
Kolík 35 (až 5,1 tis.) |
GPIO 19 |
ADC0804 B7 |
Kolík 37 (až 5,1 tis.) |
GPIO 26 |
ADC0804 WR / INTR |
Kolík 15 |
GPIO 22 |
Následující obrázek slouží k určení čísel pinů na Raspberry od roku.
Stejně jako všechny moduly ADC vyžaduje i ADC0804 IC pro svoji činnost hodinový signál, naštěstí má tento IC interní zdroj hodin, takže do obvodů CLK in a CLK R musíme přidat obvod RC, jak je znázorněno v obvodu. Použili jsme hodnotu 10K a 105pf, ale můžeme použít jakoukoli hodnotu blízkou jako 1uf, 0,1uf, 0,01uf by také měla fungovat.
Potom připojit Flex senzor jsme použili potenciální dělič obvodu pomocí 100K odpor. Vzhledem k tomu, že je snímač Flex ohnutý, bude se jeho odpor měnit a stejně tak bude klesat potenciál přes odpor. Tento pokles je měřen IC ADC0804 a podle toho jsou generována 8bitová data.
Podívejte se na další projekty související s Flex Sensor:
- Propojení snímače Flex s mikrokontrolérem AVR
- Herní ovladač Angry Bird založený na Arduinu pomocí senzoru Flex
- Ovládání servomotoru pomocí snímače Flex
- Generování tónů klepnutím na prsty pomocí Arduina
Programování Raspberry Pi:
Jakmile jsme hotovi s připojením, měli bychom si přečíst stav těchto 8 bitů pomocí Raspberry Pi a převést je na desítkové, abychom je mohli využít. Program pro totéž a zobrazování výsledných hodnot na LCD obrazovce je uveden na konci této stránky. Dále je kód vysvětlen do malých junks níže.
K propojení LCD s Pi potřebujeme knihovnu LCD. K tomu používáme knihovnu vyvinutou společností shubham, která nám pomůže propojit 16 * 2 LCD displej s Pi ve čtyřvodičovém režimu. Také potřebujeme knihovny, aby využívaly čas a Pi GPIO piny.
Poznámka : Soubor lcd.py by měl být stažen odsud a umístěn do stejného adresáře, kde je uložen tento program. Teprve potom se kód zkompiluje.
import LCD #Import LCD library by [email protected] import time #Import time import RPi.GPIO as GPIO #GPIO will be referment as GPIO only
Tyto definice LCD kolíky jsou přiřazeny u proměnných, jak je uvedeno níže. Všimněte si, že tato čísla jsou čísla pinů GPIO, a nikoli skutečná čísla pinů. V tabulce výše můžete porovnat čísla GPIO s čísly pinů. Binární pole bude obsahovat všechna čísla datových pinů a bity pole uloží výslednou hodnotu všech pinů GPIO.
# Definice pinů LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binárních souborů = (10,9,11,5,6,13,19,26) # Pole čísel pinů připojených k DB0- Bity DB7 = #výsledné hodnoty 8bitových dat
Nyní musíme definovat vstupní a výstupní piny. Sedm datových pinů bude vstupní pin a spouštěcí pin (RST a INTR) bude výstupní pin. Můžeme číst 8bitové datové hodnoty ze vstupního kolíku pouze v případě, že podle datového listu aktivujeme výstupní kolík vysoko po určitou dobu. Vzhledem k tomu, abychom prohlásili binární kolíky binarys poli můžeme použít pro smyčce na prohlášení, jak je uvedeno níže.
pro binární v binárních souborech: GPIO.setup (binární, GPIO.IN) # Všechny binární piny jsou vstupní piny # Spouštěcí pin GPIO.setup (22, GPIO.OUT) # Výstupy piny WR a INTR
Nyní pomocí příkazů knihovny LCD můžeme inicializovat modul LCD a zobrazit malou úvodní zprávu, jak je znázorněno níže.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro zpráva mylcd.Print ("Flex senzor s") mylcd.setCursor (2,1) mylcd.Print ("Raspberry" Pi ") time.sleep (2) mylcd.clear ()
Uvnitř nekonečné while smyčky začneme číst binární hodnoty, převádíme je na desítková a aktualizujeme výsledek na LCD. Jak již bylo řečeno dříve, než si přečteme hodnoty ADC, měli bychom nastavit aktivační kolík tak, aby byl po určitou dobu vysoký, aby se aktivovala konverze ADC. To se provádí pomocí následujících řádků.
GPIO.output (22, 1) #Turn ON Trigger time. Spánek (0,1) GPIO.output (22, 0) #Turn OFF Trigger
Nyní bychom si měli přečíst 8-datové piny a aktualizovat výsledek v bitovém poli. K tomu použijeme smyčku for k porovnání každého vstupního kolíku s True a False. Pokud je pravda, příslušné bitové pole bude vytvořeno jako 1, jinak bude provedeno jako 0. To bylo vše, 8-bitová data budou vytvořena jako 0 a 1 načtených hodnot.
# Přečtěte si vstupní piny a výsledkem aktualizace je bitové pole pro i v rozsahu (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Jakmile jsme aktualizovali bitové pole, měli bychom toto pole převést na desítkovou hodnotu. Není to nic jiného než binární převod na desítkové. Pro 8bitová binární data je 2 ^ 8 256. Takže získáme desetinná data od 0 do 255. V pythonu se operátor „**“ používá k vyhledání síly jakékoli hodnoty. Protože bity začínají MSB, vynásobíme je 2 ^ (7 pozic). Tímto způsobem můžeme převést všechny binární hodnoty na desítková data a poté je zobrazit na LCD
# vypočítat desítkovou hodnotu pomocí bitového pole pro i v rozsahu (8): decimal = decimal + (bits * (2 ** (7-i)))
Jakmile poznáme desetinnou hodnotu, je snadné vypočítat hodnotu napětí. Musíme to znásobit 19,63. Protože pro 8bitový 5VADC je každý bit analogií 19,3 mili voltů. Výsledná hodnota napětí je hodnota napětí, která se objevila na pinech Vin + a Vin- IC ADC0804.
# vypočítat hodnotu napětí Napětí = desítkově * 19,63 * 0,001 # jedna jednotka je 19,3 mV
Pomocí hodnoty napětí můžeme určit, jak byl flex senzor ohnut a jakým směrem byl ohnut. V níže uvedených řádcích jsem právě porovnal hodnoty načteného napětí s předem určenými hodnotami napětí, které indikují polohu snímače Flex na obrazovce LCD.
# porovnejte napětí a stav displeje senzoru mylcd.setCursor (1,1) if (Voltage> 3,8): mylcd.Print ("Bent Forward") elif (Voltage <3,5): mylcd.Print ("Bent Backward") else: mylcd.Print ("stabilní")
Podobně můžete použít hodnotu napětí k provedení jakéhokoli úkolu, který má Raspberry Pi provést.
Zobrazení hodnoty snímače Flex na LCD pomocí Raspberry Pi:
Práce na projektu je velmi jednoduchá. Ujistěte se však, že jste si stáhli soubor záhlaví lcd.py a umístili jej do stejného adresáře, kde je aktuální program. Poté proveďte připojení zobrazená v schématu zapojení pomocí prkénka nebo desky perf a spusťte níže uvedený program na svém Pi a měli byste začít pracovat. Níže byste měli nastavit něco podobného.
Jak je znázorněno, LCD zobrazí desetinnou hodnotu, hodnotu napětí a polohu senzoru. Stačí ohnout senzor dopředu nebo dozadu a měli byste vidět, jak se napětí a desetinná hodnota mění, také se zobrazí stavový text. Můžete připojit jakýkoli snímač a všimnout si, že napětí na něm se mění.
Kompletní fungování výukového programu najdete na videu níže. Doufám, že jste pochopili projekt a rádi jste stavěli něco podobného. Máte-li jakékoli pochybnosti, nechte je v sekci komentářů nebo na fórech a já se pokusím v jejich silách odpovědět.