- ADC0804 и Raspberry Pi:
- LM35 Температурен сензор:
- Необходими компоненти:
- Обяснение на веригата и работата:
- Обяснение на програмирането:
Ние най-вече разгледахме всички основни компоненти, свързани с Raspberry Pi, в нашата серия с уроци за Raspberry Pi. Ние разгледахме всички уроци по прост и подробен начин, така че всеки, независимо дали е работил с Raspberry Pi или не, може лесно да се учи от тази серия. И след като преминете през всички уроци, ще можете да изградите някои проекти на високо ниво с помощта на Raspberry Pi.
Така че тук ние проектираме първо приложение въз основа на предишните уроци. Първото основно приложение е температурата в стаята за четене от Raspberry Pi. И можете да наблюдавате показанията на компютър.
Както беше обсъдено в предишни уроци, в Raspberry Pi няма вътрешно предоставени ADC канали. Така че, ако искаме да свържем аналогови сензори, имаме нужда от преобразувател ADC. И в един от нашите уроци имаме Interfaced ADC0804 чип към Raspberry Pi, за да прочетем аналогова стойност. Така че преминете през него, преди да изградите този термометър за стайна температура.
ADC0804 и Raspberry Pi:
ADC0804 е чип, предназначен за преобразуване на аналогов сигнал в 8-битови цифрови данни. Този чип е една от популярните серии ADC. Това е 8-битова единица за преобразуване, така че имаме стойности или от 0 до 255 стойности. Разделителната способност на този чип се променя въз основа на избраното от нас референтно напрежение, за което ще говорим по-късно. По-долу е Pinout на ADC0804:
Сега друго важно нещо тук е, че ADC0804 работи при 5V и така осигурява изход в 5V логически сигнал. В 8-пинов изход (представляващ 8 бита), всеки пин осигурява + 5V изход за представяне на логика'1 '. Така че проблемът е, че PI логиката е от + 3.3v, така че не можете да дадете + 5V логика на + 3.3V GPIO пина на PI. Ако дадете + 5V на който и да е GPIO пин на PI, платката се поврежда.
Така че, за да намалим логическото ниво от + 5V, ще използваме верига на делителя на напрежението. По-рано обсъждахме верига за разделител на напрежение, за да я разгледаме за допълнителни пояснения. Това, което ще направим, е, че използваме два резистора, за да разделим логиката + 5V на логика 2 * 2.5V. Така че след разделяне ще дадем + 2.5v логика на PI. Така че, когато логиката „1“ е представена от ADC0804, ние ще видим + 2.5V на PI GPIO Pin вместо + 5V.
LM35 Температурен сензор:
Сега за отчитане на температурата в помещението се нуждаем от сензор. Тук ще използваме сензор за температура LM35. Температурата обикновено се измерва в „Целзий“ или „Фаренхайт“. “LM35” сензорът осигурява изход в градуси по Целзий.
Както е показано на фигурата, LM35 е трипиново транзисторно устройство. Щифтовете са номерирани като, PIN1 = Vcc - захранване (свързано към + 5V)
PIN2 = сигнал или изход (свързан към ADC чип)
PIN3 = Земя (Свързана със земята)
Този сензор осигурява променливо напрежение на изхода в зависимост от температурата. За всяко повишаване на температурата с +1 градуса ще има + 10mV по-високо напрежение на изходния щифт. Така че, ако температурата е 0◦ по Целзий, изходът на датчика ще бъде 0V, ако температурата е 10enti по Целзий изходът на датчика ще бъде + 100mV, ако температурата е 25◦ по Целзий изходът на датчика ще бъде + 250mV.
Необходими компоненти:
Тук използваме Raspberry Pi 2 Model B с Raspbian Jessie OS. Всички основни хардуерни и софтуерни изисквания са обсъдени преди това, можете да ги потърсите във въведението на Raspberry Pi, различно от това, от което се нуждаем:
- Свързващи щифтове
- 1KΩ резистор (17 броя)
- 10K пот
- 0.1µF кондензатор
- 100µF кондензатор
- 1000µF кондензатор
- ADC0804 IC
- LM35 Температурен сензор
- Дъска за хляб
Обяснение на веригата и работата:
Връзките, които се извършват за свързване на Raspberry към ADC0804 и LM35, са показани в схемата по-долу.
Изходът LM35 има много колебания на напрежението; така че 100uF кондензатор се използва за изглаждане на изхода, както е показано на фигурата.
ADC винаги има много шум, този шум може значително да повлияе на производителността, затова използваме 0.1uF кондензатор за филтриране на шума. Без това ще има много колебания в изхода.
Чипът работи на RC (Resistor-Capacitor) генератор часовник. Както е показано на електрическата схема , C2 и R20 образуват часовник. Важното нещо, което трябва да запомните, е, че кондензаторът C2 може да бъде променен на по-ниска стойност за по-висока скорост на преобразуване ADC. Но с по-висока скорост ще има намаляване на точността. Така че, ако приложението изисква по-висока точност, изберете кондензатор с по-висока стойност и за по-висока скорост изберете кондензатор с по-ниска стойност.
Както беше казано по-рано, LM35 осигурява + 10mV за всеки градус. Максималната температура, която може да се измери с LM35, е 150 ° по Целзий. Така че ще имаме максимум 1,5 V на изходния терминал LM35. Но стандартното референтно напрежение на ADC0804 е + 5V. Така че, ако използваме тази референтна стойност, разделителната способност на изхода ще бъде ниска, защото ще използваме максимум (5 / 1,5) 34% от обхвата на цифровия изход.
За щастие ADC0804 има регулируем pin на Vref (PIN9), както е показано на неговата Pin диаграма по-горе. Така че ще настроим Vref на чипа на + 2V. За да настроим Vref + 2V, трябва да осигурим напрежение от + 1V (VREF / 2) при PIN9. Тук използваме 10K пот за регулиране на напрежението при PIN9 до + 1V. Използвайте волтметъра, за да получите точното напрежение.
Преди сме използвали сензор за температура LM35 за отчитане на стайната температура с Arduino и с AVR микроконтролер. Също така проверете измерването на влажността и температурата с помощта на Arduino
Обяснение на програмирането:
След като всичко е свързано според схемата, можем да включим PI, за да напишем програмата в PYHTON.
Ще говорим за няколко команди, които ще използваме в програмата PYHTON, Ще импортираме GPIO файл от библиотеката, функцията по-долу ни позволява да програмираме GPIO пинове на PI. Преименуваме също „GPIO“ на „IO“, така че в програмата, когато искаме да се позовем на GPIO щифтове, ще използваме думата „IO“.
импортирайте RPi.GPIO като IO
Понякога, когато GPIO щифтовете, които се опитваме да използваме, може да изпълняват някои други функции. В този случай ще получим предупреждения, докато изпълняваме програмата. Командата по-долу казва на PI да игнорира предупрежденията и да продължи с програмата.
IO.setwarnings (False)
Можем да отнесем GPIO пиновете на PI, или чрез пинов номер на борда, или чрез номера на тяхната функция. Подобно на „ПИН 29“ на платката е „GPIO5“. Така че ние казваме тук, или ще представим щифта тук с '29' или '5'.
IO.setmode (IO.BCM)
Задаваме 8 пина като входни щифтове. Ще открием 8 битови ADC данни от тези щифтове.
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)
В случай, че условието в скобите е вярно, изразите вътре в цикъла ще бъдат изпълнени веднъж. Така че, ако GPIO щифтът 19 върви високо, тогава операторите вътре в контура IF ще бъдат изпълнени веднъж. Ако GPIO щифтът 19 не отиде високо, тогава инструкциите вътре в контура IF няма да бъдат изпълнени.
if (IO.input (19) == True):
Командата отдолу се използва като цикъл завинаги, с тази команда операторите вътре в този цикъл ще се изпълняват непрекъснато.
Докато 1:
Допълнително обяснение на кода е дадено в раздела за кодове по-долу.
След написването на програмата е време да я изпълните. Преди да изпълни програмата, дава възможност за разговори какво се случва във веригата като обобщение. Първият сензор LM35 открива стайната температура и осигурява аналогово напрежение на изхода си. Това променливо напрежение представлява линейно температурата с + 10mV на ºC. Този сигнал се подава към чип ADC0804, този чип преобразува аналоговата стойност в цифрова стойност с 255/200 = 1,275 броя на 10mv или 1,275 броя за 1 градус. Това броене се приема от PI GPIO. Програмата преобразува брояча в стойност на температурата и го показва на екрана. Типичната температура, отчетена от PI, е показана по-долу, Следователно ние сме този температурен монитор на Raspberry Pi.