これが、メールサーバに残る未読メールの数を表示させるという逸品(笑)のプロトタイプである。
……我ながらズサンなつくりだなあ。こんなモノをIoTだなどと言っていていいのだろうか。
オッサンは生きている。
次は、ポテンショメータをつないで、アナログ入出力をマスター。
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(); } }
今度は、サーボモータを動かす。
休暇前から楽しみにしていたルーブル美術館展を見に行ってきた。六本木の国立新美術館でこの2月から開催している。
テーマは「風俗画(ジャンル画 Peinture de genre)」であり、市井の人々の暮らしの絵や静物画など、さまざまな題材の企画展である。
昔のヨーロッパ美術は、キリスト生誕や聖母マリアなどの抹香臭いものを描き留めた宗教画が最も崇高なものとして価値を認められており、市井の風俗や静物などは一段低いものとされていたそうで、ところが逆説的に、画家は風俗画に自由な裁量を持つことができ、後世芸術的に優れたものが多く残る要因となったそうである。
普段であれば、誰かに誘われたというのでもなければそれほど興味もなく、広告も見過ごしてしまうところだったのだが、今回は違う。行ってみようと言う気になったのは、フェルメールの「天文学者」が、広告のキャッチ画像になっていたからだ。
それはこの絵である。有名であるから知っている人は多いと思う。
そのフェルメールの「天文学者」も、絵そのものをよく知っていて前々からずっと見たいと思っていた、というわけではない。この絵を私が知っている理由は、別のところにある。
私は、微生物の発見者としてその名を永久に記憶されているオランダの科学者、アンソニー・レーウェンフックを大変尊敬しているのであるが、フェルメールのこの絵のモデルは、彼、レーウェンフックではないかと言われており、そのために知っていたのである。
私がレーウェンフックを尊敬する理由は、彼が学府の学問を受けた本職の学者ではないからである。だがしかし、彼がうち建てた科学上の金字塔は、彼以外の誰も達成しえなかったほど巨大である。
そのことをまた、忘れないよう改めて書き留めておこうと思う。
恵比寿の駅に降りてみたら、以前はたしかなかったような地下鉄の出入り口ができていて、ちょっと珍しい気持ち。