手机蓝牙遥控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上传到附件
先顶为敬,嘿嘿 嘿嘿,可以试试看 很好玩的一辆小车,有空去尝试一下~顶楼主!! 很好玩的样子啊 Eric 发表于 2015-2-8 18:38
很好玩的一辆小车,有空去尝试一下~顶楼主!!
可以试试看还可以融入更多的想法哦 看看可以用体感控制不 我有想法 但是技术我还不行 babykeke 发表于 2015-2-8 18:54
很好玩的样子啊
是呀 手机上一些app游戏 是一些重力感应的游戏 现在用在小车上了 通过蓝牙实现了控制。看看大家还有哪些想法 一起聊聊 大连林海 发表于 2015-2-8 19:19
可以试试看还可以融入更多的想法哦 看看可以用体感控制不 我有想法 但是技术我还不行 ...
体感控制的话,可以用6轴惯性传感器来做的啊 Eric 发表于 2015-2-8 19:23
体感控制的话,可以用6轴惯性传感器来做的啊
DF那里都做出来了吧 我还是在学习阶段 分享一些 让我们亮亮双眼 效果不错呀~赞一个 Jane 发表于 2015-2-10 10:32
效果不错呀~赞一个
小伙伴 还有没有其他的建议可以改一下的 让小车更酷更炫 Jane 发表于 2015-2-10 10:32
效果不错呀~赞一个
小伙伴 还有没有其他的建议可以改一下的 让小车更酷更炫 开始时8,9,10,11控制电机吗,下面变成8,10,11,12了么 支持一下,最近也在也就这方面的内容 您好,我刚下载了APP,但是手机界面怎么没有和蓝牙的连接界面。 一直显示CAN YOU FIND THE SPECIFIED DEVICE ,PERFORM A SEARCH 。(蓝牙用的HC06),用蓝牙助手SPP能连接蓝牙,不是硬件问题,请问这个怎么解决
页:
[1]