欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 手機藍牙對大功率RGB-LED PWM調色,實現三路256級混色和多種模式 附單片機源碼 [打印本頁]

作者: 溫存723    時間: 2018-8-13 13:09
標題: 手機藍牙對大功率RGB-LED PWM調色,實現三路256級混色和多種模式 附單片機源碼
通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色, 理論幾乎包括了人類視力所能感知的所有顏色。  我們的手機、電腦、電視,等顯示器 ,一個像素就是通過對RGB三個顏色不同占比的控制實現顯示不同顏色。
突發聯想,做個大功率的RGB調光如何?可以做夜燈,做裝飾 ,照明 ,加上手機控制,晚上很少開燈。本制作有所不足,希望各位大佬能進行完善,或者添加新的玩法~

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

先發個演示視頻吧~
http://v.youku.com/v_show/id_XMzc3NzgwNzM2NA==.html

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

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



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

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



我使用的是PWM模塊拆解的MOS管,其中兩個MOS管是并連關系,為了驅動大功率的,但是在這里有點浪費,體積較大。


拆解后將引腳掰直

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

其中PWM端接單片機io口
R1接RGB LED的其中一個顏色,4個LED的正極 R端G端B端口采用并聯方式連接。
需要注意是需要對RGB三個顏色的功率進行匹配,也就是說當PWM為最大255時,保證每一個LED的每一個顏色不會過載。
我用的是下面這一款LED


紅色電壓2.2v
藍綠色電壓 3.3v
電流 350ma (實際100ma就發燙)
LED電阻的適配:
5V電源電壓下   紅:(5-2.2)/0.35  = 8Ω    電阻功率2.8*0.35    = 0.98w(電阻發燒嚴重)
                    藍綠:(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(不發燒)
       藍綠:  不用電阻


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



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


程序中off_all 和on_all需要注意的是并沒有對PWM值進行操作,而是直接關閉了io口的輸出。因為這樣可以徹底關閉LED不至于PWN=0時侯微亮狀態。
其次程序中并沒有對PWM=0進行發送 ,因為不知道為什么,PWM =0 app會接受失敗,所以最低發送了PWM=1,然后讓io口關閉實現LED完全熄滅。

有一個想法:當發送的為模式數據時,APP也能進行面板刷新,但是實際測試中  ,當模式執行時遇到發送數據就會停止當前模式(卡住),不知如何解決~  望支招

實際使用:

使用前先確認藍牙模塊波特率為9600bps ,弱不是,請進入藍牙模塊AT模式進行配置 ,藍牙連接成功后點擊app上的藍牙標志選擇連接 ,提示連接成功后按如上的APP配置即可使用,接下來是主程序部分。




單片機程序源碼如下:
  1. /*********************************************
  2. *                        功能  :RGB調光
  3. *                        單片機:15W404AS
  4. *                        app   :藍牙串口助手
  5. *                        數據格式以及解釋:

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

  17. uchar quit_flag ,liangdu_flag ;  //模式退出標志  亮度設置標志
  18. /*用于返回數據刷新app面板  讀取byte 4  計算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. /*不精準的延時函數*/
  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面板刷新,必須每次對整個數組賦值  不然容易錯亂*/
  35. void now_value()
  36. {
  37.                 REN = 0;                                          //馬上將要發數據到手機 先禁止接收
  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;                                                  //讀取當前的PWM_r大小
  44.                 table1[5]  = (table1[2] + table1[3] + table1[4]) & 0XFF;//計算效驗碼 計算方法為byte2+byte3+byte4  取低位
  45.                 table1[6]  = 0xaa;
  46.                 SendStr(table1);                                                                                                                                        //發送處理完成后的PWM_r數據刷新第一個滑條  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 ;    //串口中斷優先
  78.         while(1)
  79.         {         
  80.                                 if(sign)
  81.                          {
  82.                                                 sign = 0;  
  83.                                                 str_copy(S,T);   //再次復制
  84.                                                 if(S[1] == 0X5A)   //串口中斷中進行了第1位的核對 為了數據正確  再核對一次第2個  
  85.                                                 {
  86.                                                                  switch(S[3])  //判斷是哪一個數據,將對應滑塊數值取出來給各個占空比
  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  ;  //通過設置端口模式,徹底關閉LED
  112. ……………………

  113. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


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



全部資料51hei下載地址:
RGB 藍牙滑塊調光.zip (2.84 MB, 下載次數: 287)



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

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

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


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

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

作者: 溫存723    時間: 2019-6-26 00:04
destiny_xl 發表于 2019-5-25 15:25
MOS管用的不多,怕焊接錯了,就直接飛線搭建了個,可以亮,就馬上照著焊接起來了。在你基礎上改了下 ...

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

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

好資料,51黑有你更精彩!!!
作者: 風月同天    時間: 2020-2-12 16:20


好資料,51黑有你更精彩!!!
作者: 13534702358    時間: 2020-12-17 23:44
再來一發,很棒!
作者: 啤酒瓶子老大    時間: 2020-12-18 11:31
高手!這個現在太實用了。
作者: qxdqx    時間: 2020-12-21 20:57
太好啦!51黑有你更精彩!!!
作者: saj123    時間: 2020-12-23 22:55
好資料,
用52單片機就好了,程序不會改
作者: prodragon    時間: 2021-3-27 09:55
又是一個學習典范




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1