- Wymagany materiał:
- ADC0804 Jednokanałowy 8-bitowy moduł ADC:
- Schemat obwodu i wyjaśnienie:
- Programowanie Raspberry Pi:
- Wyświetlanie wartości czujnika Flex na wyświetlaczu LCD za pomocą Raspberry Pi:
Raspberry Pi to płyta oparta na architekturze ARM przeznaczona dla elektroników i hobbystów. PI jest obecnie jedną z najbardziej zaufanych platform do tworzenia projektów. Dzięki większej szybkości procesora i 1 GB pamięci RAM PI może być używany w wielu ważnych projektach, takich jak przetwarzanie obrazu i Internet rzeczy. Jest wiele fajnych rzeczy, które można zrobić za pomocą PI, ale jedną smutną cechą jest to, że nie ma on wbudowanego modułu ADC.
Tylko, jeśli Raspberry Pi można połączyć z czujnikami, może poznać rzeczywiste parametry i wchodzić z nim w interakcję. Większość dostępnych czujników to czujniki analogowe, dlatego powinniśmy nauczyć się używać zewnętrznego modułu ADC IC z Raspberry Pi do łączenia tych czujników. W tym projekcie dowiemy się, jak połączyć czujnik Flex z Raspberry Pi i wyświetlić jego wartości na ekranie LCD.
Wymagany materiał:
- Raspberry Pi (dowolny model)
- ADC0804 IC
- Wyświetlacz LCD 16 * 2
- Czujnik Flex
- Rezystory i kondensatory
- Płytka prototypowa lub płyta perf.
ADC0804 Jednokanałowy 8-bitowy moduł ADC:
Zanim przejdziemy dalej, dowiedzmy się o tym układzie scalonym ADC0804 i jak go używać z raspberry pi. ADC0804 to jednokanałowy 8-bitowy układ scalony, co oznacza, że może odczytać pojedynczą wartość ADC i odwzorować ją na 8-bitowe dane cyfrowe. Te 8-bitowe dane cyfrowe mogą być odczytane przez Raspberry Pi, więc wartość będzie wynosić 0-255, ponieważ 2 ^ 8 to 256. Jak pokazano na pinoutach układu scalonego poniżej, piny DB0 do DB7 służą do odczytu tych cyfrowych wartości.
Teraz kolejną ważną rzeczą jest to, że ADC0804 działa przy 5 V, a więc dostarcza wyjściowy sygnał logiczny 5 V. Na wyjściu 8-pinowym (reprezentującym 8 bitów) każdy pin zapewnia wyjście + 5 V reprezentujące logikę „1”. Problem polega na tym, że logika PI ma + 3,3 V, więc nie można podać logiki + 5 V na pin + 3,3 V GPIO PI. Jeśli podasz + 5V na którykolwiek pin GPIO PI, płytka zostanie uszkodzona.
Tak więc, aby obniżyć poziom logiki z + 5V, użyjemy obwodu dzielnika napięcia. Omówiliśmy wcześniej obwód dzielnika napięcia, aby uzyskać dalsze wyjaśnienia. Zrobimy, że użyjemy dwóch rezystorów, aby podzielić logikę + 5 V na logikę 2 * 2,5 V. Więc po podzieleniu podamy logikę + 2,5v do Raspberry Pi. Tak więc, ilekroć logika `` 1 '' jest prezentowana przez ADC0804, zobaczymy + 2,5 V na Pin PI GPIO zamiast + 5 V. Dowiedz się więcej o ADC tutaj: Wprowadzenie do ADC0804.
Poniżej znajduje się zdjęcie modułu ADC używającego ADC0804 , który zbudowaliśmy na płycie Perf:
Schemat obwodu i wyjaśnienie:
Pełny schemat połączeń dla połączenia Flex Sensor z Raspberry Pi pokazano poniżej. Wyjaśnienie tego samego jest następujące.
Ten obwód czujnika Raspberry Pi Flex może wydawać się nieco skomplikowany z wieloma przewodami, ale jeśli przyjrzysz się bliżej, większość przewodów jest bezpośrednio połączona z LCD i 8-bitowym pinem danych do Raspberry pi. Poniższa tabela pomoże Ci podczas wykonywania i weryfikacji połączeń.
Nazwa pinu |
Numer PIN maliny |
Nazwa GPIO Raspberry Pi |
LCD Vss |
Pin 4 |
Ziemia |
LCD Vdd |
Pin 6 |
Vcc (+ 5 V) |
Vee LCD |
Pin 4 |
Ziemia |
LCD Rs |
Kołek 38 |
GPIO 20 |
LCD RW |
Kołek 39 |
Ziemia |
LCD E. |
Kołek 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 K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (do 5,1 K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (do 5,1 K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (do 5,1 K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (do 5,1 K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (do 5,1 K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (do 5,1 K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (do 5,1 K) |
GPIO 26 |
ADC0804 WR / INTR |
Kołek 15 |
GPIO 22 |
Możesz użyć poniższego obrazu, aby określić numery pinów na Raspberry od tego czasu.
Podobnie jak wszystkie moduły ADC, układ scalony ADC0804 również wymaga sygnału zegarowego do działania, na szczęście ten układ scalony ma wewnętrzne źródło zegara, więc musimy tylko dodać obwód RC do pinów CLK in i CLK R, jak pokazano na obwodzie. Użyliśmy wartości 10K i 105pf, ale możemy użyć dowolnej wartości zbliżonej, takiej jak 1uf, 0,1uf, 0,01uf.
Następnie do podłączenia czujnika Flex użyliśmy obwodu dzielnika potencjału z rezystorem 100K. Gdy czujnik Flex jest zgięty, rezystancja na nim będzie się zmieniać, podobnie jak spadek potencjału na rezystorze. Spadek ten jest mierzony przez układ scalony ADC0804 i odpowiednio generowane są 8-bitowe dane.
Sprawdź inne projekty związane z Flex Sensor:
- Połączenie czujnika Flex z mikrokontrolerem AVR
- Kontroler gier Angry Bird oparty na Arduino, korzystający z czujnika Flex
- Sterowanie serwomotorem za pomocą czujnika Flex
- Generowanie dźwięków przez stukanie palcami za pomocą Arduino
Programowanie Raspberry Pi:
Gdy skończymy z połączeniami, powinniśmy odczytać stan tych 8-bitów za pomocą Raspberry Pi i przekonwertować je na Decimal, abyśmy mogli z nich skorzystać. Program, który robi to samo i wyświetla wynikowe wartości na ekranie LCD, znajduje się na końcu tej strony. Dalej kod jest wyjaśniony w małych dżunkach poniżej.
Potrzebujemy biblioteki LCD do połączenia LCD z Pi. W tym celu korzystamy z biblioteki opracowanej przez Shubham, która pomoże nam połączyć wyświetlacz LCD 16 * 2 z Pi w trybie czteroprzewodowym. Potrzebujemy również bibliotek, aby wykorzystać czas i piny Pi GPIO.
Uwaga : plik lcd.py należy pobrać stąd i umieścić w tym samym katalogu, w którym zapisano ten program. Dopiero wtedy kod się skompiluje.
importuj lcd # Importuj bibliotekę LCD przez [email protected] czas importu #Import czas importu RPi.GPIO jako GPIO #GPIO będzie oznaczane tylko jako GPIO
Te definicje stykowe LCD są przypisane do zmiennych, jak pokazano poniżej. Zauważ, że te liczby są numerami pinów GPIO, a nie rzeczywistymi numerami pinów. Możesz skorzystać z powyższej tabeli, aby porównać numery GPIO z numerami pinów. Tablica binarna będzie zawierała wszystkie numery pinów danych, a bity tablicy będą przechowywać wynikową wartość wszystkich pinów GPIO.
# Definicje pinów LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarnych = (10,9,11,5,6,13,19,26) # Tablica numerów pinów łączy się z DB0- Bity DB7 = #wynikające wartości 8-bitowych danych
Teraz musimy zdefiniować piny wejściowe i wyjściowe. Siedem pinów danych będzie pinem wejściowym, a pin wyzwalacza (RST i INTR) będzie pinem wyjściowym. Możemy odczytać 8-bitowe wartości danych z pinu wejściowego tylko wtedy, gdy wyzwolimy wysoki pin wyjściowy przez określony czas zgodnie z arkuszem danych. Ponieważ mamy zadeklarowane binarne szpilki w binarys tablicy możemy użyć dla pętli do deklaracji, jak pokazano poniżej.
binarne w binarnych: GPIO.setup (binarne, GPIO.IN) # Wszystkie piny binarne są pinami wejściowymi # Trigger pin GPIO.setup (22, GPIO.OUT) #WR i INTR piny są wyprowadzane
Teraz, używając poleceń biblioteki LCD, możemy zainicjować moduł LCD i wyświetlić mały komunikat wprowadzający, jak pokazano poniżej.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print („Flex Sensor with”) mylcd.setCursor (2,1) mylcd.Print („Malinowy Pi ") time.sleep (2) mylcd.clear ()
Wewnątrz nieskończonej podczas pętli, zaczynamy czytanie wartości binarne konwertować je do przecinku i zaktualizować wynik na wyświetlaczu LCD. Jak wspomniano wcześniej, czytamy wartości ADC , powinniśmy ustawić pin wyzwalacza na wysoki przez określony czas, aby aktywować konwersję ADC. Odbywa się to za pomocą następujących linii.
GPIO.output (22, 1) # Włącz Czas wyzwalania uśpienia (0.1) GPIO.output (22, 0) # Wyłącz Wyzwalacz
Teraz powinniśmy odczytać 8 pinów danych i zaktualizować wynik w tablicy bitów. Aby to zrobić, używamy pętli for , aby porównać każdy pin wejściowy z True i False. Jeśli prawda, odpowiednia tablica bitów zostanie ustawiona jako 1, w przeciwnym razie zostanie ustawiona na 0. To było wszystkie 8-bitowe dane, które zostaną ustawione jako 0 i 1 odpowiednio do odczytanych wartości.
# Przeczytaj piny wejściowe i zaktualizuj wynik w tablicy bitów dla i w zakresie (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
Po zaktualizowaniu tablicy bitów powinniśmy przekonwertować tę tablicę na wartość dziesiętną. To nic innego jak konwersja binarna na dziesiętną. Dla 8-bitowych danych binarnych 2 ^ 8 to 256. Otrzymamy więc dane dziesiętne od 0 do 255. W Pythonie operator „**” służy do znalezienia potęgi dowolnej wartości. Ponieważ bity zaczynają się od MSB, mnożymy je przez 2 ^ (pozycja 7). W ten sposób możemy przekonwertować wszystkie wartości binarne na dane dziesiętne, a następnie wyświetlić je na wyświetlaczu LCD
# oblicz wartość dziesiętną za pomocą tablicy bitów dla i w zakresie (8): decimal = decimal + (bits * (2 ** (7-i)))
Znając wartość dziesiętną, łatwo jest obliczyć wartość napięcia. Wystarczy pomnożyć to przez 19,63. Ponieważ dla 8-bitowego 5VADC każdy bit jest analogią 19,3 mili wolta. Wynikowa wartość napięcia jest wartością napięcia, które pojawiło się na pinach Vin + i Vin- układu scalonego ADC0804.
# obliczyć wartość napięcia Napięcie = dziesiętnie * 19,63 * 0,001 # Jedna jednostka to 19,3 mV
Na podstawie wartości napięcia możemy określić, w jaki sposób został zgięty czujnik flex iw jakim kierunku został zgięty. W poniższych wierszach właśnie porównałem odczytane wartości napięcia z ustalonymi wcześniej wartościami napięcia, aby wskazać położenie czujnika Flex na ekranie LCD.
#porównaj napięcie i wyświetl stan czujnika mylcd.setCursor (1,1) if (Napięcie> 3,8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("Stabilny")
Podobnie możesz użyć wartości napięcia do wykonania dowolnego zadania, które ma wykonać Raspberry Pi.
Wyświetlanie wartości czujnika Flex na wyświetlaczu LCD za pomocą Raspberry Pi:
Działanie projektu jest bardzo proste. Ale upewnij się, że pobrałeś plik nagłówkowy lcd.py i umieściłeś go w tym samym katalogu, w którym znajduje się twój bieżący program. Następnie wykonaj połączenia pokazane na schemacie obwodu za pomocą płytki prototypowej lub płytki perf i uruchom poniższy program na swoim Pi i powinieneś zacząć działać. Konfiguracja powinna wyglądać mniej więcej tak poniżej.
Jak pokazano na wyświetlaczu LCD zostanie wyświetlona wartość dziesiętna, wartość napięcia i pozycja czujnika. Po prostu pochyl czujnik do przodu lub do tyłu i powinieneś być w stanie zobaczyć, jak zmienia się napięcie i wartość dziesiętna, zostanie również wyświetlony tekst statusu. Możesz podłączyć dowolny czujnik i zauważyć, że napięcie na nim się zmienia.
Pełne działanie samouczka można znaleźć na poniższym filmie. Mam nadzieję, że zrozumiałeś projekt i podobało Ci się budowanie czegoś podobnego. Jeśli masz jakiekolwiek wątpliwości, zostaw je w sekcji komentarzy lub na forach, a postaram się jak najlepiej odpowiedzieć.