日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

STM32庫函數開發系列文章目錄

第一篇:STM32F103ZET6單片機雙串口互發程序設計與實現
第二篇:最簡單DIY基于STM32單片機的藍牙智能小車設計方案
第三篇:最簡單DIY基于STM32F407探索者開發板的MPU6050陀螺儀姿態控制舵機程序
第四篇:最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序


文章目錄

  • STM32庫函數開發系列文章目錄
  • 前言
  • 一、最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序是什么?
  • 二、使用步驟
    • 1.準備硬件
    • 2.準備正點原子開源的MPU6050的代碼
    • 3.準備正點原子紅外遙控的代碼和顯示屏的代碼
    • 4.修改源碼和組合源碼(這部分原創)
  • 三、運行與調試
  • 總結


前言

????daodanjishui物聯網核心原創技術之最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序。
????市面上有各種開源STM32和PCA9685舵機控制器,但是有復雜的有簡單的,如果想快速入門stm32f407zgt6+PCA9685舵機控制,這個方案會給你一個快捷高效的方案。


一、最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序是什么?

????我記得本欄的第三篇STM32控制舵機是用定時器的PWM波庫函數搞定的,雖然51單片機也寫過PCA9685控制舵機的程序,但是還沒有寫過STM32的,所以誕生了這個第四篇博文。
????這次的方案主要是:STM32F407ZGT6單片機用IO模擬IIC總線直接控制PCA9685模塊來間接控制舵機,所以這次用STM32F4和PCA9685來控制四個舵機組成的機械臂。下面請看全家福:

????這次的程序使用的stm32庫函數來編程,說實話也修改了正點原子開發板配套的例程,正點原子移植了arduino版本的IIC控制MPU6050的庫才有了我這個下文,第三篇博文是用I2C來控制MPU6050,這篇博文是用I2C來控制PCA9685模塊。為了實現這個STM32舵機的控制,我查閱了網上很多有關舵機控制的資料和視頻,我幾乎橫掃了全部正點原子關于舵機控制的論壇帖子,有含金量的帖子基本上沒有多少,給出源碼的程序我覺得多多少少有點問題,也踩了很多坑!總之寫代碼是痛苦的,在這個吃快餐的時代最好的辦法就是復制粘貼“拿來主義”,但是并不是什么都可以拿的,有時候自己去嘗試的時候才發現沒有東西可以拿,只能硬著頭皮擼起袖子加油干。

優酷視頻演示地址:https://v.youku.com/v_show/id_XNTAxMTcxMzE0MA==.html

直接觀看

最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序

二、使用步驟

1.準備硬件

1.1正點原子探索者開發板一個,如果沒有的話用STM32F407ZET6核心板也可以的,現在美國ST公司禁售該芯片,估計以后這個芯片就被淘汰了。
1.2舵機sg90四個。
1.3PCA9685模塊一個。
1.4正點原子4.3寸電容顯示屏一個。(如果沒有的話可以屏蔽該部分代碼)
1.5配套紅外遙控器一個。
1.6三合板機械臂支架一套。(某寶有賣)

2.準備正點原子開源的MPU6050的代碼

我采用庫函數開發,所以代碼直接使用該開發板配套的免費開源源碼進行二次開發。源碼來源:探索者光盤資料\A盤\4,程序源碼\2,標準例程-庫函數版本\實驗32 MPU6050六軸傳感器實驗

代碼如下(示例):

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "lcd.h" #include "mpu6050.h" #include "inv_mpu.h" #include "inv_mpu_dmp_motion_driver.h" //ALIENTEK 探索者STM32F407開發板 實驗32 //MPU6050六軸傳感器 實驗 -庫函數版本 //技術支持:www.openedv.com //淘寶店鋪:http://eboard.taobao.com //廣州市星翼電子科技有限公司 //作者:正點原子 @ALIENTEK//串口1發送1個字符 //c:要發送的字符 void usart1_send_char(u8 c) {while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); USART_SendData(USART1,c); } //傳送數據給匿名四軸上位機軟件(V2.6版本) //fun:功能字. 0XA0~0XAF //data:數據緩存區,最多28字節!! //len:data區有效數據個數 void usart1_niming_report(u8 fun,u8*data,u8 len) {u8 send_buf[32];u8 i;if(len>28)return; //最多28字節數據 send_buf[len+3]=0; //校驗數置零send_buf[0]=0X88; //幀頭send_buf[1]=fun; //功能字send_buf[2]=len; //數據長度for(i=0;i<len;i++)send_buf[3+i]=data[i]; //復制數據for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i]; //計算校驗和 for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]); //發送數據到串口1 } //發送加速度傳感器數據和陀螺儀數據 //aacx,aacy,aacz:x,y,z三個方向上面的加速度值 //gyrox,gyroy,gyroz:x,y,z三個方向上面的陀螺儀值 void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz) {u8 tbuf[12]; tbuf[0]=(aacx>>8)&0XFF;tbuf[1]=aacx&0XFF;tbuf[2]=(aacy>>8)&0XFF;tbuf[3]=aacy&0XFF;tbuf[4]=(aacz>>8)&0XFF;tbuf[5]=aacz&0XFF; tbuf[6]=(gyrox>>8)&0XFF;tbuf[7]=gyrox&0XFF;tbuf[8]=(gyroy>>8)&0XFF;tbuf[9]=gyroy&0XFF;tbuf[10]=(gyroz>>8)&0XFF;tbuf[11]=gyroz&0XFF;usart1_niming_report(0XA1,tbuf,12);//自定義幀,0XA1 } //通過串口1上報結算后的姿態數據給電腦 //aacx,aacy,aacz:x,y,z三個方向上面的加速度值 //gyrox,gyroy,gyroz:x,y,z三個方向上面的陀螺儀值 //roll:橫滾角.單位0.01度。 -18000 -> 18000 對應 -180.00 -> 180.00度 //pitch:俯仰角.單位 0.01度。-9000 - 9000 對應 -90.00 -> 90.00 度 //yaw:航向角.單位為0.1度 0 -> 3600 對應 0 -> 360.0度 void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw) {u8 tbuf[28]; u8 i;for(i=0;i<28;i++)tbuf[i]=0;//清0tbuf[0]=(aacx>>8)&0XFF;tbuf[1]=aacx&0XFF;tbuf[2]=(aacy>>8)&0XFF;tbuf[3]=aacy&0XFF;tbuf[4]=(aacz>>8)&0XFF;tbuf[5]=aacz&0XFF; tbuf[6]=(gyrox>>8)&0XFF;tbuf[7]=gyrox&0XFF;tbuf[8]=(gyroy>>8)&0XFF;tbuf[9]=gyroy&0XFF;tbuf[10]=(gyroz>>8)&0XFF;tbuf[11]=gyroz&0XFF; tbuf[18]=(roll>>8)&0XFF;tbuf[19]=roll&0XFF;tbuf[20]=(pitch>>8)&0XFF;tbuf[21]=pitch&0XFF;tbuf[22]=(yaw>>8)&0XFF;tbuf[23]=yaw&0XFF;usart1_niming_report(0XAF,tbuf,28);//飛控顯示幀,0XAF } int main(void) { u8 t=0,report=1; //默認開啟上報u8 key;float pitch,roll,yaw; //歐拉角short aacx,aacy,aacz; //加速度傳感器原始數據short gyrox,gyroy,gyroz; //陀螺儀原始數據short temp; //溫度NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2delay_init(168); //初始化延時函數uart_init(500000); //初始化串口波特率為500000LED_Init(); //初始化LED KEY_Init(); //初始化按鍵LCD_Init(); //LCD初始化MPU_Init(); //初始化MPU6050POINT_COLOR=RED;//設置字體為紅色 LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"MPU6050 TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"2014/5/9");while(mpu_dmp_init()){LCD_ShowString(30,130,200,16,16,"MPU6050 Error");delay_ms(200);LCD_Fill(30,130,239,130+16,WHITE);delay_ms(200);}LCD_ShowString(30,130,200,16,16,"MPU6050 OK");LCD_ShowString(30,150,200,16,16,"KEY0:UPLOAD ON/OFF");POINT_COLOR=BLUE;//設置字體為藍色 LCD_ShowString(30,170,200,16,16,"UPLOAD ON "); LCD_ShowString(30,200,200,16,16," Temp: . C"); LCD_ShowString(30,220,200,16,16,"Pitch: . C"); LCD_ShowString(30,240,200,16,16," Roll: . C"); LCD_ShowString(30,260,200,16,16," Yaw : . C"); while(1){key=KEY_Scan(0);if(key==KEY0_PRES){report=!report;if(report)LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");else LCD_ShowString(30,170,200,16,16,"UPLOAD OFF");}if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0){ temp=MPU_Get_Temperature(); //得到溫度值MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度傳感器數據MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺儀數據if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定義幀發送加速度和陀螺儀原始數據if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));if((t%10)==0){ if(temp<0){LCD_ShowChar(30+48,200,'-',16,0); //顯示負號temp=-temp; //轉為正數}else LCD_ShowChar(30+48,200,' ',16,0); //去掉負號 LCD_ShowNum(30+48+8,200,temp/100,3,16); //顯示整數部分 LCD_ShowNum(30+48+40,200,temp%10,1,16); //顯示小數部分 temp=pitch*10;if(temp<0){LCD_ShowChar(30+48,220,'-',16,0); //顯示負號temp=-temp; //轉為正數}else LCD_ShowChar(30+48,220,' ',16,0); //去掉負號 LCD_ShowNum(30+48+8,220,temp/10,3,16); //顯示整數部分 LCD_ShowNum(30+48+40,220,temp%10,1,16); //顯示小數部分 temp=roll*10;if(temp<0){LCD_ShowChar(30+48,240,'-',16,0); //顯示負號temp=-temp; //轉為正數}else LCD_ShowChar(30+48,240,' ',16,0); //去掉負號 LCD_ShowNum(30+48+8,240,temp/10,3,16); //顯示整數部分 LCD_ShowNum(30+48+40,240,temp%10,1,16); //顯示小數部分 temp=yaw*10;if(temp<0){LCD_ShowChar(30+48,260,'-',16,0); //顯示負號temp=-temp; //轉為正數}else LCD_ShowChar(30+48,260,' ',16,0); //去掉負號 LCD_ShowNum(30+48+8,260,temp/10,3,16); //顯示整數部分 LCD_ShowNum(30+48+40,260,temp%10,1,16); //顯示小數部分 t=0;LED0=!LED0;//LED閃爍}}t++; } }

3.準備正點原子紅外遙控的代碼和顯示屏的代碼

因為控制舵機需要用紅外遙控,那么就需要用到紅外遙控有關的開源代碼,代碼路徑是:探索者光盤資料\A盤\4,程序源碼\2,標準例程-庫函數版本\實驗29 紅外遙控實驗

因為有顯示屏,所以需要顯示屏的代碼。代碼路徑是:

紅外代碼如下:

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "remote.h" //ALIENTEK 探索者STM32F407開發板 實驗29 //紅外遙控器實驗 -庫函數版本 //技術支持:www.openedv.com //淘寶店鋪:http://eboard.taobao.com //廣州市星翼電子科技有限公司 //作者:正點原子 @ALIENTEKint main(void) { u8 key;u8 t=0; u8 *str=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2delay_init(168); //初始化延時函數uart_init(115200); //初始化串口波特率為115200LED_Init(); //初始化LEDLCD_Init();Remote_Init(); //紅外接收初始化 POINT_COLOR=RED;//設置字體為紅色 LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"REMOTE TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"2014/5/7");LCD_ShowString(30,130,200,16,16,"KEYVAL:"); LCD_ShowString(30,150,200,16,16,"KEYCNT:"); LCD_ShowString(30,170,200,16,16,"SYMBOL:"); while(1){key=Remote_Scan(); if(key){ LCD_ShowNum(86,130,key,3,16); //顯示鍵值LCD_ShowNum(86,150,RmtCnt,3,16); //顯示按鍵次數 switch(key){case 0:str="ERROR";break; case 162:str="POWER";break; case 98:str="UP";break; case 2:str="PLAY";break; case 226:str="ALIENTEK";break; case 194:str="RIGHT";break; case 34:str="LEFT";break; case 224:str="VOL-";break; case 168:str="DOWN";break; case 144:str="VOL+";break; case 104:str="1";break; case 152:str="2";break; case 176:str="3";break; case 48:str="4";break; case 24:str="5";break; case 122:str="6";break; case 16:str="7";break; case 56:str="8";break; case 90:str="9";break;case 66:str="0";break;case 82:str="DELETE";break; }LCD_Fill(86,170,116+8*8,170+16,WHITE); //清楚之前的顯示LCD_ShowString(86,170,200,16,16,str); //顯示SYMBOL}else delay_ms(10); t++;if(t==20){t=0;LED0=!LED0;}} }

顯示屏代碼如下:

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h"//ALIENTEK 探索者STM32F407開發板 實驗13 //LCD顯示實驗-庫函數版本 //技術支持:www.openedv.com //淘寶店鋪:http://eboard.taobao.com //廣州市星翼電子科技有限公司 //作者:正點原子 @ALIENTEKint main(void) { u8 x=0;u8 lcd_id[12]; //存放LCD ID字符串NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2delay_init(168); //初始化延時函數uart_init(115200); //初始化串口波特率為115200LED_Init(); //初始化LEDLCD_Init(); //初始化LCD FSMC接口POINT_COLOR=RED; //畫筆顏色:紅色sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//將LCD ID打印到lcd_id數組。 while(1) { switch(x){case 0:LCD_Clear(WHITE);break;case 1:LCD_Clear(BLACK);break;case 2:LCD_Clear(BLUE);break;case 3:LCD_Clear(RED);break;case 4:LCD_Clear(MAGENTA);break;case 5:LCD_Clear(GREEN);break;case 6:LCD_Clear(CYAN);break; case 7:LCD_Clear(YELLOW);break;case 8:LCD_Clear(BRRED);break;case 9:LCD_Clear(GRAY);break;case 10:LCD_Clear(LGRAY);break;case 11:LCD_Clear(BROWN);break;}POINT_COLOR=RED; LCD_ShowString(30,40,210,24,24,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,lcd_id); //顯示LCD ID LCD_ShowString(30,130,200,12,12,"2014/5/4"); x++;if(x==12)x=0;LED0=!LED0; delay_ms(1000); } }

4.修改源碼和組合源碼(這部分原創)

這里有部分原創的代碼:

//author:daodanjishui 2020.12.16 主頁:https://www.cirmall.com/user/3517397 //管腳定義,左邊是單片機,右邊是PCA //PB8-----SCL //PB9-----SDA /** 舵機編號按照PCA9685模塊上面寫的0~15一共16個舵機進行編號,最左邊的是0號舵機。 但是程序中TURN_1代表的是0號舵機的翻轉的角度,買家要注意了。不要混淆! 機械臂最下面的是2號舵機,夾子是3號舵機,左邊的舵機是1號,右邊的舵機是2號。 所以PCA模塊接上的0、1、2、3號舵機,剩下的全部懸空,舵機接錯也沒有關系,動作亂而已 遙控按鍵9控制舵機2右轉,按鍵7控制舵機2左轉按鍵5控制舵機0上升,按鍵8控制舵機0下降下方向鍵控制控制舵機3關閉夾子,按鍵2控制舵機3打開夾子按鍵4控制舵機1后仰,按鍵6控制舵機1前伸 */#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "pcf8574.h" #include "remote.h"u8 TEXT_Buffer[]={"Explorer STM32F4 IIC PCA9685 demo"}; #define SIZE sizeof(TEXT_Buffer) //通過改變TURN_1 int main(void) { u8 key;u8 *str=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);Stm32_Clock_Init(336,8,2,7);//設置時鐘,168Mhz delay_init(168);uart_init(115200);LED_Init();LCD_Init(); Remote_Init(); //紅外接收初始化IIC_Init();POINT_COLOR =RED ;LCD_ShowString(30,90,400,16,16,"author:daodanjishui"); //標題1LCD_ShowString(30,110,400,16,16,TEXT_Buffer); //標題2LCD_ShowString(30,130,200,16,16,"KEYVAL:"); //鍵值LCD_ShowString(30,150,200,16,16,"KEYCNT:"); //按鍵計數 LCD_ShowString(30,170,200,16,16,"SYMBOL:");// LCD_ShowString(30,190,200,16,16,"TURN_1:"); //舵機1LCD_ShowString(30,210,200,16,16,"TURN_2:");//舵機2LCD_ShowString(30,230,200,16,16,"TURN_3:");//舵機3LCD_ShowString(30,250,200,16,16,"TURN_4:");//舵機4PCA9685_write(PCA9685_MODE1,0x0);//移植代碼要注意setPWMFreq(50);//設置PWM的頻率為50Hz,這樣可以保證產生20ms的脈沖時間GPIO_ResetBits(GPIOA,GPIO_Pin_6 | GPIO_Pin_7);//led管腳初始化up();TURN_1=90;//90度TURN_2=90;TURN_3=90;TURN_4=40;//夾子40度 BEFORE[0]=TURN_1;//BEFORE[]這是數組存放舵機校準的時候初始值BEFORE[1]=TURN_2;BEFORE[2]=TURN_3;BEFORE[3]=TURN_4;while(1){key=Remote_Scan();//讀取紅外遙控的鍵值 if(key){ LCD_ShowNum(86,130,key,3,16); //顯示鍵值LCD_ShowNum(86,150,RmtCnt,3,16); //顯示按鍵次數 LCD_ShowNum(86,190,TURN_1,3,16); //顯示TURN_1~4LCD_ShowNum(86,210,TURN_2,3,16);LCD_ShowNum(86,230,TURN_3,3,16);LCD_ShowNum(86,250,TURN_4,3,16);LCD_ShowNum(140,190,BEFORE[0],3,16); //顯示BEFORE[0~3]LCD_ShowNum(140,210,BEFORE[1],3,16);LCD_ShowNum(140,230,BEFORE[2],3,16);LCD_ShowNum(140,250,BEFORE[3],3,16);delay_ms(10);switch(key){ case 162:TURN_1+=5;if(TURN_1>180)TURN_1=90;str="1";break; case 48://按鍵4TURN_2-=5;if(TURN_2<40)TURN_2=90;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);str="4";break; case 122://按鍵6TURN_2+=5;if(TURN_2>135)TURN_2=90;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);str="6";break; case 2:TURN_2-=5;if(TURN_2<5)TURN_2=90; str="5";break; case 226:EXPECT(90,90,90,70);//如果接收到226鍵值的話,舵機前三個轉90度最后一個轉70度str="3";break; case 194:str="6";break; case 34:TURN_2+=5;if(TURN_2>180)TURN_2=90;str="4";break; case 224:TURN_3+=5;if(TURN_3>180)TURN_3=90;str="7";break; case 168://下方向鍵TURN_4-=5;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);if(TURN_4<40)TURN_4=40;str="close";//關夾子break; case 144:str="9";break; case 104:RETURN(BEFORE,95,40,10,70);str="*";break; case 152://按鍵2TURN_4=60;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);//舵機從BEFORE[]數組的狀態運動到新的TURN_X狀態str="open";break; case 176:str="#";break; case 24://按鍵5的鍵值是24TURN_1=140;//TURN_2=90;//TURN_3=90;//TURN_4=60;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);//舵機從BEFORE[]數組的狀態運動到新的TURN_X狀態str="up";//屏幕狀態反饋顯示break; case 16://按鍵7TURN_3-=5;RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);//舵機右轉if(TURN_3<5)TURN_3=90;//角度減到極限時候,回到原來調0處str="right";break; case 56://按鍵8//EXPECT(65,45,40,75);//直接轉到固定的狀態TURN_1=40; RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);//舵機從BEFORE[]數組的狀態運動到新的TURN_X狀態 str="down";break; case 90://按鍵9TURN_3+=5;//每次按一次,舵機3的角度就增加5度RETURN(BEFORE,TURN_1,TURN_2,TURN_3,TURN_4);//舵機左轉if(TURN_3>180)TURN_3=90;//角度減到極限時候,回到原來調0處str="left";break; }LCD_Fill(86,170,116+8*8,170+16,WHITE); //清楚之前的顯示LCD_ShowString(86,170,200,16,16,str); //顯示SYMBOL} } }

說明:以上就是我main函數的代碼,里面也包含了我構思紅外遙控器的邏輯設計,還有一些其他次要的頭文件和工具文件沒有放進來,因為代碼量大,另外也請讀者尊重原創,尊重勞動成果,請下載我最后附錄上的工程代碼,工程代碼注釋詳細,代碼精簡。

三、運行與調試

(1)功能說明:用紅外遙控器的按鍵遙控與PCA9685連接的機械臂運動,PCA用IIC總線與STM32連接,stm32上有紅外接收器接收遙控器的信號,同時顯示屏會顯示機械臂的狀態和按鍵的鍵值。
(2)代碼說明:用MDK5寫的庫函數代碼
(3)硬件說明:還是正點原子探索者開發板的全家桶硬件,4.3寸電容屏加紅外遙控器,舵機和機械臂是買其他家的。舵機和機械臂和PCA9685看視頻介紹,木頭合成板做的機械臂,10塊左右買到的架子,把sg90舵機裝進去。
(4) 下載源碼,下面是源碼截圖:

(5)按照視頻演示進行控制機械臂。

????通過上面運行與調試證明了程序狀態良好,達到博文提出的要求。


總結

????總結:涉及到IIC通信和紅外收發,不過這些庫函數都有別人幫我們做好了,我做的工作是將他們組合在一起完成舵機的控制,最終完成機械臂的控制,代碼難度不大,但是要做好舵機控制,還是要好好學習代碼中舵機控制的部分代碼。
????預告:下期將會引入機器人四肢的控制,把單片機玩起來。同時加入上位機和圖傳,讓機器人控制多姿多彩。

最后附上本博文代碼下載地址:https://www.cirmall.com/circuit/22287/
直接跳轉
正點原子相關代碼免費下載

總結

以上是生活随笔為你收集整理的最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产午夜成人久久无码一区二区 | 日本在线播放一区 | 国产福利免费看 | 欧美亚洲一二三区 | jizzjizz在线观看 | 一区视频网站 | 日本一区二区不卡在线观看 | 日本欧美视频 | 午夜视频日韩 | 69天堂网 | www日韩欧美 | 色噜噜噜 | 美女黄色大片 | 91免费在线播放 | 日韩国产在线播放 | 天天看黄色片 | 久久人人爽人人人人片 | 人人舔人人干 | 国产经典久久 | 亚洲av无码国产精品永久一区 | 天天操bb| 日韩av综合网 | 亚洲在线免费观看 | 欧美专区亚洲专区 | 美女日批网站 | 最新国产在线视频 | 国产欧美日韩一区二区三区 | 久草香蕉在线 | 九九热色| 免费看黄色片子 | 乱淫的女高中暑假调教h | 青春草av | 午夜精品福利一区二区蜜股av | 雨宫琴音一区二区三区 | 国产精品国产三级国产专播品爱网 | 偷拍综合网 | 加勒比hezyo黑人专区 | 狠狠操天天操夜夜操 | 麻豆免费观看网站 | 色网址在线 | 91丨九色丨蝌蚪丨老版 | 黑人巨大精品欧美黑白配亚洲 | 久久视频在线 | 国产亚洲一区二区不卡 | 麻豆短视频在线观看 | 一级黄色欧美 | 香蕉视频免费看 | 日韩影视一区二区三区 | 日本福利网站 | 1024你懂的日韩 | 欧美精品免费在线观看 | 欧美精品一区二区三区久久 | 色综合天天色综合 | 日韩影视一区二区三区 | 亚洲综合视频在线播放 | 精品国产一区二区三区久久久久久 | 色播久久 | 欧美乱插| 狠狠干2022| 国产一区二区三区四区 | 欧美日韩综合视频 | 亚洲色图视频网站 | 日本精品免费一区二区三区 | 中国黄色a级 | 西西人体44www大胆无码 | 美女又爽又黄免费 | 日韩亚洲欧美一区二区三区 | 久久久久久久久久久影院 | 人妻丰满熟妇无码区免费 | 欧美精品网站 | 让男按摩师摸好爽 | 免费在线视频观看 | 国产草草影院ccyycom | 国产三级做爰高清在线 | 痴女扩张宫交脱垂重口小说 | 天天天天天天天天干 | 国产乱子伦视频一区二区三区 | 日韩在线视频网 | 久久久久久久久久久91 | 欧美a级片在线观看 | 欧美 另类 交 | 色成人免费网站 | 天堂在线国产 | 骚狐网站 | 亚洲欧美一区二区三区不卡 | 密桃av在线 | 在线观看成人免费视频 | 亚洲精品免费电影 | 在线免费看毛片 | 国产精品高潮呻吟视频 | 欧美一级片在线 | 超黄网站在线观看 | 国产传媒中文字幕 | 91亚洲国产成人精品一区 | 欧美一区二区视频在线观看 | 少妇人妻无码专区视频 | 亚洲欧美偷拍视频 | www.日韩| 丰满大乳国产精品 |