SyntaxHighlighter

2015年9月8日火曜日

赤外線センサをArduino経由のシリアル通信で受信する

Arduinoに赤外線センサSE-10を接続し、Raspberry Piで読み取ってみた。

今回使ったもの

  • Arduino UNO
  • 人感センサSE-10
  • 抵抗器:330Ω,10kΩ
  • 赤色LED
  • ピンヘッダ (3pin):SE-10をブレッドボードに繋ぐため
  • Raspberry Pi

配線図

fritzingで配線図を描いてみる。
SE-10側に10kΩ、LEDに330Ωの抵抗を繋ぐ。

ソースコード

Arduino

センサが反応すると1を出力。
反応後5秒間LEDが点灯し、その間は不感時間とする(チャタリング防止のため)。
const int ledPin = 13;
const int pirPin = 2;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (digitalRead(pirPin) == LOW) {
    digitalWrite(ledPin, HIGH);
    Serial.println("1");
    delay(5000); //不感帯を5秒に設定
  } else {
    digitalWrite(ledPin, LOW);
  }
  delay(100);
}

Python

pySerial
ArduinoのUSBデバイス名は/dev/ttyACM0。これはdmesg等で確認できる。
センサが感知すると、時刻と共に出力される。
# coding: UTF-8
from serial import *
from sys import exit
from datetime import datetime

# ArduinoのUSBデバイス名
port = '/dev/ttyACM0'

# シリアルポートを開く
try:
    ser = Serial(port, 9600)
    print('open port: %s' % port)
except:
    print('cannot open port: %s' % port)
    exit(1)

# 読み出しと出力
while True:
    # 1ライン単位で読み出し、末尾の改行コードを削除
    line = ser.readline().rstrip() 
    try:
        print(datetime.now(),line)
    except Exception as e:
        print(e.message)

参考

秋月電子の焦電型赤外線センサユニット(SE-10)を使う