- Требуемый материал:
- ADC0804 Одноканальный 8-разрядный модуль АЦП:
- Принципиальная схема и пояснения:
- Программирование Raspberry Pi:
- Отображение значения датчика Flex на ЖК-дисплее с использованием Raspberry Pi:
Raspberry Pi - это плата на базе процессора с архитектурой ARM, разработанная для инженеров-электронщиков и любителей. PI сейчас является одной из самых надежных платформ для разработки проектов. Благодаря более высокой скорости процессора и 1 ГБ оперативной памяти PI может использоваться для многих крупных проектов, таких как обработка изображений и Интернет вещей. Есть много интересных вещей, которые можно сделать с помощью PI, но одна печальная особенность заключается в том, что он не имеет встроенного модуля ADC.
Только если Raspberry Pi может быть сопряжен с датчиками, он может узнать о параметрах реального мира и взаимодействовать с ним. Большинство датчиков являются аналоговыми, поэтому нам следует научиться использовать ИС внешнего модуля АЦП с Raspberry Pi для взаимодействия этих датчиков. В этом проекте мы узнаем, как можно связать датчик Flex с Raspberry Pi и отобразить его значения на ЖК-экране.
Требуемый материал:
- Raspberry Pi (любая модель)
- ADC0804 IC
- ЖК-дисплей 16 * 2
- Гибкий датчик
- Резисторы и конденсаторы
- Макетная или перфорированная плата.
ADC0804 Одноканальный 8-разрядный модуль АЦП:
Прежде чем мы продолжим, давайте узнаем об этой микросхеме ADC0804 и о том, как использовать ее с Raspberry Pi. ADC0804 - это одноканальная 8-битная ИС, что означает, что он может считывать одно значение АЦП и отображать его в 8-битные цифровые данные. Эти 8-битные цифровые данные могут быть прочитаны Raspberry Pi, поэтому значение будет 0-255, так как 2 ^ 8 равно 256. Как показано на распиновке IC ниже, контакты DB0 - DB7 используются для чтения этих цифровых значения.
Теперь еще одна важная вещь: ADC0804 работает при 5 В и поэтому выдает логический сигнал 5 В. В 8-контактном выходе (представляющем 8 бит) каждый контакт обеспечивает выход +5 В для представления логической «1». Таким образом, проблема в том, что логика PI имеет + 3,3 В, поэтому вы не можете подать логику + 5 В на вывод + 3,3 В GPIO PI. Если вы подадите +5 В на любой вывод GPIO PI, плата будет повреждена.
Поэтому для понижения логического уровня с + 5В мы будем использовать схему делителя напряжения. Мы уже обсуждали схему делителя напряжения, предварительно рассмотрев ее для дальнейшего разъяснения. Мы будем использовать два резистора, чтобы разделить логику +5 В на логику 2 * 2,5 В. Итак, после разделения мы передадим Raspberry Pi логику +2,5 В. Таким образом, всякий раз, когда ADC0804 представляет логическую «1», мы будем видеть + 2,5 В на выводе PI GPIO вместо + 5 В. Узнайте больше об АЦП здесь: Введение в ADC0804.
Ниже приведено изображение модуля ADC, использующего ADC0804, который мы построили на Perf Board:
Принципиальная схема и пояснения:
Полная принципиальная схема для взаимодействия Flex Sensor с Raspberry Pi показана ниже. Объяснение того же заключается в следующем.
Эта схема гибкого датчика Raspberry Pi может показаться немного сложной с большим количеством проводов, но если вы присмотритесь, большинство проводов напрямую подключены от ЖК-дисплея и 8-битного вывода данных к Raspberry Pi. Следующая таблица поможет вам при выполнении и проверке соединений.
Имя булавки |
Номер булавки Raspberry |
Имя Raspberry Pi GPIO |
LCD Vss |
Штырь 4 |
Земля |
ЖК-дисплей Vdd |
Пин 6 |
Vcc (+ 5 В) |
ЖК-Ви |
Штырь 4 |
Земля |
ЖК-дисплей Rs |
Штырь 38 |
GPIO 20 |
ЖК-RW |
Штырь 39 |
Земля |
ЖК-экран E |
Штырь 40 |
GPIO 21 |
ЖК-дисплей D4 |
Пин 3 |
GPIO 2 |
ЖК-дисплей D5 |
Контакт 5 |
GPIO 3 |
ЖК-дисплей D6 |
Штырь 7 |
GPIO 4 |
ЖК-дисплей D7 |
Штырь 11 |
GPIO 17 |
ADC0804 Vcc |
Контакт 2 |
Vcc (+ 5 В) |
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 с тех пор.
Как и все модули АЦП, ADC0804 IC также требует для работы тактового сигнала, к счастью, эта IC имеет внутренний источник тактовой частоты, поэтому нам просто нужно добавить RC-схему к контактам CLK in и CLK R, как показано на схеме. Мы использовали значение 10K и 105pf, но мы можем использовать любое близкое значение, например 1uf, 0.1uf, 0.01uf, также должно работать.
Затем для подключения датчика Flex мы использовали схему делителя потенциала с резистором 100 кОм. По мере изгиба гибкого датчика сопротивление на нем будет меняться, как и падение потенциала на резисторе. Это падение измеряется микросхемой ADC0804, и соответственно генерируются 8-битные данные.
Проверьте другие проекты, связанные с Flex Sensor:
- Интерфейс гибкого датчика с микроконтроллером AVR
- Игровой контроллер Angry Bird на базе Arduino с гибким датчиком
- Управление серводвигателем с помощью гибкого датчика
- Генерация тонов касанием пальцев с помощью Arduino
Программирование Raspberry Pi:
Как только мы закончим с подключениями, мы должны прочитать статус этих 8-битов с помощью Raspberry Pi и преобразовать их в Decimal, чтобы мы могли их использовать. Программа для того же и отображения результирующих значений на ЖК-экране приведена в конце этой страницы. Далее код поясняется ниже в виде небольших кусков.
Нам нужна ЖК- библиотека для сопряжения ЖК-дисплея с Pi. Для этого мы используем библиотеку, разработанную shubham, которая поможет нам связать ЖК-дисплей 16 * 2 с Pi в четырехпроводном режиме. Также нам нужны библиотеки для использования времени и контактов Pi GPIO.
Примечание . Lcd.py должен быть загружен отсюда и помещен в тот же каталог, где сохранена эта программа. Только тогда код скомпилируется.
import lcd # Импортируйте ЖК-библиотеку с помощью [email protected] import time # Import time import RPi.GPIO as GPIO #GPIO будет обозначаться только как GPIO
Определения выводов ЖК-дисплея присвоены переменным, как показано ниже. Обратите внимание, что эти числа являются номерами контактов GPIO, а не фактическими номерами контактов. Вы можете использовать приведенную выше таблицу для сравнения номеров GPIO с номерами контактов. Двоичный массив будет включать все номера выводов данных, а биты массива будут хранить результирующее значение всех выводов GPIO.
# Определение выводов ЖК-дисплея D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 двоичный массив = (10,9,11,5,6,13,19,26) # Массив номеров контактов, подключенных к DB0- DB7 bits = # результирующие значения 8-битных данных
Теперь нам нужно определить входные и выходные контакты. Семь контактов данных будут входными контактами, а триггерный контакт (RST и INTR) будет выходным контактом. Мы можем прочитать 8-битные значения данных с входного контакта, только если мы активируем выходной сигнал на высоком уровне в течение определенного времени в соответствии с таблицей данных. Так как мы объявили бинарные контакты в массиве binarys мы можем использовать для петли для объявления, как показано ниже.
для двоичных файлов в двоичных файлах: GPIO.setup (binary, GPIO.IN) # Все двоичные выводы являются входными выводами # Триггерный вывод GPIO.setup (22, GPIO.OUT) # Выводы WR и INTR выводятся
Теперь, используя команды библиотеки ЖКД, мы можем инициализировать модуль ЖКД и отобразить небольшое вступительное сообщение, как показано ниже.
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 Пи ") time.sleep (2) mylcd.clear ()
Внутри бесконечного во время цикла, мы начинаем чтение двоичных значений преобразовать их в десятичную и обновить результат на ЖК - дисплее. Как было сказано ранее, прежде чем мы считываем значения АЦП, мы должны сделать вывод триггера высоким в течение определенного времени, чтобы активировать преобразование АЦП. Это делается с помощью следующих строк.
GPIO.output (22, 1) # Включить Trigger time.sleep (0.1) GPIO.output (22, 0) # Выключить триггер
Теперь мы должны прочитать 8 контактов данных и обновить результат в массиве битов. Для этого мы используем цикл for для сравнения каждого входного контакта с True и False. Если true, соответствующий битовый массив будет равен 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-позиционный). Таким образом, мы можем преобразовать все двоичные значения в десятичные данные, а затем отобразить их на ЖК-дисплее.
# вычислить десятичное значение, используя битовый массив для i в диапазоне (8): decimal = decimal + (биты * (2 ** (7-i)))
Зная десятичное значение, легко вычислить значение напряжения. Нам просто нужно умножить это на 19,63. Потому что для 8-битного 5VADC каждый бит - это аналог 19,3 милливольта. Результирующее значение напряжения - это значение напряжения, которое появилось на выводах Vin + и Vin- микросхемы ADC0804.
# вычислить значение напряжения Voltage = десятичное * 19,63 * 0,001 # одна единица измерения - 19,3 мВ
Используя значение напряжения, мы можем определить, как был изогнут датчик изгиба и в каком направлении он был изогнут. В следующих строках я только что сравнил считанные значения напряжения с заранее определенными значениями напряжения, чтобы указать положение гибкого датчика на ЖК-экране.
# сравнить напряжение и отобразить состояние датчика 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 на ЖК-дисплее с использованием Raspberry Pi:
Работа над проектом очень проста. Но убедитесь, что вы загрузили файл заголовка lcd.py и поместили его в тот же каталог, где находится ваша текущая программа. Затем выполните соединения, показанные на принципиальной схеме, используя макетную или перфорированную плату, и запустите приведенную ниже программу на своем Pi, и все должно заработать. Ваша настройка должна выглядеть примерно так, как показано ниже.
Как показано, на ЖК-дисплее будет отображаться десятичное значение, значение напряжения и положение датчика. Просто согните датчик вперед или назад, и вы увидите, как меняются напряжение и десятичное значение, также будет отображаться текст состояния. Вы можете подключить любой датчик и заметить, что напряжение на нем меняется.
Полную работу учебника можно найти на видео, приведенном ниже. Надеюсь, вы поняли проект и вам понравилось создавать что-то подобное. Если у вас есть сомнения, оставьте их в разделе комментариев или на форумах, и я постараюсь ответить на них изо всех сил.