SSブログ

リモートコントロール(RC)戦車をつくる【スケッチ_モータ制御】 [RC戦車]

モータドライバ回路ができたので、モータを制御するスケッチを完成させます。以前にモータの状態の代わりに3個のLEDを組み合わせて点灯・消灯させたスケッチを作ったので、それを元に編集していきます。

【スケッチ】
/*
  SparkFun Electronics 2013
  Playing with Infrared Remote Control
  
  IR Receiver Breakout (SEN-8554): Supply voltage of 2.5V to 5.5V
    Attach
    OUT: To pin 13 on Arduino
    GND: GND
    VCC: 5V
  
  This is based on Ken Shirriff's code found on GitHub:
  https://github.com/shirriff/Arduino-IRremote/

  This code works with cheap remotes. If you want to look at the individual timing
  of the bits, use this code:
  http://www.arduino.cc/playground/Code/InfraredReceivers
*/

#include <IRremote.h>           // 赤外線送受信用ヘッダファイル

int RECV_PIN = 11;              // 赤外線受信モジュール
IRrecv irrecv(RECV_PIN);        // 赤外線受信用オブジェクトの設定
decode_results results;         // 赤外線受信結果を格納する
#define POWER 0x10EFD827
#define A 0x10EFF807
#define B 0x10EF7887
#define C 0x10EF58A7
#define UP 0x10EFA05F
#define DOWN 0x10EF00FF
#define LEFT 0x10EF10EF
#define RIGHT 0x10EF807F
#define SELECT 0x10EF20DF

#define SPEED 128               //モータへの電圧(スピード)は一定

// set pin numbers:
 // 右キャタピラ用ピン
const int R_Vref = 5;           //D5(PWM)
const int R_OUT1 = 3;           //D3
const int R_OUT2 = 4;           //D4
 // 左キャタピラ用ピン
const int L_Vref = 6;           //D6(PWM)
const int L_OUT1 = 7;           //D7
const int L_OUT2 = 8;           //D8

// 初期化(電源投入/リセット時1回のみ実行):
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver

// initialize the motor driver pin as an output(Arduinoにモータドライバへのピンが出力であることを伝える)
  pinMode(R_Vref, OUTPUT);
  pinMode(R_OUT1, OUTPUT);
  pinMode(R_OUT2, OUTPUT);
  pinMode(L_Vref, OUTPUT);
  pinMode(L_OUT1, OUTPUT);
  pinMode(L_OUT2, OUTPUT);

 // モータドライバのスピードを指定
  analogWrite(R_Vref, SPEED);
  analogWrite(L_Vref, SPEED);
}

// main loop:
void loop() 
{
  if (irrecv.decode(&results))  //(★これが無いと動作しない)
  {
    switch(results.value)
    {
      case UP:                  //UPなら前進
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, LOW);
        delay(1600);            //100µs待つ(貫通電流防止)
        digitalWrite(R_OUT1, HIGH);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, HIGH);
        digitalWrite(L_OUT2, LOW);
        break;
      case RIGHT:               //RIGHTなら右転進
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, LOW);
        delay(1600);            //100µs待つ(貫通電流防止)
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, HIGH);
        digitalWrite(L_OUT1, HIGH);
        digitalWrite(L_OUT2, LOW);
        break;
      case LEFT:                //LEFTなら左転進
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, LOW);
        delay(1600);            //100µs待つ(貫通電流防止)
        digitalWrite(R_OUT1, HIGH);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, HIGH);
        break;
      case DOWN:                //DOWNなら後進
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, LOW);
        delay(1600);            //100µs待つ(貫通電流防止)
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, HIGH);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, HIGH);
        break;
      case SELECT:              //SELECTなら停止
        digitalWrite(R_OUT1, LOW);
        digitalWrite(R_OUT2, LOW);
        digitalWrite(L_OUT1, LOW);
        digitalWrite(L_OUT2, LOW);
        break;
      default:
        break;
    }
      irrecv.resume();          // 受信機をリセットする(★これが無いと1回のみの制御となる)
  }
}

※#include <IRremote.h>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。

【Tips】 ちょっとしたノウハウをまとめます。
①ピンはボードのピンヘッダでアサイン
最初、デバイスピン番号でアサインしていましたが、動作確認で挙動がおかしかったので確認していたところ、ボードのピンヘッダでアサインしてうまくいきました。ちょっと焦りました。。。

【ArduinoProMini(The Simple)ピン配置図】
ArduinoProMini(The Simple)ピン配置図.jpg

②3ピンはPWM出力可能のはずだが、信号が出ない!
最初、アナログ出力(PWM)として「R_Vref = 3;」でピンアサインしたのですが、その後動作確認したところ信号が出力されていないので、5ピンに再アサインしたらOKでした。
3ピンはPWM出力可能のはずですが、出力しない原因は不明。
個体の問題なのか、互換機としてのこの製品の制限なのかなー?



profile_picture_40×40.JPG
#月が近いので続きもののようにみえるけど、実は1年ぶりだー( ´艸`)
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【モータドライバ回路】 [RC戦車]

モータドライバ回路部を作製します。

ベース車体に搭載するため、モータとホイールシャフトの間に収まる大きさのユニバーサル基板(40mm×60mm)を使いました。ただこの大きさゆえ、実装のいくつかを端折っています。
 ・Vcc(IC用電源)とVs(モータ用電源)を5Vで共用(本当は別電源系統にしたかった)
 ・VccとVsでパスコン(0.1μF)を一つ(本当はそれぞれ一つずつに欲しい)
ユニバーサル基板にはベース車体と接続するため、ユニバーサルプレートの穴の位置に合わせてM3ネジが入る大きさの穴を四隅にあけています。

【基板実装】
・Top view
モータドライバ回路①.JPG
・Bottom view
モータドライバ回路②.JPG

【回路図】
motor_driver(TA7291P)forRC_Tank_r2a.jpg

【仮実装】
ベース車体にモータドライバ回路を仮実装してみました。収まりとしてはまぁまぁいい感じです。
右側にあるブレッドボードではArduinoからの制御の代替としてINとVrefに固定値を与えるようにしています。
このあと、モータとモータドライバ回路の上に、ユニバーサルプレートで蓋をするような形でシャーシを作っていくつもりです。
モータドライバ回路仮実装.JPG


【Tips】 ちょっとしたノウハウをまとめます。
①マイクロUSB DIP化キット ポリスイッチ取り外し
電源を最初に入れたとき、自力でのキャタピラの動きがほとんどなく、手で初動を回してあげると少しだけ動くのですが、そのまま止まってしまう状況でした。ゆっくりでも動くので配線とかに間違いはなさそうです。となれば、モータに所定の電圧がかかっていないのでは?と見ると100数十mV程度なのでほとんど電圧がかかっていません。
で、思い当たるのがマイクロUSB DIP化キットに載っているポリスイッチ(ヒューズです)です。データシートを見るとMICROSMD010というポリスイッチは通常時で0.1Aしか流れませんので、これではモータを回すのに明らかに電流が不足しています。
ポリスイッチをハンダこてを使って取り外してから直結させ、これで解決!です。

ブレッドボード用マイクロBメスUSBコネクタDIP化キット
ブレッドボード用マイクロBメスUSBコネクタDIP化キット.jpg

"http://akizukidenshi.com/catalog/g/gK-06656/"

過電流を流さないためにはこれはこれで重要なのですが、こんな時はかえって中国製の安いやつの方が良いかもしれません(笑)
で、これ↓です。中国からの発送で注文してから2週間程度かかりましたが、10個で260円!  次の機会に使おうと思います。
Homyl メス マイクロ ピンボード USB → DIP 5ピン  DIP変換 2.54mm マイクロ USB 電子部品 10個
マイクロUSB→DIP変換.jpg
"https://www.amazon.co.jp/gp/product/B077YJF5QW/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1"

②プラスチック丸座金が便利
スペーサと組み合わせて微妙な高さ調整のときにあると便利。個人的にヒット作!です(笑)
プラスチック丸座金.JPG

③調達部材の一覧
これまでは秋葉原で購入することがほとんどでしたが、今回は買いに行く時間もなかったのでアマゾンで購入しました。
 ・数百円の部品も1個から購入できるので、急ぎでなければ交通費と時間を考えれば非常に楽です。
 ・中国からの発送だと、物によっては到着まで2週間くらいかかるので、時間に余裕を持って購入す
  る。
 ・梱包はまちまち。どれもプチプチとかに包んではくれていますが、やはり日本国内発送は問題無し
  です。中国からのChina Postものは、ピンが曲がっていたり最悪折れていたり、付属のヘッダピン
  の数が足らないとか、いろいろ難もありますが、値段を考えれば多少の不良品があっても、まぁ仕
  方ないかを思えるレベル。値段も安いので予備と思って少し多めに購入すると不良品のトラブルは
  ある程度は避けられるかも。

ドクターラボ 最も標準的なユニバーサル基板4*6
ユニバーサル基板40mm×60mm.jpg
"https://www.amazon.co.jp/gp/product/B01N966QV8/ref=oh_aui_detailpage_o08_s00?ie=UTF8&psc=1"
モータドライバ回路部を載せます。ベース車体に組み込むサイズを考慮して購入しました。

M3ねじ JPCナット 六角スペーサー ナイロンねじ 小ねじキット 十字ドライバー付き ケース付属 180個 ナットスペーサーセット ブラック
ナイロンネジ/スペーサセット.jpg
"https://www.amazon.co.jp/gp/product/B07C5N88QF/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1"
ベース車体に回路基板を載せるために購入しました。長さの異なるスペーサがケースに入ってセットになっているので便利です。

uxcell ソケット アダプター  2.54mmピッチ 2ロー 24ピン幅 DIP 10個入
24ピン ICソケット.jpg
"https://www.amazon.co.jp/gp/product/B01E54Z7T0/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1"
Arduino Pro Miniを基板実装する際に、ピンの太さが丸ピンソケットでは入らなかったので、板バネ式のICソケットを購入しました。
China Post経由で、10個中2個がピンが折れていたので使用不可でした。。。
24ピン ICソケット不良品.JPG


丸ピンヘッダ 1×40=40P 2個入り<con-072>
丸ピンヘッダ.jpg
"https://www.amazon.co.jp/gp/product/B00TPCCM0K/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1"

丸ピンソケット 1×40=40P 2個入り<con-073>
丸ピンソケット.jpg
"https://www.amazon.co.jp/gp/product/B00TPCHXV8/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1"
丸ピンのヘッダピンとソケットです。ブレッドボードに直接させたり、基板実装の際のソケットと活躍できそうです。国内発送だったので梱包もしっかりしており、ピンの曲がりや折れも無くOKでした。

④ロックタイト425(樹脂ネジ用緩み止め)
ロックタイト425.JPG
"https://www.amazon.co.jp/%E3%83%AD%E3%83%83%E3%82%AF%E3%82%BF%E3%82%A4%E3%83%88-%E7%9E%AC%E9%96%93%E6%8E%A5%E7%9D%80%E5%89%A4-%E4%BD%8E%E5%BC%B7%E5%BA%A6-20g-425-20/dp/B004OR5M1M"
樹脂ネジはあまり強く締め付けが出来ないため「緩み止めを塗布したいなー」と考えて探したのが、これです。金属ネジの緩み止めはいろいろと種類が豊富ですが、樹脂ネジ用となると一択のようです。書いてある通り”瞬間接着剤”です。金属ネジの緩み止めと同じようなものと勝手に想像していたのですが、本当に瞬間接着剤です。専用とは言え、そんなに頻繁に使うものでもないし、1回あたりに使う量もそれほどでもなく接着剤としての使用期限もあるので”それで2,000円は高い買い物だったかなー”、と少し勉強になりました。。。これなら100均でも良かったかなー。


profile_picture_40×40.JPG
nice!(1)  コメント(0) 

リモートコントロール(RC)戦車をつくる【スケッチ_3個のLEDの点灯・消灯】 [RC戦車]

Arduino Pro Miniでスケッチ(プログラム)の書き込みと動作させることができたので、今度はモータを制御することを想定してUP/RIGHT/LEFT/DOWN/SELECTで5つの状態を制御するスケッチを作成しました。モータの状態の代わりに3個のLEDを組み合わせて点灯・消灯させてみます。

【スケッチ】
#include <IRremote.h>           // 赤外線送受信用ヘッダファイル

int RECV_PIN = 11;                // 赤外線受信モジュール
IRrecv irrecv(RECV_PIN);      // 赤外線受信用オブジェクトの設定
decode_results results;           // 赤外線受信結果を格納する
#define POWER 0x10EFD827 
#define A 0x10EFF807 
#define B 0x10EF7887
#define C 0x10EF58A7
#define UP 0x10EFA05F
#define DOWN 0x10EF00FF
#define LEFT 0x10EF10EF
#define RIGHT 0x10EF807F
#define SELECT 0x10EF20DF

// set pin numbers:
const int RED = 8;              // LED(赤)はデジタルピン8に接続
const int YEL = 9;              // LED(黄)はデジタルピン9に接続
const int GRE = 10;             // LED(緑)はデジタルピン10に接続

// 初期化(電源投入/リセット時1回のみ実行):
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver

// initialize the LED pin as an output(ArduinoにLEDが出力であることを伝える):
  pinMode(RED, OUTPUT);
  pinMode(YEL, OUTPUT);
  pinMode(GRE, OUTPUT);
}

// main loop:
void loop() 
{
  if (irrecv.decode(&results))  //(★これが無いと動作しない)
  {
    switch(results.value)
    {
      case UP:                  //UPなら赤のみ点灯
        digitalWrite(RED, HIGH);
        digitalWrite(YEL, LOW);
        digitalWrite(GRE, LOW);
        break;
      case RIGHT:               //RIGHTなら黄のみ点灯
        digitalWrite(RED, LOW);
        digitalWrite(YEL, HIGH);
        digitalWrite(GRE, LOW);
        break;
      case LEFT:                //LEFTなら緑のみ点灯
        digitalWrite(RED, LOW);
        digitalWrite(YEL, LOW);
        digitalWrite(GRE, HIGH);
        break;
      case DOWN:                //DOWNなら全点灯
        digitalWrite(RED, HIGH);
        digitalWrite(YEL, HIGH);
        digitalWrite(GRE, HIGH);
        break;
      case SELECT:              //SELECTなら全消灯
        digitalWrite(RED, LOW);
        digitalWrite(YEL, LOW);
        digitalWrite(GRE, LOW);
        break;
      default:
        break;
    }
      irrecv.resume();          // 受信機をリセットする(★これが無いと1回のみの制御となる)
  }
}

※#include <IRremote.h>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。

【配線図】
IRremotecontrol_ブレッドボード_ProMini.jpg
『Fritzing』はブレッドボード図を描けるソフトで、カッコイイ配線図を描くことができます。
"http://fritzing.org/home/"

ちなみに部品を配置してワイヤを描くと通常は直線になるので、部品と重なったワイヤが隠れて見えなくなってしまうので、ちょっとイケてないなって感じでした。。。そこで、部品と重ならないようにワイヤを曲線に描く方法を紹介します。
最初にふつうにワイヤを接続してからワイヤの途中を『Ctrlキー』を押しながらドラッグすると曲がります。さらに別の途中を同じように『Ctrlキー』を押しながらドラッグすると、ワイヤの曲がるポイントを増やすことができます。

【動作検証】
Arduino Pro Mini_赤外線リモコン3LED ON_OFF.JPG




profile_picture_40×40.JPG
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【Arduino Pro Mini(互換機)②】 [RC戦車]

Arduino Pro Miniはスケッチ(プログラム)の書き込み部分がUSB→シリアル回路となっており、UNOのようにPCからUSBをグサッと挿して簡単に書き込むことはできません。そのため、USB-シリアル変換モジュールを使うことになります。

FT232RL USBシリアル変換モジュール
FT232RL USBシリアル変換モジュール.jpg
"http://akizukidenshi.com/catalog/g/gK-01977/"

この方法については下記のページが参考になりました。
-----------------------------------------------------------------------------
 @kazuph さん
 USB接続できないArduinoにソースを書き込むとき
"https://qiita.com/kazuph/items/06e97f5a697b123aac30"
-----------------------------------------------------------------------------

では実際にやってみます。スケッチは前回使った、赤外線リモコン(COM-11759)のボタンを押下したときにコンソール画面にコードを表示させるもので試してみます。

【Arduino Pro Mini - シリアル変換】
Arduino Pro Mini - シリアル変換.JPG

【Arduino Pro Mini と赤外線受信部の近影】
Arduino Pro Mini - 赤外線受信部.JPG

【シリアルモニタ出力結果】
USB-シリアル変換モジュールを経由してシリアルモニタに出力できています。
シリアルモニタキャプチャ(ProMini).jpg



profile_picture_40×40.JPG
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【Arduino Pro Mini(互換機)①】 [RC戦車]

Arduinoは様々な大きさやスペックでバリエーションがあります。
「Arduino UNO Rev3」(以下UNO)はもっともポピュラーなものですが、戦車に搭載するにはややサイズが大きいなぁと思えたので「Arduino Pro Mini」を使ってみることにしました。
WEBでスペックを調べたところ、同じCPUを使いながらも(クロックは電源電圧の違いにより8MHzと16MHzの2種類がある)スケッチ(プログラム)の書き込み部分をUSB→シリアル回路に簡易化して小型化したもののようです。大きさは33mm×18mmなのでUNOと比較すると大体1/6くらいの大きさです。

Arduino は「Arduino」という名前は商標で守られていますがハードウェアもライセンスもオープンとなっているそうで、いろいろな互換機を安価に購入することができます。
互換機があるということはどこかにオリジナルな正規品もあるってことで、どうもsparkfun製がそれのようです。
Arduino Pro Mini 328 5V 16MHz(sprarkfun).jpg
"https://www.switch-science.com/catalog/946/"
"https://www.sparkfun.com/products/11113"

互換機の魅力はやはりその安さで1個300円程度で買えるものもあるようです。
今回アマゾンで購入した互換機は2個で980円、裏面に 「The Simple」と書いてあるものです。
waves Arduino Pro Mini 互換ボード 328 5V 16MHz 国内配送 2個セット
"https://www.amazon.co.jp/waves-Arduino-%E4%BA%92%E6%8F%9B%E3%83%9C%E3%83%BC%E3%83%89-16MHz-2%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B01CX2APN4/ref=sr_1_6?ie=UTF8&qid=1527414309&sr=8-6&keywords=waves+Arduino"
waves Arduino Pro Mini互換(The Simple).jpg
ただ、後から調べたところオリジナルと微妙にピン配置が違っていたり、ドンピシャの回路図が見当たらなかったりと多少の使いにくさはあるようですので、互換機と言えどもsparkfun製に準拠したものを購入した方が良さそうです。

Arduino Uno&ProMini.jpg



profile_picture_40×40.JPG
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【赤外線コントロール】 [RC戦車]

マイコンをArduinoと決めたので、次に遠隔コントロールの方法を考えます。
もちろん遠隔コントロールの方法もいくつもあるのですが、最初は赤外線を使ってみたいと思います。いわゆる”リモコン”ですね。
PCと比較するまでもないですが、マイコンはピン数とかに制限があるため、全部の機能をいっぺんに動かすことが難しいケースがあります。そんなときは赤外線リモコンがあれば必要な機能を切り替えながらということもできるので、一度使い方を覚えておけば便利です。

で、テレビのリモコンでも何でもいいのですが、電子工作の気分も出していきたいのでこれ↓です。
以前秋葉原に行ったときに、お店でたまたま目に入ったので買ったものです。
SparkFun 赤外線リモコン COM-11759
SparkFun 赤外線リモコン COM-11759.jpg
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4C3S"

赤外線受光部にはこのセンサを使っています。
赤外線リモコン受信モジュール PL-IRM2121(38kHz)
PL-IRM2121-A538.JPG
"http://akizukidenshi.com/catalog/g/gI-01570/"

赤外線リモコンのデータフォーマットには
 NECフォーマット
 家製協フォーマット
 ソニーフォーマット
の3種類があり、COM-11759はNECフォーマットです。
データフォーマットの詳細は”赤外線リモコン フォーマット”で検索するといくつものページで説明をしていますので詳細はそちらにお任せするとして、実際に動作させてみます。
FAQ 1007800 : 赤外線リモコン通信に関係して、NEC方式のフォーマットとはどのようなものか?
"https://support.renesas.com/hc/ja/articles/210901268-FAQ-1007798-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3%E3%81%AE%E4%BF%A1%E5%8F%B7%E3%81%AF%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B-"
リモコンフォーマット(秋月電子)
"http://akizukidenshi.com/download/k4174_format.pdf"

メーカのsprakfunのサイトには使い方をまとめたページがあり、ここのサンプルプログラムを参考に動かしてみたいと思います。
"https://learn.sparkfun.com/tutorials/ir-control-kit-hookup-guide"

赤外線リモコンにはボタンに対応したコードが割り当てられており、サンプルプログラムでは押下したときにコンソール画面に表示するようになっています。
リモコン(COM-11759)コード
リモコン(COM-11759)コード.png

【配線図】
IRremotecontrol_ブレッドボード.jpg

【スケッチ】
/*
  SparkFun Electronics 2013
  Playing with Infrared Remote Control
  
  IR Receiver Breakout (SEN-8554): Supply voltage of 2.5V to 5.5V
    Attach
    OUT: To pin 11 on Arduino
    GND: GND
    VCC: 5V
  
  This is based on Ken Shirriff's code found on GitHub:
  https://github.com/shirriff/Arduino-IRremote/

  This code works with cheap remotes. If you want to look at the individual timing
  of the bits, use this code:
  http://www.arduino.cc/playground/Code/InfraredReceivers
*/

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define POWER 0x10EFD827 
#define A 0x10EFF807 
#define B 0x10EF7887
#define C 0x10EF58A7
#define UP 0x10EFA05F
#define DOWN 0x10EF00FF
#define LEFT 0x10EF10EF
#define RIGHT 0x10EF807F
#define SELECT 0x10EF20DF

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    if (results.value == POWER) 
    {
      Serial.println("POWER");    
    }
     if (results.value == A) 
    {
      Serial.println("A");    
    }
     if (results.value == B) 
    {
      Serial.println("B");  
    }
     if (results.value == C) 
    {
      Serial.println("C");
    }
     if (results.value == UP) 
    {
      Serial.println("UP");
    }
     if (results.value == DOWN) 
    {
      Serial.println("DOWN");
    }
     if (results.value == LEFT) 
    {
      Serial.println("LEFT");
    }
     if (results.value == RIGHT) 
    {
      Serial.println("RIGHT");
    }
     if (results.value == SELECT) 
    {
      Serial.println("SELECT");  
    }
    irrecv.resume();
  }
}

※#include <IRremote.h>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。

【シリアルモニタ出力結果】
シリアルモニタキャプチャ.jpg

一例として「POWER」の時の波形データを載せます。
送信されたデータは受光部で波形が反転されています。
【(デジタル)オシロデータ(POWER)】
オシロデータ(POWER).jpg
【「POWER」波形記録】
「POWER」波形記録.jpg


※(2019.10.19)オプトサプライ赤外線リモコン[OE13KIR]を使った作製例はこちら↓
リモートコントロール(RC)戦車をつくる【赤外線コントロール②】



profile_picture_40×40.JPG

nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【マイコン選び】 [RC戦車]

戦車をいろいろ制御するマイコンを選びたいのですが、これが一番の悩みネタになります。。。
電卓を例にとると「カシオ」派と「シャープ」派に大別されるのですが、キー配置とかメモリ機能のキー操作とか違うのですね。これはどちらが良いということではなく、最初に使ったものを後から変えるというのは、それまでの慣れというのもありますので、ちょっと面倒だったりするわけです。

制御できるマイコンにもいろいろとあるのですが、今手持ちにあるものや今後の入手のし易さを考慮して、
 ①Arduino (https://www.arduino.cc/)
 ②mbed (https://os.mbed.com/)
の二択で考えたいと思います。
ここの記事にもあるように、Raspberry Piももちろん選択肢に入れても良いのですが、今回は戦車を動かすくらいですからそこまでの能力もいらないため、ちょっと横に置いておきます。

さて次に、Arduinoかmbedか?ということになるわけですが、しばらくはArduinoを使ってみようと思います。理由は完全に主観的な比較になるのですが、
 ・Arduinoの方がmbedより情報が多い(WEBや書籍)
  Googleでそれぞれ検索すると圧倒的にArduinoの方がヒット数が多いです。
 ・Arduinoのプログラムの方がmbedより初心者向け
  mbedはArduinoよりCPUスペックも高くパワフルなのが魅力的で、既にC/C++言語スキルを持っている方はmbedの方が良いように思えますが、Arduinoは上手くC/C++の難しいところを隠ぺいした”Arduino言語”を使用しており、そのためどちらからというとArduinoの方が必ずしもプログラミングを本職としていない人でも取っ掛かり易い感じがします。

いずれにせよ、ここは自分なりに納得するまで選ぶことが大切です。これは本当です(笑)

Arduino
Arduino Uno Rev3.jpg
mbed
mbed.jpg
profile_picture_40×40.JPG
nice!(1)  コメント(0) 

リモートコントロール(RC)戦車をつくる【モータとドライバ】 [RC戦車]

こどもの頃、プラモデルを作ったときにお世話になった”マブチモータ”。乾電池2本でお手軽に動かすことができるのですが、専攻が機械系でもなかったのでモータの動作ってあまりに気にしたことがなかったんですね。今回せっかくの機会なので一通りの理解をしておこうと思います。
と、言ってもモータのネタはググれば、それこそ山ほど出てきますので(笑)、詳細はそちらへお任せするとして自分なりにデータシートと実験で得られたノウハウをまとめていきます。

【使うモータ】
ダブルギヤボックスに付属しているモータは『FA-130RA(-2270)』で、工作で使うとしたら”まず、これ!”というくらい最もポピュラーなモータですね。
これ↓です。
FA-130RAモータ.jpg
"https://product.mabuchi-motor.co.jp/detail.html?id=9"

趣味ベースで動かすのであれば、
 使用電圧範囲:1.5~3V(やっぱり乾電池2本だ)
 適正電圧:1.5V
 消費電流:500mA
くらいを押させておけば、とりあえず壊さない程度でOKだと思います。

【モータドライバ】
モータを動かすのにモータドライバが必要となってきます。
必要かどうかはその人がどこまで自作で頑張れるか?にもよるので、本当は”あると便利”というのが正しい表現なのかもしれません。が、今さら2個300円で買えるものをわざわざ自作することもないでしょうから”あると便利なものだけど今となっては必要なもの”という、こんがらがってしまってよくわからないリード文になってしまいました。
ごめんね、いい加減で。。。(笑)
で、端的に言うと
 ・ロジックICの出力をそのままモータにつないでも、ICからはたくさんの電流を流せないので
  モータは動きません。
 ・モータに流れる電流のプラスマイナスを制御することで、回る向きを正転、反転と制御したい。
ということを解決するための専用ICが”モータドライバ”です。
これ↓です。
東芝セミコンダクター社 DCモーター用フルブリッジドライバ(正・逆切り替えドライバ)
モータドライバ(TA7291P).JPG
"http://akizukidenshi.com/catalog/g/gI-02001/"
"https://toshiba.semicon-storage.com/jp/product/linear/motordriver/detail.TA7291P.html"
2018年5月現在、TA7291Pは『生産終了予定』となっていて、データシートにも”Not Recommended for New Design"となっていますが、流通在庫だけでも十分あると思うので、当面は大丈夫だと思います。

【特性実験】
モータドライバとモータを接続して動作特性を調べてみます。理由はRC戦車のスピードを可変にしたいと思っているので、制御電圧(Vref)を変化させた時のモータ側への出力電圧(Vout)の変化を見るためです。
だんだん大げさなことになってきましたが、最近ではブレッドボードに挿すだけで回路が組めるので、気軽に試すことができます。
【特性測定回路図】
制御電圧vsモータ出力電圧特性測定回路図.jpg
【ブレッドボードへの実装の様子】
制御電圧vsモータ出力電圧特性測定回路実装.jpg

モータの使用電圧範囲は1.5~3.0Vなので、Vrefも1.7~3V位で変化させれば良さそうです。しかし2Vを超えたあたりから音と振動がかなり多くなり少しヤバそうなので、実際にはスピードを可変に出来る領域はあまり大きくないのかもしれません。また、今回はモータには無負荷状態での基礎特性なので、実際にはキャタピラで動作したときの負荷状態でVrefのチューニングが必要かもしれません。

【測定結果グラフ】
制御電圧vsモータ出力電圧特性測定グラフ.jpg


profile_picture_40×40.JPG
nice!(0)  コメント(0) 

リモートコントロール(RC)戦車をつくる【モータにリード線を接続】 [RC戦車]

モータにリード線を接続していきます。リード線にはこれ↓を使用しています。
サンコー電商 UL1007 AWG26 L-2×10色 電線 - 千石電商
モータリード線.JPG
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0T45"

リード線の外皮を10~12mmで剥いて、端子に巻きつけてハンダ付けをします。
ノイズ除去のためのコンデンサ(0.1μF)も一緒に付けます。
モータリード線ハンダ付け①.JPG

コンデンサの足が少し長いのは、ギヤボックスとモータを固定するツメを避けるスペースを空けているからです。
モータリード線ハンダ付け②.JPG


リード線のモータの反対側は、基板との取り外しが可能なようにコネクタを付けることにします。
圧着コネクタの自作方法については下記のページが参考になりました。
-----------------------------------------------------------------------------
 電子うさぎ
 コネクタの自作!電子工作の圧着工具と圧着方法
"https://xn--p8jqu4215bemxd.com/archives/397"
-----------------------------------------------------------------------------
日本圧着端子製造 (JST) XHコネクタ ハウジング2P XHP-2 - 千石電商
JST_XHP.jpg
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=7AN6-5SFL"

日本圧着端子製造 (JST) XHコネクタ ハウジング用コンタクト バラ BXH-001T-P0.6 - 千石電商
JST_XH001.jpg
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=2AR6-5SFL"

圧着工具があると便利なのですが、あいにく手元にないので先細のペンチでかしめていきます。
リード線の被膜を2mm程度剥いてコンタクト(金具)に挿入しますが、
その際に押し込み過ぎると、最後にコネクタ同士が嵌合出来なくなるので注意が必要です
(これで1回目は失敗しました。。。)

2個のモータにリード線を接続できました。
リード線の長さは一応、取り回しも考慮して25cmとしましたが、車体をぐるっと取回すケースもあるので40cmくらいあっても(半分の長さで20cmですから)良かったかもしれないとちょっと不安になっています。。。
まぁ、短かったら、そのときはそのときで途中で切って延長しましょう。
モータリード線接続.JPG


profile_picture_40×40.JPG
nice!(1)  コメント(0) 

リモートコントロール(RC)戦車をつくる【ベースの車体】 [RC戦車]

電子工作で”戦車”をつくろう、ということにしたわけですので、最初にベースとなる車体を準備しなければなりません。このあたりはご多分に漏れずタミヤの工作キットにお世話になることになります。

タミヤ 楽しい工作シリーズ No.168 ダブルギヤボックス 左右独立4速タイプ (70168)
タミヤ ダブルギヤボックス.jpg
タミヤ 楽しい工作シリーズ No.100 トラック&ホイールセット (70100)
タミヤ トラックアンドホイールセット.jpg
タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)
タミヤ ユニバーサルプレート.jpg

しかし、車体製作のことを記事に書かれているページがあまり見当たらず、ちょっと苦労した点をノウハウとしてまとめます。

①ネジはM3 10mmが最適
ユニバーサルプレートにシャフトの軸受けとかを取り付けていくのですが、その際付属のプッシュピンでは動作させた時の強度に不安があったのでネジ止めにしたいと思いました。
プレートを重ねた時の厚みから、M3 10mmのネジがぴったりでした。
ホイール片側につき4個使用しています。

②ダブルギヤボックスのギヤ比を決める
ギヤボックスを組み立てるのですが、4種類あるギヤ比から最初に1つ選ぶ必要があります。
一度組み立ててしまうとあとから変更は出来ないので、ちょっと慎重になるわけです。。。
 タイプA 12.7:1
 タイプB 38.2:1
 タイプC 114.7:1
 タイプD 344.2:1

タイプAからDにかけて「タイプAはスピードは速いけどトルクは無い」「タイプDはスピードは遅いけどトルクはある」という順番になります。
もちろん戦車という乗り物の特性を考慮するとおのずとトルク重視ということで方向性はあっているとは思うのですが、参考にしたWEBページではこの辺は書いてない(-_-;) か、書いてあってもタイプDが主流のようです。

そのためタイプDとCとで悩んだのですが、あんまりスピードが遅いのもかったるくなるので、今回は”タイプC”で決定です!
#実際、この決定が良かったか悪かったかは動かしてみるまでわかりません。。。

③キャタピラの長さを決める
トラック&ホイールセットとユニバーサルプレートを用いて車体を作るのですが、キャタピラの長さとホイールの位置を上手く調整していく必要があります。
キャタピラは片側につき30コマ×1、10コマ×2、8コマ×2のものを組み合わせて好きな長さに出来るのですが、ホイールの位置によっては長さが足らなかったり、逆にブカブカですぐにホイールからキャタピラが外れてしまうので、ちょうど良い長さの位置を見つけるのに試行錯誤しました。

今回は、ユニバーサルプレートをそのまま1枚シャーシとして使っていますので、車体の全長はユニバーサルプレートの長さそのものということになります。
その範囲でキャタピラの長さとホイールとギヤボックスの位置をいろいろと変えていった結果、おそらくこれが最適だろう、という形になりました。キャタピラは片側につき30コマ×1、10コマ×2、8コマ×1 使用しています(8コマ×1余り)。
【車体①(上面)】
車体①(上面).JPG
【車体②(前方)】
車体②(前方).JPG
【車体③(前方近影)】
車体③(前方近影).JPG
【車体④(側面)】
車体④(側面).JPG
【車体⑤(下面)】
車体⑤(下面).JPG

④モータのプラスマイナスを知る
モータにはリード線は付いていませんので、あとから自分でハンダ付けをする必要がありますが、当然、プラスには赤線、マイナスには黒線とか白線とかで区別をしたいわけです。
でもモータの向きが決まっているので勝手にプラスマイナスを決めるわけにはいきません。
一か八かの賭けに出て適当にハンダ付けすると、黒線がプラス。。。ということにもなりかねないので、キチンと調べましたよ、乾電池で。

乾電池2個を直列にしてモータの端子に当て、車体が前進する方向をモータの正転としてプラスマイナスを決めました。
これでプラスに赤線を付けることができます。
【モータ端子のプラスマイナス】
モータ端子のプラスマイナス.JPG



profile_picture_40×40.JPG
nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。