もひとつオマケに、アナログ”入力”の実験も
してみました。
アナログ出力はPWMでしたが、アナログ入力は
内蔵ADコンバーターにアサインされてます。
1個ではさみしいし、死蔵してある三軸加速度
センサーモジュールを繋ぎたいので、
アナログ入力の0~2の3本をそれぞれ可変抵抗
で分圧した電圧を入力することにします。
こんな感じ。
USBケーブルや電源ケーブルなど、邪魔に
なるものが全然無いので、ブレッドボードの
真中に「えい、やっ」とぶっ差すことができて
good! レイアウトが良くできてます。
プログラムはarduinoのサイトを参考にして
こんな感じ↓
int ledPin = 3; // select the pin for the LED
int analogpin0 = 0; // select the pin for analog0 input
int analogpin1 = 1; // select the pin for analog1 input
int analogpin2 = 2; // select the pin for analog2 input
int data = 0; // input data from ADC
void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
Serial.begin(9600);
Serial.println("start");
}
void loop() {
data = analogRead(analogpin0); //read data from analog0 pin
Serial.print(data);
Serial.print(",");
data = analogRead(analogpin1); //read data from analog1 pin
Serial.print(data);
Serial.print(",");
data = analogRead(analogpin2); //read data from analog2 pin
Serial.println(data);
analogWrite(ledPin, data/4); //(works on pins 3, 5, 6, 9, 10, and 11)
delay(100);
}
(さっきと違って、ちゃんと<pre>タグを使って
整形してみました)
ご覧のとおり、アナログ入力0、1、2の3つの
アナログ入力端子を使ってます。入力した3つの値は
シリアルの9600bpsで出力してます。
アナログ2から入力した10ビット値(0~1023)
は、4で割って0~255の閾値に変換後、3番ピン
(LED)にPWMでアナログ出力してます。
可変抵抗をグルグルするとLEDの明るさが変わります。
注意点としては、アナログADの参照電圧は常に5V
固定ということです。つまり、外部リファレンス電圧などは
使えないようです。
(↑標準機能の場合。もしかしたら内部レジスタを直接
操作すれば外部リファレンスが使えるかも)
それにしても簡単にできますね。ホント。プログラム
じゃなくてまさにスケッチという表現が的確。
大きいものをガチガチに組み上げるにはちょっと…
という感じではありますが、買ってきたばかりの
センサーIC等をチョイチョイっと繋いで試す時には
便利便利。
そういえば、アナログ出力は大体490Hzだそうですが、
逆数を取ると約2m秒。
http://www5b.biglobe.ne.jp/~YASUSI/gallery/electronics/050820/050820.htm
一方↑こちらのサイトによると、サーボモーターのPWM
周期は16ms。うーん、一桁違うなぁ。
このままではサーボモーター使うにはちょっと不便か?
なぜこんな周波数で固定されてるんだろう?
LEDの点滅が人間の目でわからない程度の周波数
にしました、という事なのだろうという気がするけど、
サーボモーターを使うには不便すぎるなぁ。
サーボモーター用には何か別のアナログ出力方法が
あるのかなぁ?