BÀI 11: Điều Khiển 8 Đèn LED Sáng Theo Yêu Cầu Của Mình Bằng Arduino.

Bởi nguyenthanhphi (09/03/2017) 0 Bình luận

Trong bài viết này, chúng ta sẽ học cách điều khiển 8 đèn LED và chúng ta sẽ hiểu được cách làm thế nào để điều khiển nhiều led bằng cách sử dụng các chân digital, hoặc sử dụng IC HC595!

Phần cứng cần chuẩn bị cho việc điều khiển 8 đèn LED sáng theo yêu cầu.

+ Arduino Uno.

+ 8 điện trở 560 Ohm (hoặc 220 Ohm hoặc 1kOhm).

+ Breadboard.

+ Dây cắm breadboard.

+ 8 đèn LED siêu sáng.

1. Ta điều kiển 8 led bằng 8 chân digital của arduino.

Ta tiến hành lắp mạch:

điều khiển 8 led bằng arduino

Ta nối các chân từ chân số 2 đến chân số 9 lần lượt cho 8 led

Và được lắp trên bộ tự học arduino.

điều khiển 8 led đơn bằng arduino

Hình trên là bộ tự học arduino cơ bản

Sau đây là đoạn code lập trình, các bạn chỉ cần copy vào dán vào Arduino IDE thôi.

byte ledPin[] = {2,3,4,5,6,7,8,9}; // Mảng lưu vị trí các chân Digital mà các đèn LED sử dụng theo thứ tự từ 1->8. Bạn có thể thêm các LED bằng cách thêm các chân digital vào mảng này

byte pinCount; // Khai báo biến pinCount dùng cho việc lưu tổng số chân LED

void setup() {

   pinCount = sizeof(ledPin);  //Xem thêm thông tin về hàm sizeof 

  for (int i=0;i<pinCount;i++) {

  pinMode(ledPin[i],OUTPUT);  //Các chân LED là OUTPUT

  digitalWrite(ledPin[i],LOW); //Mặc định các đèn LED sẽ tắt

                                           }

}

void loop() {

  /*

    Bật tuần tự các đèn LED

  */

  for (int i=0; i < pinCount; i++) {

    digitalWrite(ledPin[i],HIGH); //Bật đèn

    delay(500); // Dừng để các đèn LED sáng dần

                                                 }

  /*

    Tắt tuần tự các đèn LED

  */

  for (int i = 0;i < pinCount; i += 1) {

    digitalWrite(ledPin[i],LOW); // Tắt đèn

    delay(500); // Dừng để các đèn LED tắt dần

                                                    }

                      }

 

Nếu các bạn chưa biết cách nạp chương trình thì hãy xem bài viết này.

2. Điều khiển 8 LED với 1 IC 595 và arduino uno r3.

Datasheet của IC hc595:

datasheet của ic 595

Datasheet IC hc595

Trước hết chúng ta cần bật IC hc595 lên. Bạn hãy nối mạch như sau:

+ GND (pin 8) nối đến cực âm

+ Vcc (pin 16) nối đến chân 5V

+ OE (pin 13) nối đến cực âm

+ MR (pin 10) nối đến chân 5V

mở ic HC595

Cấp nguồn cho IC HC595 bằng arduino

Tiếp theo, chúng ta sẽ nối Arduino với IC HC595.

+ DS (pin 14)đến Arduino DigitalPin 11

+ SH_CP (pin 11)đến Arduino DigitalPin 12

+ ST_CP (pin 12)đến ArduinoDigitalPin 8.

Sau đó, bạn sử dụng 8 đèn LED của chúng ta đã mắc ban đầu và mắc theo như sơ đồ dưới đây.

arduino uno r3 và ic hc595 điều khiển 8 led

Sơ đồ đấu nối Arduino, IC HC595 và 8 led.

Và việc đấu nối dây trong bộ tự học sẽ dễ dàng hơn.

bộ tự học arduino uno và ic hc595

Để điều khiển được LED qua IC HC 595, chúng ta phải làm quen với một kỹ thuật, được gọi là shiftOut. Bạn chỉ cần hiểu đơn giản, shiftOut là việc gửi tín hiệu cho 1 IC có hỗ trợ shiftOut (ví dụ HC 595 này), cứ mỗi lần gửi nó gửi 1 byte, mỗi 1 bit (có tổng cộng 8 bit trong 1 byte) sẽ quản lý giá trị điện tại chân tín hiệu của HC 595 (các chân có tên là Q0-Q7).

Còn IC 595 sẽ nhận lệnh shiftOut của Arduino và sẽ quản lý 8 chân tín hiệu của nó (các chân có tên Q0-Q7) bằng 1 byte ⇔ 8 bit (từ bit 0 đến bit 7). Nếu tại bit 0 có giá trị là 1 ⇒ Q0 được nối với nguồn 5V, nếu bit 0 có giá trị là 0 thì Q0 sẽ được nối tới cực âm, tương tự với các 7 bit còn lại.

Code chương trình điều khiển 8 đèn led bằng arduino và IC HC595.

/*

shiftOut với 8 LED bằng 1 IC HC595

*/

//chân ST_CP của 74HC595

int latchPin = 8;

//chân SH_CP của 74HC595

int clockPin = 12;

//Chân DS của 74HC595

int dataPin = 11;

//Trạng thái của LED, hay chính là byte mà ta sẽ gửi qua shiftOut

byte ledStatus;

void setup() {

  //Bạn BUỘC PHẢI pinMode các chân này là OUTPUT

  pinMode(latchPin, OUTPUT);

  pinMode(clockPin, OUTPUT);

  pinMode(dataPin, OUTPUT);

}

void loop() {

  /*

    Trong tin học, ngoài các phép +, -, *, / hay % mà bạn đã biết trên hệ cơ số 10.

    Thì còn có nhiều phép tính khác nữa. Và một trong số đó là Bit Math (toán bit) trên hệ cơ số 2.

    Để hiểu những gì tôi viết tiếp theo sau, bạn cần có kiến thức về Bit Math.

          */

  //Sáng tuần tự

  ledStatus = 0;//mặc định là không có đèn nào sáng hết (0 = 0b00000000)

  for (int i = 0; i < 8; i++) {

    ledStatus = (ledStatus << 1) | 1;//Đẩy toàn bộ các bit qua trái 1 bit và cộng bit có giá trị là 1 ở bit 0 

       /**

      Bắt buộc phải có để shiftOut

    **/

        digitalWrite(latchPin, LOW); //các đèn LED sẽ không sáng khi bạn digital LOW

    //ShiftOut ra IC

    shiftOut(dataPin, clockPin, MSBFIRST, ledStatus); 

    digitalWrite(latchPin, HIGH);//các đèn LED sẽ sáng với trạng thái vừa được cập nhập

    /**

      Kết thúc bắt buộc phải có

    **/

    delay(500); // Dừng chương trình khoảng 500 mili giây để thấy các hiệu ứng của đèn LED

  }

  //Tắt tuần tự

  for (int i = 0;i<8;i++) {

    ledStatus <<= 1; //Đẩy tất cả các bit qua bên trái 1 bit

    digitalWrite(latchPin, LOW);

    shiftOut(dataPin, clockPin, MSBFIRST, ledStatus); 

    digitalWrite(latchPin, HIGH);

    delay(500);

  }

}

 

Đóng góp ý kiến