数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5423|回复: 51

[综合] 给儿子做个智能小车

[复制链接]
发表于 2019-10-25 17:52:52 来自手机浏览器 | 显示全部楼层 |阅读模式
源码 APK 以及RT5350固件和编程器固件已上传
https://pan.baidu.com/s/1RR4U5R3fJE2kTfYm-Ss2Ug
提取码: k3xq
手机按键按着走,松手停止。不像有的软件必须按停止才停车。

十一的时候学校要国庆彩车,给儿子做了一个。



儿子玩的挺高兴,不甘心的上交了。干脆再给儿子做一个吧。
先前用的步进电机,儿子嫌跑的太慢,这次换个N20。
原来用的ESP8266透传,这次添加了摄像头,换个WIFI模块吧。


大的红色模块是电机驱动,小红色是5V升压,蓝色是3.3V降压。插接口链接WIFI模块。



摄像头部分,感光,高亮LED和红外补光灯




外壳


先装一部分



木纹贴纸美化一下


单片机下载口,用于以后添加功能和调试。用了一个耳机接口,插入后断开wifi模块。


装上充电模块和电池,放到充电口下了,旁边充电指示灯和开关。


盖上盖子完工。





可以开开心心的玩耍了。
唯一缺点就是WIFI模块有点垃圾,RT535,分辨率640*480只有3-4帧,画面一卡一卡的。分辨率调低了,画面模糊。就是这玩意有不少,主要是不花钱。


焊接的下载线



程序都是抄的,自己拼了一下,编译没警告也没报错,也就没细看。不知道有没有错的地方。

  1. #include<reg52.h>
  2. #include<math.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar Buffer =0;      //从串口接收的数据
  7. uint URTAReceivedCount=0,n=1;
  8. uchar data Tempdatatable[5],CommandDatatable[5];//数据包
  9. sbit MainLight=P3^5; //主灯
  10. /************波特率发生器相关功能寄存器的定义****************/
  11. sfr AUXR=0x8E;

  12. /********************************************************************
  13. * 名称 : Delay_1ms()
  14. * 功能 : 延时子程序,延时时间为 1ms * x
  15. * 输入 : x (延时一毫秒的个数)
  16. * 输出 : 无
  17. ***********************************************************************/
  18. void Delay_1ms(uint i)//1ms延时
  19. {
  20.     uchar x,j;
  21.     for(j=0;j<i;j++)
  22.     for(x=0;x<=148;x++);   
  23. }

  24. /********************************************************************
  25. 协议规定:
  26. 包头  类型位  数据位 数据位   结束位
  27. 0XFF   0X**   OX**   0X**      0XFF
  28. 各命令说明:
  29. 类型位   数据位  数据位  功能

  30. 0X00       0X02  0X00    前进
  31. 0X00       0X01  0X00    后退
  32. 0X00       0X03  0X00    左转
  33. 0X00       0X04  0X00    右转
  34. 0X00       0X00  0X00    停止


  35. ***********************************************************************/
  36. /********************************************************************
  37. * 名称 : Com_Int()
  38. * 功能 : 串口中断子函数
  39. ***********************************************************************/
  40. void Com_Int(void) interrupt 4
  41. {
  42. uchar temp;
  43. ES=0; //关串口中断
  44. RI=0; //软件清除接收中断
  45. temp=SBUF;
  46.   if(temp==0XFF && URTAReceivedCount<3)
  47.      {
  48.        Tempdatatable[0]=0xFF;  //包头
  49.        URTAReceivedCount++;
  50.      }
  51.   else
  52.      {
  53.        Tempdatatable[n]=temp;
  54.        n++;
  55.            if(URTAReceivedCount==0&&n==2)
  56.            n=1;
  57.      }

  58.   if(URTAReceivedCount==2)//包尾
  59.     {
  60.        Tempdatatable[0]=0XFF;
  61.        Tempdatatable[4]=0XFF;
  62.        n=1;
  63.        URTAReceivedCount=0;  //组包完毕

  64.     }

  65.   CommandDatatable[0]=Tempdatatable[0];
  66.   CommandDatatable[1]=Tempdatatable[1];
  67.   CommandDatatable[2]=Tempdatatable[2];
  68.   CommandDatatable[3]=Tempdatatable[3];
  69.   CommandDatatable[4]=Tempdatatable[4];

  70.   ES=1;//开串口中断


  71. }

  72. /********************************************************************
  73. * 名称 : Com_Init()
  74. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  75. ***********************************************************************/
  76. void Uart_Init()//使用独立的波特率发生器(STC12C560S2或带有独立波特率发生器//、//的单片机均可)
  77. {
  78.         PCON &= 0x7F;                //波特率不倍速
  79.         SCON = 0x50;                //8位数据,可变波特率
  80.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  81.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  82.         TMOD &= 0x0F;                //清除定时器1模式位
  83.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  84.         TL1 = 0xFD;                //设定定时初值
  85.         TH1 = 0xFD;                //设定定时器重装值
  86.         ET1 = 0;                //禁止定时器1中断
  87.         TR1 = 1;                //启动定时器1
  88.              ES = 1;  //开串口中断
  89.      EA = 1;  //开总中断
  90. }

  91. /********************************************************************
  92. * 名称 :Moto_Forward()
  93. * 功能 : 电机1、2启动,都是前进,整车表现为前进。
  94. * 输入 : 无
  95. * 输出 : 无
  96. ***********************************************************************/
  97. void Moto_Forward()
  98. {  

  99.        P1= 0x06;

  100.    Delay_1ms(100);

  101. }

  102. /********************************************************************
  103. * 名称 :Moto_Backward()
  104. * 功能 : 电机1、2启动,都是后退,整车表现为后退。
  105. * 输入 : 无
  106. * 输出 : 无
  107. ***********************************************************************/
  108. void Moto_Backward()
  109. {

  110.     P1= 0x09;
  111.      Delay_1ms(100);
  112. }

  113. /********************************************************************
  114. * 名称 :Moto_TurnLeft()
  115. * 功能 : 电机1后退,电机2前进,整车表现为左转。
  116. * 输入 : 无
  117. * 输出 : 无
  118. ***********************************************************************/
  119. void Moto_TurnLeft()
  120. {     
  121.       P1= 0x05;
  122.      Delay_1ms(100);
  123. }
  124. /********************************************************************
  125. * 名称 :Moto_TurnRight()
  126. * 功能 : 电机1前进,电机2后退,整车表现为右转。
  127. * 输入 : 无
  128. * 输出 : 无
  129. ***********************************************************************/
  130. void Moto_TurnRight()
  131. {     
  132.      P1= 0x0A;

  133.      Delay_1ms(100);
  134. }
  135. /********************************************************************
  136. * 名称 :Moto_Stop()
  137. * 功能 : 电机1停止,电机2停止,整车表现为停止。
  138. * 输入 : 无
  139. * 输出 : 无
  140. ***********************************************************************/
  141. void Moto_Stop()
  142. {     

  143.       P1= 0x00;
  144.    Delay_1ms(100);
  145. }
  146. /*********************************************************************************
  147. ** 函数功能 : 主函数
  148. *********************************************************************************/

  149. void main()
  150. {   
  151.     MainLight=1;
  152.     Delay_1ms(200);
  153. Uart_Init();//使用独立的波特率发生器
  154.   while(1)
  155.   {

  156.    if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
  157.       {
  158.            switch (CommandDatatable[1])      //根据键值不同,执行不同的内容
  159.              {
  160.               case 0X00:  //类型位0X00,表明是控制数据包,进入控制数据case
  161.                   switch(CommandDatatable[2])  //根据数据位的值来进行选择执行不同的动作
  162.                            {
  163.                              case 0X00:
  164.                                         Moto_Stop();
  165.                                         break;
  166.                              case 0X01:
  167.                                         Moto_Forward();                                                                                                
  168.                                         break;
  169.                              case 0X02:
  170.                                         Moto_Backward();                                                                                                         
  171.                                         break;
  172.                              case 0X03:
  173.                                         Moto_TurnLeft();                                                                                                
  174.                                         break;
  175.                              case 0X04:
  176.                                         Moto_TurnRight();                                                                                                
  177.                                         break;
  178.                                 default :
  179.                                          break;
  180.                            }
  181.                          break;
  182.               case 0X09:    //类型位0X09,表明主灯
  183.                   switch(CommandDatatable[2])
  184.                  {         
  185.                         case 0x09:MainLight=1;break;

  186.                                          default :  break;
  187.                   }
  188.                      break;
  189.               case 0X08:  //类型位0X08,表明是大灯数据包,进入大灯case
  190.                   switch(CommandDatatable[2])
  191.                            {
  192.                              case 0X08:MainLight=0;break;
  193.                                                          default :  break;
  194.                            }
  195.                   break;
  196.               default :  break;
  197.             }
  198.        }
  199.   }
  200.         
  201. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 15家元 +312 收起 理由
大白也嗨 + 20 很好很好
ksd + 2 你儿子有这么个能干的老爹,肯定不缺少独一.
巴闭 + 20
965039114 + 20 優秀文章
白居易 + 8
jmshyhyc + 20 厉害厉害,学习了
cushion + 20 謝謝分享
stdzlqz + 20 優秀文章
ouyangxi21 + 4 就服你111
邢宝伟 + 20 優秀文章

查看全部打赏

发表于 2019-10-25 18:00:19 | 显示全部楼层
足够骄傲了
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 18:09:45 来自手机浏览器 | 显示全部楼层
不错不错,楼主能不能给出电路图和程序?
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 18:20:15 | 显示全部楼层
无分享上下机代码差评
回复 支持 2 反对 0

使用道具 举报

发表于 2019-10-25 18:21:48 | 显示全部楼层
无分享上位机程序及单片机代码差评
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 18:32:18 | 显示全部楼层
从动轮轴那部分是怎样做的,想看看。
老哥这动手能力稳得很啊!!
回复 支持 反对

使用道具 举报

发表于 2019-10-25 18:48:29 | 显示全部楼层
真正的技术宅呀,孩子的玩具都做的这么高级 。
回复 支持 反对

使用道具 举报

发表于 2019-10-25 18:54:30 | 显示全部楼层
这WiFi固件能给我么我也有这种模块
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 18:55:01 | 显示全部楼层
手机app用的是什么
回复 支持 反对

使用道具 举报

发表于 2019-10-25 20:12:53 | 显示全部楼层
这帖子是不是没有发完?我晕,这孩子的父亲真是了不得啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:23:41 来自手机浏览器 | 显示全部楼层
Never。 发表于 2019-10-25 18:54
这WiFi固件能给我么我也有这种模块

固件有的,不过这模块需要一个测试版才能刷机,需要有网口。需要的话明天我分享一个编程器固件,不需要网口。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:25:14 来自手机浏览器 | 显示全部楼层
keithxth 发表于 2019-10-25 18:20
无分享上下机代码差评

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 20:32:47 来自手机浏览器 | 显示全部楼层
reckson 发表于 2019-10-25 18:32
从动轮轴那部分是怎样做的,想看看。
老哥这动手能力稳得很啊!!

两个从动轮两根轴。外壳上一边一个轴,中间是找了一节圆珠笔管,两头也是轴承,从动轮插进去装了一个固定轴的紧固件,上紧螺丝后就出不来了。有中间部分,也不会被皮带拉偏。不知道说明白了没有。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 20:49:18 | 显示全部楼层
儿子我也有一个,可是这个我却仿不来:cry:
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 20:57:31 | 显示全部楼层
rt5350发热很大,性能也不高,用途倒是挺广 支持usb可以挂u盘 摄像头等,640 480分辨率帧率才几帧 是不是摄像头不行
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-25 21:17:31 来自手机浏览器 | 显示全部楼层
手工真不错,切割都挺好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 22:01:36 来自手机浏览器 | 显示全部楼层
qrut 发表于 2019-10-25 20:57
rt5350发热很大,性能也不高,用途倒是挺广 支持usb可以挂u盘 摄像头等,640 480分辨率帧率才几帧 是不是摄 ...

5350和摄像头都是翻出来的,有什么用什么,本着少花钱或不花钱。估计也玩不了多长时间就扔一边了。
回复 支持 反对

使用道具 举报

发表于 2019-10-25 22:30:49 | 显示全部楼层
突然发现我有好多减速电机,看来可以D个车子了,可惜不会单片机:lol:
回复 支持 反对

使用道具 举报

发表于 2019-10-25 23:16:38 | 显示全部楼层
本帖最后由 sonichy 于 2019-10-25 23:18 编辑

别人的爸爸怎么这么厉害?
回复 支持 反对

使用道具 举报

发表于 2019-10-25 23:38:58 | 显示全部楼层
做的很不错
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-29 21:33 , Processed in 0.280800 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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