スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Arduinoでラジコン受信機を読み取る

12112801

授業用に急きょArduinoタンクをラジコン化する事に。

普通に「pulseIn」命令を使えば良いだけ、と考えれば
簡単に出来るのですが、かわロボ等の4ch前後使用する
プロポをイメージした場合、理論上で最大100ミリ秒
近く処理が遅れる恐れがあるのでどうしようかと躊躇してました。

「かわさき」のバトルロボットでは、0.1秒操作が遅れた事で
勝敗がひっくり返るケースがあります。
プロのRCカーレース真っ青の格闘戦が行われている訳です・・・


今回は2chしか使用しない&動作させるのが模型戦車レベルなので、
応答性も大して気にすることなくやっちゃいます。

12112800

Arduinoボードの5Vポートから受信機の電源を拝借、信号ラインは
適当なデジタルポートに2回線分入れます。

12112802
後は以下のプログラムを入れ、シリアルモニタで状態確認します。
入力される値はマイクロ秒単位なので、大体1500を中心に

1100~1500~2000

の範囲でプロポの操作した値が表示されます。
あとは、値の組み合わせで前進、後進、右折、左折、左右ターン等
動作命令を作っていけばOK。

---------------------------------------------------------

// 参考プログラム
int rcv1 = 5; //1ch目、スロットル
int rcv2 = 6; //2ch目、ステアリング
int RV1 = 0; // 1ch目読み取り用変数
int RV2 = 0; // 2ch目読み取り用変数

void setup()
{
pinMode(rcv1,INPUT); // 受信機の信号線を入力するのでINPUT
pinMode(rcv2,INPUT); // 同上

Serial.begin(9600); // シリアルモニタに値を返すので通信開始
// 実際に操縦プログラムにするなら、シリアル通信は削除しても可
}

void loop()
{
RV1 = pulseIn(rcv1,HIGH); // PulseがHIGHになったら計測開始
RV2 = pulseIn(rcv2,HIGH); // 同上

// 以下シリアルモニタに読み取った値を出力
// 表示書式は「RV1: ****,RV2: ****」となります。
Serial.print("RV1: ");
Serial.print(RV1);
Serial.print(",RV2: ");
Serial.print(RV2);
Serial.println();

delay(1000); // 表示を追いかけやすくする為、1秒おきに動作。

}


ArduinoUnoで、簡単な玩具を動かしてみる

12093000
ネタ的には既に一年位前のものですが、簡単に動かせるロボットおもちゃを作った時の例を紹介します。

まず適当な”外側”を用意します。
画像は幾つかのWEBニュースでも紹介されていた、ハロ型ケースに組み込んだ事例です。
学生に作ってあげた後、AndroidやArduino系のイベントにあちこち持ち出している様なので、見た事がある人も多いかと思います。

12093001


内部が空洞の多目的ケースになっているのを利用して、フタになっている耳の内側から、模型用のサーボモータを使って開閉する様にしてみます。

12093002

制御マイコンにArduinoUnoを使用したので、制御回路は非常に簡単です。

アナログの小型サーボ2個位ならマイコンに接続したUSBからの給電でも何とか動きますが、電流の負担が大きくなりマイコンや接続元(PC等)の故障の原因になるのでお勧めしません。
サーボを使うならUSB以外の独立した電源を用意する様にしましょう。

製作したロボットは「タッチセンサに反応したら、2秒間耳を開く」動作をする様にしてみました。


プログラムはこちら、非常に簡単な内容になっています。
// ************************************************************
// Arduino Unoでサーボ制御するプログラム
// 球体ロボットの”耳”を、センサーで動かす

#include

// サーボ命令を使用するので、ヘッダを読み込みます。

Servo serv1;
Servo serv2;

// 今回はサーボを二個使用するので、
// 「Servo1」「Servo2」のラベルを用意します。

void setup()
{
serv1.attach(2);
serv2.attach(3);
}

// サーボモータをデジタルポート2番と3番に接続して
// 使用します。

void loop()
{
serv1.write(45);
serv2.write(45);
// 内部にアームを下げて、耳を閉じた状態にします。

if (analogRead(0)>600)
{
// 使用したのはタッチセンサーですが、アナログ出力式
// のものを使用している為、アナログポートに接続して
// 読み取ります。指が触れている状態で値が大きくなる
// タイプのものを接続しています。

serv1.write(120);
serv2.write(120);

delay(2000);

// センサーの出力が大きい(=指が触れた)場合、サーボ
// を120度の位置まで回転させ、耳を開いた状態にします。
// その状態のまま2秒待機したら、処理の先頭に戻ります。

}
}

// ************************************************************


使ったのはこちら、

Arduinoでサーボモータを動かす

12072000

ArduinoUNOを使って、8個のサーボを制御してみました。
カタログスペック上はUNOで最大12個という事なのですが、
使用するのがアナログサーボだった事もあり、一度に動かす為の電源容量などにも少し不安があったので今回は8個でいってみました。

Arduinoから直接信号出力して動かすだけなので、プログラムもごく簡単に。
基本的な構成としては

---------------------------------
#include

Servo (サーボ用ラベル名);

void setup()
{
(サーボ用ラベル名).attach(ピン番号);
}

void loop()
{
(サーボ用ラベル名).write(角度);
}

---------------------------------
これだけ。

サーボ用ラベル名は分かりやすい名前をサーボ毎に決めてやればよいし、使用するピン番号をattachしてやれば後はラベル名で処理できるので簡単。
write命令で指示できる角度は0~180ですが、当然の事ながらロボット用を除いた通常のサーボモータは180度の稼働域を持っておらず、また中点(90度)のばらつきもある為、実質は最大でも10度~170度位のつもりで動かした方が無難です。

FUTABAアナログ、Hitecアナログで試してみましたがどちらも問題なく動いてくれました。

Arduinoボード上のLEDを点滅させてみる

間があいてしまいましたが、開発環境からプログラムをアップロードして実際にマイコンボードを動作させます。
今回は回路を構築せず、ボード上に実装されているLEDを利用します。

ArduinoUNOボードの場合、デジタル出力13番ポートと接続された、動作状態を示すインジケータLEDがありますので、これを制御して一定の間隔で点滅させてみます。

12041501
スケッチは以下の通りとなります。

/*************************************************************
/
/** ボード上のLEDを点滅させる **/
int LED = 13; // 13番ポートを意味する変数を「LED」と宣言する

void setup()
{
pinMode(LED,OUTPUT); // 13番ポートをデジタル出力に設定
}

void loop()
{
digitalWrite(LED,LOW); // LED消灯。
delay(1000); // 1秒待機(ミリ秒単位)

digitalWrite(LED,HIGH); // LED点灯。
delay(1500);
} // 以降loop範囲内繰り返し

上記のスケッチをアップロードすれば、下図の黄色い○印で囲まれた所にあるチップLEDが点滅を始めます。
12041502
12041504
参考スケッチの通りだと、1秒消灯したあとで1.5秒点灯します。

秋葉原の秋月電子で販売しているキットを利用したArduino互換ボードでも、シリアルドライバのインストールと、使用ボードの設定を変更すればそのまま利用できます。
12041503
12041505
キットに同梱されているAVRマイコンにArduinoのブートローダーを書き込むか、スイッチサイエンスさんから売られている書き込み済のマイコンと交換する必要があります。




10個以上のサーボ制御をしたい、UNOじゃI/O点数が足りない!と言う人には、MEGAのはじめようキットもあります。


Arduinoの使用環境を整える

ArduinoマイコンボードをUSBケーブルでコンピュータに接続します。
パソコンに初めてマイコンボードをつなぐと、データ通信の為のドライバをインストールするウィザードが立ち上がります。

MAC OSの場合はほぼ全自動でセッティングが終わり、問題なく使用できるのですが、Windowsの場合はインストールウィザードが起動します。
Arduinoの開発環境をダウンロードすると、専用のドライバも一緒に提供されますが、初めて使用するPCでは基本的に自動インストールする事が出来ませんので、手動でセットアップします。

12032301
画像はWindowsXPの画面で説明します。
最初の画面でインターネットに接続してWindows Updateに接続しますか?と聞いてきますが、ネットに接続する必要はありませんので「いいえ、今回は接続しません」を選びます。

12032302
次の画面では自動セットアップを選ばず、「一覧または特定の場所からインストールする」を選びます。
12032303
ダウンロードしたArduinoのフォルダ内に、「Drivers」というフォルダがありますので、これを選択してドライバのインストールを続行します。
途中でセキュリティ上の警告表示が出る場合がありますが、「続行」を押してインストールを続けます。

一度セットアップを行ったPCであれば、同じバージョンのArduinoボードを使用する際のドライバインストールは自動で行われます。但し、無印UNOからUNO R3など別バージョンのArduinoボードを使用する場合は、最初の一回目のみ手動セットアップを行う必要があります。

ドライバのセットアップが完了したら、IDEのTOOLメニューから使用するマイコンボードと通信用COMポートの設定を行います。
12032304
「Tool」-「Board」の順にメニューを選択し、使用する種類のボードを指定します。
純正品はその名前の通りのボードを選べば大丈夫ですが、互換ボードを使用する場合は対応表を確認するなどして適切なボードを選びます。
このボード選択が間違っていると、スケッチ(=プログラム)転送が正しく行えなくなりますので注意しましょう。

12032305
ボードの選択が終わったら、準備の最終段階としてデータ転送の通信ポートを指定します。
「Tool」-「Serial Port」の順に選択し、マイコンボードが接続されているCOM番号を指定します。
このポート番号は、コンピュータの設定によって変わりますので自分の使用している環境をよく確認して指定します。
機種によっては、USBポートを指す場所を変えると、COMポート番号も変わる場合がありますので注意して下さい。

開発環境の設定が終わったら、実際にマイコンボードにプログラムを転送して動かしてみましょう。



マイコンボード「Arduino」を使ってみよう

ロボット技術検定にも利用されているマイコンボード「Arduino」。

12011901
AVRにブートローダを書き込み、簡単なスケッチ(=プログラム)で色々な電子工作を実現する優れモノです。

PICやSHといった、本格的なマイコンボード製作して使いこなすのも良いですが、Arduinoボードを利用して「まず動く物」を作ってみると言うのも、これから電子工作の世界に挑戦するよ!という人には良いと思います。

入門に最適な「Arduinoはじめようキット」。
おそらく同梱されているボードのバージョン更新が原因で、残念ながらリンク作成時点で売り切れ中。

マイコンボードを調達したら、公式HPのダウンロードサイトから開発環境(IDE)をダウンロードして入手します。

120317Ad01
120317Ad02
ここで注意したいのは、開発環境のバージョン(ビルドNo.)です。

現在WEBサイトでダウンロードできる環境の最新版はVer.1.0(ビルドNo.0023)で、それ以前のバージョンも選んでダウンロードする事が可能になっています。
国内で正規代理店が輸入販売しているArduinoUNO(代表的なボード)は「R3」と呼ばれているバージョンになりますが、このボードは最新版の開発環境以外では、スケッチをダウンロードする事が出来ません。
時々この組み合わせミスを忘れて動かない!とあたふたしている学生を見かけますので注意しましょう。

120317Ad03
ビルドNo.0022 の起動時に表示される画面

120317Ad04
ビルドNo.0023(Arduino1.0)の起動時に表示される画面

ダウンロードしたファイルを実行して「あれ?画面が古い?!」となっていたら再度HPをチェックしに行きましょう。
Arduino1.0 Windows版のダウンロード直リンク
Arduino1.0 MacOS版のダウンロード直リンク

マイコンボードを用意し、IDEをダウンロードしたら、最後にUSBケーブルを用意します。

PC側はいわゆる普通の「A型」、マイコン側は今は珍しい部類になりつつある「B型」のケーブルを1本用意します。
ただし、このケーブルが若干曲者で、今までの経験上B型ケーブルはジャンク品やあまりいい加減(安すぎる等)なものだとうまく通信できないケースがけっこうありました。
多少値が張ってもちゃんとしたメーカー品を選ぶか、持っている人は「LEGOマインドストームNXT」のUSBケーブルを使うと良いかと思います。

楽天市場/スーパーwifi

お得なスーパーwifi

さて、稼ぎますか!

楽天市場/お勧め

楽天市場/ホビー

楽天トラベル

amazon/パソコン周辺機器

検索フォーム

更新カレンダー

06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

最新記事

携帯用QRコード

QR

Amazon:通販

amazon/TVゲーム

amazon/模型関係

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。