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

QQ登錄

只需一步,快速開始

搜索
查看: 13960|回復(fù): 34
打印 上一主題 下一主題
收起左側(cè)

手機(jī)藍(lán)牙對(duì)大功率RGB-LED PWM調(diào)色,實(shí)現(xiàn)三路256級(jí)混色和多種模式 附單片機(jī)源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
通過對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色, 理論幾乎包括了人類視力所能感知的所有顏色。  我們的手機(jī)、電腦、電視,等顯示器 ,一個(gè)像素就是通過對(duì)RGB三個(gè)顏色不同占比的控制實(shí)現(xiàn)顯示不同顏色。
突發(fā)聯(lián)想,做個(gè)大功率的RGB調(diào)光如何?可以做夜燈,做裝飾 ,照明 ,加上手機(jī)控制,晚上很少開燈。本制作有所不足,希望各位大佬能進(jìn)行完善,或者添加新的玩法~

用到的元器件:
RGB LED 3W*4
15W404AS 單片機(jī)
4.7R  1W電阻*3
NMOS管*3
100Ω  1/4 W電阻*3
1-10K  1/4 W電阻*3
6*8cm 洞洞板*1
藍(lán)牙模塊 *1

先發(fā)個(gè)演示視頻吧~


原理:利用藍(lán)牙串口助手發(fā)送數(shù)據(jù),藍(lán)牙模塊接收后,經(jīng)過單片機(jī)處理,處理當(dāng)前的三路PWM值輸出到IO口,通過MOS管驅(qū)動(dòng)LED。
藍(lán)牙APP 的配置(如果想深入了解可以在app菜單點(diǎn)擊程序幫助)

可以通過這個(gè)APP拖動(dòng)上面的滑塊,或者點(diǎn)擊下面的按鍵配置RGB 的占比 ,當(dāng)單片機(jī)接收到有效數(shù)據(jù)幀的時(shí)候 ,單片機(jī)會(huì)將數(shù)據(jù)原樣返回到APP 這樣做的目的是為了使按鍵按下后上面的滑塊也能同步當(dāng)前的三路PWM值。從而用戶可再次對(duì)當(dāng)前模式進(jìn)行微調(diào)
具體配置:(點(diǎn)擊APP右上方三個(gè)小點(diǎn)-地面站設(shè)置)



詳細(xì)數(shù)據(jù)說明:
*                滑塊發(fā)送數(shù)據(jù)一次為7位數(shù)據(jù)  
*                例如        A5 5A 05 F1 80 76 AA
*                A5 5A 為幀頭
*                05為除去幀頭的長度
*                F1為哪一個(gè)滑塊
*                80為具體數(shù)值
*                76為byte 2到4位數(shù)據(jù)的和 (低字節(jié))
*              AA為幀尾

本制作實(shí)際使用中,接收做了兩次幀頭核對(duì)(接受時(shí)判斷第0位A5,處理時(shí)判斷第一位,5A)保證數(shù)據(jù)正確完整 。
沒有使用效驗(yàn)。 但是在往APP返回?cái)?shù)據(jù)時(shí)候需要嚴(yán)格按照APP標(biāo)準(zhǔn)執(zhí)行。
具體的發(fā)送和接收處理過程在程序中有所體現(xiàn),也做了充分的注釋、
電路:
電路很簡單,只是介紹MOS部分的接法:



我使用的是PWM模塊拆解的MOS管,其中兩個(gè)MOS管是并連關(guān)系,為了驅(qū)動(dòng)大功率的,但是在這里有點(diǎn)浪費(fèi),體積較大。


拆解后將引腳掰直

背面焊一個(gè)引腳出來,貼片變直插 ~~

其中PWM端接單片機(jī)io口
R1接RGB LED的其中一個(gè)顏色,4個(gè)LED的正極 R端G端B端口采用并聯(lián)方式連接。
需要注意是需要對(duì)RGB三個(gè)顏色的功率進(jìn)行匹配,也就是說當(dāng)PWM為最大255時(shí),保證每一個(gè)LED的每一個(gè)顏色不會(huì)過載。
我用的是下面這一款LED


紅色電壓2.2v
藍(lán)綠色電壓 3.3v
電流 350ma (實(shí)際100ma就發(fā)燙)
LED電阻的適配:
5V電源電壓下   紅:(5-2.2)/0.35  = 8Ω    電阻功率2.8*0.35    = 0.98w(電阻發(fā)燒嚴(yán)重)
                    藍(lán)綠:(5-3.3)/0.35  = 4.85Ω            1.7*0.35    = 0.59w

3.3v 電源電壓  紅:  (3.3-2.2)/0.35 = 3.14Ω 電阻功率 1.1*0.35   = 0.38w(不發(fā)燒)
       藍(lán)綠:  不用電阻


通過上面的數(shù)據(jù)和實(shí)際測試發(fā)現(xiàn)電源電壓使用3.3v最為合適,并且還省去的藍(lán)綠色的電阻(G/B直接接MOS管的D極,R通過3.1Ω電阻接D)。所以選擇了使用5V 2A適配器+DCDC調(diào)壓供電,此時(shí)需要考慮你的單片機(jī)工作電壓和藍(lán)牙模塊工作電壓是否合適。



說了這么久PWM,簡談一下PWM:
即在頻率不變的情況下改變高低電平的占比。


程序中off_all 和on_all需要注意的是并沒有對(duì)PWM值進(jìn)行操作,而是直接關(guān)閉了io口的輸出。因?yàn)檫@樣可以徹底關(guān)閉LED不至于PWN=0時(shí)侯微亮狀態(tài)。
其次程序中并沒有對(duì)PWM=0進(jìn)行發(fā)送 ,因?yàn)椴恢罏槭裁,PWM =0 app會(huì)接受失敗,所以最低發(fā)送了PWM=1,然后讓io口關(guān)閉實(shí)現(xiàn)LED完全熄滅。

有一個(gè)想法:當(dāng)發(fā)送的為模式數(shù)據(jù)時(shí),APP也能進(jìn)行面板刷新,但是實(shí)際測試中  ,當(dāng)模式執(zhí)行時(shí)遇到發(fā)送數(shù)據(jù)就會(huì)停止當(dāng)前模式(卡。恢绾谓鉀Q~  望支招

實(shí)際使用:

使用前先確認(rèn)藍(lán)牙模塊波特率為9600bps ,弱不是,請(qǐng)進(jìn)入藍(lán)牙模塊AT模式進(jìn)行配置 ,藍(lán)牙連接成功后點(diǎn)擊app上的藍(lán)牙標(biāo)志選擇連接 ,提示連接成功后按如上的APP配置即可使用,接下來是主程序部分。




單片機(jī)程序源碼如下:
  1. /*********************************************
  2. *                        功能  :RGB調(diào)光
  3. *                        單片機(jī):15W404AS
  4. *                        app   :藍(lán)牙串口助手
  5. *                        數(shù)據(jù)格式以及解釋:

  6. *                        滑塊數(shù)據(jù)一次為7位數(shù)據(jù)  例如
  7. *                        A5 5A 05 F1 80 76 AA
  8. *                        其中A5 5A 為幀頭
  9. *                        05為除去幀頭的長度
  10. *                        F1為哪一個(gè)滑塊
  11. *                        80為具體數(shù)值
  12. *                        76為234位數(shù)據(jù)的和 (低字節(jié))AA為幀尾*/
  13. #include <STC15F2K60S2.h>
  14. #include <main.h>
  15. #include <timerandusart.h>
  16. #include <mode.h>

  17. uchar quit_flag ,liangdu_flag ;  //模式退出標(biāo)志  亮度設(shè)置標(biāo)志
  18. /*用于返回?cái)?shù)據(jù)刷新app面板  讀取byte 4  計(jì)算byte5  */
  19.         uchar table1[7] ;  
  20.         uchar table2[7] ;
  21.         uchar table3[7] ;

  22. void port_mode(){     // 端口模式  
  23.         P1M1=0x00; P1M0=0xFF;
  24.         P3M1=0x00; P3M0=0xFC; }

  25.        
  26. /*不精準(zhǔn)的延時(shí)函數(shù)*/
  27. void delay(uint i)
  28. {
  29.         uint x ,y;
  30.         for(x=i;x>0;x--)
  31.         for(y=700;y>0;y--);
  32. }

  33.        
  34. /*app面板刷新,必須每次對(duì)整個(gè)數(shù)組賦值  不然容易錯(cuò)亂*/
  35. void now_value()
  36. {
  37.                 REN = 0;                                          //馬上將要發(fā)數(shù)據(jù)到手機(jī) 先禁止接收
  38.                 delay(1);
  39.           table1[0]  = 0xa5;
  40.                 table1[1]  = 0x5a;
  41.                 table1[2]  = 0x05;
  42.           table1[3]  = 0xf1;                                /*滑塊1*/
  43.                 table1[4]  = PWM_r;                                                  //讀取當(dāng)前的PWM_r大小
  44.                 table1[5]  = (table1[2] + table1[3] + table1[4]) & 0XFF;//計(jì)算效驗(yàn)碼 計(jì)算方法為byte2+byte3+byte4  取低位
  45.                 table1[6]  = 0xaa;
  46.                 SendStr(table1);                                                                                                                                        //發(fā)送處理完成后的PWM_r數(shù)據(jù)刷新第一個(gè)滑條  red
  47.        
  48. /*-------------------------------*/       
  49.        
  50.           table2[0]  = 0xa5;
  51.                 table2[1]  = 0x5a;
  52.                 table2[2]  = 0x05;
  53.           table2[3]  = 0xf2;                                /*滑塊2        */
  54.                 table2[4] = PWM_g;       
  55.                 table2[5] = (table2[2] + table2[3] + table2[4]) & 0XFF;       
  56.           table2[6]  = 0xaa;
  57.                 SendStr(table2);         
  58.        
  59. /*-------------------------------*/                       
  60.           table3[0]  = 0xa5;
  61.                 table3[1]  = 0x5a;
  62.                 table3[2]  = 0x05;
  63.           table3[3]  = 0xf3;                                /*滑塊3        */
  64.                 table3[4] = PWM_b;                         
  65.                 table3[5] = (table3[2] + table3[3] + table3[4]) & 0XFF;
  66.                 table3[6]  = 0xaa;
  67.                 SendStr(table3);
  68.          
  69.                 REN = 1;                                                                                                                                          //允許接收
  70. }

  71. /*---------------------------------------------------------------------------主程序--------------------------------------------------------------------------*/
  72. void main()
  73. {
  74.   port_mode();
  75.         timer();
  76.         UART_init();//串口配置初始化
  77.         PS = 1 ;    //串口中斷優(yōu)先
  78.         while(1)
  79.         {         
  80.                                 if(sign)
  81.                          {
  82.                                                 sign = 0;  
  83.                                                 str_copy(S,T);   //再次復(fù)制
  84.                                                 if(S[1] == 0X5A)   //串口中斷中進(jìn)行了第1位的核對(duì) 為了數(shù)據(jù)正確  再核對(duì)一次第2個(gè)  
  85.                                                 {
  86.                                                                  switch(S[3])  //判斷是哪一個(gè)數(shù)據(jù),將對(duì)應(yīng)滑塊數(shù)值取出來給各個(gè)占空比
  87.                                                                  {
  88.                                 /*滑塊*/                
  89.                                                                          case 0xF1 :   PWM_r = S[4] ; break ; //滑塊1
  90.                                                                          case 0xF2 :   PWM_g = S[4] ; break ; //滑塊2
  91.                                                                          case 0xF3 :   PWM_b = S[4] ;        break ; //滑塊3
  92.                                 /*按鍵*/                       
  93.                                                                          case 0xB1 :   white ;  break ; //按鍵1   白色
  94.                                                                          case 0xB2 :   balck;   break;  //按鍵2   黑色
  95.                                                                          case 0xB3 :   yellow;  break ; //按鍵3   黃色
  96.                                                                          case 0xB4 :   violet;  break ; //按鍵4   紫色
  97.                                                                          case 0xB5 :   cyan ;   break ; //按鍵5   青色       
  98.                                                                          case 0xB6 :   break;
  99.                                  /*模式*/                                                          
  100.                                                                          case 0xA1 :   MODE_1();                    break;//呼吸
  101.                                                              case 0xA2 :   MODE_2();                    break;//閃爍
  102.                                                                          case 0xA3 :   MODE_3();                    break;//閃爍
  103.                                  /*閃爍速度*/
  104.                                                                          case        0xD1 :   if(speed<1000 )speed+=10;                                                                                       break;                  
  105.                                                                    case        0xD2 :   if(speed>0 && speed - 10 >= 0)speed-=10;          break;                  
  106.                                                                  }
  107.                                                        now_value();//刷新app面板
  108.                                                 }

  109.                                  }/*end sign*/
  110.                                        
  111.                                                                 if(PWM_r <= 1) OFF_red         ; else ON_red  ;  //通過設(shè)置端口模式,徹底關(guān)閉LED
  112. ……………………

  113. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


其它子程序和分文件Keil工程,app 均在附件之中 歡迎下載~
最后希望感興趣的朋友們順利制作成功~~



全部資料51hei下載地址:
RGB 藍(lán)牙滑塊調(diào)光.zip (2.84 MB, 下載次數(shù): 287)


評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏28 分享淘帖 頂2 踩1
回復(fù)

使用道具 舉報(bào)

來自 2#
ID:305196 發(fā)表于 2019-5-25 15:25 | 只看該作者
MOS管用的不多,怕焊接錯(cuò)了,就直接飛線搭建了個(gè),可以亮,就馬上照著焊接起來了。在你基礎(chǔ)上改了下,手里也沒有3.3V穩(wěn)壓芯片,就搞了2個(gè)二極管,但是藍(lán)牙模塊得5V,經(jīng)過兩個(gè)二極管供電不夠,所以藍(lán)牙模塊接了一個(gè)二極管,RGB彩燈用了2個(gè)二極管,靠近RGB彩燈的二極管很燙,但是正面的三個(gè)功率電阻不燙了,這叫溫度轉(zhuǎn)移嗎,還有我覺得二次驗(yàn)證好難受,得按2下,模式按鈕變快變慢按鈕好像沒作用,可能白天在實(shí)驗(yàn)室沒效果。而且光好刺眼,加了個(gè)泡沫罩著,好了一點(diǎn)。


ZXC8[~]OD[[HAUY7)E8S5X6.jpg (351.71 KB, 下載次數(shù): 122)

ZXC8[~]OD[[HAUY7)E8S5X6.jpg

評(píng)分

參與人數(shù) 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2018-8-14 04:28 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

地板
ID:328014 發(fā)表于 2018-8-14 16:20 | 只看該作者
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機(jī)可不可以?
回復(fù)

使用道具 舉報(bào)

5#
ID:259648 發(fā)表于 2018-8-14 16:49 | 只看該作者
51hei團(tuán)團(tuán) 發(fā)表于 2018-8-14 16:20
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機(jī)可不可以?

也可以,處理的東西并不多,主要原因是404AS體積小巧。如果用89c52的話串口配置函數(shù)需要寫成51的  設(shè)置波特率為9600  另外,端口模式相關(guān)的操作就可以不用管了  其他的東西都是通用
回復(fù)

使用道具 舉報(bào)

6#
ID:377382 發(fā)表于 2018-8-24 14:00 | 只看該作者
謝謝樓主大大分享的好東東
回復(fù)

使用道具 舉報(bào)

7#
ID:161785 發(fā)表于 2018-11-21 16:32 來自手機(jī) | 只看該作者
太好了,正需要。沒有看的下載地址呢。
回復(fù)

使用道具 舉報(bào)

8#
ID:358930 發(fā)表于 2018-11-22 09:41 來自手機(jī) | 只看該作者
admin 發(fā)表于 2018-8-14 04:28
好資料,51黑有你更精彩!!!

地址看不了嗎。。。。
回復(fù)

使用道具 舉報(bào)

9#
ID:65956 發(fā)表于 2018-11-27 08:47 | 只看該作者
設(shè)置的門檻有點(diǎn)高哦
回復(fù)

使用道具 舉報(bào)

10#
ID:161785 發(fā)表于 2018-12-11 17:28 | 只看該作者
您好 藍(lán)牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。
回復(fù)

使用道具 舉報(bào)

11#
ID:3802 發(fā)表于 2019-1-25 14:32 | 只看該作者
太厲害了
回復(fù)

使用道具 舉報(bào)

12#
ID:321613 發(fā)表于 2019-1-30 10:53 | 只看該作者
好精彩哦。。。。。。。。。。。。。!
回復(fù)

使用道具 舉報(bào)

13#
ID:500243 發(fā)表于 2019-3-28 21:54 | 只看該作者
哇 好厲害呀~!!
回復(fù)

使用道具 舉報(bào)

14#
ID:86244 發(fā)表于 2019-4-18 22:39 | 只看該作者
樓主很用心,很好的代碼.
回復(fù)

使用道具 舉報(bào)

15#
ID:271166 發(fā)表于 2019-4-19 08:13 | 只看該作者
好資料
回復(fù)

使用道具 舉報(bào)

16#
ID:222956 發(fā)表于 2019-4-19 11:53 | 只看該作者
優(yōu)秀,加個(gè)外殼就更加完美了
回復(fù)

使用道具 舉報(bào)

17#
ID:516864 發(fā)表于 2019-4-20 01:33 來自手機(jī) | 只看該作者
樓主能幫做的app嗎
回復(fù)

使用道具 舉報(bào)

18#
ID:529074 發(fā)表于 2019-5-7 16:16 | 只看該作者
可以加個(gè)聯(lián)系方式么?有些問題想請(qǐng)教
回復(fù)

使用道具 舉報(bào)

19#
ID:529074 發(fā)表于 2019-5-7 16:43 | 只看該作者
樓主能加個(gè)好友么,有些細(xì)節(jié)想問下
回復(fù)

使用道具 舉報(bào)

20#
ID:406752 發(fā)表于 2019-5-16 16:45 | 只看該作者
樓主!求一下電路連接圖!
回復(fù)

使用道具 舉報(bào)

21#
ID:259648 發(fā)表于 2019-6-26 00:04 | 只看該作者
destiny_xl 發(fā)表于 2019-5-25 15:25
MOS管用的不多,怕焊接錯(cuò)了,就直接飛線搭建了個(gè),可以亮,就馬上照著焊接起來了。在你基礎(chǔ)上改了下 ...

真漂亮~~   哈哈
回復(fù)

使用道具 舉報(bào)

22#
ID:148211 發(fā)表于 2019-7-14 02:04 | 只看該作者
高手在民間啊。好東西
回復(fù)

使用道具 舉報(bào)

23#
ID:137005 發(fā)表于 2019-7-30 16:59 | 只看該作者
用保存調(diào)光的值嗎?這樣就不用每次開機(jī)都調(diào)一下。
回復(fù)

使用道具 舉報(bào)

24#
ID:372939 發(fā)表于 2019-7-30 23:47 | 只看該作者
學(xué)習(xí)了,感謝樓主開源精神。
回復(fù)

使用道具 舉報(bào)

25#
ID:282431 發(fā)表于 2019-7-31 09:01 | 只看該作者
好東東,向樓主學(xué)習(xí),比較實(shí)用的學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

26#
ID:259648 發(fā)表于 2019-8-7 15:10 | 只看該作者
民盛 發(fā)表于 2018-12-11 17:28
您好 藍(lán)牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。

不需要
回復(fù)

使用道具 舉報(bào)

27#
ID:194844 發(fā)表于 2019-9-7 13:38 | 只看該作者
ok thankyou
回復(fù)

使用道具 舉報(bào)

28#
ID:56665 發(fā)表于 2019-9-7 15:49 | 只看該作者
謝謝分享,但原理圖只畫MOS管,應(yīng)該把怎么連接單片機(jī)、LED都要畫出來,PCB文件是空的,有空最好補(bǔ)齊。
回復(fù)

使用道具 舉報(bào)

29#
ID:632514 發(fā)表于 2019-11-12 13:05 | 只看該作者

好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

30#
ID:692357 發(fā)表于 2020-2-12 16:20 | 只看該作者


好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

31#
ID:517794 發(fā)表于 2020-12-17 23:44 | 只看該作者
再來一發(fā),很棒!
回復(fù)

使用道具 舉報(bào)

32#
ID:230742 發(fā)表于 2020-12-18 11:31 | 只看該作者
高手!這個(gè)現(xiàn)在太實(shí)用了。
回復(fù)

使用道具 舉報(bào)

33#
ID:140183 發(fā)表于 2020-12-21 20:57 | 只看該作者
太好啦!51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

34#
ID:392670 發(fā)表于 2020-12-23 22:55 | 只看該作者
好資料,
用52單片機(jī)就好了,程序不會(huì)改
回復(fù)

使用道具 舉報(bào)

35#
ID:896273 發(fā)表于 2021-3-27 09:55 | 只看該作者
又是一個(gè)學(xué)習(xí)典范
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表