- Необхідний матеріал:
- ADC0804 Одноканальний 8-бітний модуль АЦП:
- Електрична схема та пояснення:
- Програмування Raspberry Pi:
- Відображення значення Flex Sensor на РК-дисплеї за допомогою Raspberry Pi:
Raspberry Pi - це плата на основі процесора ARM, розроблена для інженерів-електронників та любителів. PI - одна з найбільш надійних платформ для розробки проектів, що існують зараз. Завдяки вищій швидкості процесора та 1 ГБ оперативної пам'яті, PI можна використовувати для багатьох важливих проектів, таких як обробка зображень та Інтернет речей. Існує багато цікавих речей, які можна зробити за допомогою PI, але одна сумна особливість полягає в тому, що він не має вбудованого модуля АЦП.
Тільки якщо Raspberry Pi може бути пов’язаний з датчиками, він може дізнатись про параметри реального світу та взаємодіяти з ним. Більшість датчиків є аналоговими, тому нам слід навчитися використовувати зовнішній модуль АЦП з Raspberry Pi для взаємодії цих датчиків. У цьому проекті ми дізнаємось, як ми можемо взаємодіяти гнучкий датчик з Raspberry Pi та відображати його значення на РК-екрані.
Необхідний матеріал:
- Raspberry Pi (будь-яка модель)
- ADC0804 IC
- 16 * 2 РК-дисплей
- Датчик гнучкості
- Резистори та конденсатори
- Макет або дошка для перфорації.
ADC0804 Одноканальний 8-бітний модуль АЦП:
Перш ніж продовжувати далі, давайте дізнаємося про цей ADC0804 IC та як використовувати його з малиновим пі. ADC0804 - це одноканальна 8-бітна мікросхема, тобто вона може зчитувати одне значення ADC і зіставляти його з 8-бітовими цифровими даними. Ці 8-розрядні цифрові дані можуть бути зчитані Raspberry Pi, отже, значення буде 0-255, оскільки 2 ^ 8 дорівнює 256. Як показано в розписках ІС нижче, виводи 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 В. Тож після розподілу ми надамо логіку + 2.5v для Raspberry Pi. Отже, щоразу, коли ADC0804 представляє логіку '1', ми бачимо + 2,5 В на контакті PI GPIO замість + 5 В. Дізнайтеся більше про ADC тут: Вступ до ADC0804.
Нижче наведено зображення модуля ADC з використанням ADC0804, який ми побудували на платформі Perf:
Електрична схема та пояснення:
Повна електрична схема для взаємодії Flex-датчика з Raspberry Pi наведена нижче. Пояснення того ж полягає в наступному.
Ця схема датчика Raspberry Pi flex може здатися дещо складною з великою кількістю проводів, але якщо ви уважніше подивитесь, більшість проводів безпосередньо підключені від РК-дисплея та 8-бітового штифта даних до Raspberry pi. Наступна таблиця допоможе вам під час встановлення та перевірки з’єднань.
Ім'я PIN-коду |
Номер малинового штифта |
Назва Raspberry Pi GPIO |
РК-дисплей Vss |
Контакт 4 |
Земля |
LCD Vdd |
Штифт 6 |
Vcc (+ 5 В) |
LCD Vee |
Контакт 4 |
Земля |
РК-дисплеї |
Штифт 38 |
GPIO 20 |
LCD 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 |
Pin 19 (через 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (через 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 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 |
Pin 37 (через 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Контакт 15 |
GPIO 22 |
Ви можете використовувати наступне зображення для визначення номерів контактів на Raspberry, оскільки.
Як і всі модулі ADC, мікросхема ADC0804 також вимагає тактового сигналу для роботи, на щастя, ця мікросхема має внутрішнє джерело тактової частоти, тому нам просто потрібно додати RC-ланцюг до контактів CLK in і CLK R, як показано в схемі. Ми використовували значення 10K та 105pf, але ми можемо використовувати будь-яке значення, близьке до 1uf, 0.1uf, 0.01uf, також повинно працювати.
Потім для підключення датчика Flex ми використали схему дільника потенціалу за допомогою резистора 100K. У міру згинання датчика Flex опір на ньому буде змінюватися, а також буде падати потенціал на резисторі. Це падіння вимірюється ADC0804 IC і відповідно генеруються 8-бітові дані.
Перевірте інші проекти, пов'язані з Flex Sensor:
- Взаємодія датчика гнучкості з мікроконтролером AVR
- Ігровий контролер Angry Bird на основі Arduino за допомогою Flex Sensor
- Управління сервомотором за допомогою гнучкого датчика
- Генерування тонів натисканням пальців за допомогою Arduino
Програмування Raspberry Pi:
Після того, як ми закінчимо з підключеннями, нам слід прочитати стан цих 8-бітів за допомогою Raspberry Pi і перетворити їх у десяткові, щоб ми могли ними скористатися. Програма для того, щоб зробити те саме і відображення отриманих значень на РК-екрані, наведена в кінці цієї сторінки. Далі код пояснюється невеликими сміттями нижче.
Нам потрібна РК- бібліотека для взаємодії РК з Pi. Для цього ми використовуємо бібліотеку, розроблену Shubham, яка допоможе нам з'єднати РК-дисплей 16 * 2 з Pi в режимі чотирьох дротів. Також нам потрібні бібліотеки, щоб використовувати час і шпильки Pi GPIO.
Примітка : lcd.py слід завантажити звідси і помістити в ту саму директорію, де зберігається ця програма. Тільки тоді код буде скомпільовано.
import lcd #Import the LCD library by [email protected] time import #Import time import RPi.GPIO як GPIO #GPIO буде відображатися лише як GPIO
Визначення РК-контактів присвоюються змінним, як показано нижче. Зверніть увагу, що ці номери є PIN-кодами GPIO, а не фактичними номерами контактів. Ви можете скористатися наведеною вище таблицею для порівняння номерів GPIO та PIN-кодів. Двійковий файл масиву буде включати всі номери контактів даних, а біти масиву зберігатимуть отримане значення всіх штифтів GPIO.
# Визначення контактів LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 бінарі = (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
Тепер, використовуючи команди бібліотеки РК, ми можемо ініціалізувати РК-модуль і відобразити невелике вступне повідомлення, як показано нижче.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Датчик гнучкості з") mylcd.setCursor (2,1) mylcd.Print ("Малина" Pi ") time.sleep (2) mylcd.clear ()
Усередині нескінченного у час циклу, ми починаємо читання довічних значень перетворити їх в десяткову і оновити результат на РК - дисплеї. Як вже було сказано раніше, перед тим, як ми зчитуємо значення АЦП, нам слід встановити високий штифт тригера протягом певного часу для активації перетворення АЦП. Це робиться за допомогою наступних рядків.
GPIO.output (22, 1) # Увімкнути тригер тривалості сплячого режиму (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): десятковий = десятковий + (біти * (2 ** (7-i)))
Коли ми знаємо десяткове значення, можна легко розрахувати значення напруги. Ми просто мусимо помножити його на 19,63. Оскільки для 8-бітового 5VADC кожен біт є аналогією 19,3 мілівольта. Отримане значення напруги - це значення напруги, яке виявилося на штифтах Vin + і Vin- мікросхеми ADC0804.
# обчислити значення напруги Напруга = десятковий * 19,63 * 0,001 # одна одиниця становить 19,3 мВ
Використовуючи значення напруги, ми можемо визначити, як гнувся датчик гнучкості і в якому напрямку він був зігнутий. У наведених нижче рядках я щойно порівняв зчитані значення напруги із заданими значеннями напруги, щоб вказати положення датчика Flex на РК-екрані.
# порівняти напругу та стан відображення датчика mylcd.setCursor (1,1), якщо (Напруга> 3,8): mylcd.Print ("Нахил вперед") elif (Напруга <3,5): mylcd.Print ("Нахил назад") ще: mylcd.Print ("Стабільний")
Так само ви можете використовувати значення напруги для виконання будь-якого завдання, яке ви хочете виконати Raspberry Pi.
Відображення значення Flex Sensor на РК-дисплеї за допомогою Raspberry Pi:
Робота над проектом дуже проста. Але переконайтеся, що ви завантажили файл заголовка lcd.py і помістили його в ту саму директорію, де присутня ваша поточна програма. Потім зробіть з’єднання, показані на електричній схемі, використовуючи макетну дошку або дошку для перфорації, і запустіть нижченаведену програму на своєму Pi, і ви повинні налагодити роботу. Ви налаштовані повинні виглядати приблизно так нижче.
Як показано, на РК-дисплеї відображатимуться десяткове значення, значення напруги та положення датчика. Просто зігніть датчик вперед або назад, і ви зможете побачити, як змінюються значення напруги та десяткового значення, також відображатиметься текст стану. Ви можете підключити будь-який датчик і помітити, що напруга на ньому змінюється.
Повну роботу з підручником можна знайти у відео, поданому нижче. Сподіваюся, ви зрозуміли проект і сподобалося будувати щось подібне. Якщо у вас є якісь сумніви, залиште їх у розділі коментарів або на форумах, і я постараюся з усіх сил відповісти на них.