Дата публикации: Mar 28, 2013 7:38:20 PM
В отличие от Arduino, mbed и даже TI Launch Pad, известная ныне платформа Raspberry PI не имеет ни одного аналогового входа! Вы можете себе это представить? Ведь очевидно, что такой полноценный микрокомпьютер может стать основной для многих проектов, которые ныне принято делать на том же Arduino. Просто нонсенс...
Ну да ладно, надеюсь в будущих версиях "малины" АЦП всё-таки появится, а пока мы решим эту проблему с помощью внешнего устройства MCP3008. Этот чип мы купили в количестве 20 штук на adafruit.com по $4 за штуку. Наверное можно было найти и дешевле, но мы били сильно ограничены по срокам. Ведь этот АЦП используется в базовом курсе робототехники, который мы проводим в Уральской Компьютерной Школе.
Основные характеристики Microchip MCP3008
разрядность - 10бит;
каналов - 8;
шина - SPI;
питание - 2.7-5.5
Описание выводов чипа
CH0 - CH7 - восемь каналов для подключения аналоговых датчиков;
Vdd - напряжение питания 2.7-5.5В;
Vref - опорное напряжение;
AGnd, DGnd - земля;
CLK, Dout, Din, CS - линии шины SPI.
Для примера, рассмотрим подключение потенциометра к Raspberry PI.
В данном примере мы будем использовать программную эмуляцию SPI шины, поэтому подключать чип можно к любым пинам контроллера.
Что касается программы, то для доступа к MCP3008 через SPI я использовал функцию readadc из туториала Adafruit. Однако, для удобства я оформил эту функцию как метод класса ADC. Представленная ниже программа, каждую секунду выводит в консоль значение от 0 до 1023, которое соответствует текущему положению потенциометра.
MCP3008 + RaspberryPI
from RPi import GPIO
from MCP3008 import ADC
from time import sleep
# pin_clk - линия Clk
# pin_cs - линия CS
# pin_miso - линия Dout
# pin_mosi - линия Din
adc = ADC( pin_clk=7, pin_cs=24, pin_miso=8, pin_mosi=25 )
while True:
raw_pot = adc.read(0) # показания нулевого канала
print ‘%d’ % raw_pot
sleep(1)
В общем, MCP3008 оказался очень простым в использовании. Рекомендую его и для Arduino проектов, в которых предполагается обработка большого числа аналоговых сигналов. И конечно, для Raspberry PI.
Полезные ссылки