拉风的自走车
2020-04-211.1万
AI 快速预览详细
这个项目是一个基于Arduino Nano和L298N电机驱动的自走车DIY教程。通过超声传感探测前方物体,并在检测到障碍物时自动转弯。硬件清单包括Arduino Nano、L298N、红外避障传感器等。项目难度适中,适合初学者和STEM教育场景。通过这个项目,用户可以学习如何使用Arduino进行编程和电子制作,同时体验到从设计到实现的全过程。
|
见多了自动小车,有点审美疲劳了。就想到了DIY一个自走车。于是买了铝条和螺丝,折腾了一下午,弄出了个粗糙的玩意。结果不太满意,但过程充满了汗水。功能是通过超声传感探测到前方物体后开始转弯。由于负重较大,走的还比较笨拙。这个后面会调整。 ![]() ![]() 硬件清单见以下图例 ![]() Arduino nano ![]() L298N ![]() 红外避障传感 ![]() 超声传感 其他一些电线,螺丝,电机等附件 ![]() 项目连线图 [mw_shl_code=applescript,false]/* ReModified by gada888 */ #include<NewPing.h> int ENA = 3; int ENB = 9; int MOTOR_A1 = 4; int MOTOR_A2 = 5; int MOTOR_B1 = 6; int MOTOR_B2 = 7; int RIGHT = A0; int LEFT = A1; #define TRIG A2 #define ECHO A3 #define MAX_DISTANCE 100 NewPing sonar(TRIG, ECHO, MAX_DISTANCE); void setup() { // put your setup code here, to run once: pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(MOTOR_A1, OUTPUT); pinMode(MOTOR_A2, OUTPUT); pinMode(MOTOR_B1, OUTPUT); pinMode(MOTOR_B2, OUTPUT); pinMode(RIGHT, INPUT); pinMode(LEFT, INPUT); } void loop() { // put your main code here, to run repeatedly: delay(70); int distance = sonar.ping_cm(); if (distance == 0) { distance = 30; } if(distance <=15) { Stop(); delay(100); turnRight(); delay(350); moveForward(); delay(500); turnLeft(); delay(350); moveForward(); delay(700); turnLeft(); delay(300); moveForward(); delay(400); turnRight(); delay(400); } if (analogRead(RIGHT)<=35 && analogRead(LEFT)<=35) { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); }else if (analogRead(RIGHT)<=35 && !analogRead(LEFT)<=35) { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, HIGH); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); }else if (!analogRead(RIGHT)<=35 && analogRead(LEFT)<=35) { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, HIGH); }else if (!analogRead(RIGHT)<=35 && !analogRead(LEFT)<=35) { Stop(); } } void Stop() { analogWrite(ENA, 0); analogWrite(ENB, 0); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, LOW); } void turnRight() { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, HIGH); } void turnLeft() { analogWrite(ENA,100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, HIGH); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); } void moveForward() { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); } [/mw_shl_code] ![]() ![]() |















