×

らずらいと姫の挑戦日記(第55回)~モータを動かそう①~

2019-05-08

今回は、サーボモータを動かしてみたいと思います。そもそも、モータには回転するDCモータと、サーボモータがあります。DCモータは車でいうタイヤのように回転するモータです。一方、サーボモータは車のハンドルのようなイメージで、指定した角度を維持することができるモータです。まずは作成した結果がありますので完成した動画を御覧ください。

ここの結果に至るまで、

1.ボリュームの変化を読み取る
2.ボリュームの値をモータの角度に使用する
3.2.で使用したプログラムに複数の仕事をさせるとおかしくなる…

という流れで全3回に分けて行っていきます。

使用した部品の紹介

今回使用した部品の使用が載っています。以下のURLからご確認ください。

Lazurite SubGHz      https://www.appliot.co.jp/lazurite-jp/products/lazurite-sub-ghz

サーボモータ              https://www.switch-science.com/catalog/2969/

ボリューム                    https://www.switch-science.com/catalog/805/

ボリュームの値を読み取る

ボリュームは10kΩを使用しました。ボリュームはいわゆる可変抵抗で、抵抗の両端が10kΩになっていて、ボリュームを回すと中間の抵抗が0~10kΩに変化します。さっそく単体でボリュームの動作を改めて確認してみましょう。

 

このボリュームの抵抗値をこのようなマルチメータで計測してみると、

  • VCC-GND間の抵抗を測ると10.48kΩ
  • SIG-GND間の電圧を測ると可変抵抗の応じて0~10kΩ

になることが確認できました。

しかし、マルチメータなら簡単に抵抗値を読み取ることができるのですが、マイコンだと抵抗だけを計測することはできないため、抵抗の両端に電圧をかけて、ボリュームの出力を電圧にすることでLazurite SubGHzでも読み取ることができるようになります。

 

電圧の値を読み取る

次に電源繋いで電圧を測ってみたいと思います。その前にPCとLazurite SubGHzを繋いで、Lazurite SubGHzとボリュームを繋いで組み立てます。

 

Lazurite SubGHz ボリューム
3.3V
GND
A0

また、忘れずにLazurite SubGHzのIOREFとAREF端子を接続してください。

こちらで実験したときには、途中にケーブルを挟んでいますが、完成した様子がこちらです。

ではさっそく電圧を測ります。

電圧が測れました。この電圧でボリュームで変化させたいと思いますが手作業で電圧を測るのは大変なためマイコンに電圧の変化を確認する数値を表記させるプログラムを次に組んでみます。

 

電圧値を出力するプログラムの作成

ここでは電圧0V~3.3Vの間の値を0~1023の数値に対応させて電圧の変化で抵抗値が変化していることを確認してみます。Lazurite SubGHz  にプログラムを書きこみモニターに電圧を対応させた0~1023までの数値を表示させるプログラムを書いていきます。

プログラムを書くにあたり初めにモニターに送る通信速度の設定を決め、次に動作を決めます。動作は電圧の値を0~1023に対応してモニターに表記してくれるように作ります。

ここで書いたプログラムは以下になります。

[code language=”C” title=”volim_read.c”]
#include "volim_read_ide.h" // Additional Header

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);//モニターに送る通信速度を決める
}
void loop() {
int volt;

volt = analogRead(A0);//A0ピンから電圧を読み取り
Serial.println_long(volt,DEC);//電圧の値を0から1023に変換して10進数で表示
delay(100);//モニターに表示する間隔 100(0.1sec)以下だと動かない可能性あり
// put your main code here, to run repeatedly:
}
[/code]

Lazurite SubGHz  ではC言語を使っています。このプログラムをLazurite SubGHzのマイコンに書き込みます。

 

そしてモニターを開いてみると下の写真みたいに数字が出てくると思います。

さらにボリュームを動かしてみると数字が変化しました。

 

写真をみるとここで書き込んだプログラム通り動いていそうですね。

 

モニターに表示された値の確認

モニターに表示された値が正しいものかを確認したいと思いますが、その前にここでの電圧の算出の仕方を確認させていただきます。

モニターに表記された数値から実際の電圧を算出するには

式 [latex]V=3.3\times\frac{n}{1024} [/latex]  (nはモニターで表示された数です)

で計算できます。

基本電圧はグランド(0V)を基準にして決めているので,ボリュームはGNDとSIGの間の電圧を測っています。ここでnはGNDとSIGで出力される電圧を対比させた数値のことです。

 

さっそく値が正しいか計算してみます。

例1 0を表示したときは上の式を計算してみると0vを表しています。実際にマルチメータで計測してみると下の写真のように0Vを示していました。

例2 1023を表示したときは上の式を計算してみると3.3vを表しています。実際にマルチメータで計測してみると下の写真のように3.3Vを示していました。

 

例3 161を表示したときは上の式を計算してみると1.9vを表しています。実際にマルチメータで計測してみると下の写真のように1.9Vを示していました。

 

実際の値と計算値を比較するとだいたいあってそうですね。これでボリュームによって電圧を変化させることができることができました。

 

ボリュームを動かすと0~1023までの間の数値がつまみを動かすことによって変わるのが確認できたら今回の目標達成です。モニターに表示された数値が実際の電圧と対比できているか気になる方は計算してみてください。お疲れ様でした!

次回は、このように取得した値をサーボモータに反映してみたいと思います。