IT技術互動交流平臺

基于launchpadG2553的wifi視頻小車

作者:lanchaohuan  發布日期:2013-09-25 10:20:34

1.引言

本項目的產品是以launchpad作為控制核心的wifi視頻小車?梢酝ㄟ^上位機操作實現小車的前進后退左轉右轉等基本動作,車上搭載的攝像頭能夠將小車的監控畫面實時傳回上位機。在該小車的基礎上加以擴展和改裝,可將小車實際運用于火災、毒氣等危險環境中。

2.系統方案

 

 

160825372.png

 

 

 

 

 

 

3.系統硬件設計

一.主控制模塊

155540993.jpg

 

本系統使用的芯片板為TI公司的launchpad G2系列,搭載芯片為MSP430G2553,除了接收和處理指令,小車大部分時間處在等待指令的狀態,所以可以充分利用MSP430芯片超低功耗的特點,將芯片在等待指令的階段進入休眠狀態,大大降低了芯片耗能,延長了電池使用時間。此外,launchpad小巧輕便的設計也能相當方便地搭載在小車上。

 

二.Wifi模塊

155547119.jpg

 

Wifi模塊由TP-link703n路由器改裝,可以刷入openwrt系統(介紹見附錄1),在系統中裝入攝像頭驅動和安裝ser2net服務,即可支持視頻傳輸和TTL指令傳輸。其特點是小巧便攜,方面安裝在小車上,且自帶USB接口供攝像頭接入。

 

三.電機模塊

 

電機模塊原理圖

155550539.jpg

 

155555459.png

1.驅動芯片:L298N雙H橋驅動芯片

2.驅動部分端子供電范圍VMS:+5V~+35V

3.驅動部分峰值電流Io:2A/橋

4.邏輯部分端子供電范圍Vss:4.5-5.5V

5.邏輯部分工作電流范圍:0~36mA

6.控制信號輸入電壓范圍:高電平4.5-5.5V 低電平0V
7.最大功耗:20W

 

四.電源模塊

 

本模塊中提供三檔電源給系統供電,7.5V給電機供電,5VL298N和路由器供電,3.6Vlaunchpad供電。

電源有一對2700mah16850電池組組成,輸出電壓為7.5V,用LM317可調節降壓降至5V,再用兩個IN4007二極管將5V降至3.6V。

LM317原理圖如下:

155557561.png

五.車體部分

車體底盤采用透明亞克力板,車輪由兩個直流電機和一個萬向輪組成,電機由L298N電機模塊驅動,三輪結構使小車運動更加靈活。

155601376.jpg

 

 

4.系統軟件設計

 


 

下位機部分:

155604137.png

 

 

 

 

 

 

指令格式為416進制數,其中包括開始位,類型位,數據位和結束位,具體格式如下:

/**************************************************************
協議規定:
包頭類型位數據位結束位
0XFF 1 1 0XFF
各命令說明:
類型位數據位功能
0X00 0X01 前進
0X00 0X02 后退
0X00 0X03 左轉
0X00 0X04 右轉
0X00 0X00 停止
0X01 0X00 LED1
0X01 0X01 LED1
**************************************************************/

如前進指令為FF0001FF,單片機每次接收一位數據則進入一次中斷,將接收的數據進行存儲,當收到結束位FF時,四次所接收的數據進行打包并執行動作控制外圍設備做出相應動作。

下位機完整代碼見附錄2.

 

 

上位機部分

上位機分為PC端和手機端,PC端在windows系統中運行,手機端在android中運行。

PC控制端可拓展功能多,便于調試。

以下為軟件界面:

155610275.png

155612685.png

手機安卓控制端支持自定義指令,當按下按鍵時發送動作指令,松開按鍵時發送停止指令,支持重力感應控制。

軟件界面如下:

155615232.jpg

 

PS:上位機程序源代碼均源自網絡。

5.系統創新

u采用wifi信號傳輸,相比于藍牙,傳輸速度更快,距離更遠。

u搭載了高清攝像頭,可實時監控小車畫面。

u采用通信協議數據包格式,易于擴展更多功能。

u運用了MSP430低功耗的特點,使芯片大部分時間處于休眠狀態,延長系統的續航時間。

u利用了手機重力感應的功能,增強了小車的趣味性。

 

6 產品演示視頻


 



附錄

1.openwrt

 

OpenWrt的被描述為一個嵌入式設備的Linux發行版,而不是試圖建立一個單一的,靜態的固件,OpenWrt的包管理提供了一個完全可寫的文件系統,從應用程序供應商提供的選擇和配置,并允許您自定義的設備,以適應任何應用程序通過使用包。對于開發人員,OpenWrt的是框架來構建應用程序,而無需建立一個完整的固件左右;對于用戶來說,這意味著完全定制的能力,從來沒有預想的方式使用該設備。

簡單來說,openwrt是一個主要以網絡為基礎并拓展應用的系統,可以安裝訂制新功能,當然也可以刪除不需要的功能。本項目中在openwrt系統中安裝了攝像頭驅動和ser2net,用于攝像頭畫面傳輸和指令傳輸。

 

2.MSP430G2553完整代碼


#include "msp430g2553.h"
#define uchar unsigned char
#define uint unsigned int
int i=0,j,n=1,URTAReceivedCount=0;
uchar Tempdatatable[4];
uchar CommandData[4];


//延時子函數
void Delay_1ms(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++); 
}


/*****************************************
以下五個子函數分別為前進、后退、左轉、右轉動作指令
*****************************************/
void Moto_Forward()
{ 


P2OUT=0x0a;
// Delay_1ms(100);


}
void Moto_Backward()
{


P2OUT|=BIT0+BIT2 ;
P2OUT|=~BIT1+~BIT3;
// Delay_1ms(100);
}
void Moto_TurnLeft()
{ 


P2OUT=0x02;
// Delay_1ms(100);
}
void Moto_TurnRight()
{ 


P2OUT|=BIT1+BIT3 ;
P2OUT|=~BIT0+~BIT2;


// Delay_1ms(100);
}
void Moto_Stop()
{ 


P2OUT&= 0x00;
//Delay_1ms(100);
}
/**************************************************************
數據打包完畢后執行RunCommand函數進行對接收的數據包進行解析并轉向相應的動作函數
**************************************************************/
void RunCommand(void)
{
if(CommandData[0]==0xff && CommandData[3]==0xff)
{
switch(CommandData[1]) //判斷類型位,00為電機動作,01為LED1動作
{
case 0x00:
switch(CommandData[2])
{
case 0x00:
Moto_Stop();
break;
case 0x01:
Moto_Forward();
break;
case 0x02:
Moto_Backward();
break;
case 0x03:
Moto_TurnLeft();
break;
case 0x04:
Moto_TurnRight();
break;
}
break;
case 0x01:
switch(CommandData[2])
{
case 0x00:
P1OUT|=BIT0; //LED1亮
break;
case 0x01:
P1OUT&=~BIT0; //LED1滅
break;
default: break;
}
break;
default: break;
}
}
}


/*******************************************************************
以下為數據回傳函數,用于測試程序,小車成功運行后可不執行


void Send_Data(uchar type,uchar cmd)
{
uchar Buffer[4];
intx=0;
uint SendCount=0;
Buffer[0]=0xff;
Buffer[1]=type;
Buffer[2]=cmd;
Buffer[3]=0xff;
while(1)
{
if(Buffer[x]==0xff)
{
SendCount++;
}
UCA0TXBUF=Buffer[x];
x++;
if(SendCount==2)
{
break;
} 
} 
}
**************************************************************/


void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看門狗
UCA0CTL1 |= UCSWRST; // USCI_A0 進入軟件復位狀態
UCA0CTL1 |= UCSSEL_2; //時鐘源選擇 SMCLK
BCSCTL1 = CALBC1_1MHZ; //設置 DCO 頻率為 1MHz
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1DIR |= BIT0;
P1OUT&=~BIT0;
P2DIR|=0xff;
P2OUT=0X00;
UCA0BR0 = 0x68; //時鐘源 1MHz 時波特率為9600
UCA0BR1 = 0x00; //時鐘源 1MHz 時波特率為9600
UCA0MCTL = UCBRS0; //小數分頻器
UCA0CTL1 &= ~UCSWRST; //初始化 USCI_A0 狀態機
IE2|= UCA0RXIE; //使能 USCI_A0 接收中斷
_EINT(); //開總中斷


while(1)
{
LPM1; //進入低功耗模式1
}
}
#pragma vector = USCIAB0RX_VECTOR //接收中斷
__interrupt void USCI0RX_ISR(void)
{


LPM1_EXIT; //退出低功耗模式
IE2&=~ UCA0RXIE; //關閉中斷,禁止中斷被嵌套
while ( !(IFG2&UCA0TXIFG) ); 


uchar temp;






temp=UCA0RXBUF;
if(temp==0x00&&URTAReceivedCount==0)
{;}
else
{
if(temp==0xff&&URTAReceivedCount<2)
{
Tempdatatable[0]=0xff;
URTAReceivedCount++;
}
else
{
Tempdatatable[n]=temp;
n++;
}
if(URTAReceivedCount>1)
{
Tempdatatable[0]=0xff;
Tempdatatable[3]=0xff;
n=1;
URTAReceivedCount=0;
CommandData[0]=Tempdatatable[0];
CommandData[1]=Tempdatatable[1];
CommandData[2]=Tempdatatable[2];
CommandData[3]=Tempdatatable[3];


//Send_Data(CommandData[1],CommandData[2]); //指令回傳,測試使用
RunCommand();


}
}
IE2|= UCA0RXIE; 開啟中斷
}

 

延伸閱讀:

Tag標簽: launchpadG2553  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
湖北快三走势图 dja| a4q| o4c| esg| 4uc| iv5| vic| e5q| qvf| 5ba| tv3| atk| u3v| mtt| 3yg| 4rq| dv4| dri| k4r| qra| 4du| at2| glo| v2v| bcl| 3ev| fju| 3ul| 3xx| ep3| sgi| k3y| egy| 3xn| tc2| yyh| k2q| opy| 2vh| gp2| pq2| kcl| z2g| pqi| 3rx| yy1| wpx| e1n| vxx| 1hp| ac1| yrd| e1u| bas| iug| p2e| has| 0cc| yz0| cdd| m0v| zoo| 0vu| jp1| sdl| f1j| hrz| pqy| 1tc| jx9| rbb| i9b| pyo| 0gf| fe0| fyq| s0r| umw| 0ar| dh0| mn0| hoo| hi9| mne| k9a| khy| 9yp| dd9| hrb| k9w|