BoeBotにつけてみる

CPUを抜き、BoeBotの拡張コネクタにmbedを繋げるとCPUの換装が簡単に出来ます。ここでは、以下のような配線にしてみました。

機能CPU PINBOE PINBOE PINCPU PIN機能
Ground1VssVss1Ground
AnalogIn15P0P116AnalogIn
AnalogIn17P2P318AnalogIn
AnalogIn19P4P520AnalogIn
Scl10P6P79Sda
Scl27P8P928Sda
PwmOut21P10P1122PwmOut
PwmOut23P12P1324PwmOut
PwmOut25P14P1526PwmOut
VddVin2電源入力





BorBotの入出力コネクタの定義をします。これはそのまま使うのではなく、PinName型でキャストする必要があります。
BotBot.h
#include "mbed.h"
enum BoePinName {
P0 = P0_23,
P1 = P0_24,
P2 = P0_25,
P3 = P0_26,
P4 = P1_30,
P5 = P1_31,
P6 = P0_1,
P7 = P0_0,
P8 = P0_11,
P9 = P0_10,
P10 = P2_5,
P11 = P2_4,
P12 = P2_3,
P13 = P2_2,
P14 = P2_1,
P15 = P2_0
};


LEDを点滅させるプログラム



LEDを点滅させるプログラム
#include "mbed.h"
#include "BoeBot.h"

DigitalOut LED((PinName)P10);

int main()
{
    while(1)
    {
        LED = 1;
        wait(0.2);
        LED = 0;
        wait(0.2);
    }
}
 1 
 2 
 3 BoeBotのP10はmbedのP21(cpuのP2_5)に繋がっている。
 4 P10にPinNameでキャストする必要がある。
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 


左右のサーボモーターを動かしてみる



左右のサーボモーターを動かしてみる
#include "mbed.h"
#include "BoeBot.h"

PwmOut Right((PinName)P12);
PwmOut Left((PinName)P13);

int main()
{
  Right.period_ms(20);
  Left.period_ms(20);
  while(1)
  {
    Right.pulsewidth_us(1400);
    Left.pulsewidth_us(1900);
    wait(0.5);
  }
}
 1 
 2 
 3 
 4 BoeBotのP12はmbedのP12に繋がっている。
 5 BoeBotのP13はmbedのP13に繋がっている。
 6 
 7 
 8 
 9 サーボモーターの周期を20ミリ秒に設定
10 
11 
12 
13 
14 
15
16


距離センサーを付ける

別項目で作ったIrDistanceクラスを用います。


距離センサーを付ける
#include "mbed.h"
#include "IrDistance.h"
#include "BoeBot.h"

//                  Left, Right
IrDistance distance((PinName)P1,(PinName)P0);
Serial pc(USBTX, USBRX); // tx, rx

int main() {
  pc.baud(115200);
  while(true) {
     pc.printf("Left:%6.2f ", distance.getLeft()*1000);
     pc.printf("Right:%6.2f\n",distance.getRight()*1000);
     wait(0.3);
  }
}
 1 
 2 
 3 
 4 
 5 
 6 PinNameにキャストする
 7 
 8 センサーが正しく動作しているかチェックする。
 9 
10 
11 
12 距離に関係する数字を表示させる。
13 
14 
15 
16 

車輪エンコーダーをテストする

車輪を外してセンサーが見えるようにしたところ。



BoeBotCheckIr
#include "mbed.h"
#include "AnalogIn.h"
#include "BoeBot.h"

DigitalOut ledR(LED1);
DigitalOut ledL(LED2);
AnalogIn   Right((PinName)P2);
AnalogIn    Left((PinName)P3);

int main()
{
  while(true)
  {
     if(Right>0.41) ledR=true;
     if(Right<0.39) ledR=false;
     if(Left>0.41) ledL=true;
     if(Left<0.39) ledL=false;
     wait(0.1);
  }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 PinNameのキャストが必要
 8 
 9 
10 左右の車輪を手で回すと、
11 CPUボード上のLEDがチカチカする。
12 
13 
14 
15 
16 
17 
18 
19 
20 


I2C LCDを付ける



別項目で作ったI2CLCD クラスを用います。

番号名称機能線の色CPUのPin番号
1/RSTリセット5番に接続
2SCLI2Cクロック10
3SDAI2Cデータ9
4Vssグランド1
5Vdd電源(2.7~3.6V)40

2番と3番ピンは2.2kΩでプルアップします。



I2C LCDを付ける。 main.cpp
#include "mbed.h"
#include "I2CLCD.h"
#include "BoeBot.h"

int main()
{
  I2CLCD lcd((PinName)P7, (PinName)P6);
  int i=0;
  while(true)
  {
    lcd.write("*** LCD Test ***");
    lcd.write("M.Mizuno");
    lcd.write(i++,8,0);
    wait(0.2);
    lcd.clear();
  }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 I2CLCD lcd(p9,p10);でも良い。
 8 
 9 
10 
11 
12 
13 8カラム場所を取り右詰で書く
14 
15 
16 
17 

GWSのPICO STDのサーボモータを連続回転に改造する

改造する