2020年に製作した落下回避ロボットカーについて記事にしました。
VL53L0Xはレーザー反射時間により距離を求めています、テーブルの反射がないと走行方向を変えてテーブルから落下しないように走行します。(完璧でありません)
VL53L0Xはレーザー反射時間により距離を求めています、テーブルの反射がないと走行方向を変えてテーブルから落下しないように走行します。(完璧でありません)
●同ブログ関連記事:【落下回避 ロボットカー Arduino VL53 RemoteXY操作】
動画
● Arduino nano
●TB6612FNG モーター ドライバー モジュール 【https://www.amazon.co.jp/gp/product/B018VYJGRO/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1】●ダイソーモバイルバッテリーより電源供給
回路図
Arduino IDE
プログラム
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X gVL530X;
const int motorR2 = 4; //
const int motorR1 = 5; //
const int motorRp = 6; //
const int motorL2 = 7; //
const int motorL1 = 8; //
const int motorLp = 9; //
const int STBY = 10;
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();
}
0 件のコメント:
コメントを投稿