アーカイブ
Arduino – ロータリーエンコーダを回す
Arduinoでロータリーエンコーダの回転を検出した。
ロータリーエンコーダは可変抵抗と異なり、アナログ値を出すのではなく回転方向を2byteでデジタル出力するので、無限に回転させる事ができる。マウスのホイールもロータリーエンコーダで出来ている。
Source Code (Arduino 0009 Alpha / ATmega8 16MHz)
基本的に回路もプログラムもATMega8でやったのと全く同じ方法でできた。
s.h.log: AVR – mega8でロータリーエンコーダを回す
ロータリーエンコーダーの真ん中の足をGNDに接続し、左右の足をそれぞれマイコンのピンに接続。また、左右の足とマイコンのピンの間で、10kΩの抵抗を使ってプルアップする(VCCに接続する)
まあ写真の通り。インクリメンタル型ロータリーエンコーダーは2本の線で4種類の回転状態を出力する。1クリック回す(カチッと言う)と、4種類の状態が一回りする。
とりあえず状態に0,1,2,3と名前をつけて、10ms毎ぐらいに状態を見に行くと、状態が1増えていたら右に回転、減っていたら左に回転みたいな感じでわかる。
ただし、Arduinoにはタイマーが無いので、メインループ loop() の中で delayMicroseconds(10); を呼んで、10ミリ秒を作っている。
なので、ロータリーエンコーダと同時にタイミングが難しい処理を行うとおかしくなるかもしれない。
例えば赤外線の受信とか。
C#講座01 SerialPortクラスを使ってArduinoと連動させる(1/2)
VS2005 C#のSerialPortコンポーネントを使って、Arduinoとシリアル通信して連携する方法をビデオ撮ってみた。
今回はマイコン→PCの一方方向だけしかやらなかったので、逆はあとでやる。
VisualStudio C#.NETで
・新規ソリューションを作る
・その中に新規プロジェクトを作る
・ボタンやシリアルポートコンポーネントなどを配置してみる
・コンポーネントにイベント登録する
という事を解説してみた。
→ ソースコード一式
今回書いたのはこれだけ。でも、これもほとんどVisualStudioに自動生成される。
publicForm1()
{
InitializeComponent();
Console.WriteLine(“start”);
}privatevoidserialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse)
{
Console.WriteLine(serialPort1.ReadLine());
}privatevoidbutton1_Click(objectsender,EventArgse)
{
serialPort1.NewLine=”¥r¥n”;
serialPort1.Open();
}
FNCCでシリアル通信を受信
FNCCを使うと、シリアルポートを扱うクラスの無いFlashでもシリアルポートが使えるようになる。
FNCCのサイトで、COM-XMLSocketのproxy(.NETのexe)と、XMLSocketをシリアルポートみたいに見せるラッパークラス(AS2)が配布されている
Flash Net Comport Connector – Rapid prototyping tool series
こんな感じで受信できる。
importcom.hatayan.flashNetComportConnector.SerialPort;
this.stop();
varserial_net=newSerialPort();
serial_net.openRemoteComport(“localhost”,1888);serial_net.onReceiveStr=function(serialObj:SerialPort){
recv_data=serialObj.getStr();
if(recv_data==’1′){
gotoAndStop(1);
}
elseif(recv_data==’0′){
gotoAndStop(2);
}
};
Arduino+XPort+Perl+WebService
ArduinoにXPortでIP持たせて、そこにPerlからデータをプッシュする。
s.h.log: XPortをEthernet-UARTコンバータとして使うの通りにXPortを設定する。
そこに、明日の天気のデータをLivedoorお天気のRSSからパースしてsocketで送ると、
socket通信をXPort越しにArduinoで受け取れるので、晴れ/曇り/雨でそれぞれLEDを光らせる「てるてる坊主」を作ろうというもの。
最初は今日の天気だったが、よく考えたら今日の天気は空見ればわかるから、Date::Simple使って明日の天気になった。
あと、送信データもstringではなくchar一文字でいいやという事になった。Arduinoには文字列比較系の関数が無いし、heepが無いマイコンに無理させる必要も無いし。
以下は暫定版のArduino&Perlコード。
physicalとwebに向いているのをそれぞれで分業させたので、結構短く書けて楽だった。
これでテンプレートができたので、GoogleCalendarから予定引っ張ってきて枕に振動モータ突っ込んで起こすとか1時間あれば作れる。
GoogleEarth+GPS+DigitalCompass
せっかく方位センサ買ったので、さくっとGpsWalkingしてみた。
■本日の素材
・s.h.log: Arduinoで方位センサ RDCM-802 を試す
・s.h.log: C#でGoogleEarthを動かす
・s.h.log: C#用クラス: シリアル接続GPSのラッパーをver up
■技術的なこと
結構モジュールが揃っていたので楽だった。

最近のコメント