以前製作したArduino nano制御とVL53L0X 距離センサによる落下回避ロボットカーをXIAO XIAO SAMD21に入替てテストしました。
●同ブログ関連記事【落下回避 ロボットカー Arduino VL53 】
動画
参考サイト
回路図
XIAO SAMD21
・強力な CPU:ARM® Cortex®-M0+ 32bit 48MHz マイクロコントローラー(SAMD21G18)、256KB Flash、32KB SRAM を搭載。
・柔軟な互換性:Arduino IDE と互換性があります。
・11 個のデジタル/アナログピン、10 個の PWM ピン、1 個の DAC 出力、1 個の SWD ボンディングパッドインターフェース、1 個の I2C インターフェース、1 個の UART インターフェース、1 個の SPI インターフェース。
VL53L0X
測距センサー I2C IICインターフェースTB6612FNG モーター ドライバー
ピン配置図
seeed studio から抜粋
【https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json】追加
シリアルモニタ
VL53L0X測距センサーの値をシリアルモニタに表示。プログラム Arduino IDE【ボード:Seeeduino XIAO】
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X gVL530X;
const int motorR2 = D2; //AI1
const int motorR1 = D3; //AI2
const int motorRp = D6; //PWMA
const int motorL2 = D7; //BI2
const int motorL1 = D8; //BI1
const int motorLp = D9; //PWMB
const int STBY = D10; //STBY
int dist;
void setup() {
Serial.begin(9600);
Wire.begin();
gVL530X.init();
gVL530X.setTimeout(1000);
gVL530X.startContinuous(100);
pinMode( motorL1, OUTPUT );
pinMode( motorL2, OUTPUT );
pinMode( motorLp, OUTPUT );
pinMode( motorR1, OUTPUT );
pinMode( motorR2, OUTPUT );
pinMode( motorRp, OUTPUT );
pinMode( STBY, OUTPUT );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, LOW );
digitalWrite( motorLp, LOW );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, LOW );
digitalWrite( motorRp, LOW );
digitalWrite( STBY, HIGH );
}
void Go() {
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, HIGH );
digitalWrite( motorL2, LOW );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, HIGH );
digitalWrite( motorR2, LOW );
}
void Back(){
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, HIGH );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, HIGH );
}
void Stop(){
digitalWrite( motorLp, LOW );
digitalWrite( motorRp, LOW );
}
void Right(){
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, HIGH );
digitalWrite( motorL2, LOW );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, HIGH );
}
void Left(){
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, HIGH );
digitalWrite( motorR2, LOW );
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, HIGH );
}
void loop() {
dist = gVL530X.readRangeContinuousMillimeters();
Serial.println(dist);
if (gVL530X.timeoutOccurred()){
Serial.println("timeout");
}
if(dist > 200 || dist < 90 ){
Left();
delay(200);
}
Go();
}

.png)
.png)
.png)
.png)
.png)
.png)
0 件のコメント:
コメントを投稿