PyMataでArduinoを操作する(analog_read)


今回はPyMataのanalog_readの機能を紹介します。
arduinoは6ポートの10ビットADコンバータを搭載しています。
使用する回路は以下の回路です。
Arduinoの5V出力を5つの抵抗で5分割し、それぞれをA0からA5のピンに入 力しています。
使用する抵抗は同じ抵抗値のものならば何でもかまいません。
従ってA0は5V、A1は4V、A2は3V、A3は2V、A4は1V、A5は0Vとな ります。



Raspberry側のコードは以下のようになります。
#!/usr/bin/env python

import sys
import time
import signal

from PyMata.pymata import PyMata

# Analog pin
PINS = (0, 1, 2, 3, 4, 5)

# Create a PyMata instance
#board = PyMata("/dev/ttyACM0", verbose=True)
board = PyMata("/dev/ttyUSB0", verbose=True)

# Set pin modes
for pin in PINS:
    board.set_pin_mode(PINS[pin], board.INPUT, board.ANALOG)

def signal_handler(sig, frame):
    print('You pressed Ctrl+C')
    if board is not None:
        board.close()
    sys.exit(0)


signal.signal(signal.SIGINT, signal_handler)

# Do nothing loop - program exits when latch data event occurs for
# potentiometer
while 1:
    for pin in PINS:
        analog = board.analog_read(PINS[pin])
        val = float(analog) * float(5) / float(1023)
        print "A%i:%.4f[V]" % (pin, val),
    print " "
    time.sleep(1)

実行結果は以下の様になりました。
1回目だけはデータが取れていませんが、2回目以降はそこそこの精度でデータが取れています。



続く...