Arduinoでアナログ入力(AD変換)とシリアル通信、ついでにサーボモーター制御

あむちょです。

Arduino楽しいです。

PR アプリ作ってます

前回、出力(LEDをPWM制御)をやったので、今回は入力。

今回やったこと

いわゆるAD変換(アナログ値をデジタルに)ってやつですが、Arduinoだと1行でできてしまいます。

アナログ入力で電圧の変化を測定

やり方はいたって簡単。アナログ入力ピンのA0~A5に電圧を0V~5Vの範囲でかければ、0~1024(10bit)の値が得られます。コードはたったの一行。

<br />
analogRead(0);<br />

回路側は10kΩの可変抵抗で分圧した電圧がA0ピンにかかるようにします。

haisen

今回はちょうどいい可変抵抗がなかったので、適当に抵抗をかまして調整してます。

これで入力値がえられたが、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で実行したらソフトのシリアルモニターボタンを押す。

siriaru

これでアナログ入力値が表示されます。

sirialmonitar

可変抵抗の電圧に応じて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 &lt;Servo.h&gt;<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]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です