あむちょです。
Arduino楽しいです。
前回、出力(LEDをPWM制御)をやったので、今回は入力。
今回やったこと
いわゆるAD変換(アナログ値をデジタルに)ってやつですが、Arduinoだと1行でできてしまいます。
アナログ入力で電圧の変化を測定
やり方はいたって簡単。アナログ入力ピンのA0~A5に電圧を0V~5Vの範囲でかければ、0~1024(10bit)の値が得られます。コードはたったの一行。
<br /> analogRead(0);<br />
回路側は10kΩの可変抵抗で分圧した電圧がA0ピンにかかるようにします。
今回はちょうどいい可変抵抗がなかったので、適当に抵抗をかまして調整してます。
これで入力値がえられたが、pwmでつかうのは0~255の範囲なので、都合のいい値になるように調整します。
シリアル通信で数値を表示
実際に値がいくつになっているか確認するために、シリアル通信でパソコン上で表示します。
まずはsetup()内で
<br /> void setup() {<br /> Serial.begin(9600);<br /> }<br />
おつぎにloop()内で
<br /> void loop() {<br /> int val = analogRead(0);<br /> Serial.println(val);<br /> }<br />
Arduinoで実行したらソフトのシリアルモニターボタンを押す。
これでアナログ入力値が表示されます。
可変抵抗の電圧に応じてLEDを調光
前回やったPWM制御を、入力値に応じて変化させます。
アナログ入力値は、5Vで1024となり、PWMで使う範囲の0~255より大きいので反応する範囲が狭くなってしまいます。
なので入力値が0~255の範囲でおさまるように調整します。
<br /> void loop() {<br /> int val = analogRead(0)*255.0/1024.0;<br /> analogWrite(9,val);<br /> }<br />
実際に動かしてるのがこれ
サーボモーターを制御
ついでに同じPWMで動かすサーボモーターを制御。
サーボモーターとは、パルス信号で任意の角度に動くモーターです。ロボットの関節位置制御とかでよくつかわれます。
まずはヘッダーのインクルードとグローバル変数(setup()とloop()で使うので)の宣言。3番ピンをサーボ制御ピンに指定して角度(deg)を指定するだけです。
<br /> #include <Servo.h><br /> Servo srv;</p> <p>void setup(){<br /> srv.attach(3);<br /> }<br /> void loop(){<br /> int val = analogRead(0)*255.0/1024.0;</p> <p> srv.write(val/2); //角度<br /> }<br />
今回使ったサーボが190度くらいの範囲で動くので、最大255となるvalを2で割って0~128度の範囲で動かしてます。
実際に動かしてるのがこちら。
簡単すぎてびびります。
[ad][ad]