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

Использование АЦП MCP3008 для чтения аналоговых датчиков с Raspberry Pi

Подключение аналоговых датчиков к Raspberry Pi может быть сложным, потому что GPIO-выводы Pi только цифровые. Недорогое решение — MCP3008, 8-канальный 10-битный аналого-цифровой преобразователь, который втыкается прямо в SPI-шину Pi и не требует дополнительных компонентов.

В этом руководстве мы пройдем через подключение MCP3008 к Raspberry Pi, подключение фоторезистора (LDR) и датчика температуры TMP36, и чтение данных простым Python-скриптом.

Что понадобится

Включение SPI на Pi

SPI-интерфейс отключен по умолчанию. Следуйте шагам в Включение SPI-интерфейса на Raspberry Pi для активации SPI и установки Python-библиотеки spidev.

Соединения схемы

MCP3008 требует четыре GPIO-вывода на 40-пиновом заголовке Pi. Подключите следующие пины (номера относятся к нумерации заголовка P1):

VDD 3.3V
VREF 3.3V
AGND GROUND
CLK GPIO11 (P1-23)
DOUT GPIO9 (P1-21)
DIN GPIO10 (P1-19)
CS GPIO8 (P1-24)
DGND GROUND

Каждый из выводов CH0–CH7 на MCP3008 становится аналоговым входом. В примере ниже используем CH0 для LDR и CH1 для TMP36; оставшиеся шесть каналов свободны для будущих датчиков.

Фоторезистор (LDR)

Сопротивление LDR падает до ~10 кОм при ярком свете и поднимается до нескольких мегаом в темноте. Образуя делитель напряжения с резистором 10 кОм, MCP3008 считывает напряжение, падающее к 0 В при освещении и поднимающееся к 3,3 В в темноте.

Датчик температуры TMP36

TMP36 — 3-пиновый аналоговый датчик температуры. Питание 3,3 В, чтение с вывода VOUT. Датчик выдает 0,750 В при 25 °C, с линейным наклоном 10 мВ/°C. Таким образом, 0 °C дает 0,500 В, 100 °C — 1,500 В.

Чтение данных с Python

MCP3008 выдает 10-битные значения 0–1023, линейно отображенные на 0–3,3 В. Для TMP36 это соответствует диапазону примерно –50 °C до +280 °C.

Ниже минимальный пример с библиотекой spidev для чтения каналов 0 и 1:

import spidev
import time

spi = spidev.SpiDev()
spi.open(0, 0)  # bus 0, device 0
spi.max_speed_hz = 1350000

def read_channel(channel):
    # Протокол MCP3008: стартовый бит, single/diff, канал (3 бита), 5 dummy битов
    adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0])
    data = ((adc[1] & 3) << 8) + adc[2]
    return data

while True:
    ldr_val = read_channel(0)
    temp_val = read_channel(1)
    temp_c = (temp_val * 3.3 / 1023) * 100 - 50  # Конвертация в °C
    print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
    time.sleep(1)

Замените номера каналов под вашу схему датчиков. Скрипт непрерывно печатает сырое значение АЦП для LDR и расчетную температуру в градусах Цельсия.

С этой установкой можно добавить дополнительные аналоговые датчики — фотодиоды, датчики давления, влажности — подключив их к оставшимся CH2–CH7 и расширив Python-код соответственно.

Удачного хакинга!

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

  1. Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
  2. Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
  3. Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
  4. Как считывать температуру с DS18B20 на Raspberry Pi 2
  5. Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
  6. Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
  7. ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
  8. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  9. Точный мониторинг температуры в серверной на Raspberry Pi
  10. Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub