小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 16118|回复: 21

我的arduino wifi小车制作完成,感谢论坛提供的相关资料!

[复制链接]
发表于 2013-6-5 16:31:15 | 显示全部楼层 |阅读模式
IMG_20130605_153710.jpg

                      使用arduino uno r3平台,703N路由,以及L298N驱动电机。四驱底盘,四个旧手机淘汰下来的3.7V电池。一个给703N和arduino板供电,另外三个串联给小车电机驱动。arduino代码与论坛的手机上位机兼容。只是参数作了简化改动。必竟只是测试,未用数据包强验证模式。代码如下:

  1. // motor A
  2. int dir1PinA = 13;
  3. int dir2PinA = 12;
  4. int speedPinA = 10;
  5. // motor B
  6. int dir1PinB = 9;
  7. int dir2PinB = 8;
  8. int speedPinB = 6;
  9. int speed;
  10. int dir;
  11. byte res;
  12. void setup()
  13. {
  14.   pinMode(dir1PinA,OUTPUT);
  15.   pinMode(dir2PinA,OUTPUT);
  16.   pinMode(speedPinA,OUTPUT);
  17.    pinMode(dir1PinB,OUTPUT);
  18.   pinMode(dir2PinB,OUTPUT);
  19.   pinMode(speedPinB,OUTPUT);
  20.   Serial.begin(9600); // 打开串口,设置波特率为9600 bps
  21.   
  22.   
  23.   speed = 0;
  24.   dir = 1;
  25. }
  26. void MOTOA(int speed,int dir)
  27. {
  28.    analogWrite(speedPinA,speed);
  29.    if (dir == 1)
  30.    
  31.       {
  32.         digitalWrite(dir1PinA,LOW);
  33.         digitalWrite(dir2PinA,HIGH);
  34.       }
  35.    else
  36.       {
  37.         digitalWrite(dir1PinA,LOW);
  38.         digitalWrite(dir2PinA,LOW);
  39.         
  40.       }
  41. }
  42. void MOTOB(int speed,int dir)
  43. {
  44.    analogWrite(speedPinB,speed);
  45.    if (dir == 1)
  46.    
  47.       {
  48.          digitalWrite(dir1PinB,LOW);
  49.         digitalWrite(dir2PinB,HIGH);
  50.       }
  51.    else
  52.       {
  53.          digitalWrite(dir1PinB,LOW);
  54.         digitalWrite(dir2PinB,LOW);
  55.         
  56.       }
  57. }
  58. void MOTOBACK(int speed)
  59. {
  60.    analogWrite(speedPinB,speed);
  61.       analogWrite(speedPinA,speed);

  62.          digitalWrite(dir1PinB,HIGH);
  63.         digitalWrite(dir2PinB,LOW);
  64.         digitalWrite(dir1PinA,HIGH);
  65.         digitalWrite(dir2PinA,LOW);
  66.    
  67. }

  68. void loop()
  69. {
  70.    
  71.     if (Serial.available() > 0) //判断串口缓冲器是否有数据装入
  72. {
  73.     res = Serial.read();//读取串口
  74.     if(res==0x01)//判断输入的字符是否为a
  75.       {
  76.         MOTOA(150,1);
  77.         MOTOB(0,0);
  78.       }
  79.     if(res==0x02)//判断输入的字符是否为a
  80.       {
  81.         MOTOA(0,0);
  82.         MOTOB(150,1);
  83.       }
  84.           if(res==0x03)//判断输入的字符是否为a
  85.       {
  86.            MOTOBACK(200);
  87.       }
  88.       
  89.          if(res==0x04)//判断输入的字符是否为a
  90.       {
  91.           MOTOA(220,1);
  92.           MOTOB(220,1);
  93.          
  94.       }
  95.       
  96.       
  97.           if(res==0xFF)//判断输入的字符是否为a
  98.       {
  99.         MOTOA(0,0);
  100.         MOTOB(0,0);
  101.       }
  102. }
  103.       
  104. }
  105.   
复制代码

回复

使用道具 举报

 楼主| 发表于 2013-6-6 21:55:15 | 显示全部楼层
终于解决了数据包验证问题,不用开机拔掉703N串口通讯线了。。真正意义上兼容论坛提供的上位机程序。(小声说一句:论坛提供的arduino下位机程序,有一个很小很小的问题,在我的arduino uno R3上测试通不过。花了三天仔细测试,终于解决了。)
代码分享:

  1. // motor A
  2. int dir1PinA = 13;
  3. int dir2PinA = 12;
  4. int speedPinA = 10;
  5. // motor B

  6. int dir1PinB = 9;
  7. int dir2PinB = 8;
  8. int speedPinB = 6;
  9. int LED = 13;

  10. int speed;
  11. int dir;
  12. int buffer[3];
  13. int Serial_flag;
  14. int date_index=0;

  15. void setup()
  16. {
  17.   pinMode(dir1PinA,OUTPUT);
  18.   pinMode(dir2PinA,OUTPUT);
  19.   pinMode(speedPinA,OUTPUT);
  20.    pinMode(dir1PinB,OUTPUT);
  21.   pinMode(dir2PinB,OUTPUT);
  22.   pinMode(speedPinB,OUTPUT);
  23.     pinMode(LED,OUTPUT);
  24.   Serial.begin(9600); // 打开串口,设置波特率为9600 bps
  25.   
  26.   
  27.   speed = 0;
  28.   dir = 1;
  29. }

  30. void MOTOA(int speed,int dir)
  31. {
  32.    analogWrite(speedPinA,speed);

  33.    if (dir == 1)
  34.    
  35.       {
  36.         digitalWrite(dir1PinA,LOW);
  37.         digitalWrite(dir2PinA,HIGH);

  38.       }
  39.    else
  40.       {
  41.         digitalWrite(dir1PinA,LOW);
  42.         digitalWrite(dir2PinA,LOW);
  43.         
  44.       }
  45. }

  46. void MOTOB(int speed,int dir)
  47. {

  48.    analogWrite(speedPinB,speed);
  49.    if (dir == 1)
  50.    
  51.       {

  52.          digitalWrite(dir1PinB,LOW);
  53.         digitalWrite(dir2PinB,HIGH);
  54.       }
  55.    else
  56.       {

  57.          digitalWrite(dir1PinB,LOW);
  58.         digitalWrite(dir2PinB,LOW);
  59.         
  60.       }
  61. }

  62. void MOTOBACK(int speed)
  63. {

  64.    analogWrite(speedPinB,speed);
  65.       analogWrite(speedPinA,speed);


  66.          digitalWrite(dir1PinB,HIGH);
  67.         digitalWrite(dir2PinB,LOW);
  68.         digitalWrite(dir1PinA,HIGH);
  69.         digitalWrite(dir2PinA,LOW);
  70.    
  71. }

  72. void Communication_Decode()
  73. {
  74.   if(buffer[0]==0x00)
  75.   {
  76.     switch(buffer[1])
  77.     {
  78.       case 0x01: MOTOA(150,1);MOTOB(0,0);return;
  79.       case 0x02: MOTOA(0,0); MOTOB(150,1); return;
  80.       case 0x03: MOTOBACK(200); return;
  81.       case 0x04:
  82.           MOTOA(220,1);
  83.           MOTOB(220,1);
  84.           return;
  85.       case 0x00:
  86.           MOTOA(0,0);
  87.           MOTOB(0,0);
  88.         return;
  89.     }
  90.   }

  91. }


  92. void loop()
  93. {
  94.   int temp_char;
  95.   

  96.   
  97.   while(Serial.available() > 0)
  98.   {
  99.     temp_char = Serial.read();
  100.     if(temp_char!=-1)
  101.     {
  102.       
  103.       if(Serial_flag==0)
  104.       {
  105.         if(temp_char==0xff)
  106.         {
  107.           Serial_flag = 1;
  108.         }
  109.       }
  110.       else
  111.       {
  112.         if(temp_char==0xff)
  113.         {
  114.           Serial_flag = 0;
  115.          
  116.           if(date_index==3)
  117.           {
  118.             Communication_Decode();
  119.           }
  120.           date_index = 0;
  121.         }
  122.         else
  123.         {
  124.           buffer[date_index]=temp_char;
  125.           Serial.println(buffer[date_index],HEX);
  126.           date_index++;
  127.         }
  128.       }
  129.     }
  130.   }
  131. }


复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2013-6-5 20:28:35 | 显示全部楼层
我看你的arduino与703n串口通信没有用电平转换芯片吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 20:49:05 | 显示全部楼层
没有,,两个共用一个4.2V电池,串口就连一根线,接收703N数据就成。。tx口没连。。以后增加其他功能再联。。现在测试非常好。。开机时需要703N断开串口。
回复 支持 反对

使用道具 举报

发表于 2013-6-17 08:44:06 | 显示全部楼层
正需要。谢谢分享
回复 支持 反对

使用道具 举报

发表于 2013-6-23 15:36:15 | 显示全部楼层
菜鸟学习了
回复 支持 反对

使用道具 举报

发表于 2013-7-16 14:44:46 | 显示全部楼层
感谢分享,学习中
回复 支持 反对

使用道具 举报

发表于 2013-7-18 13:10:12 | 显示全部楼层
可以用网页控制吗?提供一下方法
回复 支持 反对

使用道具 举报

发表于 2013-7-30 20:18:52 | 显示全部楼层
确实不错
回复 支持 反对

使用道具 举报

发表于 2013-8-11 17:18:46 | 显示全部楼层
可以用网页控制吗?提供一下方法

用网页控制的方法我见过,有教程的,去优酷网上搜索:“开源无线遥控监控小车制作”
这个是opendrone小组制作的视屏!
其中有一整套的wifirobot制作与控制教程,并且有网页控制的方法!很全面的!
视频地址http://v.youku.com/v_show/id_XMzUwOTY0MDQ0.html?firsttime=197
视频共13集,具体在第几集,你自己找找吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-26 23:31 , Processed in 1.123792 second(s), 22 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表