简介
通过舵机的左右旋转来控制超声波模块的测量区域。障碍物出现时, 即探测到的距离小于10cm时,底盘会朝着远离障碍物的方向转动。
演示
【Arduino玩具】东张西望的避障车
BOM
Arduino UNO x 1
超声波测距模块(HC-SR04) x 1
舵机(SG 90) x 1
红色LED x 1
履带式底盘,含两个减速电机(Pololu Zumo) x 1
马达驱动版(Zumo Shield V1.3) x 1
接线
Arduino IDE 代码
舵机的操控使用了 ATmega328P 的 timer-2, 代码稍微复杂一些。因为马达驱动板的库文件 <ZumoShield.h> 使用的是 timer -1,会与 <Servo.h> 冲突。如果使用其它不需要库文件的马达驱动的话,代码会简单很多,例如 L298N。
/*
Obstacle Avoidace 避障车
Last Edited: March.18th.2021 by Mun Kim(老金)
Contact: Robotix.kim@gmail.com
*/
#include <Wire.h>
#include <ZumoShield.h> //马达驱动板需要的库文件
ZumoMotors motors;
#define Echo 2 //HC-SR04 Echo pin//超声波测距模块的“回声”引脚接 D2
#define Trig 3 //HC-SR04 Trig pin//超声波测距模块的“激发”引脚接 D3
#define SERVO 11 //Servo pin//舵机接 D11或 D3,因为要使用 timer-2
#define LED 5 //LED pin//LED接 D5
uint16_t volatile servoTime = 0;
uint16_t volatile servoHighTime = 3000; // Pulse width in units of 0.5us//高电平持续时间
boolean volatile servoHigh = false;
float distance; //distance measured by HC-SR04//超声波模块探测到的距离
void setup(){
Serial.begin(9600);
pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(LED, OUTPUT);
servoInit();
}
void loop(){
//Drive Forward//前进*******************************************************************************************
motors.setLeftSpeed(100