大连林海 发表于 2015-2-8 09:51:26

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

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

http://v.youku.com/v_show/id_XNDMwMDE4NzA0.html
技术参数及器材
技术参数
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线一条


http://www.arduino.cn/data/attachment/forum/201207/24/105051adeazgxgzcssxdeu.jpghttp://www.arduino.cn/data/attachment/forum/201207/24/105138slw1nvpzmmxlk5wn.jpg

附上蓝牙小车代码
/***********************************************************/
/* 程式名稱:Android BTcar.APK 操控遙控車                   */
/* 腳位: pin10、pin11接前進的左右輪                        */
/*       pin8、pin9接後退的左右輪                        */
/*       pin7 接Buzzer                                     */
/*       pin6、pin5個接一顆LED                           */
/*       pin4接七彩LED                                     */
/*       Arduino的TX接上藍牙的RX,RX接上藍牙的TX         */
/***************如需更改腳位,請勿更改到pin13***************/

/* 功能簡介:按下APK的控制鈕能讓車子前進後退左轉右轉,還能配合
   倒車時有倒車聲音,左轉右轉則會有各個LED閃爍。         */
/* 作者: HIF團隊 ( JimmyFang )               2012/04/11    */
/***********************************************************/


//******Program code setting*************************************//

char val;             //Variable to receive data from the serial port
char temp;
int LED_Status = 0;
int ledr=1,ledl=1;
int i;
volatile unsigned int count = 0;

void setup()       //腳位設定
{
for(int i=10;i<=13;i++)
{
    pinMode(i,OUTPUT);
    //digitalWrite(i,HIGH);
}
digitalWrite(11,LOW);
digitalWrite(10,LOW);

for(int i=3;i<=6;i++)
{
    pinMode(i,OUTPUT);
}
   pinMode(8,OUTPUT);
// Car_Init();   //將車子做初始化的動作

//***設定內部中斷時間*********************************************//
TCCR1A = 0x00;
// 沒有任何設定,只是一個計時器
TCCR1B &= ~_BV(CS12);         //
TCCR1B &= ~_BV(CS11);      
TCCR1B |= _BV(CS10);      
TCNT1 = 0;
TIMSK1 |= _BV(TOIE1);// 開啟內部計時器
Serial.begin(9600);   // 設定袍率為 9600bps
//****************************************************************//
}

//******************************************************************//


//*****Main code do nothing*****************************************//

void loop()
{
performCommand();
Serial.print(temp);
Serial.print(temp);
Serial.print(temp);
Serial.print(temp);
Serial.println("cm");
}

//******************************************************************//

void Car_Init()
{
   go_forward();
   delay(1000);
   stop_go_forward();
   go_reverse();
   delay(1000);
   stop_go_reverse();
}

//***判斷送來的訊號************************************************//

void performCommand()
{
if(Serial.available())// 接收串列口資料
{
   for(i=0;i<4;i++)
    temp=Serial.read();
}

if (temp == 'r')
{
    if(temp == 'b')
    {
      //LED_Status = 1;
      //go_right_F();   //前進時右轉
      go_reverse();// 倒退
    }
    else if(temp == 'f')
    {
      //LED_Status = 2;
      //go_left_F();    //前進時左轉
      go_forward();   // 前進
    }
    else
    {
      LED_Status = 0;
      //go_forward();   // 前進
      stop_go_forward();   // 停止前進
    }
}
else if (temp == 's')
{
    LED_Status = 0;
    stop_go_forward();   // 停止前進
    //go_reverse();// 倒退
    stop_go_reverse();// 停止倒退
}
else if (temp == 'f')
{
    if(temp == 'l')
    {
      LED_Status = 3;
      //go_right_B();   // 倒退時右轉
      go_left_F();    //前進時左轉
    }
    else if(temp == 'r')
    {
      LED_Status = 4;
      //go_left_B();   // 倒退時左轉
      go_right_F();   //前進時右轉
}
    else
    {
      LED_Status = 5;
      //go_reverse();// 倒退
    }
}
else if (temp == 'y')
{
    //TIMSK1 &= ~_BV(TOIE1);// 關閉內部定時器
    LED_Status = 0;
    //digitalWrite(7,LOW);
    stop_go_reverse();// 停止倒退
}
else if (temp == 'a')
{
    lights_on();   // 開啟近燈
}
else if (temp == 'c')
{
    lights_off();   // 關閉近燈
}
else if (temp == 'd')
{
    long_lights_on();// 開啟遠燈
}
else if (temp == 'e')
{
    long_lights_off();// 關閉遠燈
}
else if (temp == 't')
{
    go_turbo();// 開啟渦輪表示燈
}
else if (temp == 'x')
{
    stop_go_turbo();// 關閉渦輪表示燈
}

}
//***************************************************************//



//*****Action code***********************************************//
void go_forward()      // 前進動作
{
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
}


void stop_go_forward()    // 停止前進動作
{
//digitalWrite(12,HIGH);
//digitalWrite(8,HIGH);
digitalWrite(10,LOW);   
digitalWrite(11,LOW);
}


void go_reverse()    // 倒退動作
{
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,LOW);
}


void stop_go_reverse()    // 停止倒退動作
{
digitalWrite(10,LOW);
digitalWrite(11,LOW);
//digitalWrite(12,HIGH);   
//digitalWrite(8,HIGH);   
}


void go_right_F()   // 前進時右轉彎動作
{
digitalWrite(12,HIGH);
digitalWrite(8,LOW);
digitalWrite(11,HIGH);   
digitalWrite(10,HIGH);   
}


void go_left_F()    // 前進時左轉彎動作
{
digitalWrite(12,LOW);
digitalWrite(8,HIGH);
digitalWrite(11,HIGH);   
digitalWrite(10,HIGH);   
}


void go_right_B()   // 後退時右轉彎動作
{
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,HIGH);   
}


void go_left_B()   // 後退時左轉彎動作
{
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);   
digitalWrite(8,LOW);
}

void lights_on()
{
digitalWrite(5, HIGH);
ledr=1;
}


void lights_off()      // Short Lights OFF
{
digitalWrite(5, LOW);
ledr=0;
}


void long_lights_on()   // Long Lights ON
{
digitalWrite(6, HIGH);
ledl=1;
}


void long_lights_off()   // Long Lights OFF
{
digitalWrite(6, LOW);
ledl=0;
}


void go_turbo()         // Turbo action
{
digitalWrite(3, HIGH);
}


void stop_go_turbo()      // Stop Turbo action
{
digitalWrite(3, LOW);
}

//******************************************************************//

//***Interrupt******************************************************//

ISR (TIMER1_OVF_vect)   //內部中斷向量位址
{   
count++;
if (count == 122)      //判斷動作時間是不是到了
{
    if(LED_Status == 0)                      //沒做任何動作
    {
      digitalWrite(5,ledr);
      digitalWrite(6,ledl);
      digitalWrite(3,LOW);
    }
    else if(LED_Status == 1)               //前進時右轉讓LED1做閃爍動作
    {
      digitalWrite(5,!(digitalRead(5)));
    }
    else if(LED_Status == 2)               //前進時左轉讓LED2做閃爍動作
    {
      digitalWrite(6,!(digitalRead(6)));
    }
    else if(LED_Status == 3)               //倒車時右轉讓LED1做閃爍動作
    {                                        //並且發出逼逼逼的聲音
      digitalWrite(5,!(digitalRead(5)));
      digitalWrite(3,!(digitalRead(3)));
    }
    else if(LED_Status == 3)               //倒車時左轉讓LED2做閃爍動作
    {                                        //並且發出逼逼逼的聲音
      digitalWrite(6,!(digitalRead(6)));
      digitalWrite(3,!(digitalRead(3)));
    }
    else if(LED_Status == 5)               //倒車時讓喇叭發出聲音
    {
      digitalWrite(3,!(digitalRead(3)));
    }      
   
    count = 0;
}   
}



源码以及app上传到附件

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能连接蓝牙,不是硬件问题,请问这个怎么解决
页: [1]
查看完整版本: 手机蓝牙遥控arduino小车——手动和重力感应