1.功能介紹
智能臺燈可分成自動和手動兩種模式。在自動模式下,臺燈能根據環境光的亮暗與人是否被臺燈所檢測到(人是否在)來自動開啟臺燈。當人被微機檢測到,環境光又達到某個程度的時候(可以設定與調節),臺燈就會開啟。如果環境光沒有達到這個程度,臺燈不會開啟。當人沒有被微機檢測到,無論多暗,臺燈也不會開。 手動模式是為了不習慣使用自動模式的人或是臺燈中的微機出故障等緊急情況時用的。在手動模式下,智能臺燈和普通臺燈是一樣使用的。
主要功能 :
(1)亮度不夠且有人靠近時臺燈自動亮;
(2)靠的太近會提醒坐姿不正(蜂鳴器)
(3)附近無人時臺燈自動熄滅(30秒) 時間可調
(4)根據環境亮度調節等亮度
(5)可手動調節臺燈亮度
(6)設定學習時間
2.硬件設計
(1)總體硬件設計
整體硬件電路是以AT89C52單片機為控制核心,主要由熱釋電紅外傳感器,光敏電阻信號處理電路,提醒電路,燈光控制電路,故障報警電路等組成。單片機可將熱釋電紅外傳感器檢測到的人體輻射紅外信號及光強信號的模擬量轉換成數字量。
1.jpg (83.03 KB, 下載次數: 159)
下載附件
2019-3-24 11:57 上傳
(2)LED驅動電路
2.jpg (42.8 KB, 下載次數: 116)
下載附件
2019-3-24 11:57 上傳
LED驅動電路采用3路串聯、每路4顆的LED燈,使用三極管S8050來控制LED燈的亮滅。在軟件上采用PWM控制方式,以此達到控制LED燈的亮度。
(3)光敏感應電路
3.jpg (9.27 KB, 下載次數: 117)
下載附件
2019-3-24 11:57 上傳
對于臺燈亮度的感應采用了光敏電阻,利用光敏電阻的阻值隨著亮度的改變而改變,電阻值的改變會改變光敏電阻上的電壓值。這時,通過AD轉換器采集電壓,轉換成相應的光強數據傳輸給單片機。
4.jpg (26.88 KB, 下載次數: 119)
下載附件
2019-3-24 11:57 上傳
(4)人體感應電路
5.jpg (15.05 KB, 下載次數: 117)
下載附件
2019-3-24 11:58 上傳
人體感應電路采用了HC-SR501基于紅外線技術的數字傳感器。當傳感器感應到人體時,傳感器IO引腳輸出高電平;當無人體時,傳感器輸出低電平。
(5)紅外接近傳感器
6.jpg (10.76 KB, 下載次數: 102)
下載附件
2019-3-24 11:58 上傳
紅外接近傳感器采用了E18- D80NK數字型傳感器,檢測到目標是低電平輸出,正常狀態是高電平輸出;此傳感器的功能為檢測用戶是否坐于臺燈前。
3.軟件設計
(1)數碼管驅動程序
- #define DUAN P0 //數碼管段位
- sbit W0=P2^7; //數碼管位端
- sbit W1=P2^6;
- sbit W2=P2^5;
- sbit W3=P2^4;
- /**********************************************************************
- * 名稱 : display();
- * 功能 : 數碼管顯示
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void display()
- {
- if(flag_set==0) //正常模式下
- {
- DUAN=tab[min/10]; //送入段碼,秒數高位
- W0=0; //打開位地址
- delay(1); //小延時
- W0=1; //關閉位地址
- DUAN=tab_dian[min%10]; //送入段碼,秒數低位
- W1=0;
- delay(1);
- W1=1;
- DUAN=tab[sec/10]; //送入段碼,分鐘數高位
- W2=0;
- delay(1);
- W2=1;
- DUAN=tab[sec%10]; //送入段碼,分鐘數高位
- W3=0;
- delay(1);
- W3=1;
- }
- else if(flag_set==1) //設置模式下閃爍相應位
- {
- if(ss==1) //閃爍標志 ss=1 正常顯示
- {
- DUAN=~tab[min/10];
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[min%10];
- W1=0;
- delay(1);
- W1=1;
- }
- else //閃爍標志 ss=0 熄滅相應位 達到閃爍效果 ss在定時器里500ms取反一次
- {
- DUAN=~tab[10]; //
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[10];
- W1=0;
- delay(1);
- W1=1;
- }
- DUAN=~tab[sec/10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[sec%10];
- W3=0;
- delay(1);
- W3=1;
- }
- else
- {
- DUAN=~tab[min/10];
- W0=0;
- delay(1);
- W0=1;
- DUAN=~tab_dian[min%10];
- W1=0;
- delay(1);
- W1=1;
- if(ss==1)
- {
- DUAN=~tab[sec/10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[sec%10];
- W3=0;
- delay(1);
- W3=1;
- }
- else
- {
- DUAN=~tab[10];
- W2=0;
- delay(1);
- W2=1;
- DUAN=~tab[10];
- W3=0;
- delay(1);
- W3=1;
- }
- }
- }
復制代碼
(2)按鍵驅動程序
(3)ADC控制程序
- #define Data_ADC0809 P1
- //ADC0809 控制引腳定義
- sbit ST=P3^1;
- sbit EOC=P3^2;
- sbit OE=P3^3;
- extern uchar ADC0809(); //函數聲明
- /**********************************************************************
- * 名稱 : ADC0809();
- * 功能 : ADC0809把模擬量轉化為八位數字量
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- uchar ADC0809()
- {
- uchar temp_=0x00;
- OE=0; //初始化高阻態 轉化初始化 低電平,禁止輸出允許
- ST=0;
- ST=1; //上升沿 清零
- ST=0; //下降沿 開始轉換
- while(EOC==0); //外部中斷 等待AD轉換結束 EOC為1時AD轉換結束跳出
- OE=1; //高電平,輸出允許
- temp_=Data_ADC0809; //讀取轉換的AD值
- OE=0; //低電平,禁止輸出允許
- return temp_; //返回ADC讀取值
- }
復制代碼
(4)LED亮度控制程序
(5)主函數
- /**********************************************************************
- * 名稱 : main();
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void main()
- {
- init(); //調用初始化函數
- flag_auto=1; //初始化手動模式
- rsd=0; //熱釋電引腳置低(有信號時時高電平)
- delay(500); //延時500ms后開機
- while(1) //大循環
- {
- KEY(); //調用按鍵函數
- display(); //調用顯示函數
- }
- }
復制代碼 源碼+AD電路圖資料51hei下載地址:
智能臺燈.rar
(244.17 KB, 下載次數: 529)
2019-3-24 11:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|