2014年9月28日日曜日

マイコンカー製作(7)~基板組み立て~

ユニクラフトに発注していた基板が届いた。
2週間の予定だったが12日間で届いた。

予想以上の出来栄えで感動。

早速、部品をのせてみた。


 ここでミスが発覚。
ターミナルブロックの足を通す取り付け穴が小さくで足がささらない。
ターミナルブロックの足を細く削って対応。

基板製作の際にはこういう部分にも気をつけないといけないと勉強になった。


タミヤのダブルギヤボックス、ユニバーサルプレートに装着。
動かすのはまた今度。

2014年9月14日日曜日

マイコンカー製作(6)~プログラム作成~

前回発注した基板が届くまでにプログラムを作成しなければならない。

今回使用するマイコンはLPC1114FN28でmbedのオンラインコンパイラを使用する。

無線通信にbluetoothをしようするので送信機はスマートフォンでを使う。
まずテスト動作をしたいのでPLAYストアにあったアプリ「Bluetooth Serial Controller」を使用する。
テスト動作がうまくいけばコントローラも自前でなんとかしたい。

今回書いたプログラムは以下のとおり

#include "mbed.h"

DigitalOut led(LED1);
DigitalOut um66t(dp9);
DigitalOut l1(dp4);
DigitalOut l2(dp6);
DigitalOut r1(dp26);
DigitalOut r2(dp25);
PwmOut lpwm(dp2);
PwmOut rpwm(dp24);
Serial ctrl(dp16,dp15);

char lold = 's',rold = 's',val;

void motorL(char action,float pwm){
    if(action == 'f'){
        if(lold == 'r'){
            l1 = 1;
            l2 = 1;
            lpwm = 1.0;
            wait(0.2);
        }
        l1 = 1;
        l2 = 0;
        lold = 'f';
    }else if(action == 'r'){
        if(lold == 'f'){
            l1 = 1;
            l2 = 1;
            lpwm = 1.0;
            wait(0.2);
        }
        l1 = 0;
        l2 = 1;
        lold = 'r';
    }else if(action == 'b'){
        l1 = 1;
        l2 = 1;
        lold = 'b';
    }else{
        l1 = 0;
        l2 = 0;
        lold = 's';
    }
    lpwm = pwm;
}

void motorR(char action,float pwm){
    if(action == 'f'){
        if(rold == 'r'){
            r1 = 1;
            r2 = 1;
            rpwm = 1.0;
            wait(0.2);
        }
        r1 = 1;
        r2 = 0;
        rold = 'f';
    }else if(action == 'r'){
        if(rold == 'f'){
            r1 = 1;
            r2 = 1;
            rpwm = 1.0;
            wait(0.2);
        }
        r1 = 0;
        r2 = 1;
        rold = 'r';
    }else if(action == 'b'){
        r1 = 1;
        r2 = 1;
        rold = 'b';
    }else{
        r1 = 0;
        r2 = 0;
        rold = 's';
    }
    rpwm = pwm;
}

void manual(){
    if( ctrl.readable() == 1){
        val = ctrl.getc();
    }  
    if(val == '1'){
        led = 1;
        motorL('f',0.2);
        motorR('f',1.0);
        led = 0;
    }else if(val == '2'){
        led = 1;
        motorL('f',1.0);
        motorR('f',1.0);
        led = 0;
    }else if(val == '3'){
        led = 1;
        motorL('f',1.0);
        motorR('f',0.2);
        led = 0;
    }else if(val == '4'){
        led = 1;
        motorL('r',1.0);
        motorR('f',1.0);
        led = 0;
    }else if (val == '5'){
        led = 1;
        motorL('s',0);
        motorR('s',0);
        led = 0;
    }else if (val == '6'){
        led = 1;
        motorL('f',1.0);
        motorR('r',1.0);
        led = 0;
    }else if (val == '7'){
        led = 1;
        motorL('r',0.2);
        motorR('r',1.0);
        led = 0;
    }else if (val == '8'){
        led = 1;
        motorL('r',1.0);
        motorR('r',1.0);
        led = 0;
    }else if (val == '9'){
        led = 1;
        motorL('r',1.0);
        motorR('r',0.2);
        led = 0;
    }else if (val == '0'){
        um66t = !um66t;
        val = 'r';                
    }
    wait(0.5);    
}


int main(){
    led = 0;
    um66t = 0;
    motorL('s',0.0);
    motorR('s',0.0);
    ctrl.baud(115200);
    val = '5';
 
    while(1){
         manual();
    }
}


RN42-XVPから受けた数字で動作を行う。

1=前進左折
2=前進
3=前進右折
4=左旋回
5=停止
6=右旋回
7=後退左折
8=後退
9=後退右折
0=メロディオンオフ

安全のため、モーターの回転方向が切り替わる際に(正転から逆転または逆転から正転)0.2秒間モーターを停止させた。

2014年9月12日金曜日

マイコンカー製作(5)~基盤発注~

前回、基板データが完成したのでユニクラフトに発注した。

kicadで作成したガーバーデータの名前を以下のように変更する。

 ptn_top.grb   部品面(第1層)銅箔パターン
 ptn_btm.grb  半田面銅箔パターン
 reg_top.grb   部品面レジスト
 reg_btm.grb  半田面レジスト
 slk_top.grb   部品面シルク印刷
 slk_btm.grb  半田面シルク印刷
 outline.grb   プリント基板 外形
 dri.grb     ドリルファイル

これらのファイルをZIP圧縮してユニクラフトホームページから簡易見積もりを選ぶ。
簡易見積もりが表示されたら見積もりの下にある正式見積もり依頼に先ほど作成した圧縮ファイルを貼り付け、必要事項を入力し、送信。

呆気なく発注完了。

今回の基板は、サイズ6cmX8cmで発注枚数10枚。簡易見積もりで\11630だったが、正式見積もりも同じ金額だった。

2週間程度で出来上がるらしい。

2014年9月7日日曜日

マイコンカー製作(4)~ガーバーデータ作成~

kicadで回路図に引き続き、ガーバーデータを作成した。

モジュールの作成やデザインルールなど、難しい部分が多々あったが、なんとか完成した。

入念なチェックをしてから発注する。

マイコンカー製作(3)~回路図作成~

解説本を参考にkicadで回路図を製作した。

モータードライバTA7291Pを通して、モーターに接続。モーターへの接続はターミナルブロックを使用する(T1,T2)
UARTをBluetoothモジュール(RN42XVP-I/RM)に接続。
動作確認用にLEDを1個設けた。
メロディIC(um66t)を圧電スピーカー(PKM13)で鳴らす。

拡張機能として
 ・アナログ入力 x3(CN3)
 ・I2C x1(CN4)
 ・GPIO x2(CN6)

2014年9月1日月曜日

マイコンカー製作(2) ~仕様~

製造するマイコンカーは、ひとまずラジコンカーとして動くものを作る。
使用するマイコンは「lpc1114fn28」を選んだ。
何といっても安いし、mbedオンラインコンパイラが使えるのでプログラミングが簡単だ。
bluetoothで無線通信で操作できるようにする。使用するbluetoothモジュールはxbeeとピン互換のある「RN42XVP-I/RM」を選んだ。
これなら、あとからxbeeへの変更もできる。
おまけ機能として、メロディicを使ってみたかったという理由で、メロディicで音楽が流れるようにする。
使用する部品は以下の通り
mbedマイコン lpc1114fn28
Bluetoothモジュール RN42XVP-I/RM
モータードライバ TA7292P 2ヶ
三端子レギュレータ TA48033S
メロディIC um66t
圧電スピーカー PKM13
使用するPCB-CADはkicadを選んだ。
理由はフリーで使えて、最近、解説本がでたから。
基板製造はユニクラフトに発注する予定。
海外には安く作れるところがいろいろあるようだが、初めての基板発注ということもあり、日本語でやり取りできるところにした。

マイコンカー製作(1) ~製作の経緯~

今までに、PIC.arduino.stm32.mbed.raspberrypiなど、いろいろ触ってきた。
でもそれは、センサーをつないでみたり、モジュールを動かしてみたりと、実験的なことばかりだった。
実験はそれはそれで楽しい。
しかし、マイコンは本来、「モノづくり」の部品である。
部品として使ってあげたい。

という訳で、マイコンカーを製作することにした。

製作するにあたって、いくつかの課題を設けてみた。

1)無線で操作できるようにする
2)PCB-CADソフトで基板設計をする
3)プリント基板を業者に発注する

とりあえず、ラジコン的なモノから作り、拡張していく予定。