- ADC0804 i Raspberry Pi:
- Czujnik temperatury LM35:
- Wymagane składniki:
- Objaśnienie obwodu i pracy:
- Objaśnienie programowania:
Omówiliśmy głównie wszystkie podstawowe komponenty współpracujące z Raspberry Pi w naszej serii samouczków Raspberry Pi. Omówiliśmy wszystkie samouczki w prosty i szczegółowy sposób, aby każdy, niezależnie od tego, czy pracował z Raspberry Pi, czy nie, mógł łatwo uczyć się z tej serii. Po przejściu wszystkich samouczków będziesz mógł zbudować kilka projektów wysokiego poziomu przy użyciu Raspberry Pi.
Więc tutaj projektujemy pierwszą aplikację na podstawie poprzednich tutoriali. Pierwszą podstawową aplikacją jest Czytelnia Temperatury autorstwa Raspberry Pi. I możesz monitorować odczyty na komputerze.
Jak omówiono w poprzednich samouczkach, w Raspberry Pi nie ma wewnętrznych kanałów ADC. Więc jeśli chcemy połączyć jakiekolwiek czujniki analogowe, potrzebujemy jednostki konwersji ADC. W jednym z naszych tutoriali połączyliśmy układ ADC0804 z Raspberry Pi w celu odczytania wartości analogowej. Więc przejdź przez to przed zbudowaniem termometru pokojowego.
ADC0804 i Raspberry Pi:
ADC0804 to układ przeznaczony do konwersji sygnału analogowego na 8-bitowe dane cyfrowe. Ten chip jest jedną z popularnych serii ADC. Jest to 8-bitowa jednostka konwersji, więc mamy wartości lub wartości od 0 do 255. Rozdzielczość tego układu zmienia się w zależności od wybranego przez nas napięcia odniesienia, o tym porozmawiamy później. Poniżej znajduje się Pinout ADC0804:
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 + 5V 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 PI. Tak więc, ilekroć logika `` 1 '' jest prezentowana przez ADC0804, zobaczymy + 2,5 V na Pin PI GPIO zamiast + 5 V.
Czujnik temperatury LM35:
Teraz do odczytu temperatury pomieszczenia potrzebujemy czujnika. Tutaj użyjemy czujnika temperatury LM35. Temperatura jest zwykle mierzona w stopniach Celsjusza lub Fahrenheita. Czujnik „LM35” dostarcza dane wyjściowe w stopniach Celsjusza.
Jak pokazano na rysunku, LM35 jest trójstykowym urządzeniem podobnym do tranzystora. Piny są ponumerowane jako, PIN1 = Vcc - Zasilanie (podłączone do + 5 V)
PIN2 = sygnał lub wyjście (podłączony do układu ADC)
PIN3 = uziemienie (podłączony do masy)
Ten czujnik zapewnia zmienne napięcie na wyjściu w zależności od temperatury. Na każdy wzrost temperatury o + 10 mV będzie rosło napięcie na pinie wyjściowym o + 10mV. Więc jeśli temperatura wynosi 0◦ Celsjusza, wyjście czujnika będzie wynosić 0V, jeśli temperatura wynosi 10◦ Celsjusza, wyjście czujnika będzie wynosić + 100mV, jeśli temperatura wynosi 25◦ Celsjusza, wyjście czujnika będzie wynosić + 250mV.
Wymagane składniki:
Tutaj używamy Raspberry Pi 2 Model B z Raspbian Jessie OS. Wszystkie podstawowe wymagania sprzętowe i programowe zostały wcześniej omówione, możesz je sprawdzić we wprowadzeniu do Raspberry Pi, poza tym, czego potrzebujemy:
- Kołki łączące
- Rezystor 1KΩ (17 sztuk)
- Potencjometr 10K
- Kondensator 0,1 µF
- Kondensator 100 µF
- Kondensator 1000 µF
- ADC0804 IC
- Czujnik temperatury LM35
- Deska do chleba
Objaśnienie obwodu i pracy:
Połączenia wykonane w celu podłączenia Raspberry do ADC0804 i LM35 są pokazane na schemacie poniżej.
Wyjście LM35 ma dużo wahań napięcia; więc kondensator 100 uF jest używany do wygładzenia wyjścia, jak pokazano na rysunku.
ADC zawsze ma dużo szumów, ten szum może znacznie wpłynąć na wydajność, więc używamy kondensatora 0.1uF do filtracji szumów. Bez tego będzie dużo wahań na wyjściu.
Układ działa na zegarze oscylatora RC (rezystor-kondensator). Jak pokazano na schemacie obwodu , C2 i R20 tworzą zegar. Ważną rzeczą do zapamiętania jest to, że kondensator C2 można zmienić na niższą wartość, aby uzyskać wyższą szybkość konwersji ADC. Jednak przy większej prędkości zmniejszy się dokładność. Jeśli więc aplikacja wymaga większej dokładności, wybierz kondensator o większej wartości, a dla większej prędkości wybierz kondensator o niższej wartości.
Jak powiedziano wcześniej, LM35 zapewnia + 10mV na każdy stopień Celsjusza. Maksymalna temperatura, którą można zmierzyć LM35 to 150ºC. Więc będziemy mieć maksymalnie 1,5 V na zacisku wyjściowym LM35. Ale domyślne napięcie odniesienia ADC0804 wynosi + 5V. Jeśli więc użyjemy tej wartości odniesienia, rozdzielczość wyjścia będzie niska, ponieważ używalibyśmy maksymalnie (5 / 1,5) 34% zakresu wyjścia cyfrowego.
Na szczęście ADC0804 ma regulowany pin Vref (PIN9), jak pokazano na powyższym schemacie pinów. Więc ustawimy Vref układu na + 2V. Aby ustawić Vref + 2V, musimy podać napięcie + 1V (VREF / 2) na PIN9. Tutaj używamy potencjometru 10K do regulacji napięcia na PIN9 do + 1V. Użyj woltomierza, aby uzyskać dokładne napięcie.
Wcześniej używaliśmy czujnika temperatury LM35 do odczytu temperatury w pomieszczeniu za pomocą Arduino i mikrokontrolera AVR. Sprawdź również pomiar wilgotności i temperatury za pomocą Arduino
Objaśnienie programowania:
Po podłączeniu wszystkiego zgodnie ze schematem obwodu, możemy włączyć PI, aby napisać program w PYHTON.
Porozmawiamy o kilku komendach, których będziemy używać w programie PYHTON, Zamierzamy zaimportować plik GPIO z biblioteki, poniższa funkcja umożliwia zaprogramowanie pinów GPIO PI. Zmieniamy również nazwę „GPIO” na „IO”, więc w programie zawsze, gdy będziemy chcieli odwołać się do pinów GPIO, użyjemy słowa „IO”.
importuj RPi.GPIO jako IO
Czasami, gdy piny GPIO, których próbujemy użyć, mogą wykonywać inne funkcje. W takim przypadku podczas wykonywania programu będziemy otrzymywać ostrzeżenia. Poniższe polecenie mówi PI, aby zignorował ostrzeżenia i kontynuował program.
IO.setwarnings (fałszywe)
Możemy odnosić się do pinów GPIO PI, albo przez numer pinu na płycie, albo przez numer ich funkcji. Tak jak „PIN 29” na płycie to „GPIO5”. Więc mówimy tutaj albo będziemy reprezentować pinezkę jako „29” lub „5”.
IO.setmode (IO.BCM)
Ustawiamy 8 pinów jako piny wejściowe. Wykryjemy 8-bitowe dane ADC przez te piny.
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
Jeśli warunek w nawiasach klamrowych jest prawdziwy, instrukcje wewnątrz pętli zostaną wykonane raz. Jeśli więc pin 19 GPIO przejdzie w stan wysoki, instrukcje wewnątrz pętli IF zostaną wykonane raz. Jeśli pin 19 GPIO nie przejdzie w stan wysoki, instrukcje wewnątrz pętli IF nie zostaną wykonane.
if (IO.input (19) == True):
Poniższe polecenie jest używane jako pętla wieczna, z tym poleceniem instrukcje wewnątrz tej pętli będą wykonywane w sposób ciągły.
Podczas gdy 1:
Dalsze objaśnienie kodu znajduje się w sekcji Kod poniżej.
Po napisaniu programu pora go wykonać. Przed wykonaniem programu omówmy podsumowanie tego, co dzieje się w obwodzie. Pierwszy czujnik LM35 mierzy temperaturę w pomieszczeniu i podaje napięcie analogowe na swoim wyjściu. To zmienne napięcie przedstawia temperaturę liniowo z + 10mV na ºC. Ten sygnał jest podawany do układu ADC0804, ten układ konwertuje wartość analogową na wartość cyfrową z 255/200 = 1,275 zliczenia na 10mv lub 1,275 zliczenia dla 1 stopnia. Ta liczba jest pobierana przez PI GPIO. Program konwertuje licznik na wartość temperatury i wyświetla go na ekranie. Poniżej przedstawiono typową temperaturę odczytywaną przez PI, Stąd mamy ten monitor temperatury Raspberry Pi.