(新手)用arduino nano做的简易蜘蛛机器人,可通过手机APP蓝牙串口控制,也可用超声波避障行走。实物图看起来有点粗糙,毕竟是寒门子弟在家操手做的,但效果还是可以的。
1、蓝牙使用的是HC-05,串口软件用的是SPP(附件里有)
2、电机是常见的130小电机,带减速箱。驱动也是常见的L298N.
3、电池用的是两节串联的18650锂电池(电压7.4v)
4、结构部分是从某宝上20块买来的益智拼装玩具蜘蛛机器人,由于单个电机驱动不能实现拐弯,
自己改成了两个电机驱动
5、超声波使用的是常见的4引脚SR04,舵机用的是9g小舵机。
为方便小伙伴们的交流,源代码已贴出,新手水平有限,望笑纳。- #include <Servo.h>
- int ENA=3,ENB=9;
- int IN1=4;
- int IN2=5;
- int IN3=7;
- int IN4=8;
- int trig=A0,echo=A1;//发射、接收
- unsigned int juli;//距离
- Servo dj;//舵机
- void setup()
- {
- pinMode(ENA,OUTPUT);
- pinMode(ENB,OUTPUT);
- pinMode(IN1,OUTPUT);
- pinMode(IN2,OUTPUT);
- pinMode(IN3,OUTPUT);
- pinMode(IN4,OUTPUT);
- Serial.begin(9600);
-
- pinMode(trig,OUTPUT);
- pinMode(echo,INPUT);
- dj.attach(11);//舵机引脚
- dj.write(90);//角度
- }
- void ceju()
- {
- digitalWrite(trig,LOW); //测距
- delayMicroseconds(2); //延时2微秒
- digitalWrite(trig,1);
- delayMicroseconds(20);
- digitalWrite(trig,0);
- int distance = pulseIn(echo,1); //读取高电平时间.pulseIn函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止。返回脉冲持续的时间长短, 单位为ms。如果超时还没有读到的话, 将返回0。
- distance = distance/58; //按照公式计算
- juli = distance; //把值赋给S
- Serial.println(juli); //向串口发送S的值,可以在显示器上显示距离
- if (juli<30)
- {
- delay(50); //延时
- }
- }
- void chaoshengbo()
- {
- dj.write(90);
- ceju();
- if(juli<10)
- {
- houtui();
- delay(300);
- }
- if(juli>10&&juli<=40)
- { turn();
- }
- if(juli>40)
- {
- qianjin();
- }
- }
-
- void turn()
- { //判断转向函数
- ting(); //停止所用电机
- dj.write(170); //舵机转到170度既左边(角度与安装方式有关)
- delay(500); //留时间给舵机转向
- ceju(); //运行测距函数
- dj.write(90); //测距完成,舵机回到中位
- delay(600); //留时间给舵机转向
- if (juli>30) {qianzuo();} //判断左边障碍物距离,如果距离充足,运行左转
- else {
- dj.write(10); //否则,舵机转动到10度,测右边距离
- delay(600);
- ceju(); //测距
- dj.write(90); //中位
- delay(600);
- if(juli>30){qianyou();
- } //右转
- else{ houtui(); //判断右边距离,距离充足右转否则后退
- int x=random(1); //产生一个0到1的随机数
- if (x=0){qianyou();}
- else{qianzuo();} //判断随机数
- } //否则后退,并随机转向
- }
- }
- void qianjin()
- {
- analogWrite(ENA,250);
- analogWrite(ENB,250);
- digitalWrite(IN1,1);
- digitalWrite(IN2,0);
- digitalWrite(IN3,1);
- digitalWrite(IN4,0);
- }
- void houtui()
- {
- analogWrite(ENA,250);
- analogWrite(ENB,250);
- digitalWrite(IN1,0);
- digitalWrite(IN2,1);
- digitalWrite(IN3,0);
- digitalWrite(IN4,1);
- }
- void qianzuo()
- {
- analogWrite(ENA,0);
- analogWrite(ENB,200);
- digitalWrite(IN1,0);
- digitalWrite(IN2,0);
- digitalWrite(IN3,1);
- digitalWrite(IN4,0);
- }
- void qianyou()
- {
- analogWrite(ENA,200);
- analogWrite(ENB,0);
- digitalWrite(IN1,1);
- digitalWrite(IN2,0);
- digitalWrite(IN3,0);
- digitalWrite(IN4,0);
- }
- void houzuo()
- {
- analogWrite(ENA,0);
- analogWrite(ENB,200);
- digitalWrite(IN1,0);
- digitalWrite(IN2,0);
- digitalWrite(IN3,0);
- digitalWrite(IN4,1);
- }
- void houyou()
- {
- analogWrite(ENA,200);
- analogWrite(ENB,0);
- digitalWrite(IN1,0);
- digitalWrite(IN2,1);
- digitalWrite(IN3,0);
- digitalWrite(IN4,0);
- }
- void shunshi()
- {
- analogWrite(ENA,250);
- analogWrite(ENB,250);
- digitalWrite(IN1,1);
- digitalWrite(IN2,0);
- digitalWrite(IN3,0);
- digitalWrite(IN4,1);
- }
- void nishi()
- {
- analogWrite(ENA,250);
- analogWrite(ENB,250);
- digitalWrite(IN1,0);
- digitalWrite(IN2,1);
- digitalWrite(IN3,1);
- digitalWrite(IN4,0);
- }
- void ting()
- {
- digitalWrite(IN1,0);
- digitalWrite(IN2,0);
- digitalWrite(IN3,0);
- digitalWrite(IN4,0);
- }
-
- void loop() {
-
- if(Serial.available())
- {
- char i=Serial.read();
- switch(i)
- {
- case'b':qianzuo();break;
- case'c':qianjin();break;
- case'd':qianyou();break;
- case'e':nishi();break;
- case'f':ting();break;
- case'g':shunshi();break;
- case'h':houzuo();break;
- case'i':houtui();break;
- case'j':houyou();break;
- case'a':chaoshengbo();break;
- //case'k':gunf();break;
- //case'l':gunt();break;
- }
- }
- }
复制代码
全部资料51hei下载地址:
自制蜘蛛机器人.zip
(6.87 MB, 下载次数: 61)
|