- Необходим материал:
- ADC0804 Едноканален 8-битов ADC модул:
- Електрическа схема и обяснение:
- Програмиране на Raspberry Pi:
- Показване на стойността на Flex Sensor на LCD с помощта на Raspberry Pi:
Raspberry Pi е ARM архитектура базирана на процесор платка, предназначена за електронни инженери и любители. PI е една от най-надеждните платформи за разработване на проекти в момента. С по-висока скорост на процесора и 1 GB RAM, PI може да се използва за много високопрофилни проекти като Обработка на изображения и Интернет на нещата. Има много страхотни неща, които могат да се направят с PI, но една тъжна характеристика е, че той няма вграден ADC модул.
Само ако Raspberry Pi може да бъде свързан със сензори, той може да се запознае с реалните параметри и да си взаимодейства с него. Повечето от датчиците там са аналогови и следователно трябва да се научим да използваме външен интегрален модул ADC с Raspberry Pi, за да свържем тези сензори. В този проект ще научим как можем да свържем Flex Sensor с Raspberry Pi и да покажем неговите стойности на LCD екран.
Необходим материал:
- Raspberry Pi (всеки модел)
- ADC0804 IC
- 16 * 2 LCD дисплей
- Flex сензор
- Резистори и кондензатори
- Макет или перф борд.
ADC0804 Едноканален 8-битов ADC модул:
Преди да продължим по-нататък, нека научим за тази ADC0804 IC и как да я използваме с малинов пи. ADC0804 е едноканален 8-битов IC, което означава, че може да чете единична стойност на ADC и да го преобразува в 8-битови цифрови данни. Тези 8-битови цифрови данни могат да бъдат прочетени от Raspberry Pi, като по този начин стойността ще бъде 0-255, тъй като 2 ^ 8 е 256. Както е показано в изводите на IC по-долу, щифтовете DB0 до DB7 се използват за четене на тези цифрови стойности.
Сега друго важно нещо тук е, че 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 логика на Raspberry Pi. Така че, когато логиката „1“ е представена от ADC0804, ние ще видим + 2.5V на PI GPIO Pin вместо + 5V. Научете повече за ADC тук: Въведение в ADC0804.
По-долу е картинката на модула ADC, използващ ADC0804 , който сме изградили на Perf Board:
Електрическа схема и обяснение:
Пълната схема на схемата за свързване на Flex Sensor с Raspberry Pi е показана по-долу. Обяснението на същото е следното.
Тази схема на сензор Raspberry Pi flex може да изглежда малко сложна с много проводници, но ако погледнете отблизо, повечето кабели са директно свързани от LCD и 8-битовия щифт за данни към Raspberry pi. Следващата таблица ще ви помогне, докато правите и проверявате връзките.
Име на ПИН |
Номер на Raspberry Pin |
Raspberry Pi GPIO име |
LCD Vss |
ПИН 4 |
Земя |
LCD Vdd |
ПИН 6 |
Vcc (+ 5V) |
LCD Vee |
ПИН 4 |
Земя |
LCD Rs |
ПИН 38 |
GPIO 20 |
LCD RW |
ПИН 39 |
Земя |
LCD E |
ПИН 40 |
GPIO 21 |
LCD D4 |
ПИН 3 |
GPIO 2 |
LCD D5 |
ПИН 5 |
GPIO 3 |
LCD D6 |
Пин 7 |
GPIO 4 |
LCD D7 |
ПИН 11 |
GPIO 17 |
ADC0804 Vcc |
ПИН 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Пин 19 (до 5.1K) |
GPIO 10 |
ADC0804 B1 |
Пин 21 (до 5.1K) |
GPIO 9 |
ADC0804 B2 |
Пин 23 (до 5.1K) |
GPIO 11 |
ADC0804 B3 |
Пин 29 (до 5.1K) |
GPIO 5 |
ADC0804 B4 |
Пин 31 (до 5.1K) |
GPIO 6 |
ADC0804 B5 |
ПИН 33 (до 5.1K) |
GPIO 13 |
ADC0804 B6 |
Пин 35 (до 5.1K) |
GPIO 19 |
ADC0804 B7 |
Пин 37 (до 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
ПИН 15 |
GPIO 22 |
Можете да използвате следната снимка, за да определите номерата на пиновете на Raspberry оттогава.
Подобно на всички ADC модули, ADC0804 IC също изисква тактов сигнал, за да работи, за щастие този IC има вътрешен източник на часовник, така че просто трябва да добавим RC веригата към щифтовете CLK in и CLK R, както е показано във веригата. Използвали сме стойност от 10K и 105pf, но можем да използваме всяка стойност, близка като 1uf, 0.1uf, 0.01uf, също трябва да работи.
След това за свързване на Flex сензора използвахме потенциална разделителна верига, използвайки 100K резистор. Тъй като Flex сензорът е огънат, съпротивлението в него ще варира, както и потенциалният спад в резистора. Този спад се измерва от ADC0804 IC и съответно се генерират 8-битови данни.
Проверете други проекти, свързани с Flex Sensor:
- Flex сензор за връзка с AVR микроконтролер
- Контролер за игра Angry Bird, базиран на Arduino, използващ Flex Sensor
- Управление на серво мотора чрез Flex сензор
- Генериране на тонове чрез потупване на пръсти с помощта на Arduino
Програмиране на Raspberry Pi:
След като приключим с връзките, трябва да прочетем състоянието на тези 8-бита с помощта на Raspberry Pi и да ги преобразуваме в десетични, за да можем да ги използваме. Програмата за извършване на същото и показване на получените стойности на LCD екрана е дадена в края на тази страница. По-нататък кодът е обяснен на малки боклуци по-долу.
Имаме нужда от LCD библиотека, за да свържем LCD с Pi. За целта използваме библиотеката, разработена от shubham, която ще ни помогне да свържем 16 * 2 LCD дисплей с Pi в четирижилен режим. Също така се нуждаем от библиотеки, за да използваме времето и Pi GPIO щифтовете.
Забележка : lcd.py трябва да бъде изтеглен от тук и поставен в същата директория, където е запазена тази програма. Само тогава кодът ще се компилира.
import lcd #Import the LCD library by [email protected] time import #Import time import RPi.GPIO as GPIO #GPIO will be rendered as GPIO only
Определенията на LCD щифтовете се присвояват на променливите, както е показано по-долу. Обърнете внимание, че тези номера са GPIO пиновите номера, а не действителните пин номера. Можете да използвате таблицата по-горе, за да сравните GPIO номерата с номера на ПИН. Бинарният масив ще включва всички номера на ПИН данни, а битовете на масива ще съхраняват получената стойност на всички GPIO пинове.
# LCD дефиниции на изводи D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys = (10,9,11,5,6,13,19,26) # Масив от номера на изводи се свързва с DB0- DB7 бита = # резултатни стойности на 8-битови данни
Сега трябва да дефинираме входните и изходните щифтове. Седемте щифта за данни ще бъдат входният щифт, а щифтът за задействане (RST и INTR) ще бъде изходният щифт. Можем да прочетем 8-битовите стойности на данните от входния щифт само ако задействаме изходния щифт високо за определено време според листа с данни. Тъй като ние обявих двоични щифтове в binarys масив можем да използваме за контур за декларация, както е показано по-долу.
за двоичен файл в двоични файлове: GPIO.setup (двоичен, GPIO.IN) # Всички двоични щифтове са входни щифтове # Тригерен щифт GPIO.setup (22, GPIO.OUT) #WR и INTR щифтове се извеждат
Сега, използвайки командите на библиотеката на LCD, можем да инициализираме LCD модула и да покажем малко въвеждащо съобщение, както е показано по-долу.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
Вътре в безкрайния цикъл while започваме да четем двоичните стойности, да ги преобразуваме в десетични и да актуализираме резултата на LCD. Както беше казано по-рано, преди да прочетем стойностите на ADC, трябва да направим щифта на спусъка да бъде висок за определено време, за да активираме преобразуването ADC. Това се прави, като се използват следните редове.
GPIO.output (22, 1) #TURN ON Trigger time.sleep (0.1) GPIO.output (22, 0) #TURN OFF Trigger
Сега трябва да прочетем пиновете с 8 данни и да актуализираме резултата в битовия масив. За целта използваме цикъл for, за да сравним всеки входен пин с True и False. Ако е вярно, съответният битов масив ще бъде направен като 1, той ще бъде направен като 0. Това беше, че всички 8-битови данни ще бъдат направени 0 и 1 съответно от прочетените стойности.
# Прочетете входните щифтове и актуализирайте резултата в битов масив за i в диапазон (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
След като актуализираме масива от битове, трябва да преобразуваме този масив в десетична стойност. Това не е нищо друго освен преобразуване в двоично в десетично. За 8-битови двоични данни 2 ^ 8 е 256. Така че ще получим десетични данни от 0 до 255. В python операторът „**” се използва за намиране на мощността на всяка стойност. Тъй като битовете започват с MSB, ние го умножаваме с 2 ^ (7-позиция). По този начин можем да преобразуваме всички двоични стойности в десетични данни и след това да ги покажем на LCD
# изчислява десетичната стойност с помощта на битов масив за i в диапазон (8): десетичен = десетичен + (битове * (2 ** (7-i)))
След като знаем десетичната стойност, е лесно да изчислим стойността на напрежението. Просто трябва да го умножим с 19,63. Защото за 8-битов 5VADC всеки бит е аналогия от 19,3 миливолта. Получената стойност на напрежението е стойността на напрежението, което се е появило през щифтовете Vin + и Vin- на ADC0804 IC.
# изчислете стойност на напрежението Напрежение = десетична * 19,63 * 0,001 # една единица е 19,3mV
Използвайки стойността на напрежението, можем да определим как е огънат сензора за огъване и в каква посока е огънат. В долните редове току-що сравних отчетените стойности на напрежението с предварително определени стойности на напрежението, за да покажа позицията на Flex сензора на LCD екрана.
# сравнение на напрежението и състоянието на дисплея на сензора mylcd.setCursor (1,1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("Стабилен")
По същия начин можете да използвате стойността на напрежението, за да изпълните всяка задача, която искате да изпълни Raspberry Pi.
Показване на стойността на Flex Sensor на LCD с помощта на Raspberry Pi:
Работата по проекта е много проста. Но се уверете, че сте изтеглили заглавния файл lcd.py и сте го поставили в същата директория, където се намира текущата ви програма. След това направете връзките, показани на електрическата схема, като използвате макет или перфектна платка и стартирайте програмата по-долу на вашия Pi и трябва да накарате нещо да работи. Можете да настроите трябва да изглежда нещо подобно по-долу.
Както е показано, LCD ще покаже десетичната стойност, стойността на напрежението и позицията на сензора. Просто огънете сензора напред или назад и ще можете да видите как напрежението и десетичната стойност се променят, също така ще се покаже текст на състоянието. Можете да свържете всеки сензор и да забележите, че напрежението в него се променя.
Пълната работа на урока може да бъде намерена във видеото, дадено по-долу. Надявам се, че сте разбрали проекта и сте се радвали да изградите нещо подобно. Ако имате някакви съмнения, оставете ги в раздела за коментари или във форумите и аз ще се постарая да отговоря на тях.