久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7963|回復: 6
打印 上一主題 下一主題
收起左側

安卓APP+STM32藍牙控制小車系統設計源碼與資料下載

[復制鏈接]
跳轉到指定樓層
樓主
ID:347672 發表于 2018-6-8 17:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
電機驅動模塊、L298N
主控板、
藍牙通信模塊、FBT06_LPDB
android控制端等

4.1.1 main程序設計
主函數主要分為延遲時間初始化、串口接收模塊程序、電機初始化三部分。主函數的流程圖如圖4.1所示:
圖4.1 主函數流程圖
主函數程序代碼如下:
int main(void)
{  
delay_init(168);//延遲時間初始化
uart_init(9600);//串口初始化
Direction(1);//電機初始化
delay_ms(10);//延遲10ms
printf(" welcome to control the smart car!:\n\r");//輸入語句
while(1);
}
4.1.2 串口接收模塊程序
主控板接收到藍牙從串口傳來的數據后存入Res變量,然后通過分支程序來選擇執行前進、后退、左轉、右轉和停止等功能。該模塊的程序流程圖如圖2所示:
圖2 串口接收程序流程圖
4.1.3 修改PWM輸出值程序
該程序是基于“4_PWM的實現”中的程序改編的。代碼如下:
  1. void Change_PWM(int duty1,int duty2,int duty3,int duty4)
  2. {
  3.               SCB->AIRCR=0x05AF00;// 中斷優先級分組 搶占:響應=3:1
  4.   RCC->AHB1ENR|=(1<<2);// 打開GPIOC時鐘
  5.   GPIOC->MODER|=0x000AA000;// pc6789第二功能,推挽輸出
  6.   GPIOC->OSPEEDR|=0x000FF000;//輸出速度為100m
  7.   GPIOC->PUPDR|=0x00055000;//上拉

  8.   GPIOC->AFR[0]|=0x22000000;//pc6789的第二功能為AF2
  9.   GPIOC->AFR[1]|=0x00000022;

  10.   RCC->APB1ENR|=(1<<1);//打開TIM3時鐘
  11.   TIM3->PSC=83;//對84M時鐘進行84分頻,使得計數頻率為1M
  12.   TIM3->ARR=10000;//周期為10ms
  13.   TIM3->EGR|=1;//產生一次更新時間

  14.   TIM3->CCMR1|=0x6060;//PWM模式1
  15.   TIM3->CCMR2|=0x6060;//PWM模式2

  16.   TIM3->CCR1=duty1;//1路PWM
  17.   TIM3->CCR2=duty2;//2路PWM
  18.   TIM3->CCR3=duty3;//3路PWM
  19.   TIM3->CCR4=duty4;//4路PWM

  20.   TIM3->CCER|=0x1111;//使能比較輸出

  21.   TIM3->CCMR1|=0x0808;//啟動預裝載
  22.   TIM3->CCMR2|=0x8080;

  23.   TIM3->CR1|=1;//開始計時
  24. }
復制代碼

4.1.4 設置電機轉向程序
改程序將電機驅動模塊的8個輸入端口接到了主控板的8個GPIO口,通過推挽輸出,從而控制電機的轉向,代碼如下:
  1. void Direction(int direction)
  2. {
  3. SysTick_Config(SystemCoreClock / 1000); //時鐘中斷設為1ms
  4.               RCC->AHB1ENR |= 0x00000005; //使能GPIOA和GPIOD時鐘
  5.    RCC->APB2ENR |= (1<<14);  //使能syscfg時鐘
  6. if(direction==0)
  7. {
  8.    GPIOA->MODER &= 0xffff0000; //設置PA0,1,2,3為輸出
  9.    GPIOA->MODER |= 0x00005555;
  10.    GPIOA->OTYPER &= 0xFFFFff00; //設置PA0,1,2,3為推挽輸出
  11.    GPIOA->OSPEEDR &= 0xffff0000; //設置PA0,1,2,3的輸出速度為100M
  12.    GPIOA->OSPEEDR |= 0x0000ffff;
  13.    SYSCFG->CMPCR = 0x00000001; //使用IO補償單元
  14.    GPIOA->PUPDR &= 0xffffff00;  //設置PA0,1,2,3無上拉,無下拉
  15.    GPIOA->BSRRH = 0x00ff;  //復位GPIOA_BSRRH寄存器
  16.    GPIOA->BSRRL = 0x0055;                           
  17.               }
  18.               else
  19.               {
  20. GPIOA->MODER &= 0xffff0000; //設置PA0,1,2,3為輸出
  21.    GPIOA->MODER |= 0x0000005555;
  22.    GPIOA->OTYPER &= 0xFFFFff00; //設置PA0,1,2,3為推挽輸出
  23.    GPIOA->OSPEEDR &= 0xffff0000; //設置PA0,1,2,3的輸出速度為100M
  24.    GPIOA->OSPEEDR |= 0x0000ffff;
  25.    SYSCFG->CMPCR = 0x00000001; //使用IO補償單元
  26.    GPIOA->PUPDR &= 0xffffff00;  //設置PA0,1,2,3無上拉,無下拉
  27.    GPIOA->BSRRH = 0x00ff;  //復位GPIOA_BSRRH寄存器
  28.    GPIOA->BSRRL = 0x00AA;
  29. }
  30. }
復制代碼

4.2 android客戶端程序設計4.2.1 控制界面的布局
控制界面主要運用了線性布局、相對布局和表格布局。整體采用線性布局,局部采用相對布局,而控制按鈕采用了表格布局。控制界面的布局如圖4.1所示:
圖4.1 控制界面的布局
4.2.2 布局的代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<RelativeLayout
   android:id = "@+id/container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id= "@+id/edit_bottombar"
                android:layout_alignParentBottom = "true">
     <Button android:id="@+id/btn_disconnect"
                                          android:layout_width="65dp"
                                          android:layout_height="wrap_content"
                                          android:layout_alignParentLeft ="true"
                                          android:text="斷開"/>
                            <Button android:id="@+id/btn_msg_send"
                                          android:layout_width="65dp"
                                          android:layout_height="wrap_content"
                                          android:layout_alignParentRight ="true"
                                          android:text="發送"/>
                           
                            <EditText
                                android:id="@+id/MessageText"
                                android:layout_width="98dp"
                                android:layout_height="wrap_content"
                                android:layout_toRightOf="@+id/btn_disconnect"
                                android:hint="說點什么呢?"
                                android:textSize="15dip"
                                  />
              </RelativeLayout>
              <ListView
                   android:id="@+id/list"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_above="@id/edit_bottombar"
                   android:layout_below="@id/container"
                   android:layout_weight="1.0"
                   android:divider="#ffc6c6c6"
                   android:scrollingCache="false"
                   android:visibility="visible" />
              <TableLayout
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content" >
                   <TableRow
                       android:id="@+id/tableRow1"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content" >
                       <Button
                           android:id="@+id/button1"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:text="Button"
                           android:visibility="invisible" />
                       <Button
                           android:id="@+id/start"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginRight="0dp"
                           android:text="start"
                           android:width="120px" />
                   </TableRow>
                   <TableRow
                       android:id="@+id/tableRow2"
                       android:layout_width="wrap_content"
                       android:layout_height="0dp"
                       android:layout_weight="1" >
                       <Button
                           android:id="@+id/left"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginRight="0dp"
                           android:text="left"
                           android:width="120px" />
                       <Button
                           android:id="@+id/stop"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:text="stop"
                           android:width="120px" />
                       <Button
                           android:id="@+id/right"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:text="right"
                           android:width="120px" />
                   </TableRow>
                   <TableRow
                       android:id="@+id/tableRow3"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content" >
                       <Button
                           android:id="@+id/button2"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:text="Button"
                           android:visibility="invisible" />
                       <Button
                           android:id="@+id/back"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:text="Back" />
                   </TableRow>
              </TableLayout>
</RelativeLayout>
</LinearLayout>
4.2.3 android客戶端的界面如圖4.2所示:
圖4.2 android控制界面
4.2.4 發送按鈕的代碼
sendButton= (Button)findViewById(R.id.btn_msg_send);
sendButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String msgText =editMsgView.getText().toString();//獲取編輯框內的內容
if (msgText.length()>0) {
              sendMessageHandle(msgText);//發送編輯框的內容給串口            
              editMsgView.setText("");//清空編輯框
              editMsgView.clearFocus();
//close InputMethodManager
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                                          imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);
}
else
Toast.makeText(mContext, "發送內容不能為空!", Toast.LENGTH_SHORT).show();
}
});
4.2.5 控制按鈕的代碼
以左轉按鈕為例:
sendButton= (Button)findViewById(R.id.left);
sendButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String msgText ="1"; // 發送左轉命令“l”
if (msgText.length()>0) {
sendMessageHandle(msgText);//發送“l”給串口            
editMsgView.setText("");//清空編輯框
editMsgView.clearFocus();
//close InputMethodManager
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);
}
else
Toast.makeText(mContext, "發送內容不能為空!", Toast.LENGTH_SHORT).show();
}
});
1.        系統創新

自從有了智能手機,機器人的應用也就多了一個新的方向:手機控制機器人。2005年日本第二大電信運營商KDDI和機械制造商IBee KK聯合推出了第一款手機控制機器人。當然了,想要操縱這種機器人,你首先需要使用KDDI網絡,并且用戶的手機上,本身還需要帶有藍牙功能,然后再通過KDDI提供BREW方式下載機器人的驅動程式和控制系統。不過這種機器人的價格卻相對高昂,預售市價約合人民幣15000元。隨著Android系統技術的普及,可以做個基于Android的客戶端,在小車上裝個接收藍牙信號的FBT藍牙接收模塊,然后就可以通過客戶端發送藍牙信號,來對藍牙小車進行控制控制,其接收可達15米,完全能適應對小車的要求。其中這個FBT藍牙接收模塊是低耗能,這樣就把更多的能量用在小車的驅動上。

小車需要很大的馬力和很好的靈活性以應對不同的地形。這輛車的車輪使用四驅的直流電機來驅動的,用PWM波來控制小車的速度,可以很方便的更改其速度,有主控板通過推挽輸出來控制電機的翻轉以讓車子進行后退的速度。這樣就可以勝任對小車的要求。


2.        評測與結論
首先,給電源模塊上12v的電源,然后打開電機驅動模塊開關,同時將主控板的供電端連接到電源管理模塊。然后,在android手機上安裝“藍牙通信”應用程序后,打開該APP,然后選擇“允許打開藍牙”。點擊設備列表中的“開始搜索按鈕”,在設備列表中選擇藍牙模塊的名字進行連接。
              完成上述工作以后,就可以在手機上通過按下“start”、“left”、“stop”、“right”、“back”通過藍牙給小車發送“前進”、“左轉”、“停止”、“右轉”、“后退”5個命令。小車可以解析命令輕松進行前進、后退、左轉、右轉和停止。



附錄
圖6-1 作品成果1
圖6-2 作品成果2


全部資料51hei下載地址:
硬件設計及文檔.zip (1.87 MB, 下載次數: 119)
軟件源代碼及文檔.rar (639.46 KB, 下載次數: 126)
基于stm32f4的藍牙控制小車_論文.doc (399 KB, 下載次數: 83)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:243748 發表于 2018-6-25 06:56 來自手機 | 只看該作者
謝謝分享
回復

使用道具 舉報

板凳
ID:428445 發表于 2018-11-17 21:45 | 只看該作者
感謝分享
回復

使用道具 舉報

地板
ID:366466 發表于 2019-1-10 09:50 | 只看該作者
很好的東西很有用
回復

使用道具 舉報

5#
ID:673954 發表于 2019-12-25 20:47 | 只看該作者
剛需,但是黑幣不夠 太痛苦了
回復

使用道具 舉報

6#
ID:673954 發表于 2019-12-25 20:50 | 只看該作者
牛逼!
回復

使用道具 舉報

7#
ID:549580 發表于 2020-5-22 22:52 | 只看該作者
這個APP怎么安裝啊

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av中文字幕在线观看 | 日韩一区在线播放 | 成人黄色电影在线播放 | 欧美日韩精品一区 | 狠狠干影院| 日韩成人在线播放 | 精品无码三级在线观看视频 | 亚洲国产成人久久综合一区,久久久国产99 | 国产精品久久久久久久久久免费看 | 国产精品毛片一区二区三区 | 日韩欧美在线观看 | 日日骚av| 黄色亚洲 | www成人免费 | www.久久艹 | 国产精品国产三级国产aⅴ原创 | 国产视频精品区 | 亚洲精品久久久久久久久久吃药 | 美女天天干天天操 | 91人人视频在线观看 | 久久精品国产一区二区电影 | 久久久国产精品入口麻豆 | 国产区第一页 | 亚洲欧洲一区 | 中文字幕 在线观看 | 一区二区三区视频在线观看 | 色婷婷综合网 | 久久久视 | 夜夜干夜夜操 | 黄色网址在线免费观看 | 一区二区电影 | 国产高清一区二区三区 | 中文字幕av在线 | 美女国产一区 | 午夜爱爱毛片xxxx视频免费看 | 成人水多啪啪片 | 亚洲精品久久久久久久久久久 | av免费在线播放 | 午夜午夜精品一区二区三区文 | 日p视频免费看 | 欧美a√ |