arduino で 焦電型赤外線センサ RE-210 を使う
arduinoのよいところのひとつに、ATMega328をのせると基準電圧が1.1Vになる点です。これでオペアンプを使うことを減らすことができます。赤外線センサの出力をそのまま突っ込んでみました。配線が長いので発振するようなので3Vで動かしました。鼻の下が赤外線センサです。センサの右から移動したときと、左から移動したときで出力の変位の仕方が変わるので、2色LEDをキティの耳の部分につけて、青と赤を光らせています。たまに変位が同じになるので、そのときは、両耳が黄色に光ります。液晶表示器のルーチンをそのまま残したサンプルスケッチは、次のとおりです。括弧は半角にしてください。#include <LiquidCrystal.h>#include <MsTimer2.h>// LiquidCrystal display with:// rs on pin 12// rw on pin 11// enable on pin 10// d4, d5, d6, d7 on pins 5, 4, 3, 2int inc = 0;int dec = 0;int now = 0;int before = 0;int count = 10;int leddec = 0;int ledinc = 0;int val = 0;int analogPin = 0; static boolean leftled = HIGH; static boolean rightled = HIGH; LiquidCrystal lcd(7, 8, 9, 10, 11, 12, 13);void flash() { if (inc - ledinc > dec - leddec ){ leftled = HIGH; rightled = LOW; } else if (inc - ledinc < dec - leddec ) { leftled = LOW; rightled = HIGH; } else if (inc - ledinc > 0) { leftled = HIGH; rightled = HIGH; } else { leftled = LOW; rightled = LOW; } digitalWrite(2, leftled);digitalWrite(3, rightled);ledinc = inc;leddec = dec;}void setup(){ // Print a message to the LCD. pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); int analogPin = 0; lcd.print("hello, world!"); analogReference(INTERNAL); MsTimer2::set(2000, flash); // MsTimer2::start();}void loop(){ before = now; now = analogRead(analogPin); // count = count - 1; if (count < 1) { count=count + 1; if (now > before + 3) { inc = inc + 1; } if (now < before - 3) { dec = dec + 1; } }val = analogRead(analogPin); // lcd.clear();lcd.setCursor(0, 0); lcd.print("cnt=");lcd.print(count);lcd.setCursor(8, 0);lcd.print("now=");lcd.print(now);lcd.setCursor(0, 1); lcd.print("inc=");lcd.print(inc);lcd.setCursor(8, 1);lcd.print("dec=");lcd.print(dec); delay(200);}