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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2210|回復(fù): 1
收起左側(cè)

stm32單片機(jī)尋聲小車源程序 用麥克風(fēng)陣列模塊辨別出聲源的方位

[復(fù)制鏈接]
ID:609509 發(fā)表于 2022-12-4 23:38 | 顯示全部樓層 |閱讀模式
使用聲音矩陣模塊辨別出聲源的方位,聲音的大小可以反映出小車與聲源的距離。
基于以上兩點(diǎn)在空曠無(wú)回音的地點(diǎn)找到聲源,希望感興趣的朋友們可以繼續(xù)完善算法,客服噪聲、回音等等問(wèn)題
驅(qū)動(dòng)是用的l298n,加裝了兩個(gè)光電傳感器實(shí)現(xiàn)尋聲過(guò)程中基本避障功能。

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"         
  5. #include "adc.h"
  6. #include "dma.h"
  7. #include "moto.h"
  8. #include "pwm.h"
  9. #include "oled.h"
  10. #include "key.h"


  11. float Mv=0; //平均值
  12. int S=0; //模擬聲音大小
  13. float Jvalue(float a);//數(shù)據(jù)處理,類似絕對(duì)值
  14.         u16 adcx[6];  //ADC采樣數(shù)組
  15. extern        u8 guangdian;
  16. void Display(void);//顯示

  17. int main(void)//主函數(shù)
  18. {         

  19. //        int i;//循環(huán)變量
  20. //        float adc1,adc2,adc3,adc4,adc5,adc6; //ADC采樣值
  21. //        float v1,v2,v3,v4,v5,v6;//數(shù)據(jù)值
  22.         delay_init();                     //延時(shí)函數(shù)初始化         
  23.         SystemInit();        
  24.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  25.         uart_init(115200);                 //串口初始化為115200
  26.          LED_Init();                             //LED端口初始化                        
  27.         MOTO_GPIO_Config();     //電機(jī)初始化
  28.         OLED_Init();          //OLED初始化
  29.         KEY_Init();
  30.         OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  31.   OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉(zhuǎn)顯示
  32.         GPIO_SetBits(GPIOB,GPIO_Pin_6);  //LED0對(duì)應(yīng)引腳GPIOB.5拉低,亮  等同LED0=0;
  33.         GPIO_SetBits(GPIOB,GPIO_Pin_7);  //LED0對(duì)應(yīng)引腳GPIOB.5拉低,亮  等同LED0=0;
  34.         delay_ms(1000); //延時(shí)啟動(dòng)
  35.         GPIO_ResetBits(GPIOB,GPIO_Pin_7);   //LED1對(duì)應(yīng)引腳GPIOE.5拉高,滅 等同LED1=1;
  36.         delay_ms(1000); //延時(shí)啟動(dòng)
  37.         GPIO_SetBits(GPIOB,GPIO_Pin_6);  //LED0對(duì)應(yīng)引腳GPIOB.5拉低,亮  等同LED0=0;
  38.         GPIO_SetBits(GPIOB,GPIO_Pin_7);  //LED0對(duì)應(yīng)引腳GPIOB.5拉低,亮  等同LED0=0;
  39.         TIM1_PWM_Init(100,36);   //PWM初始化
  40.          MYDMA_Config(DMA1_Channel1,(u32)(&ADC1->DR),(u32)adcx,6);//DMA1通道1,外設(shè)為串口1,存儲(chǔ)器為SendBuff,長(zhǎng)度SEND_BUF_SIZE.
  41.         Adc_Init();                                  //ADC初始化
  42.         TIM_SetCompare1(TIM1,25);  //占空比=1-25/100
  43.         TIM_SetCompare3(TIM1,25);
  44.         TIM3_Int_Init(10,35999);
  45.   delay_ms(400); //延時(shí)啟動(dòng)
  46.         while(1) //主循環(huán)
  47.         {
  48. //                v1=0;v2=0;v3=0;v4=0;v5=0;v6=0; //清零
  49. //                for(i=500;i>0;i--) //循環(huán)檢測(cè)500次
  50. //                {
  51. //                        adc1=(float)(adcx[0])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  52. //                        v1+=Jvalue(adc1)*0.6;
  53. //                        adc2=(float)(adcx[1])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  54. //                        v2+=Jvalue(adc2);
  55. //                        adc3=(float)(adcx[2])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  56. //                        v3+=Jvalue(adc3);
  57. //                        adc4=(float)(adcx[3])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  58. //                        v4+=Jvalue(adc4);
  59. //                        adc5=(float)(adcx[4])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  60. //                        v5+=Jvalue(adc5)*0.4;
  61. //                        adc6=(float)(adcx[5])*(3.3/4096);          //獲取計(jì)算后的帶小數(shù)的實(shí)際電壓值,比如3.1111
  62. //                        v6+=Jvalue(adc6);
  63. //                }
  64. //                Mv=(v1+v2+v3+v4+v5+v6)/6; //求平均
  65. ////         Display(); //顯示
  66. ////                delay_ms(2000); //延時(shí)啟動(dòng)
  67. //                if((v1+v2+v3+v4+v5+v6)<120) //太遠(yuǎn)
  68. //                {
  69. //                        Car_Stop(); //停車
  70. //                }
  71. //                else if((v1+v2+v3+v4+v5+v6)>1800)//太近
  72. //                {
  73. //                        Car_Stop();
  74. //                }
  75. //                else //正常范圍
  76. //                {
  77. //                        if(1) //聲源在前側(cè)
  78. //                        {
  79. //                                if((v6)>(v2)) //聲源在左邊
  80. //                                {
  81. //                                        Car_Turn_Left();//左轉(zhuǎn)
  82. //                                        S++; //模擬聲音大小值
  83. //                                }
  84. //                                else if((v2)>(v6))//聲源在右邊
  85. //                                {
  86. //                                        Car_Turn_Right(); //右轉(zhuǎn)
  87. //                                        S++;
  88. //                                }
  89. //                                else //聲源在中間
  90. //                                {
  91. //                                        Car_Go(); //前進(jìn)
  92. //                                        S++;
  93. //                                }
  94. //                        }
  95. //                        else //聲源在后側(cè)
  96. //                        {
  97. //                                Car_RRight();//原地右轉(zhuǎn)
  98. //                        }               
  99. //////      Car_RRight();//原地右轉(zhuǎn)
  100. //////       Car_Go(); //前進(jìn)
  101. //////     Car_Turn_Left();//左轉(zhuǎn)
  102. ////        Car_Turn_Right(); //右轉(zhuǎn)
  103. //                }        
  104.         }
  105. }

  106. float Jvalue(float a) //數(shù)據(jù)處理,將正負(fù)變換的數(shù)據(jù)轉(zhuǎn)換成正誤差
  107. {
  108.         float b;
  109.         if(a>=1.65)
  110.         {
  111.                 b=a-1.65;
  112.         }
  113.         else
  114.         {
  115.                 b=1.65-a;
  116.         }
  117.         return b;
  118. }

  119. void Display(void)//數(shù)據(jù)顯示
  120. {
  121.         OLED_ShowChinese(0,1,18,16,1);//"聲"
  122.         OLED_ShowChinese(18,1,19,16,1);//"音"
  123.         OLED_ShowChinese(36,1,9,16,1);//":"
  124.         OLED_ShowNum(45,1,Mv,4,16,1);
  125.         OLED_ShowChar(80,1,'d',16,1);
  126.         OLED_ShowChar(90,1,'B',16,1);
  127.         OLED_ShowChinese(0,20,0,16,1);//"路"
  128.         OLED_ShowChinese(18,20,1,16,1);//"程"
  129.         OLED_ShowChinese(36,20,2,16,1);//":"
  130.         OLED_ShowNum(45,20,S,4,16,1);
  131.         OLED_ShowChar(80,20,'c',16,1);
  132.         OLED_ShowChar(89,20,'m',16,1);
  133.         
  134.         OLED_ShowNum(45,40,guangdian,4,16,1);
  135.         OLED_Refresh();//更新顯存到OLED        
  136. }
復(fù)制代碼

Keil代碼下載:
程序源碼.7z (222.8 KB, 下載次數(shù): 31)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:822053 發(fā)表于 2023-10-10 11:27 | 顯示全部樓層
樓主原理圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久婷婷色 | 天天综合操| 一区二区三区四区av | 亚洲精品字幕 | jvid精品资源在线观看 | 亚洲福利一区 | 欧美a级成人淫片免费看 | 亚洲视频免费在线 | 最近日韩中文字幕 | 一道本不卡视频 | 久久99国产精品 | 亚洲精品一区国语对白 | 亚洲成人精选 | 一级黄色绿像片 | 国产一区二区三区四区 | 一区二区三区四区电影 | 精品久久香蕉国产线看观看亚洲 | 久草www | 精国产品一区二区三区四季综 | 国产99久久 | 亚洲一区二区三区在线视频 | 在线观看中文字幕一区二区 | 久久噜噜噜精品国产亚洲综合 | 欧美激情久久久 | 特一级黄色毛片 | 久久9999久久 | 国产一区二区视频免费在线观看 | 久久一区二区视频 | 一区二区三区久久久 | 二区三区在线观看 | 精品国产乱码久久久久久蜜柚 | 中文字幕 国产精品 | 男人天堂网址 | 欧美精品一区二区三区在线 | 成人不卡视频 | 欧美日韩一区二区在线播放 | 在线看av的网址 | 国产香蕉视频在线播放 | 亚洲日本欧美日韩高观看 | 香蕉婷婷| 一区二区三区四区不卡视频 |