一杯。
これにかぎるて。
オッサンは生きている。
次は、自宅の便器をインターネットに接続するッ!!!
……と考えて荒い鼻息をついたが、1秒でやめた。
だって、品がないし、変なものを便所に取り付けると妻におこられるもん。
しかし、ヘルスケアのためには、ちょっとありえるよな。「iToilet」。
……これらをツイッターに全自動投稿。甘えるんじゃねえ、パーミッションは恥も外聞もなく、全部パブリック。忍辱の精神なくして健康なしッ!!
重量センサー、かなあ、ネックは。耐水性で、度重なる洗浄に耐え、コンマ1グラム単位の精密度、傾きに左右されないことも必要だ。
においセンサーは、まあ、なんとかなるだろ、市場をあされば。
次は、ポテンショメータをつないで、アナログ入出力をマスター。
9番ピンを使用したパルス幅変調もわかったし、ついでに、さっきシリアルへのアクセス方法が分かったから、IDEに式ウォッチ機能がない代わりに、出力をシリアルにタレ流して観測する方法も会得。
// // ポテンショメータとLEDのPWM制御 // 佐藤俊夫 // 27.05.01(金)1604~ // const int LED = 9; const int POTENTIOMETER = 0; // void setup() { pinMode(LED, OUTPUT); pinMode(POTENTIOMETER, INPUT); Serial.begin(9600); } void loop() { int bright = 0; bright = analogRead(POTENTIOMETER) / 4; Serial.println(bright, DEC); analogWrite(LED, bright); }
で、私がやりたかったのはコレなんである。
……つまり、このオモチャを、インターネットにつなぐ。これがやりたかった。
あとはもう、
「メールが来たら旗があがる」
とか、
「録画が終わったら、人形が手を上げる」
とか、もう、なんぼでもアレンジ可能である。
チナミに、Linuxだとこういうことをするのに大したことは書かなくてよく、
tail -n 0 -f /var/log/httpd/access_log | grep --line-buffered 'HTTP/1.1\" 200' | sed --unbuffered -e 's/..*/1/' >/dev/ttyACM0
……ぐらいの「ワン・ライナー」で済んでしまう。
Arduino側のソースコードは、結局最終的には
// // シリアルからサーボを制御 // 佐藤俊夫 // 27.05.01(金) 0946~ // #include <Servo.h> // Servo flag; int incomingByte = 0; const int FLAGOFF = 5; const int FLAGON = 90; // void setup() { flag.attach(9); flag.write(FLAGOFF); Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // もし受信したデータが存在したら incomingByte = Serial.read(); if(incomingByte == '1'){ flag.write(FLAGON); }else if(incomingByte =='0'){ flag.write(FLAGOFF); } Serial.flush(); delay(1000); } }
……ぐらいの、お気楽な感じのモノになった。
次も、既にやることは決まっている。
Arduinoをおもむろに手元のLinuxマシンにつなぐ。で、Linuxへ行って、rootになり、
# dmesg usb 3-2: new full speed USB device using uhci_hcd and address 2 usb 3-2: configuration #1 chosen from 1 choice usb 3-2: New USB device found, idVendor=2a03, idProduct=0043 usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=220 usb 3-2: Product: Arduino Uno usb 3-2: Manufacturer: Arduino Srl usb 3-2: SerialNumber: 75439333335351303121 cdc_acm 3-2:1.0: ttyACM0: USB ACM device usbcore: registered new interface driver cdc_acm drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
……となってればオッケーだ。
で、
# ls -Fla /dev/ttyACM0 crw-rw---- 1 root uucp 166, 0 2015-05-01 11:50 /dev/ttyACM0
よっしゃ、あるある。
スピードなどはsttyで確かめると良い。
# stty -F /dev/ttyACM0 speed 9600 baud; line = 0; -brkint -imaxbel
オッケー。
で、Linuxのコマンドラインから、旗を上げ下げする。
# cat /dev/ttyACM0 & # echo '1' >/dev/ttyACM0
おう、旗が上がる。
# echo '0' >/dev/ttyACM0
ふふっ、旗が下がる。
……で、ここまで来たら、もうやりたいことはできたも同然w。
次も、やることは決まっている。サーボが動かせたら、今度はそれをPCにつなぎ、シリアルから制御するのだ!
ここでは、キャラクタ「’1’」を送信したら旗が立ち、それ以外だったら旗が降りる。
やり方はカンタンだ。
// // シリアルからサーボを制御 // 佐藤俊夫 // 27.05.01(金) 0946~ // #include <Servo.h> // Servo flag; int incomingByte = 0; const int FLAGOFF = 0; const int FLAGON = 90; // void setup() { flag.attach(9); flag.write(10); Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // もし受信したデータが存在したら incomingByte = Serial.read(); if(incomingByte == '1'){ flag.write(FLAGON); Serial.println(incomingByte, DEC); }else{ flag.write(FLAGOFF); Serial.println(incomingByte, DEC); } Serial.flush(); } }
今度は、サーボモータを動かす。