GWだったので秋葉原で買ったArduinoエントリーキットで遊びました。
なんだかんだで半年ぐらい寝かしてたのかorz
もっと早くやれよ・・・
Ubuntuに環境つくるよ
Arduino IDEっていうEclipse的なものが必要なのでサイトからダウンロードしてくる。
Androidの開発環境のときにJavaはインストール済みだったのでコンパイラだけをインストール
sudo aptitude install gcc-avr avr-libc
解凍して実行すればおk
簡単,簡単
ハードなHello WorldといえばLチカらしい
ぼくはへっぽこプログラマーなので
一番最初にやることといえばHello Worldしか思いつかないのだけれど
電子工作やハードな人たちはLチカというらしい。
LEDチカチカの略?
というわけでやってみた。
プログラムはサンプルの
File -> Example -> Basics -> Blinkをそのまま
簡単,簡単と思いきや・・・
- ブレッドボード触るの久しぶりすぎてアタフタw
- 抵抗の色の読み方がわかんねーw
- LEDの向きはナニがプラスで、どれがマイナスなのw
とかなんか無駄に時間がかかりましたw
だけどブレッドボードにジャンパーをポチポチ刺すの楽しいわー!
なんとかLチカが終わったのでいっぱい光らしてみる。
エントリーキットについてたLEDを全部光らせる。
プログラムはサンプルとか見ながら適当に書いた。
C言語っぽく書けるので簡単,簡単
void setup() { for(int i = 2; i <= 8; i++){ pinMode(i, OUTPUT); } Serial.begin(9600); Serial.println("setupDone"); } void loop() { for(int i = 2; i <= 8; i++){ digitalWrite(i, HIGH); delay(150); digitalWrite(i, LOW); delay(15); } for(int i = 8; i >= 2; i--){ digitalWrite(i, HIGH); delay(150); digitalWrite(i, LOW); delay(15); } }
なんか0番と1番端子に刺したらLED光っぱなしという悲しいことになったので2番から8番使ってます。
うーん、なんでだろう。
RubyからこんにちはArduino
グーグル先生に聞いてみたらなんかRubyから直接Arduinoとやりとりできるらしい。
なにそれすごい、ということで下記のサイトを参考に遊んでみる。
Funnelっていうニュータイプっぽいライブラリをつかえばいいらしいけど、WindowsとMac用っぽいので別の方法を探す。
そのまんまシリアル通信できるらしいのでgem install
なんかruby-serialportは失敗したのでserialportを入れる。
gem install ruby-serialport #=> 失敗 gem install serialport
Arduino側のプログラムは参考サイトのやつをコピッとなー
int incomingByte = 0; int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); Serial.print("I received: "); int ledBlinkTime = (incomingByte - 48) * 1000; Serial.println(ledBlinkTime); digitalWrite(ledPin, HIGH); delay(ledBlinkTime); digitalWrite(ledPin, LOW); delay(1000); } }
んでおもむろにpryを起動して
[1] pry(main)> require 'serialport'=> true [2] pry(main)> sp = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE) => #<SerialPort:fd 5> [3] pry(main)> sp.putc '3' => "3" #=> LEDが3秒光る [4] pry(main)>
pryでインタラクティブにArduinoとお話できるとか凄すぎる!
電子工作敷居が高いなーって思ってたけれど
こんなにも簡単だなんて!
というわけでArduinoにRubyからこんにちはー!
エントリーキットに入ってたLCDをブレッドボードにとりつける。
これで文字が出力できる。
Lチカも良いけどやっぱりHello Worldだよねということで
Rubyから送った文字をArduinoに表示させました。
Arduino側のプログラムはこれ
#include <LiquidCrystal.h> int incomingByte; char inByte; String inMsg; LiquidCrystal lcd(7,8,9,10,11,12,13); void setup() { lcd.begin(2, 16); lcd.clear(); lcd.print("*Hello World*"); lcd.setCursor(1, 1); lcd.print("homuhomu"); Serial.begin(9600); Serial.println("setupDone"); } void loop() { if (Serial.available() > 0) { inByte = Serial.read(); if((inByte >= 65 && inByte <= 90) || (inByte >= 97 && inByte <= 122) || (inByte >= 48 && inByte <= 57) || (inByte == 43) || (inByte == 61) || (inByte == 63)){ inMsg.concat(inByte); } } if (inByte == 10 || inByte == 13){ inByte = 0; lcd.clear(); lcd.print(inMsg); inMsg = ""; } }
んでpryを起動してっと
[1] pry(main)> require 'serialport' => true [2] pry(main)> sp = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE) => #<SerialPort:fd 5> [3] pry(main)> sp.puts "homuhomu" => nil
Rubyとお話できるってことはTwitterのuserstreamを監視してメンションが来たらLEDをチカチカして
相手のIDを表示するとかすぐできちゃうわけだ!
逆にArduinoのセンサの値をRubyに渡せば・・・
うは、夢がひろがりんぐ
センサーとか色々電子部品が欲しくなっちまったぜw
Arduino楽しい!
たわごと
umitterのザオラルに失敗したというか、やる気がでないというか、部屋の掃除が捗るよね!
一気に変えないで少しずつやるかー