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

標(biāo)題: 手機(jī)藍(lán)牙對(duì)大功率RGB-LED PWM調(diào)色,實(shí)現(xiàn)三路256級(jí)混色和多種模式 附單片機(jī)源碼 [打印本頁(yè)]

作者: 溫存723    時(shí)間: 2018-8-13 13:09
標(biāo)題: 手機(jī)藍(lán)牙對(duì)大功率RGB-LED PWM調(diào)色,實(shí)現(xiàn)三路256級(jí)混色和多種模式 附單片機(jī)源碼
通過(guò)對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏色, 理論幾乎包括了人類(lèi)視力所能感知的所有顏色。  我們的手機(jī)、電腦、電視,等顯示器 ,一個(gè)像素就是通過(guò)對(duì)RGB三個(gè)顏色不同占比的控制實(shí)現(xiàn)顯示不同顏色。
突發(fā)聯(lián)想,做個(gè)大功率的RGB調(diào)光如何?可以做夜燈,做裝飾 ,照明 ,加上手機(jī)控制,晚上很少開(kāi)燈。本制作有所不足,希望各位大佬能進(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è)演示視頻吧~
http://v.youku.com/v_show/id_XMzc3NzgwNzM2NA==.html

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

可以通過(guò)這個(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ù)說(shuō)明:
*                滑塊發(fā)送數(shù)據(jù)一次為7位數(shù)據(jù)  
*                例如        A5 5A 05 F1 80 76 AA
*                A5 5A 為幀頭
*                05為除去幀頭的長(zhǎng)度
*                F1為哪一個(gè)滑塊
*                80為具體數(shù)值
*                76為byte 2到4位數(shù)據(jù)的和 (低字節(jié))
*              AA為幀尾

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



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


拆解后將引腳掰直

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

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


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



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


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

有一個(gè)想法:當(dāng)發(fā)送的為模式數(shù)據(jù)時(shí),APP也能進(jìn)行面板刷新,但是實(shí)際測(cè)試中  ,當(dāng)模式執(zhí)行時(shí)遇到發(fā)送數(shù)據(jù)就會(huì)停止當(dāng)前模式(卡住),不知如何解決~  望支招

實(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配置即可使用,接下來(lái)是主程序部分。




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

  6. *                        滑塊數(shù)據(jù)一次為7位數(shù)據(jù)  例如
  7. *                        A5 5A 05 F1 80 76 AA
  8. *                        其中A5 5A 為幀頭
  9. *                        05為除去幀頭的長(zhǎng)度
  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ù)值取出來(lái)給各個(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  ;  //通過(guò)設(shè)置端口模式,徹底關(guān)閉LED
  112. ……………………

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


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



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



作者: admin    時(shí)間: 2018-8-14 04:28
好資料,51黑有你更精彩!!!
作者: 51hei團(tuán)團(tuán)    時(shí)間: 2018-8-14 16:20
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機(jī)可不可以?
作者: 溫存723    時(shí)間: 2018-8-14 16:49
51hei團(tuán)團(tuán) 發(fā)表于 2018-8-14 16:20
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機(jī)可不可以?

也可以,處理的東西并不多,主要原因是404AS體積小巧。如果用89c52的話串口配置函數(shù)需要寫(xiě)成51的  設(shè)置波特率為9600  另外,端口模式相關(guān)的操作就可以不用管了  其他的東西都是通用
作者: 中恒電子asus    時(shí)間: 2018-8-24 14:00
謝謝樓主大大分享的好東東
作者: 民盛    時(shí)間: 2018-11-21 16:32
太好了,正需要。沒(méi)有看的下載地址呢。
作者: 冰冰潔潔    時(shí)間: 2018-11-22 09:41
admin 發(fā)表于 2018-8-14 04:28
好資料,51黑有你更精彩!!!

地址看不了嗎。。。。
作者: aking991    時(shí)間: 2018-11-27 08:47
設(shè)置的門(mén)檻有點(diǎn)高哦
作者: 民盛    時(shí)間: 2018-12-11 17:28
您好 藍(lán)牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。
作者: qzyhlf    時(shí)間: 2019-1-25 14:32
太厲害了
作者: 1966496638    時(shí)間: 2019-1-30 10:53
好精彩哦!!!!!!!!!!!!!!!
作者: 1281926469    時(shí)間: 2019-3-28 21:54
哇 好厲害呀~!!
作者: djdltao    時(shí)間: 2019-4-18 22:39
樓主很用心,很好的代碼.
作者: dragon20100708    時(shí)間: 2019-4-19 08:13
好資料
作者: 嗒嗒嗒2    時(shí)間: 2019-4-19 11:53
優(yōu)秀,加個(gè)外殼就更加完美了
作者: 時(shí)間命運(yùn)巨輪    時(shí)間: 2019-4-20 01:33
樓主能幫做的app嗎
作者: Anyu    時(shí)間: 2019-5-7 16:16
可以加個(gè)聯(lián)系方式么?有些問(wèn)題想請(qǐng)教
作者: Anyu    時(shí)間: 2019-5-7 16:43
樓主能加個(gè)好友么,有些細(xì)節(jié)想問(wèn)下
作者: hvuig    時(shí)間: 2019-5-16 16:45
樓主!求一下電路連接圖!
作者: destiny_xl    時(shí)間: 2019-5-25 15:25
MOS管用的不多,怕焊接錯(cuò)了,就直接飛線搭建了個(gè),可以亮,就馬上照著焊接起來(lái)了。在你基礎(chǔ)上改了下,手里也沒(méi)有3.3V穩(wěn)壓芯片,就搞了2個(gè)二極管,但是藍(lán)牙模塊得5V,經(jīng)過(guò)兩個(gè)二極管供電不夠,所以藍(lán)牙模塊接了一個(gè)二極管,RGB彩燈用了2個(gè)二極管,靠近RGB彩燈的二極管很燙,但是正面的三個(gè)功率電阻不燙了,這叫溫度轉(zhuǎn)移嗎,還有我覺(jué)得二次驗(yàn)證好難受,得按2下,模式按鈕變快變慢按鈕好像沒(méi)作用,可能白天在實(shí)驗(yàn)室沒(méi)效果。而且光好刺眼,加了個(gè)泡沫罩著,好了一點(diǎn)。


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

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

作者: 溫存723    時(shí)間: 2019-6-26 00:04
destiny_xl 發(fā)表于 2019-5-25 15:25
MOS管用的不多,怕焊接錯(cuò)了,就直接飛線搭建了個(gè),可以亮,就馬上照著焊接起來(lái)了。在你基礎(chǔ)上改了下 ...

真漂亮~~   哈哈
作者: 圓點(diǎn)思路    時(shí)間: 2019-7-14 02:04
高手在民間啊。好東西
作者: molo    時(shí)間: 2019-7-30 16:59
用保存調(diào)光的值嗎?這樣就不用每次開(kāi)機(jī)都調(diào)一下。
作者: superIOT    時(shí)間: 2019-7-30 23:47
學(xué)習(xí)了,感謝樓主開(kāi)源精神。
作者: wulingqing    時(shí)間: 2019-7-31 09:01
好東東,向樓主學(xué)習(xí),比較實(shí)用的學(xué)習(xí)
作者: 溫存723    時(shí)間: 2019-8-7 15:10
民盛 發(fā)表于 2018-12-11 17:28
您好 藍(lán)牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。

不需要
作者: tomgay    時(shí)間: 2019-9-7 13:38
ok thankyou
作者: m182892    時(shí)間: 2019-9-7 15:49
謝謝分享,但原理圖只畫(huà)MOS管,應(yīng)該把怎么連接單片機(jī)、LED都要畫(huà)出來(lái),PCB文件是空的,有空最好補(bǔ)齊。
作者: 螞蟻絆大象    時(shí)間: 2019-11-12 13:05

好資料,51黑有你更精彩!!!
作者: 風(fēng)月同天    時(shí)間: 2020-2-12 16:20


好資料,51黑有你更精彩!!!
作者: 13534702358    時(shí)間: 2020-12-17 23:44
再來(lái)一發(fā),很棒!
作者: 啤酒瓶子老大    時(shí)間: 2020-12-18 11:31
高手!這個(gè)現(xiàn)在太實(shí)用了。
作者: qxdqx    時(shí)間: 2020-12-21 20:57
太好啦!51黑有你更精彩!!!
作者: saj123    時(shí)間: 2020-12-23 22:55
好資料,
用52單片機(jī)就好了,程序不會(huì)改
作者: prodragon    時(shí)間: 2021-3-27 09:55
又是一個(gè)學(xué)習(xí)典范




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品夜间视频香蕉 | 日韩一区二区三区在线播放 | 精品婷婷 | 国产高清一区二区三区 | 精品一区二区三区免费视频 | 中文字幕一区二区三区四区五区 | 国产高清在线视频 | 精品国产三级 | 麻豆精品久久 | 成人一区二区三区 | 狠狠干狠狠操 | 国产伦精品一区二区三区精品视频 | 神马影院一区二区三区 | 国产精品一区二区在线播放 | 亚洲久久在线 | 午夜在线免费观看视频 | wwwxx在线观看| www.国产91 | 美女久久视频 | 欧美日韩不卡合集视频 | 波多野结衣中文字幕一区二区三区 | 亚洲超碰在线观看 | av入口 | 伊人久久综合 | 午夜亚洲 | 精品国产99 | 91大片| 国产超碰人人爽人人做人人爱 | 亚洲一区中文 | 国产91丝袜在线播放 | 老头搡老女人毛片视频在线看 | 国产精品视频一区二区三区不卡 | 婷婷免费在线 | 欧美日韩亚洲视频 | 黄网站免费在线观看 | 久草热在线| 一区二区三区四区在线免费观看 | 国产黄色小视频 | 免费视频久久久久 | 国产乱码高清区二区三区在线 | 成人性生交大免费 |