13266浏览
查看: 13266|回复: 15

[项目] 手机蓝牙遥控arduino小车——手动和重力感应

[复制链接]
各位看官 请看看下边的视频吧 看看如何中立感应控制小车移动的


技术参数及器材
技术参数
1. 14个数字输入/输出端口TX,RX,D2~D13,
2. 8个模拟输入端口A0~A7
3. 1对TTL电平串口收发端口RX/TX
4.6个PWM端口,D3, D5, D6, D9, D10, D11
5.采用Atmel Atmega328P和ATMEGA8U2单片机
6.工作频率为16MHz
7.支持USB下载及供电
8.支持外接7-12V直流电源供电
9.支持9V电池供电
10.支持ISP下载
11.三种供电方式:USB,VIN,外部5V输入
元器件清单:
Arduino履带车体一台
ARDUINO UNO控制板一个
ARDUINO 298 扩展板 一个
蓝牙模块 一个(蓝牙芯片是采用CSR的06蓝牙芯片,蓝控制距离:10米毫无难度
18650锂电池两节(1500MA)
18650电池盒一个
18650充电器一个
7彩LED灯两个
杜邦线20条
3MM有机玻璃板一片
铜柱4根 螺丝10个,螺母10个
USB线一条




附上蓝牙小车代码
  1. /***********************************************************/
  2. /* 程式名稱:Android BTcar.APK 操控遙控車                   */
  3. /* 腳位: pin10、pin11接前進的左右輪                        */
  4. /*       pin8、pin9接後退的左右輪                          */
  5. /*       pin7 接Buzzer                                     */
  6. /*       pin6、pin5個接一顆LED                             */
  7. /*       pin4接七彩LED                                     */
  8. /*       Arduino的TX接上藍牙的RX,RX接上藍牙的TX           */
  9. /***************如需更改腳位,請勿更改到pin13***************/
  10. /* 功能簡介:按下APK的控制鈕能讓車子前進後退左轉右轉,還能配合
  11.    倒車時有倒車聲音,左轉右轉則會有各個LED閃爍。           */
  12. /* 作者: HIF團隊 ( JimmyFang )               2012/04/11    */
  13. /***********************************************************/
  14. //******Program code setting*************************************//
  15. char val;             //Variable to receive data from the serial port
  16. char temp[4];
  17. int LED_Status = 0;
  18. int ledr=1,ledl=1;
  19. int i;
  20. volatile unsigned int count = 0;
  21. void setup()       //腳位設定
  22. {
  23.   for(int i=10;i<=13;i++)
  24.   {
  25.     pinMode(i,OUTPUT);
  26.     //digitalWrite(i,HIGH);
  27.   }
  28.   digitalWrite(11,LOW);
  29.   digitalWrite(10,LOW);
  30.   
  31.   for(int i=3;i<=6;i++)
  32.   {
  33.     pinMode(i,OUTPUT);
  34.   }
  35.    pinMode(8,OUTPUT);
  36. // Car_Init();   //將車子做初始化的動作
  37.   
  38.   //***設定內部中斷時間*********************************************//
  39.   TCCR1A = 0x00;
  40.   // 沒有任何設定,只是一個計時器
  41.   TCCR1B &= ~_BV(CS12);         //  
  42.   TCCR1B &= ~_BV(CS11);        
  43.   TCCR1B |= _BV(CS10);      
  44.   TCNT1 = 0;
  45.   TIMSK1 |= _BV(TOIE1);  // 開啟內部計時器
  46.   Serial.begin(9600);   // 設定袍率為 9600bps  
  47.   //****************************************************************//
  48. }
  49. //******************************************************************//
  50. //*****Main code do nothing*****************************************//
  51. void loop()
  52. {
  53.   performCommand();
  54.   Serial.print(temp[3]);
  55.   Serial.print(temp[2]);
  56.   Serial.print(temp[1]);
  57.   Serial.print(temp[0]);
  58.   Serial.println("cm");  
  59. }
  60. //******************************************************************//
  61. void Car_Init()
  62. {
  63.    go_forward();
  64.    delay(1000);
  65.    stop_go_forward();
  66.    go_reverse();
  67.    delay(1000);
  68.    stop_go_reverse();
  69. }
  70. //***判斷送來的訊號************************************************//
  71. void performCommand()
  72. {
  73.   if(Serial.available())  // 接收串列口資料
  74.   {
  75.    for(i=0;i<4;i++)
  76.     temp[i]=Serial.read();
  77.   }
  78.   if (temp[0] == 'r')
  79.   {
  80.     if(temp[2] == 'b')
  81.     {
  82.       //LED_Status = 1;
  83.       //go_right_F();   //  前進時右轉
  84.       go_reverse();  // 倒退
  85.     }
  86.     else if(temp[2] == 'f')
  87.     {
  88.       //LED_Status = 2;
  89.       //go_left_F();    //  前進時左轉
  90.       go_forward();   // 前進
  91.     }
  92.     else
  93.     {
  94.       LED_Status = 0;
  95.       //go_forward();   // 前進
  96.       stop_go_forward();   // 停止前進
  97.     }
  98.   }
  99.   else if (temp[0] == 's')
  100.   {
  101.     LED_Status = 0;
  102.     stop_go_forward();   // 停止前進
  103.     //go_reverse();  // 倒退
  104.     stop_go_reverse();  // 停止倒退
  105.   }
  106.   else if (temp[0] == 'f')
  107.   {
  108.     if(temp[2] == 'l')
  109.     {
  110.       LED_Status = 3;
  111.       //go_right_B();   // 倒退時右轉
  112.       go_left_F();    //  前進時左轉
  113.     }
  114.     else if(temp[2] == 'r')
  115.     {
  116.       LED_Status = 4;
  117.       //go_left_B();   // 倒退時左轉
  118.       go_right_F();   //  前進時右轉  
  119.   }
  120.     else
  121.     {
  122.       LED_Status = 5;
  123.       //go_reverse();  // 倒退
  124.     }
  125.   }
  126.   else if (temp[0] == 'y')
  127.   {
  128.     //TIMSK1 &= ~_BV(TOIE1);  // 關閉內部定時器
  129.     LED_Status = 0;
  130.     //digitalWrite(7,LOW);
  131.     stop_go_reverse();  // 停止倒退
  132.   }
  133.   else if (temp[0] == 'a')
  134.   {
  135.     lights_on();   // 開啟近燈
  136.   }
  137.   else if (temp[0] == 'c')
  138.   {
  139.     lights_off();   // 關閉近燈
  140.   }
  141.   else if (temp[0] == 'd')
  142.   {
  143.     long_lights_on();  // 開啟遠燈
  144.   }
  145.   else if (temp[0] == 'e')
  146.   {
  147.     long_lights_off();  // 關閉遠燈
  148.   }
  149.   else if (temp[0] == 't')
  150.   {
  151.     go_turbo();  // 開啟渦輪表示燈
  152.   }
  153.   else if (temp[0] == 'x')
  154.   {
  155.     stop_go_turbo();  // 關閉渦輪表示燈
  156.   }
  157.   
  158. }
  159. //***************************************************************//
  160. //*****Action code***********************************************//
  161. void go_forward()      // 前進動作
  162. {
  163.   digitalWrite(12,HIGH);
  164.   digitalWrite(8,HIGH);
  165.   digitalWrite(10,HIGH);  
  166.   digitalWrite(11,HIGH);  
  167. }
  168. void stop_go_forward()    // 停止前進動作
  169. {
  170.   //digitalWrite(12,HIGH);
  171.   //digitalWrite(8,HIGH);
  172.   digitalWrite(10,LOW);   
  173.   digitalWrite(11,LOW);  
  174. }
  175. void go_reverse()    // 倒退動作
  176. {
  177.   digitalWrite(10,HIGH);
  178.   digitalWrite(11,HIGH);
  179.   digitalWrite(12,LOW);  
  180.   digitalWrite(8,LOW);  
  181. }
  182. void stop_go_reverse()    // 停止倒退動作
  183. {
  184.   digitalWrite(10,LOW);
  185.   digitalWrite(11,LOW);
  186.   //digitalWrite(12,HIGH);   
  187.   //digitalWrite(8,HIGH);   
  188. }
  189. void go_right_F()   // 前進時右轉彎動作
  190. {
  191.   digitalWrite(12,HIGH);
  192.   digitalWrite(8,LOW);
  193.   digitalWrite(11,HIGH);   
  194.   digitalWrite(10,HIGH);   
  195. }
  196. void go_left_F()    // 前進時左轉彎動作
  197. {
  198.   digitalWrite(12,LOW);
  199.   digitalWrite(8,HIGH);
  200.   digitalWrite(11,HIGH);   
  201.   digitalWrite(10,HIGH);   
  202. }
  203. void go_right_B()     // 後退時右轉彎動作
  204. {
  205.   digitalWrite(10,HIGH);
  206.   digitalWrite(11,HIGH);
  207.   digitalWrite(12,LOW);  
  208.   digitalWrite(8,HIGH);   
  209. }
  210. void go_left_B()     // 後退時左轉彎動作
  211. {
  212.   digitalWrite(10,HIGH);
  213.   digitalWrite(11,HIGH);
  214.   digitalWrite(12,HIGH);   
  215.   digitalWrite(8,LOW);
  216. }
  217. void lights_on()
  218. {
  219.   digitalWrite(5, HIGH);
  220.   ledr=1;
  221. }
  222. void lights_off()      // Short Lights OFF
  223. {
  224.   digitalWrite(5, LOW);
  225.   ledr=0;
  226. }
  227. void long_lights_on()     // Long Lights ON
  228. {
  229.   digitalWrite(6, HIGH);
  230.   ledl=1;
  231. }
  232. void long_lights_off()     // Long Lights OFF
  233. {
  234.   digitalWrite(6, LOW);
  235.   ledl=0;
  236. }
  237. void go_turbo()         // Turbo action
  238. {
  239.   digitalWrite(3, HIGH);
  240. }
  241. void stop_go_turbo()      // Stop Turbo action
  242. {
  243.   digitalWrite(3, LOW);
  244. }
  245. //******************************************************************//
  246. //***Interrupt******************************************************//
  247. ISR (TIMER1_OVF_vect)   //內部中斷向量位址
  248. {   
  249.   count++;
  250.   if (count == 122)        //判斷動作時間是不是到了
  251.   {  
  252.     if(LED_Status == 0)                      //沒做任何動作
  253.     {
  254.       digitalWrite(5,ledr);
  255.       digitalWrite(6,ledl);
  256.       digitalWrite(3,LOW);
  257.     }
  258.     else if(LED_Status == 1)                 //前進時右轉讓LED1做閃爍動作
  259.     {
  260.       digitalWrite(5,!(digitalRead(5)));
  261.     }
  262.     else if(LED_Status == 2)                 //前進時左轉讓LED2做閃爍動作
  263.     {
  264.       digitalWrite(6,!(digitalRead(6)));
  265.     }
  266.     else if(LED_Status == 3)                 //倒車時右轉讓LED1做閃爍動作
  267.     {                                        //並且發出逼逼逼的聲音
  268.       digitalWrite(5,!(digitalRead(5)));
  269.       digitalWrite(3,!(digitalRead(3)));
  270.     }
  271.     else if(LED_Status == 3)                 //倒車時左轉讓LED2做閃爍動作
  272.     {                                        //並且發出逼逼逼的聲音
  273.       digitalWrite(6,!(digitalRead(6)));
  274.       digitalWrite(3,!(digitalRead(3)));
  275.     }
  276.     else if(LED_Status == 5)                 //倒車時讓喇叭發出聲音
  277.     {
  278.       digitalWrite(3,!(digitalRead(3)));
  279.     }      
  280.      
  281.     count = 0;
  282.   }   
  283. }
复制代码



源码以及app上传到附件

蓝牙小车.zip

795.38 KB, 下载次数: 778

mxhhaixin  高级技师 来自手机

发表于 2015-2-8 10:19:23

先顶为敬,嘿嘿
回复

使用道具 举报

大连林海  初级技神
 楼主|
来自手机

发表于 2015-2-8 11:15:22

嘿嘿,可以试试看
回复

使用道具 举报

Eric  初级技神

发表于 2015-2-8 18:38:32

很好玩的一辆小车,有空去尝试一下~顶楼主!!
回复

使用道具 举报

babykeke  中级技师

发表于 2015-2-8 18:54:54

很好玩的样子啊
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-2-8 19:19:17

Eric 发表于 2015-2-8 18:38
很好玩的一辆小车,有空去尝试一下~顶楼主!!

可以试试看  还可以融入更多的想法哦 看看可以用体感控制不 我有想法 但是技术我还不行
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-2-8 19:20:34

babykeke 发表于 2015-2-8 18:54
很好玩的样子啊

是呀 手机上一些app游戏 是一些重力感应的游戏 现在用在小车上了 通过蓝牙实现了控制。看看大家还有哪些想法 一起聊聊
回复

使用道具 举报

Eric  初级技神

发表于 2015-2-8 19:23:55

大连林海 发表于 2015-2-8 19:19
可以试试看  还可以融入更多的想法哦 看看可以用体感控制不 我有想法 但是技术我还不行 ...

体感控制的话,可以用6轴惯性传感器来做的啊
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-2-8 19:25:24

Eric 发表于 2015-2-8 19:23
体感控制的话,可以用6轴惯性传感器来做的啊

DF那里都做出来了吧 我还是在学习阶段 分享一些 让我们亮亮双眼
回复

使用道具 举报

Jane  高级技匠

发表于 2015-2-10 10:32:34

效果不错呀~赞一个
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-2-10 10:34:07

Jane 发表于 2015-2-10 10:32
效果不错呀~赞一个

小伙伴 还有没有其他的建议可以改一下的 让小车更酷更炫
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-2-10 10:34:09

Jane 发表于 2015-2-10 10:32
效果不错呀~赞一个

小伙伴 还有没有其他的建议可以改一下的 让小车更酷更炫
回复

使用道具 举报

eversence213  中级技师

发表于 2015-12-20 16:26:12

开始时8,9,10,11控制电机吗,下面变成8,10,11,12了么
回复

使用道具 举报

forrany  学徒

发表于 2016-3-20 10:38:27

支持一下,最近也在也就这方面的内容
回复

使用道具 举报

小狗吃大白菜  学徒

发表于 2017-5-23 13:20:16

您好,我刚下载了APP,但是手机界面怎么没有和蓝牙的连接界面。
回复

使用道具 举报

小狗吃大白菜  学徒

发表于 2017-5-23 13:26:48

一直显示CAN YOU FIND THE SPECIFIED DEVICE ,PERFORM A SEARCH 。(蓝牙用的HC06),用蓝牙助手SPP能连接蓝牙,不是硬件问题,请问这个怎么解决
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail