- 電子工作「ラジコン送信機の製作」のご紹介
- 電子工作「ラジコン送信機の製作」
- 「ラジコン送信機の構成」について
- 「ジョイスティックの使い方」について
- 「ジョイスティックの構造」について
- 「前進、後進、可変速を制御する方法」について
- 「旋回制御する方法」について
- 「無線通信フォーマット」について
- 「ラジコン送信機の製作」
- 「組み立てに必要な部品」について
- 「PICマイコン」について
- 「組み立て」
- 「送信ユニットのプログラム」
- 「送信部のプログラム」について
- 「プログラム:宣言部」について
- 「モータを制御するサブ関数」について
- 「データ送信サブ関数」について
- 「動作テストと調整」
- 「無線送信のテスト」
- 歴代ゲームソフト売上ランキングのご紹介|まとめ
- 海外人気のおすすめ名作ゲーム評価ランキングのご紹介
- 【ゲームランキング】世界・国内で最も売れたゲームランキングのご紹介
- 名作ゲームのご紹介│まとめ│家庭用ゲーム・PC・アーケードなど
- 【機種別ゲームTOP】PC・家庭用・アーケードゲーム・周辺機器のご紹介
- ジャンル別ゲームタイトルのご紹介│まとめ│
- 【ゲームTOP】ゲーム関連ページのご紹介
- 【書籍・雑誌TOP】書籍・雑誌サイトマップ関連ページのご紹介
- 【ホビーTOP】ホビーサイトマップ関連ページのご紹介
電子工作「ラジコン送信機の製作」のご紹介
ご訪問ありがとうございます。
前回の「ラジコン車」を操縦するための送信機を製作します。
「電子工作/修理/メンテナンス」関連マップのご紹介
「電子工作/修理/メンテナンス」関連サイトをご紹介します。
電子工作「ラジコン送信機の製作」
ラジコン車ができたら次は無線送信機の製作です。今回は、ジョイスティックで車の制御を行うラジコン送信機を作ってみます。操縦する相手は前回製作したラジコン車です。
現在、タミヤやヨコモから発売されているラジコンキットの改造でも応用できると思います。
送信機にはジョイスティックを採用
ラジコン送信機の外観が下(送信機の外観)のようになります。特徴は、操作部が、1個のジョイスティックだけでできていることです。ジョイスティックは2つの要素を持っていて、速度制御と旋回制御の2要素の制御を1つで行います。
「ラジコン送信機の構成」について
ジョイスティックを使ったラジコン送信機の内部構成は、下図(送信機の構成)のようになっています。図のように、送信ユニットとジョイスティックで大部分が構成されていて、PICマイコン内蔵のA/D変換モジュールとUSARTモジュールを使っています。
送信機の構成
「ジョイスティックの使い方」について
ジョイスティックは、ゲームなどでよく使われているレバーによる操作器で、写真(ジョイスティックの外観)のような外観をしています。
ジョイスティックの外観
レバー | 手を離すとセンター位置に自動的に戻る |
可抵抗 | 内部で軸が上のレバーに接続されている |
「ジョイスティックの構造」について
ジョイスティックの構造は、下記(ジョイスティックの内部構成)のように操作スティックの根元にあるカムが、それぞれ直角の方向になった2個の可変抵抗に接続されています。
それぞれスティックの垂直方向と水平方向の角度に比例した抵抗値を出力するようになっています。
ジョイスティックの内部構成
この可変抵抗の両端を電源とグランドに接続すれば、中央の端子からは、0Vから5Vの範囲でジョイスティックの位置に比例した電圧が取り出せることになります。
A/D変換モジュールで入力位置をデジタル化
この電圧出力をPICマイコンのA/D変換モジュールに入力して位置に比例した10ビットのデジタル値を得ることができます。
デジタルデータをパルス幅制御してモータ速度制御する
この10ビットの値を、受信機側のモータのパルス幅制御のデューティ値に使えば、そのままモータの速度制御ができることになります。
なぜA/D変換モジュールを使うの?
ジョイスティックを操作して得られるデータはアナログです。これをA/D変換モジュールでデジタル信号に変換し、受信機側のPWMモジュールに使うわけです。
「前進、後進、可変速を制御する方法」について
まずデータの扱いを簡単にするため、10ビットを全部使わず、上位8ビットだけ使うことにします。パルス幅制御の方もやはり8ビットで制御します。256分解能で使うことになりますが、これで十分モータの速度を可変できます。
後進と可変速の制御
垂直値は、中心値を境にして、大きい側が前進、小さい側を後進の速度値とします。しかし、中心で速度「0」となるようにして互いに反対方向に速度値が増えるようにする必要がありますから、下記のように変換する必要があります。
【1】垂直側の読み込んだ値(Vert)が80HからFFHまでのとき(Vert-80H)×2の計算を行い、前進モードとします。
【2】垂直側の読み込んだ値(Vert)が7FHから0のとき
(7FH-Vert) × 2 の計算を行い、後進モードとします。
これで、前進、後進と可変速が制御できることになります。
Hori = Horizonプログラム中で用いる変数の名前をわかりやすくするために、それぞれの値を「Vert」「Hori」としました。プログラム中では「Vert」は」VData」、「Hori」は「HData」
です。
「旋回制御する方法」について
次に、旋回制御は、水平方向の値を、そのままモータ速度の右左の加減速値として使うことにします。このため下記のように制御します。
左旋回ということで、(Hori-80H)の値を、右モーターの速度に加算し、左モーターの速度から減算します。
これで、左右のモーターの速度差で左旋回することになります。ただし、最高速度はFFHで最低速度は0という制限があります。
右旋回ということで、(7FH – Hori)の値を、左モーターの速度に加算し、右モーターの速度から減算します。
これで左右のモーターの速度差で右旋回することになります。
このように速度設定を全て送信機側で実行してしまいますので、受信側では、指定された速度でモータを制御するだけでよく、簡単な制御とすることができます。
「無線通信フォーマット」について
無線送信の方法ですが、下記のフォーマットで、PICマイコンの内蔵USARTモジュールを使って無線送信モジュールにデータを送信します。
通信データフォーマット
通信速度は、無線送受信モジュールの制限で2400bpsの調歩同期式としています。これで無線送信モジュールから電波として出力されることになります。
通信データの流れ
下図のようにスタート記号である文字Sを2回送ったあと、モータ1、モータ2の回転方向指定と、その時のモータ速度値を送信します。
速度データについては、バイナリデータそのものではデバッグしにくいので、1バイトのデータを上位4ビットと下位4ビットに分け、それぞれに30Hを加えてASCII文字コードに変換して送信しています。
さらに同じデータの「0」と「1」を反転さ
せたデータを追加して送信し、最後に終わりのマークとして文字Eを送っています。
「ラジコン送信機の製作」
送信機回路図
送信機の回路は上記(送信機回路図)のようにしました。PICマイコンPIC16F876Aを中心に構成し、ジョイスティックの可変抵抗の位置を一定時間間隔で入力し、それに対応したコードをシリアル通信で無線送信モジュールから送信するという動作をします。
電源には006P乾電池を使用
電源には006Pの乾電池を使用し、9Vから5Vを作る3端子レギュレータには、低電圧ドロップタイプを使って電池をぎりぎりまで使えるようにします。
データ送信
データ送信にはUSARTを使ってシリアル通信を実現することにします。DIPスイッチがありますが、今回は使っていませんので省略可能です。
パターン図
この回路図から基板部のパターン図を作成します。作成したパターン図が上記となります。小さな基板ですのでユニバーサル基板での作成も容易です。
「組み立てに必要な部品」について
組み立てに必要なパーツは下記となります。特別な部品は無線送信モジュールとジョイスティックくらいです。
送信機パーツ一覧
送信機パーツ一覧 | |||
記号 | 品名 | 型番仕様 | 数量 |
U1 | PICマイコン | PIC16F876A-20-1/SP | 1 |
U2 | 3端子レギュレータ | S81350または78L05 | 1 |
TX1 | 無線送信モジュール | AM-RT5-315(71E-711) | 1 |
X1 | セラミック振動子 | 10MHz3端子型 | 1 |
LED2 | 発光ダイオード | TLR1133Φ | 1 |
LED1 | 発光ダイオード | TLG1133Φ | 1 |
LED3 | 発光ダイオード | パネル型6Φブラケットつき | 1 |
C4,5 | セラミックコンデンサ | 0.001μF | 2 |
C1 | 電解コンデンサ | 33μF 16V | 1 |
C2 | 電解コンデンサ | 33μF 10V | 2 |
C3,6 | 積層セラミックコンデンサ | 0.1μF 50V | 2 |
R1,2 | 抵抗 | 10kΩ1/4W | 2 |
R3/4/7 | 抵抗 | 470Ω1/4W | 3 |
R5,6 | ジョイスティック | 小型10kΩB ばねリターン式 | 1 |
SW1 | DIPスイッチ | 4P DIPスイッチ | 1 |
J1,2 | モレックスコネクタ | 6Pコネクタソケット、ハウジング | 1 |
スライドスイッチ | 小型スライドスイッチ | 1 | |
プラグケーブル | スナップ式のプラグケーブル | 1 | |
基板 | サンハヤト感光基板10K | 1 | |
ICソケット | 28P スリムタイプ | 1 | |
電池 | 006P9V | 1 | |
ケース | タカチSX-125A | 1 | |
小物 | ねじ、カラー、テストピン等 | 1 |
「PICマイコン」について
マイクロコントローラとしてPICマイコンシリーズを使用します。このPICは米国マイクロチップテクノロジー社が開発した小型ワンチップマイクロコンピュータです。
フラッシュメモリのプログラムメモリを内蔵していて外部にクロック発振用の素子を接続するだけでマイクロコンピュータとして動作します。
最近、多方面でよく使われているもので、チップそのものも百円から千円程度で安価であること、プログラムを開発するための道具もフリーソフトで提供されていたり、プログラムを書き込むためのライタも自作したりキットで販売されていたりと、安価に開発環境を揃えられるためアマチュア工作にはもってこいのものです。
PICマイコンには多種類のシリーズがありますが、今回使用したものは、PIC16F876Aという最もよく使われているシリーズですので容易に入手できます。
PIC 12F675/PIC 12F683
・PIC12F683:A/Dコンバータに加え、パルス幅変調(PWM)出力機能も内蔵された8ピン
PIC。
PIC16F819
PIC 16F876A
このような高機能なマイクロコントローラがわずか千円以下で入手できます。各種の内蔵モジュールを使うことでいろいろなことが可能となります。
PICのピン配置
PICの内部構成、PIC12F675/PIC12F683のピン配置はデータシート(米マイクロチップのホームページで閲覧可能)で確認できます。
「組み立て」
いよいよ組み立て開始です。まずは基板の組み立てから。下記(送信機基板完成)が基板組み立て完了後の状態です。右上に立っているのが無線送信モジュールです。また下記(はんだ面)がはんだ面側の状態です。
送信機基板完成
3端子レギュレータ
|
小型スライドスイッチ
|
DIPスイッチ |
無線送信モジュール
|
PIC16F876A |
セラミック振動子
|
はんだ面
抵抗器(R7470Ω)写真のように、LEDの極性に注意して空中配線します。
プラスティックケース加工
ケース実装にはプラスティックケースの加工が必要です。まず、ジョイスティックのスティックが十分動かせるよう大き目の丸穴をあけ、あけ口が斜めになるようヤスリで仕上げ、ジョイスティックが十分の角度まで斜めになるようにします。
下写真が組み立て後の状態です。ケース表面には、ジョイスティック以外は、電源スイッチと動作確認用の発光ダイオードだけです。
送信機組み立て状態
ブラケットLED |
抵抗470Ω |
ジョイスティック
|
アンテナ(24cm) |
ピンジャック |
スナップ式プラグケーブル(006Pを接続する)
|
「送信ユニットのプログラム」
プログラムは、PICマイコンに書き込んで利用します。そして送信機のプログラムは、C言語で作成しています。USARTやAD変換などの内蔵モジュールを利用していますので、簡単に高機能を実現することができます。
プログラム全体のフロー
送信機のプログラム全体のフローは、下記(送信機プログラムフロー)のようになっています。単純な繰り返し動作となっていて、すべてメインフローの流れのなかで繰り返しています。
送信機プログラムフロー
START | |
初期設定、A/D変換、USART設定 | |
LED反転制御 | 目印用 |
チャネル0入力、VDataに格納 | 垂直位置入力 |
チャネル1入力、HDataに格納 | 水平位置入力 |
速度值計算CalcPWM() |
アナログ入力値からデューティ値に変換
|
データ送信Send() |
反転2連送で送信
|
【1】まず最初に2チャネルのアナログ入力を実行します。これでジョイスティックの現在値を読み取ることになります。
【2】次に読み取ったデータの垂直成分、つまりチャネル0のデータから、速度用のデューティ値を求めます。
【3】次に水平成分、つまりチャネル1のデータを旋回用のデータとして、速度のデューティ値に加減算します。
【4】これで、2台のモータの速度値が求められたことになりますので、通信フォーマットに合わせて無線モジュールに出力します。
【5】送信が完了したら、すぐ再度最初から繰り返します。この最後で発光ダイオードの反転制御をして、点滅させるようにしています。
「送信部のプログラム」について
送信部のプログラムは「プログラム【1】【2】【3】コード」で記述しています。
プログラム【1】 | 宣言部とメイン関数部コード |
プログラム【2】 | PWM計算サブ関数コード |
プログラム【3 】 | データ送信サブ関数コード |
「プログラム:宣言部」について
下記(宣言部とメイン関数部コード)は宣言部とメイン関数です。まずコンフィギュレーション設定とグローバル変数の宣言定義をしています。
メイン関数では各モジュールの初期設定をし、メインループではジョイスティックのデータを読み込み、2個のモータのPWM値に変換したあとで、送信をしています。
プログラム【1】宣言部とメイン関数部コード
/**************************
・ラジコンロボット送信機プログラム
・ジョイスティックのデータをA/Dで入力し、USARTで送信し無線出力
**************************/
//コンフィギュレーション設定
#include <16F876A.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NODEBUG,NOLVP
//A/D変換10ビットモード
#device ADC = 10
//USART初期設定
#usedelay(CLOCK = 10000000)
#users232(BAUD = 2400,XMIT = PIN_C6,RCV = PIN_C7,ERRORS)
////グローバル変数の宣言定義
charDir,SendBuf[6];
unsigned Long HData,VData;
unsigned Long Duty,Duty1,Duty2;
///プロトタイピング
void CalcPWM(void);
void Send(void);
////メイン関数
voidmain(void)
{
////入出力ポートの初期設定
//ポートCはUSART受信以外全て出力
set_tris_c(0x80);
//ボートB上位入力下位出力(未使用)
set_tris_b(0xF0);
//ポートANO,AN1,AN3アナログ入力
set_tris_a(0x0B);
//ポートBのプルアップオン
port_b_pullups(TRUE);
//LED点灯
output_low(PIN_CO);
////A/Dコンバータの初期設定
//RADRA2RA3ピンがアナログ入力
setup_adc_ports(AN0_AN1_AN3);
//Fosc/32速度設定
setup_adc(ADC_CLOCK_DIV_32);
///メインループ
while(1)
{
///LED制御
output_toggle(PIN_C1);
output_toggle(PIN_A2);
///ジョイスティックのデータ入力
//チャネル0選択 CH0 入力VertA格納(速度)
set_adc_channel(0);
//アクイジション待ち
delay_us(20);
//A/D変換データ10ビット読み込み
VData = read_adc();
//チャネル1選択 CH1入力Horiへ格納(旋回)
set_adc_channel(1);
//アクイジション待ち
delay_us(20);
//A/D変換データ10ビット読み込み
HData=read_adc();
///モータPWM値計算
//速度用デューティ値計算 PWMを求める
CalcPWM();
///無線送信出力
Send();
}
}
「モータを制御するサブ関数」について
下記(プログラム【2】PWM計算サブ関数コード)は、ジョイスティックのY方向(垂直方向)のデータを2個のモータの速度に変換し、さらにジョイスティックのX方向(水平方向)のデータを旋回データに変換して、両方のモータの速度変更をするサブ関数です。
プログラム【2】PWM計算サブ関数コード
/************************
*PWM値計算サブ関数
************************/
voidCalcPWM(void)
{
//10ビットデータを8ビットに縮小
VData = VData>>2;
HData = HData>>2;
///速度設定(前進、後進の判定)
///00-7Fバック7Fのとき速度0、80-FF前進80のとき速度0
//0x80以上か?
if(VData>=0x80){
///前進
//方向前進設定
Dir = '0';
//(VData-80H)×2を設定する
Duty = (unsigned Long)((VData - 0x80) *2);
}
//0x7F以下の場合
else{
///後進
//方向後進設定
Dir = '1';
//(7FH-VData)×2を設定する
Duty = (unsigned Long)((0x7F - VData) * 2);
}
////旋回制御
//左右の判定 0x80以上か?
if(HData >= 0x80){
///左旋回Duty1を増加Duty2を減少
//差分
HData = Hdata - 0x80;
//Duty2設定
if(DutyHData)
//Duty-HData 負なら0に制限
//左旋回 Hori-80HをDuty2から減算、Duty1に加算(上下限リミット)
Duty2 = 0;
else
Duty2 = Duty - HData;
//Duty1設定
Duty1 = Duty + HData;
if(Duty1 > 0xFF)
//0xFF以下に制限
Duty1 = 0xFF;
}
else{
///右旋回Duty1を減少 Duty2を増加
//差分
HData = 0x7F - HData;
//Duty1設定
//右旋回7FH-HoriをDuty1から減算 Duty2に加算(上下限リミット)
if(Duty < HData) //Duty-HDAta 負なら0に制限 Duty1 = 0; else //Duty2設定 Duty2 = Duty + HData; if(Duty2 > 0xFF)
//0xFF以下に制限
Duty2 = 0xFF;
}
}
「データ送信サブ関数」について
下記(プログラム【3 】データ送信サブ関数コード)は送信データフォーマットに沿って必要なデータを順次送信するサブルーチンです。
8ビットの速度データは上位と下位の4ビットに分け、それぞれに0x30を加えて文字コードとした上で送信しています。
これで、MPLAB IDEでデバッグするとき、USARTのシミュレーションの送信データを文字として確認できますからデバッグがやりやすくなります。
プログラム【3 】データ送信サブ関数コード
/************************
データ送信サブ関数
************************/
voidSend(void)
{
inti;
///送信データ作成 24ビットごとに文字に変換
//モータ1方向データ
SendBuf[0] = Dir;
//PWM上位4ビット
SendBuf[1] = (Duty1/0x10)+0x30;
//PWM下位4ビット
SendBuf[2] = (Duty1%0x10)+0x30;
SendBuf[3] = Dir;//モータ2 方向データ
//PWM上位4ビット
SendBuf[4] = (Duty2/0x10)+0x30;
//PWM下位4ビット
SendBuf[5] = (Duty2%0x10)+0x30;
///データ送信開始
putc('S');
//文字S送信
putc('S');
for(i = 0;i < 6;i++){
putc(SendBuf[i]);
//モータデータ送信
}
for(i = 0;i < 6;i++){
//反転データ送信
putc("SendBuf[i]);
}
//文字E送信
putc('E');
}
「動作テストと調整」
送信機の動作テストは、PICマイコンを実装しない状態から始めます。
電源電圧の確認
電源をオンとして電源電圧が5Vあることをテスタで確認します。
発光ダイオードのテスト
PICマイコンのソケットのところで、発光ダイオードに接続されているピンを仮にグランドに接続すれば点灯するはずです。
スイッチの確認
対応するピンの電圧をテスタで計測し、常時は5Vでスイッチを押している間0Vになるのでチェックします。
ジョイスティックのテスト
コネクタを接続してから電源をオンとし、PICマイコンのソケットに対応するピンをテスタで測定し、ジョイスティックを動かすと電圧が0Vから5Vの範囲で変わることを確認します。
これで単体として動作していることは確認できます。
PICマイコンを実装しての確認
次は、PICマイコンにプログラムを書き込んで実装してから行います。電源オンで発光ダイオードが点滅すれば基本的な動作は正常に動いています。
「無線送信のテスト」
前回製作したラジコン車と組み合わせてテストします。両方のユニットにアンテナを接続した上で、両方の電源をオンとし、ジョイスティックを動かせばモーターが動くはずです。
モータの動く方向と速度変化の方向が設計どおりであればこれで完了です。期待通りに動かない場合には、コネクタの接続が間違っていないかチェックします。
以上でラジコンロボットが完成です。
「電子工作/修理/メンテナンス」関連マップのご紹介
「電子工作/修理/メンテナンス」関連サイトをご紹介します。
「電子工作/修理/メンテナンス」関連マップのご紹介
「電子工作/修理/メンテナンス」関連サイトをご紹介します。
【ゲームメーカー別ランキング】サイトマップのご紹介
ゲームメーカー別ランキングの関連サイトをご紹介します。
【ゲームメーカー別ランキング】関連ページのご紹介
【ゲームメーカー別ランキング】関連ページをご紹介します。
【ゲームランキング】サイトマップのご紹介
ゲーム・ランキングの関連サイトをご紹介します。
【ゲームランキング】サイト関連ページのご紹介
【ゲームランキング】サイト関連ページをご紹介します。
歴代ゲームソフト売上ランキングのご紹介|まとめ
海外人気のおすすめ名作ゲーム評価ランキングのご紹介
ゲームTOPサイトマップ
ゲームTOPのサイトマップをご紹介します。
【ゲームTOP】サイトマップ | ||||
ゲームTOP > ランキング│傑作・名作│機種別│ジャンル別 | ||||
■ランキングTOP > ハード│ソフト(売上(世界│国内)│海外評価) ■傑作・名作ゲームTOP > ■ゲーム機種別TOP > 据置│携帯│AC│PC│周辺機器 ■ジャンル別TOP > アクション系(プラットフォーム│対戦アクション│FPS│TPS│STG│フライト)|AVG│RPG│SLG│レース│スポーツ│パズル│テーブル |
||||
■■│コペンギンTOP > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
ゲーム関連ページのご紹介
ゲーム関連ページをご紹介します。
【ゲームランキング】世界・国内で最も売れたゲームランキングのご紹介
名作ゲームのご紹介│まとめ│家庭用ゲーム・PC・アーケードなど
【機種別ゲームTOP】PC・家庭用・アーケードゲーム・周辺機器のご紹介
ジャンル別ゲームタイトルのご紹介│まとめ│
コペンギン・サイトマップ
コペンギンのサイトマップをご紹介します。
【コペンギンTOP】サイトマップ | ||||
コペンギンTOP > ゲーム│ホビー│書籍・マンガ│ | ||||
■■│コペンギンTOP > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
懐かしの名作から最新作までの豊富な品揃え!通販ショップの駿河屋
コペンギンサイトマップ関連ページのご紹介
コペンギン関連ページをご紹介します。