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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13898|回復: 34
收起左側

手機藍牙對大功率RGB-LED PWM調色,實現三路256級混色和多種模式 附單片機源碼

  [復制鏈接]
ID:259648 發表于 2018-8-13 13:09 | 顯示全部樓層 |閱讀模式
通過對紅(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

先發個演示視頻吧~


原理:利用藍牙串口助手發送數據,藍牙模塊接收后,經過單片機處理,處理當前的三路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部分的接法:

MOS管接法

MOS管接法



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

拆解后將引腳掰直
IMG_20180813_130538.jpg IMG_20180813_130607.jpg
背面焊一個引腳出來,貼片變直插 ~~

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

紅色電壓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配置即可使用,接下來是主程序部分。

IMG_20180812_225717.jpg IMG_20180812_225729.jpg IMG_20180812_225749.jpg IMG_20180812_225907.jpg IMG_20180812_225950.jpg IMG_20180812_230059.jpg


單片機程序源碼如下:
  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 均在附件之中 歡迎下載~
最后希望感興趣的朋友們順利制作成功~~

0.png

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

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:305196 發表于 2019-5-25 15:25 | 顯示全部樓層
MOS管用的不多,怕焊接錯了,就直接飛線搭建了個,可以亮,就馬上照著焊接起來了。在你基礎上改了下,手里也沒有3.3V穩壓芯片,就搞了2個二極管,但是藍牙模塊得5V,經過兩個二極管供電不夠,所以藍牙模塊接了一個二極管,RGB彩燈用了2個二極管,靠近RGB彩燈的二極管很燙,但是正面的三個功率電阻不燙了,這叫溫度轉移嗎,還有我覺得二次驗證好難受,得按2下,模式按鈕變快變慢按鈕好像沒作用,可能白天在實驗室沒效果。而且光好刺眼,加了個泡沫罩著,好了一點。
J$O1E8)EOM}BO~ILH8U8JQV.jpg 6_M1)WJ96${7@SN0@BP{@PK.jpg 945M2KZ5$U{O}S4PA{PI4PW.jpg (U@JL77K@MUEW6X~(DQ(@%V.jpg C(F5WGI17ME2MSM3I2SVXC7.jpg )035{}6Z5(N1[(P~{[DQ2EH.jpg

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

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-8-14 04:28 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:328014 發表于 2018-8-14 16:20 | 顯示全部樓層
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機可不可以?
回復

使用道具 舉報

ID:259648 發表于 2018-8-14 16:49 | 顯示全部樓層
51hei團團 發表于 2018-8-14 16:20
謝謝樓主大大分享的好東東,只能用stc15W404AS芯片嗎?用52單片機可不可以?

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

使用道具 舉報

ID:377382 發表于 2018-8-24 14:00 | 顯示全部樓層
謝謝樓主大大分享的好東東
回復

使用道具 舉報

ID:161785 發表于 2018-11-21 16:32 來自手機 | 顯示全部樓層
太好了,正需要。沒有看的下載地址呢。
回復

使用道具 舉報

ID:358930 發表于 2018-11-22 09:41 來自手機 | 顯示全部樓層
admin 發表于 2018-8-14 04:28
好資料,51黑有你更精彩!!!

地址看不了嗎。。。。
回復

使用道具 舉報

ID:65956 發表于 2018-11-27 08:47 | 顯示全部樓層
設置的門檻有點高哦
回復

使用道具 舉報

ID:161785 發表于 2018-12-11 17:28 | 顯示全部樓層
您好 藍牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。
回復

使用道具 舉報

ID:3802 發表于 2019-1-25 14:32 | 顯示全部樓層
太厲害了
回復

使用道具 舉報

ID:321613 發表于 2019-1-30 10:53 | 顯示全部樓層
好精彩哦!!!!!!!!!!!!!!!
回復

使用道具 舉報

ID:500243 發表于 2019-3-28 21:54 | 顯示全部樓層
哇 好厲害呀~!!
回復

使用道具 舉報

ID:86244 發表于 2019-4-18 22:39 | 顯示全部樓層
樓主很用心,很好的代碼.
回復

使用道具 舉報

ID:271166 發表于 2019-4-19 08:13 | 顯示全部樓層
好資料
回復

使用道具 舉報

ID:222956 發表于 2019-4-19 11:53 | 顯示全部樓層
優秀,加個外殼就更加完美了
回復

使用道具 舉報

ID:516864 發表于 2019-4-20 01:33 來自手機 | 顯示全部樓層
樓主能幫做的app嗎
回復

使用道具 舉報

ID:529074 發表于 2019-5-7 16:16 | 顯示全部樓層
可以加個聯系方式么?有些問題想請教
回復

使用道具 舉報

ID:529074 發表于 2019-5-7 16:43 | 顯示全部樓層
樓主能加個好友么,有些細節想問下
回復

使用道具 舉報

ID:406752 發表于 2019-5-16 16:45 | 顯示全部樓層
樓主!求一下電路連接圖!
回復

使用道具 舉報

ID:259648 發表于 2019-6-26 00:04 | 顯示全部樓層
destiny_xl 發表于 2019-5-25 15:25
MOS管用的不多,怕焊接錯了,就直接飛線搭建了個,可以亮,就馬上照著焊接起來了。在你基礎上改了下 ...

真漂亮~~   哈哈
回復

使用道具 舉報

ID:148211 發表于 2019-7-14 02:04 | 顯示全部樓層
高手在民間啊。好東西
回復

使用道具 舉報

ID:137005 發表于 2019-7-30 16:59 | 顯示全部樓層
用保存調光的值嗎?這樣就不用每次開機都調一下。
回復

使用道具 舉報

ID:372939 發表于 2019-7-30 23:47 | 顯示全部樓層
學習了,感謝樓主開源精神。
回復

使用道具 舉報

ID:282431 發表于 2019-7-31 09:01 | 顯示全部樓層
好東東,向樓主學習,比較實用的學習
回復

使用道具 舉報

ID:259648 發表于 2019-8-7 15:10 | 顯示全部樓層
民盛 發表于 2018-12-11 17:28
您好 藍牙模塊用HC-08可以嗎。用改代碼嗎。十分感謝。

不需要
回復

使用道具 舉報

ID:194844 發表于 2019-9-7 13:38 | 顯示全部樓層
ok thankyou
回復

使用道具 舉報

ID:56665 發表于 2019-9-7 15:49 | 顯示全部樓層
謝謝分享,但原理圖只畫MOS管,應該把怎么連接單片機、LED都要畫出來,PCB文件是空的,有空最好補齊。
回復

使用道具 舉報

ID:632514 發表于 2019-11-12 13:05 | 顯示全部樓層

好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:692357 發表于 2020-2-12 16:20 | 顯示全部樓層


好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:517794 發表于 2020-12-17 23:44 | 顯示全部樓層
再來一發,很棒!
回復

使用道具 舉報

ID:230742 發表于 2020-12-18 11:31 | 顯示全部樓層
高手!這個現在太實用了。
回復

使用道具 舉報

ID:140183 發表于 2020-12-21 20:57 | 顯示全部樓層
太好啦!51黑有你更精彩!!!
回復

使用道具 舉報

ID:392670 發表于 2020-12-23 22:55 | 顯示全部樓層
好資料,
用52單片機就好了,程序不會改
回復

使用道具 舉報

ID:896273 發表于 2021-3-27 09:55 | 顯示全部樓層
又是一個學習典范
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久国产综合久久 | 91热爆在线观看 | 精品久久精品 | 欧美视频 亚洲视频 | 国产精品国产三级国产aⅴ入口 | 91精品国产综合久久久久久 | 日韩欧美在线免费 | 白浆在线 | 欧美片网站免费 | 91精品国产乱码久久久久久久 | 无码一区二区三区视频 | 综合激情网 | 亚洲成人久久久 | 成人国内精品久久久久一区 | 韩日一区 | 福利电影在线 | 涩涩导航 | 免费在线观看黄网站 | a级在线免费 | 九九av | 日韩手机在线看片 | 亚洲高清久久 | 欧美一级淫片007 | 成人午夜视频在线观看 | 国产一区久久 | 在线免费看黄 | 亚洲夜夜爽 | 国产亚洲一区二区在线观看 | 亚洲一区二区三区在线播放 | 精品综合 | 久久机热 | a级片在线观看 | 国产女人与拘做视频免费 | 免费一区二区在线观看 | 中文字幕电影在线观看 | 蜜臀91视频 | 日本电影一区二区 | 欧美日韩久 | 综合久久99 | 精品无码三级在线观看视频 | 精品国产欧美一区二区三区不卡 |