цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Raspberry Pi: считываем данные LDR датчика освещения с помощью АЦП MCP3008


Raspberry Pi: считываем данные LDR датчика освещения с помощью АЦП MCP3008

Автор: Mike(admin) от 3-06-2020, 03:55

В зависимости от модели платы Arduino имеют несколько цифровых выводов, аналоговых входов и цифровых линий с широтно-импульсной модуляцией (ШИМ). Тем не менее, Raspberry Pi имеет только цифровые линии. Один из способов считывания аналогового сигнала – использование аналого-цифровых преобразователей (АЦП). MCP3008 является одним из самых популярных среди них. MCP3008 использует SPI для связи с Raspberry Pi и обеспечивает восемь контактов для аналогового ввода.


Raspberry Pi: считываем данные LDR датчика освещения с помощью АЦП MCP3008

В этом уроке мы покажем вам, как подключить MCP3008 к Raspberry Pi.


Raspberry Pi представляет собой одноплатынй компьютер и является более мощным, чем большинство моделей Arduino, благодаря большей оперативной памяти, встроенным функциям Wi-Fi и Bluetooth и мощному процессору. Он также поставляется с 40 выводами GPIO, но имеет несколько дополнительных интерфейсов I2C, SPI и UART. Более новые версии Raspberry Pi также включают в себя два порта Micro HDMI.


Raspberry Pi

Создание прототипа на основе Raspberry Pi можно упростить с помощью переходника Raspberry Pi Cobbler, сократив время и предотвратив вероятность короткого замыкания с помощью макетной платы. Все, что вам нужно сделать, это подключить один конец к Raspberry Pi, и вы можете получить доступ к Raspberry Pi GPIO, включая контакты I2C и SPI.


LDR, также известный как фоторезистор / фотоэлемент / фотопроводник, представляет собой тип резистора, который имеет переменное сопротивление, которое изменяется в зависимости от интенсивности света, падающего на него. Когда свет падает на резистор, сопротивление меняется.


LDR датчик

MCP3008 представляет собой высокопроизводительный 10-разрядный аналого-цифровой преобразователь с низким энергопотреблением и применяется для встраиваемых приложений, таких как сбор данных, измерительные приборы, промышленные ПК, многоканальные регистраторы данных, робототехника, управление двигателями, промышленная автоматизация, интеллектуальные системы, датчики, портативные приборы и домашняя медицинская техника.


АЦП MCP3008

Давайте определим основные контакты нашего АЦП MCP3008. Мы будем использовать контакты VDD, VREF, AGND, CLK, DOUT, DIN, CS/SHDN, DGND и CH0. MCP3008 имеет восемь каналов. В зависимости от вашего эксперимента или количества датчиков, которые вы хотите использовать для разных проектов, вы можете использовать все эти каналы. В этом уроке мы будем использовать один.


АЦП MCP3008

Далее разместите всю электронику на макетной плате. Мы будем использовать контакт 3 на GPIO, а также заземление, SPI (MOSI, MISO, SCLK) и контакт 5 для CS. Таблица подключений следующая:


Raspberry Pi: считываем данные LDR датчика освещения с помощью АЦП MCP3008

Далее подключите датчик LDR. Один вывод LDR поступает на линию питания 3,3 В, а второй вывод подключается к выводу CH0 MCP3008, который затем подключается к заземлению резистором 10 кОм. Далее представлена полная принципиальная схема подключения, показывающая все наши соединения.


Raspberry Pi: считываем данные LDR датчика освещения с помощью АЦП MCP3008

Теперь перейдем к программной части. На Raspberry Pi должна быть установлена последняя версия Raspbian. Выполните следующие команды, чтобы убедиться, что ваши установочные пакеты обновлены.


sudo apt-get update -y


sudo apt-get upgrade –y


Теперь установите следующие зависимости для вашего проекта. PIP или установщик пакетов Python можно использовать для установки пакетов из индекса пакетов Python и других индексов. Установите его с помощью следующей команды:


sudo apt-get установить python3-pip


Далее устанавливаем adafruit-blinka:


sudo pip3 установить adafruit-blinka


Для использования MCP3008 необходимо установить библиотеку CircuitPython для аналого-цифровых преобразователей серии MCP3xxx:


sudo pip3 install adafruit-circuitpython-mcp3xxx


Со всеми зависимостями, загруженными для библиотек, необходимых в этом проекте, мы можем использовать пример кода Python, предоставленный Adafruit для считывания значений датчика LDR через MCP3008. Обратите внимание, что этот код написан на CircuitPython, разработанном Adafruit. CircuitPython основан на языке программирования Python, но с широкой поддержкой аппаратных устройств.



import os
import time
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn

spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)

cs = digitalio.DigitalInOut(board.D22)

mcp = MCP.MCP3008(spi, cs)

chan0 = AnalogIn(mcp, MCP.P0)

print('Raw ADC Value: ', chan0.value)
print('ADC Voltage: ' + str(chan0.voltage) + 'V')

last_read = 0       
tolerance = 250     
                    

def remap_range(value, left_min, left_max, right_min, right_max):
    left_span = left_max - left_min
    right_span = right_max - right_min

    valueScaled = int(value - left_min) / int(left_span)

    return int(right_min + (valueScaled * right_span))

while True:
    trim_pot_changed = False

    trim_pot = chan0.value

    pot_adjust = abs(trim_pot - last_read)

    if pot_adjust > tolerance:
        trim_pot_changed = True

    if trim_pot_changed:
        set_volume = remap_range(trim_pot, 0, 65535, 0, 100)

        print('Volume = {volume}%' .format(volume = set_volume))
        set_vol_cmd = 'sudo amixer cset numid=1 -- {volume}% > /dev/null' \
        .format(volume = set_volume)
        os.system(set_vol_cmd)

        last_read = trim_pot

    time.sleep(0.5)

Сохраните загруженный код в текстовом файле с расширением .py (example.py) и запустите его из терминала: python example.py. Чтобы успешно запустить программу, убедитесь, что вы находитесь в том же каталоге в терминале.




© digitrode.ru


Теги: Raspberry Pi, АЦП, датчик освещенности




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий