Tư vấn: 0979.466.469 / 0938.128.290

MENU

Dự án: Tự động kiểm soát cường độ ánh sáng đường phố bằng Arduino

Nhận mua hàng nước ngoài

bài viết này mình sẽ giới thiệu về Dự án: Tự động kiểm soát cường độ ánh sáng đường phố bằng Arduino

Dự án: Tự động kiểm soát cường độ ánh sáng đường phố bằng Arduino

Trong dự án này, tôi sẽ chỉ cho bạn cách thiết kế và xây dựng một mạch 

đơn giản nhưng hiệu quả được gọi là Điều khiển cường độ tự động của đèn

đường bằng Arduino.Vì khái niệm của dự án này là tiêu thụ năng lượng, 

sử dụng đèn LED làm Đèn đường sẽ là lựa chọn hiển nhiên.

Mục lục

•Giới thiệu

•Điều khiển cường độ tự động của đèn đường bằng Arduino là gì?

•Khái niệm đằng sau Điều khiển cường độ tự động của đèn đường bằng Arduino

•Sơ đồ mạch

•Thành phần bắt buộc

oThiết kế mạch

•Mã

•Đang làm việc

•Phần kết luận

Giới thiệu

Ngày xưa, đèn đường trên đường được điều khiển bằng tay. Tuy nhiên, 

ngày nay đèn đường được điều khiển tự động hoặc bằng công nghệ tự động hóa mới nổi.

Nhưng người ta có thể nhận thấy rằng không cần thiết phải sử dụng cường độ cao 

vào những giờ cao điểm, đó là khi không có giao thông và thậm chí vào buổi sáng.

Bằng cách giảm cường độ ánh sáng bằng đèn LED, năng lượng có thể được tiết kiệm.

Bài viết này thảo luận về việc thiết kế bộ điều khiển cường độ tự động của đèn

đường sử dụng các bộ phận điện và điện tử đơn giản như đèn LED, bộ vi điều khiển,

hoạt động và mục đích cũng như các ứng dụng của dự án này.

Điều khiển cường độ tự động của đèn đường bằng Arduino là gì?

Tự động điều khiển cường độ đèn đường là một dự án đơn giản trong đó cường độ của

đèn đường được điều khiển tự động dựa trên điều kiện ánh sáng mặt trời. 

Nói chung, đèn đường được bật vào buổi tối và sẽ tiếp tục sáng cho đến sáng.

Điều này có thể dẫn đến việc sử dụng năng lượng không cần thiết vì đèn sẽ 

luôn phát sáng ở cường độ tối đa. Nhưng bằng cách sử dụng Điều khiển 

cường độ tự động của đèn đường bằng dự án Arduino, bạn có thể kiểm soát 

cường độ dựa trên điều kiện ánh sáng xung quanh.

Như một tính năng tiết kiệm điện bổ sung, tôi đã sử dụng đèn LED cho đèn đường.   

Khái niệm đằng sau Điều khiển cường độ tự động của đèn đường bằng Arduino

Trước khi đi vào sơ đồ mạch, các thành phần và mã, tôi muốn nói một chút về 

ý tưởng đằng sau dự án Điều khiển cường độ tự động của đèn đường bằng 

Arduino. Tôi sẽ không so sánh nó với bất kỳ dự án nào khác mà chỉ đi sâu vào khái niệm.

Tôi đã sử dụng kết hợp Mô-đun RTC (DS3231) và LDR để điều khiển đèn đường. 

Sự kết hợp này không phải là một cái gì đó mới mẻ mà là cách nó được thực hiện.

Về cơ bản, có hai chế độ hoạt động của dự án này: Chế độ RTC và Chế độ LDR.

 Ở Chế độ RTC, đèn đường tự động bật dựa trên Thời gian BẬT được đặt trong mã và tắt

 dựa trên Thời gian TẮT.Trong Chế độ LDR, đèn đường có điều khiển cường độ dựa

trên ánh sáng xung quanh gần LDR.

Sơ đồ mạch

Hình ảnh sau đây cho thấy sơ đồ mạch của Điều khiển cường độ tự động của đèn đường 

sử dụng dự án Arduino.

hình vẽ

Thành phần bắt buộc

• Arduino UNO

• Mô-đun RTC DS3231

• LDR

• Màn hình LCD 16 × 2

• Đèn LED

• Chiết áp 10KΩ

• Điện trở 10KΩ

• Nút ấn

• Kết nối dây

• Breadboard

Thiết kế mạch

Đầu tiên kết nối các chân SDA và SCL của DS3231 RTC Module với các chân A4 (SDA) 

và A5 (SCL) của Arduino. Điện trở 10KΩ và LDR được kết nối theo định dạng bộ chia

 điện áp và đầu ra của nó được cấp cho chân A3 (của Arduino).

Các chân dữ liệu của Module LCD 16 × 2 tức là D4 - D7 được kết nối tương ứng 

với các chân 6, 5, 4 và 3 của Arduino. Các chân RS và E được kết nối với các chân 8 và 7.

Dưới đây là đoạn code

# include  < Wire.h >

# include  < LiquidCrystal.h >

# bao gồm  " RTClib.h "

# xác định  BẬT   0

# xác định  TẮT  1

DateTime bây giờ;

 

RTC_DS3231 rtc;

Màn hình LCD LiquidCrystal ( 8 , 7 , 6 , 5 , 4 , 3 ); // (rs, e, d4, d5, d6, d7)

 

const  int buttonPin = 2 ;

const  int led = 11 ;

int nob = A3;

int val = 0 ;

int val1 = 0 ;

int đường dẫn = 1 ;

int a = 1 ;

int beforeState = HIGH;

unsigned  int trước đóPress ;

 int buttonFlag dễ bay hơi ;

int buttonDebounce = 20 ;

 

int on_hour = 1 ;

int on_minute = 1 ;

int on_second = 10 ;

 

int off_hour = 23 ;

int off_minute = 57 ;

int off_second = 10 ;

 

int c_hour = 0 ;

int c_minute = 0 ;

int c_second = 0 ;

 

int onOrOffFlag = ON;

 

void  showDate ( vô hiệu );

void  showTime ( void );

void  showDay ( void );

 

void  loadHandler ( int , int , int , int , int , int ,   int , int , int );

 

typedef  struct  userTime 

{

    int temp_hour;

    int temp_minute;

    int temp_second;

} userTime_t;

unsigned  char  checkLessThanOrEqual (userTime_t, userTime_t);

 

 

void  setup ()

{

  Nối tiếp. bắt đầu ( 9600 );

  màn hình LCD. bắt đầu ( 16 , 2 );

  

  pinMode (buttonPin, INPUT_PULLUP);

  pinMode (led, OUTPUT);

  mountInterrupt ( digitalPinToInterrupt (buttonPin), button_ISR, CHANGE);

  

  if (! rtc. begin ())

  {

    Nối tiếp. println ( " Không thể tìm thấy Mô-đun RTC " );

    trong khi ( 1 );

  }

 

  if (rtc. lostPower ())

  {

    Nối tiếp. println ( " RTC bị mất nguồn, hãy đặt thời gian! " );

    rtc. điều chỉnh ( DateTime ( F (__DATE__), F (__TIME__)));

  }

  rtc. điều chỉnh ( DateTime ( F (__DATE__), F (__TIME__)));

        

}

 

void  loop ()

{

 nếu (đường dẫn)

  {

    if (a == 1 )

    {

       màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "        RTC       " );

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "      CHẾ ĐỘ BẬT     " );

        chậm trễ ( 2000 );

        a = 0 ;

    }

    bây giờ = rtc. ngay ();

    showTime ();

    c_hour = bây giờ. giờ ();

    c_minute = bây giờ. phút ();

    c_second = bây giờ. thứ hai ();

    loadHandler (on_hour, on_minute, on_second, off_hour, off_minute, off_second, c_hour, c_minute, c_second);

    chậm trễ ( 1000 );

  }

 khác

  {

       if (a == 0 )

    {

       màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "        LDR       " );

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "      CHẾ ĐỘ BẬT     " );

        chậm trễ ( 2000 );

        a = 1 ;

    }

       val = analogRead (nob);    

       if (val> 300 && val < 450 )

       {

        màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "        30%       " );

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "    Độ sáng    " );

        analogWrite (dẫn, 400 );

       }

       khác  nếu (val> 450 && val < 550 )

       {

        màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "        60%       " );

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "    Độ sáng    " );

        analogWrite (dẫn, 600 );

       }

       khác  nếu (val> 550 && val < 600 )

       {

        màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "       100%       " ) ;;

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "    Độ sáng    " );

        analogWrite (đã dẫn, 1023 );

       }

       khác  nếu (val < 300 )

       {

        màn hình LCD. setCursor ( 0 , 0 );

        màn hình LCD. print ( "        0%       " );

        màn hình LCD. setCursor ( 0 , 1 );

        màn hình LCD. print ( "    Độ sáng    " );

        analogWrite (dẫn, 0 );

       }

   }

}

   

 

 void  showTime ()

 {

  màn hình LCD. setCursor ( 0 , 0 );

  màn hình LCD. print ( "    Thoi gian: " );

  màn hình LCD. print (ngay. giờ ());

  màn hình LCD. print ( ' : ' );

  màn hình LCD. print (ngay. phút ());

  màn hình LCD. print ( ' : ' );

  màn hình LCD. print (ngay. giây ());

  màn hình LCD. print ( "     " );

 } 

 

 

void  button_ISR ()

{

  buttonFlag = 1 ;

  if (( millis () - beforePress)> buttonDebounce && buttonFlag)

  {

    trước đóPress = millis ();

    if ( digitalRead (buttonPin) == LOW && beforeState == HIGH)

    {

      đường dẫn =! con đường;

      beforeState = LOW;

    }

    

    else  if ( digitalRead (buttonPin) == HIGH && beforeState == LOW)

    {

      beforeState = CAO;

    }

    buttonFlag = 0 ;

  }

Module điện tử 932*50

}

 

unsigned  char  checkLessThanOrEqual (userTime_t a, userTime_t b)

{

    if (a. temp_hour

        trả về  true ;

    khác

    {

        if ((a. temp_hour == b. temp_hour ) && (a. temp_minute

        {

            trả về  true ;

        }

        khác 

        {

            if (a. temp_hour > b. temp_hour )

                trả về  sai ;

            khác 

            {

                if ((a. temp_minute == b. temp_minute ) && (a. temp_second

                {

                    trả về  true ;

                }

                khác 

                {

                    if (a. temp_minute > b. temp_minute )

                        trả về  sai ;

                    khác 

                    {

                        if (a. temp_second == b. temp_second )

                        {

                            trả về  true ;

                        }

                        khác 

                        {

                            trả về  sai ;

                        }

                    }

                }

            }

        }

    }

}

 

void  loadHandler ( int onTimeHr, int onTimeMin, int onTimeSec, int offTimeHr, int offTimeMin, int offTimeSec,   int rtcTimeHr, int rtcTimeMin, int rtcTimeSec)

{

 

    userTime_t in1 = {onTimeHr, onTimeMin, onTimeSec}, in2 = {offTimeHr, offTimeMin, offTimeSec}, rtc_hr = {rtcTimeHr, rtcTimeMin, rtcTimeSec}, a = {}, b = {};

 

    if ( checkLessThanOrEqual (in1, in2))

    {

        onOrOffFlag = BẬT;

        memcpy (& a, & in1, sizeof (userTime_t));

        memcpy (& b, & in2, sizeof (userTime_t));

    }

    khác 

    {

        onOrOffFlag = TẮT;

        memcpy (& a, & in2, sizeof (userTime_t));

        memcpy (& b, & in1, sizeof (userTime_t));

 

    }

   

    if (( checkLessThanOrEqual (a, rtc_hr)) && ( checkLessThanOrEqual (rtc_hr, b)))

    {

        if (onOrOffFlag == ON)

        {

            // Bật tải

            digitalWrite (dẫn, CAO);

            màn hình LCD. setCursor ( 0 , 1 );

            màn hình LCD. print ( " Thời gian tắt: " );

            màn hình LCD. print (off_hour);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (off_minute);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (off_second);

           

            

        }

        khác

        {

            // Tắt tải

             digitalWrite (dẫn đầu, THẤP);

            màn hình LCD. setCursor ( 0 , 1 );

            màn hình LCD. print ( " OnTime: " );

            màn hình LCD. print (on_hour);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (on_minute);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (on_second);

            

        }

    }

    khác 

    {

        if (onOrOffFlag == ON)

        {

            // Tắt tải

            digitalWrite (dẫn đầu, THẤP);

            màn hình LCD. setCursor ( 0 , 1 );

            màn hình LCD. print ( " OnTime: " );

            màn hình LCD. print (on_hour);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (on_minute);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (on_second);

        }

        khác 

        {

            // Bật tải

            digitalWrite (dẫn, CAO);

            màn hình LCD. setCursor ( 0 , 1 );

            màn hình LCD. print ( " Thời gian tắt: " );

            màn hình LCD. print (off_hour);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (off_minute);

            màn hình LCD. print ( ' : ' );

            màn hình LCD. print (off_second);

        }

    }

}

        if ((a. temp_hour == b. temp_hour) && (a. temp_minute

        {

            trả về đúng sự thật;

        }

        khác 

        {

            if (a. temp_hour> b. temp_hour)

                bad return;

            khác 

            {

                if ((a. temp_minute == b. temp_minute) && (a. temp_second

                {

                    trả về đúng sự thật;

                }

                khác 

                {

                    if (a. temp_minute> b. temp_minute)

                        bad return;

                    khác 

                    {

                        if (a. temp_second == b. temp_second)

                        {

                            trả về đúng sự thật;

                        }

                        khác 

                        {

                            bad return;

                        }

                    }

                }

            }

        }

    }

}

 

void loadHandler (int onTimeHr, int onTimeMin, int onTimeSec, int offTimeHr, int offTimeMin, int offTimeSec, int rtcTimeHr, int rtcTimeMin, int rtcTimeSec)

{

 

    userTime_t in1 = {onTimeHr, onTimeMin, onTimeSec}, in2 = {offTimeHr, offTimeMin, offTimeSec}, rtc_hr = {rtcTimeHr, rtcTimeMin, rtcTimeSec}, a = {}, b = {};

 

    if (checkLessThanOrEqual (in1, in2))

    {

        onOrOffFlag = BẬT;

        memcpy (& a, & in1, sizeof (userTime_t));

        memcpy (& b, & in2, sizeof (userTime_t));

    }

    khác 

    {

        onOrOffFlag = TẮT;

        memcpy (& a, & in2, sizeof (userTime_t));

        memcpy (& b, & in1, sizeof (userTime_t));

 

    }

   

    if ((checkLessThanOrEqual (a, rtc_hr)) && (checkLessThanOrEqual (rtc_hr, b)))

    {

        if (onOrOffFlag == ON)

        {

            // Bật tải

            digitalWrite (path, CAO);

            màn hình LCD. setCursor (0, 1);

            màn hình LCD. print ("Time off:");

            màn hình LCD. print (off_hour);

            màn hình LCD. print (':');

            màn hình LCD. print (off_minute);

            màn hình LCD. print (':');

            màn hình LCD. print (off_second);

           

            

        }

        khác

        {

            // Disable download

             digitalWrite (đầu tiên, THẤP);

            màn hình LCD. setCursor (0, 1);

            màn hình LCD. print ("OnTime:");

            màn hình LCD. print (on_hour);

            màn hình LCD. print (':');

            màn hình LCD. print (on_minute);

            màn hình LCD. print (':');

            màn hình LCD. print (on_second);

            

        }

    }

    khác 

    {

        if (onOrOffFlag == ON)

        {

            // Disable download

            digitalWrite (đầu tiên, THẤP);

            màn hình LCD. setCursor (0, 1);

            màn hình LCD. print ("OnTime:");

            màn hình LCD. print (on_hour);

            màn hình LCD. print (':');

            màn hình LCD. print (on_minute);

            màn hình LCD. print (':');

            màn hình LCD. print (on_second);

        }

        khác 

        {

            // Bật tải

            digitalWrite (path, CAO);

            màn hình LCD. setCursor (0, 1);

            màn hình LCD. print ("Time off:");

            màn hình LCD. print (off_hour);

            màn hình LCD. print (':');

            màn hình LCD. print (off_minute);

            màn hình LCD. print (':');

            màn hình LCD. print (off_second);

        }

    }

}

Đang làm việc

Sau khi thực hiện kết nối và tải mã lên Arduino, hãy bật Nguồn cung cấp cho dự án. Ban đầu, Arduino chạy ở Chế độ RTC trong đó có hai thời điểm được đặt trong mã: THỜI GIAN BẬT và THỜI GIAN TẮT.

Arduino so sánh thời gian BẬT với thời gian từ Mô-đun RTC và khi chúng khớp với nhau, đèn LED được BẬT. Sau đó, Arduino đợi đến THỜI GIAN TẮT và khi thời gian từ Mô-đun RTC đạt đến THỜI GIAN TẮT, đèn LED sẽ TẮT.

Phần kết luận

Một dự án đơn giản để tiết kiệm điện được thực hiện bằng cách sử dụng Điều khiển cường độ tự động của đèn đường bằng Arduino. Với những sửa đổi và cải tiến nhỏ, dự án này có thể được áp dụng để sử dụng trong thời gian thực.

 

 

 

 

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
70000 /Cái
/ Cái

Code: M-7006-056 Còn hàng

Lưu xem sau
Sale 0%
253000 /Cái
/ Cái

Code: M-7006-030 Còn hàng

Lưu xem sau
Sale 0%
9000 /Sợi
/ Sợi

Code: M-7006-052 Còn hàng

Lưu xem sau
Sale 0%
50000 /Cái
/ Cái

Code: M-7004-016 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0359 366 469
Bạn cần linh kiện mẫu ? 7-11 ngày