Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Простой аналоговый датчик приближения с цифровым интерфейсом (для Raspberry Pi) [последнее обновление:7 февраля 2014 г.]

Raspberry Pi имеет чип Broadcom BCM2835, который управляет 26 контактами GPIO (ввод / вывод общего назначения). В Интернете доступны библиотека C или пакет Python RPi.GPIO, которые можно использовать для управления контактами. Пакет RPi.GPIO по умолчанию включен в большинство систем Raspberry Pi, таких как Raspbian, RPi-версия системы Debian linux.

Одним из недостатков RPi по сравнению с Arduino является отсутствие аналогового вывода. Все контакты GPIO чисто цифровые. Например, если контакт A является выходным контактом, он может выводить только НИЗКИЙ (0 В) или ВЫСОКИЙ (3,3 В), представленный как 0 или 1. Если контакт A является входным контактом, для любого напряжения ниже 0,8 В, приложенного к контакту A. , он принимает значение LOW или 0; для любого напряжения выше 1,3 В (на самом деле удивительно низкого!) он принимает его как HIGH или 1 [ref:RPi GPIO].
Однако в реальном мире просто 0 или 1 случаются редко. Мы всегда получаем информацию, которая может иметь постоянное значение в своем диапазоне. Например, температура может составлять 10 ° C или 50 ° F, 100 ° C или 212 ° F. Эти числа содержат больше информации, чем просто «холодный» или «горячий». Расстояние может составлять 2 см или 10 м, и недостаточно знать только «близко» или «далеко».

Есть несколько способов преодолеть этот недостаток. RPi поддерживает интерфейс SPI или I2C, поэтому мы можем использовать какой-либо внешний аналого-цифровой преобразователь (АЦП) и использовать интерфейс SPI или I2C для получения квазианалогового сигнала через эти АЦП, такие как MCP3008, TLC549, MCP23017 и т. Д. обычно стоит несколько баксов. Однако с дополнительными коммерческими датчиками вся часть может стоить более 20–30 долларов, и сделать систему компактной сложно. Для роботизированного проекта обычно требуется более одного датчика, и стоимость может легко возрасти.

Фактически, во многих ситуациях действительно можно избежать использования этих внешних устройств и при этом получить аналоговый сигналы через цифровые булавки!

Главное - преобразовать аналоговый сигнал во временную длительность. Потому что время всегда аналогично!

Я построил простой инфракрасный датчик приближения, используя несколько инфракрасных светодиодов, один фототранзистор, один транзистор 2N3904 NPN, керамический конденсатор 100 нФ и несколько резисторов малой мощности. И я могу получить некоторые аналоговые показания.

Все элементы одни из самых дешевых на электронном рынке.

На самом деле не имеет значения, какие светодиоды, фототранзисторы или транзисторы NPN используются. Они почти такие же.

Единственное, что может иметь значение, - это конденсатор емкостью 100 нФ (0,1 мкФ). Я использовал низкопрофильный керамический, что, наверное, не лучший выбор. Здесь больше подойдет керамический или пленочный конденсатор класса 1.

Подключите провода + 5V и GND к внешнему источнику питания 5V, также подключите провод GND к земле контактов GPIO Raspberry Pi. Выберите один вывод GPIO, скажем, вывод A, в качестве триггера и подключите его к проводу триггера. Выберите другой контакт GPIO, скажем, контакт B, в качестве входа / выхода сигнала и подключите его к проводу OUT.

Чтобы измерить расстояние до объекта, мы отправляем сигнал запуска, чтобы активировать инфракрасные светодиоды. Свет, излучаемый этими светодиодами, затем отражается объектом перед датчиком. Фототранзистор в середине собирает отраженный свет и генерирует пропорциональный ток. Этот ток используется для интегрирования напряжения на конденсаторе (I =CdV / dt). Контролируя время, за которое напряжение на конденсаторе достигает определенного порогового значения, мы получаем представление о том, какой ток генерировал фототранзистор или, что эквивалентно, сколько света было отражено. Видно, что чем ближе объект, тем больше отраженного света. Тщательно откалибровав синхронизацию датчика, мы сможем получить довольно точное измерение расстояния.

Вот подробный порядок действий:1. Обнулите конденсатор

Сначала установите контакт B как выходной контакт и установите его равным нулю.

GPIO.setup (PIN_B, GPIO.OUT)
GPIO.output (PIN_B, 0)
time.sleep (0,01)

Это разрядит остаточное напряжение на конденсаторе. Обратите внимание, что время RC разряда конденсатора t =RC =500 Ом * 100 нФ =50 мкс =0,00005 сек. Поддерживая нулевое напряжение на выводе B в течение 200RC, мы гарантируем, что конденсатор полностью разряжен (остаточное напряжение должно быть в e-200 =10-87 раз больше исходного остаточного напряжения). Установите контакт B как вход

Теперь мы используем контакт B как входной контакт для получения данных из фототранзистора.
GPIO.setup (PIN, GPIO.IN)

3. Зажгите светодиоды

Пора включить инфракрасные светодиоды.

GPIO.setup (PIN_A, GPIO.OUT)
GPIO.output (PIN_A, 1)

Это установит напряжение на контакте триггера на 3,3 В. Поскольку на узле BE 2N3904 падает 0,7 В, напряжение на R1 составляет 2,6 В. Тогда ток через R1 равен I =2,6 В / 4,3 кОм =0,6 мА. Затем 2N3904 усиливает этот ток в ~ 150 раз, в результате чего ток от коллектора до эмиттера составляет ~ 100 мА. Каждый из светодиодов будет проводить около 50 мА в течение короткого периода времени. Время, в течение которого контакт B остается НИЗКИМ

Начните измерять, сколько времени требуется конденсатору, чтобы достичь порогового значения RPi, чтобы на выводе B стало ВЫСОКОЕ

counter =0
t1 =time.clock () * 1000
while (GPIO.input (PIN_B) ==0) &(counter <1e4):
counter =counter + 1
deltat=time.clock()*1000-t1

deltat - это время, в течение которого контакт B остается НИЗКИМ. Поскольку deltat пропорционален обратной величине тока фототранзистора (или количество отраженного света ), а ток фототранзистора примерно пропорционален обратной величине расстояния , дельта примерно пропорциональна расстоянию .
deltat∝1I∝1light∝distance

Термин (counter <1e4) предназначен для предотвращения ситуации, когда интеграция конденсатора занимает слишком много времени из-за чрезвычайно низкого тока фототранзистора или, что эквивалентно, бесконечного расстояния.

Подробнее:простой аналоговый датчик приближения с цифровым интерфейсом (для Raspberry Pi), последнее обновление 7 февраля 2014 г.]


Производственный процесс

  1. Измерение температуры с помощью однопроводного датчика DS18B20 и Raspberry Pi
  2. 1-проводный датчик температуры DS1820 на Raspberry Pi (напрямую через GPIO)
  3. Интеграция данных датчика с микропроцессором Raspberry Pi
  4. Ультразвуковой датчик (HC-SR04) + Raspberry Pi
  5. Датчик отслеживания линии с RPi
  6. Считывание аналоговых датчиков с одним контактом GPIO
  7. Самодельная инфракрасная система датчиков движения для Raspberry Pi
  8. Аналоговые датчики без аналоговых входов на Raspberry Pi
  9. Цифровой датчик термометра Raspberry Pi 1-Wire (DS18B20)
  10. Цифровой датчик Холла Raspberry Pi в JAVA