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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于Arduino Pro mini的語音彩燈播報系統

[復制鏈接]
跳轉到指定樓層
樓主
一  項目簡介
      睡前給小朋友講故事,哄自己的寶貝睡覺,已經成為很多家長的沉重負擔,特別是很多女性,既要在外面拼搏,又要負責繁重的家務,好不容易想躺一下,不通情達理的心肝寶貝吵著聽故事,真累!
      這款智能設備可以為您分憂解難:通過ardiuno min單片機,語音模塊,RGBLED模塊,機智云平臺,用手機作為控制界面,隨心所欲地控制一個深受小朋友喜愛的,能播放故事,音樂,還能發出五彩繽紛,變幻莫測的燈光,秒殺小主人的無理要求,讓你瞬間從糾纏中解脫出來。

二   硬件準備
序號
名稱
規格/型號
數量
1
主機
arduino  Pro Mimi
一臺
2
從機
Arduino  Pro Mimi
一臺
3
ESP826WiFi模塊
ESP-12F
一個
4
語音模塊
N9200B
一個
5
RGBLED彩燈模塊
WS2812B  16通道
一個
6
微型音箱
8Ω/3W
一個
7
直流過濾器
5V/5A
一個
8
WiFi模式配置按鈕
機械復位
一個
9
濾波電容
60V  1uF
一個
10
兒童硅膠玩具
萌寵小動物
一個
11
TF卡
1G
一個

改裝前的硅膠玩具


改裝后的語音播放彩燈系統


分解后的模塊


完全肢解后的零部件


三  軟件開發環境以及工具
(1)單片機
  1)代碼編輯:Notepad++
  2)編譯工具:Arduino IDE
  3)燒寫工具:OpenJumper
(2)固件燒寫工具
ESP_DOWNLOAD_TOOL_V2.4
(3)手機測試用Demo App
   請到機智云物聯網云平臺下載,與本系統配置綁定后立刻可以控制體驗。


四  控制思路
(1)主機
  1)主機MCU1  專注與云端和從機的通信,把采集,處理后的數據發送到相應的設備。
  2)數據點  開關類:啟動/停止播放或燈光,數據類型:布爾值。選項類:確定被控制對象的多項模式,數據類型:枚舉。模擬類:對連續變化變量控制,數據類型:數值。詳細數據內容請參閱下表:
語音彩燈控制系統數據點
顯示名稱
標識名
讀寫類型
數據類型
數值
枚舉
備注
分辨率
增量
數據范圍最小值
數據范圍最大值
選項

開關
Switch
可寫
布爾值





設備總開關
播放
Play_Pause
可寫
布爾值





語音開關
播放模式
Play_Mode
可寫
枚舉




全部循環,單循環,隨機播放
語音播放模式
播放內容
Proj_Select
可寫
枚舉




故事會,音樂會
播放選項
單色控制
EVENT_LED_COLOR
可寫
枚舉




關閉,黃色,紫色,粉色
彩燈單色控制
彩燈花樣
Scene
可寫
枚舉




關閉,涂色效果,戲劇追逐效果,彩虹效果
彩燈花樣選擇
音量
Volume
可寫
數值
1
0
0
30

音量控制
選曲模式
Control_Mode
可寫
數值
1
0
0
40

播放順序選擇
環境溫度
Temperature
只讀
數值
1
-13
-13
187

備用
環境濕度
Humidity
只讀
數值
1
0
0
100

備用

(2)從機
  1)語音專用模塊MCU2   專注于解析從主機發來的數據包,依據自身規定的命令集,發揮語音模塊豐富的功能,使用方法請參閱附件“N9200 MP3模塊說明書(不帶配置)v1.3”。

  2)彩燈控制器MCU3   通過開源的Adafruit_NeoPixel函數庫,控制WS2812B彩燈模塊發出五顏六色的絢麗光彩。
五  代碼說明
(1)使用機智云的代碼自動生成工具,方法請參閱bigfanofloT老師的“史上最詳細的Arduino uno R3接入機智云教程”一文。

(2)主機代碼
  1)WiFi配置用代碼的修改
  • void wifiStatusHandle()
  • {
  • //WIFI配置為SOFTAP模式
  •   if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
  •   {
  •         sd_data = 'R';//設置標志字符為“R”
  •         Data_Send();//向從機發送點亮RGBLED紅色燈指令
  •   }
  • //WIFI配置為AIRLINK模式
  •   if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
  •   {
  •         sd_data = 'G';//設置標志字符為“G”
  •         Data_Send();//向從機發送點亮RGBLED綠色燈指令
  •   }
  • //WIFI配置成功
  •   if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  •   {
  •         sd_data = 'F';//設置標志字符為“F”
  •         Data_Send();//向從機發送關閉RGBLED燈指令
  •   }


復制代碼

作為配置狀態的顯示手段,WS2812B  16通道RGBLED燈分別在SOFTAP模式時,點亮紅色,AIRLINK模式時,點亮綠色,成功時關閉所有通道的燈。
2)語音模塊控制代碼
    語音模塊的指令集比較多,這里只簡單說明幾個數據包如何發送,其他都大同小異,主機完整代碼里面有詳細的注釋,請參閱為盼。下面我們根據廠家提供的N9200B語音模塊的部分指令集,說明一下如何添加這部分的邏輯代碼:
N9200B指令(16進制數據)
指令名稱
指令代碼
反碼
數據長度
數據1
數據2
校驗和
播放
04
FB
01
01
-
01
暫停
04
FB
01
02
-
02
上一曲
04
FB
01
04
-
04
音量控制
06
F9
02
01
VOL
04
①首先需要定義一個多維數組“unsigned char data[7] = {0,0,0,0,0,0,0};”,用于儲存語音數據包。然后根據不同的指令,把16進制的數據添加到下面各個函數的數組中,其中播放,暫停,上一目錄的數據都是常量,只有音量的第二組數據為變量v,由于校驗和w,表示除了校驗和本身之外,所有字節之和,所以校驗和也成了變量w。
②然后創建播放Control_Play(),暫停Control_Pause(),上一目錄Control_Back_dir()以及音量控制Control_Volume()4個函數,這樣在各個邏輯代碼區域就可以調用了。
  • void Control_Play(){
  •     unsigned char data[7] = {0x04,0xfb,0x01,0x01,0x01};//將播放數據包存進數組儲存器
  •     mySerial1.write(data,7);//將以上數據包發送到語音模塊
  •     }
  • void Control_Pause(){
  •     unsigned char data[7] = {0x04,0xfb,0x01,0x02,0x02}; //將暫停數據包存進數組儲存器
  •     mySerial1.write(data,7);//將以上數據包發送到語音模塊
  •     }
  • void Control_Back_dir(){
  •     unsigned char data[7] = {0x04,0xfb,0x01,0x12,0x12};//將上一目錄數據包存進數組儲存器
  •     mySerial1.write(data,7);//將以上數據包發送到語音模塊
  •     }
  • void Control_Volume(){
  •     unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};//將音量數據包存進數組儲存器
  •     mySerial1.write(data,7);//將以上數據包發送到語音模塊
  •     }

復制代碼

③函數的調用
   因為音樂控制需要用到變量,下面我們詳細說明一下如何調用音量控制函數對音量進行控制。其他函數的調用大同小異,請舉一反三,與此類推。
   (myGizwits.hasBeenSet(EVENT_Volume)),myGizwits.read(EVENT_Volume,&varR_Volume);都是機智云自動生成的代碼,用于讀取云端的數據,我們只管使用就行。
   上面介紹過,語音模塊廠家的音量通信指令格式為(06 F9 02 01 v  w),其中,v為音量數據,廠家規定音量等級范圍為(0-30),w為校驗和,表示除了校驗和本身之外,所有字節之和,這里我們有一個更簡易的計算方法:w=v+2。下面的第9行代碼就是用這個公式計算校驗和的。第2-6行代碼表示從云端讀取音量變量 varR_Volume的數值,并存入v,當音量在規定范圍內(0 <= v < 31)時,調用 Control_Volume();,注意函數內的數組unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};,的變量將被替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,(v+2)};,例如:當將手機的音量滑動條移到20等級的音量位置時,v將存入0x14的16進制數據(十進制20的HEX值),數組將替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,0x14,0x16};。    另外其他的二種狀態:音量小于0時(v < 0),音量大于最大值時(v > 30)的時候,系統強制限定其回歸規定范圍內,數組變量替代方法以及調用的函數都大同小異,這里不再累述。
  • //音量控制
  •   if(myGizwits.hasBeenSet(EVENT_Volume))
  •   {
  •         myGizwits.read(EVENT_Volume,&varR_Volume);//Address for storing data
  •         //收到來自云端的音量控制指令
  •         v = varR_Volume;//將云端下發的音量數值存到V
  •         if(0 <= v < 31)//音量在規定范圍內
  •         {
  •   w = v + 2;//計算校驗和,并將結果存入w
  •   Control_Volume();//調用帶有當前音量數值的音量控制函數
  •   }
  •   else if(v < 0)//音量小于0時
  •   {
  •   v = 0;//強制靜音
  •   w = v + 2;//計算校驗和,并將結果存入w
  •   Control_Volume();//調用帶有當前音量數值的音量控制函數
  •   }
  •   else if(v > 30)//音量大于規定值時
  •   {
  •   v = 30;//強制限定到音量最大值
  •   w = v + 2;//計算校驗和,并將結果存入w
  •   Control_Volume();//調用帶有當前音量數值的音量控制函數
  •   }
  • }


復制代碼

3)RGBLED彩燈控制
    由于彩燈運行時,CPU一直以循環的方式依次對彩燈做花樣模式變換控制,非常“忙綠”,如果這時云端有數據進入,會有點應接不暇,所以我們追加了一個從機,專門負責彩燈“事務”,主機和從機都參與了對彩燈的控制,但是主機只專注于將云端的彩燈控制指令收集,分類后通過串口用字符代號轉發給從機,從機利用庫函數進行控制。下面我們分析主機的這部分代碼。
  • //設定彩燈花樣標志
  •   if(myGizwits.hasBeenSet(EVENT_Scene))
  •   {
  •     myGizwits.read(EVENT_Scene,&varR_Scene);//Address for storing data
  •         switch(varR_Scene){
  •     //自定義
  •     case Scene_VALUE0:
  •     sd_data = 'F';
  •         Data_Send();
  •     break;
  •     //涂色效果
  •     case Scene_VALUE1:
  •         sd_data = 'W';
  •         Data_Send();
  •     break;
  •     //戲劇追逐效果
  •     case Scene_VALUE2:
  •         sd_data = 'C';
  •         Data_Send();
  •     break;
  •     //彩虹效果
  •     case Scene_VALUE3:
  •         sd_data = 'B';
  •         Data_Send();
  •     break;
  •     //default;
  •     //break;
  •     }
  •    }
  •   //binary datapoint handle
  •   myGizwits.process();
  • }
  • //發送彩燈控制數據
  • void Data_Send(){
  •     mySerial2.println(sd_data);
  • }

復制代碼

彩燈花樣模式控制     上面代碼的第1-31行,用于彩燈花樣控制,varR_Scene用于讀取云端彩燈場景變量值,然后通過讀取的結果,調用函數。其中Scene_VALUE0-3是機智云根據數據點生成的結構體枚舉數據,一共有4個,根據這4個條件,調用Data_Send();函數,分別發送F,W,C,B 4個字符代號,用于發送給從機執行“關閉,涂色效果,戲劇追逐效果和彩虹效果”等命令。
WiFi配置狀態顯示彩燈控制
     詳細請參閱本文“1)WiFi配置用代碼的修改”。
(4)從機代碼
      1)語音控制模塊
     模塊是市售成品,沒有開源資料,只有使用說明書,按照說明書提供的指令集就可以用代碼控制了。
      2)彩燈控制器
      該代碼充分利用當下流行的Adafruit_NeoPixel函數庫,作為控制主線,讀取主機串口的指令字符集,判斷相關條件,添加相應代碼,完成對WS2812B  16通道RGBLED彩燈模塊的控制。詳細代碼:

彩燈花樣控制代碼
     花樣五花百門,時間關系,我們只介紹“戲劇追逐效果”這部分的代碼。
②彩燈花樣函數
    “theaterChase()”是一個不斷循環的三色追逐效果函數,只要不斷電,就一直循環下去,除非串口收到字符“F”,循環才會中斷。
  • void theaterChase(){
  •   Serial.println(ch);
  •         ch = ' ';  //清空字符儲存器
  •     while(1){
  •         theaterChase(strip.Color(127, 0, 0), 12); // 紅色-指定第12號燈開始紅色追逐
  •     theaterChase(strip.Color(0,   127,   0), 12); // 綠色-指定第12號燈開始綠色追逐
  •     theaterChase(strip.Color(  0,   0, 127), 12); // 藍色-指定第12號燈開始藍色追逐
  •         ch = Serial.read();  //讀取串口數據
  •   if(ch == 'F'){
  •         RGB_LED_Off(); //當串口收到字符“F”,脫出死循環,關閉所有通道的LED燈
  •         break;
  •         }
  •   }
  •         return;
  • }


復制代碼

③花樣函數的調用
  字符:“C”是主機通過串口發過來的,在手機界面上的意思是啟動“戲劇追逐效果”場景,從機收到這個字符后,會立刻調用“theaterChase();”函數,這樣RGBLED彩燈就會發出絢麗奪目的光亮了。
  • void loop() {
  •    if(Serial.available() > 0){
  •     ch = Serial.read();
  • }
  •   switch(ch){
  • case 'C':theaterChase();break;//戲劇追逐效果
  •    default :
  •    break;
  • }
  • }

復制代碼

      上面通過舉例,說明了該系統的部分代碼,更詳細和完整的內容,請參閱附件的“ardiuno完整代碼”。為方便大家分享,附件還添加了電路圖,代碼,模塊,固件燒寫包等詳細資料,請查閱為盼。鑒于篇幅所限,未能提供更多的說明,這方面的教程,請參閱Genius,admin以及bigfanofloT等老師的文章,里面都有非常詳細,非常實用的內容。
     感謝大家的關注,如有不妥之處,懇請批評指正。




作者:清風duino


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四季久久免费一区二区三区四区 | 国产一级特黄视频 | 最近中文字幕第一页 | 日本不卡一区二区三区在线观看 | 九九视频在线观看视频6 | 久久久久国产精品午夜一区 | 国产日韩一区二区三免费 | 国产日韩欧美在线观看 | 国产午夜精品一区二区三区四区 | 色婷婷综合成人av | 亚洲一级在线 | www狠狠爱com | 三级黄视频在线观看 | 欧美国产精品一区二区三区 | 亚洲精品9999久久久久 | 成人精品国产 | 国产精品久久国产精品 | 成人在线电影网站 | 国产成人精品午夜 | 国产亚洲精品成人av久久ww | 成人高清在线视频 | 国产精品乱码一区二区三区 | 国产午夜精品一区二区三区四区 | 日韩a | 国产精品一区二区在线免费观看 | 久久综合一区二区三区 | 日韩成人一区二区 | 97国产精品视频人人做人人爱 | 91人人看| 成人免费影院 | 亚洲a视频 | 欧美久久综合 | 亚洲一区二区精品视频 | 成人午夜免费视频 | 亚洲精品视频一区二区三区 | 国产小视频在线观看 | 欧美九九 | www.色.com| 男人天堂网址 | 精品国产乱码一区二区三区a | 中文字幕一区在线观看视频 |