Tự làm mạch led trái tim

Bài viết này tôi sẽ giới thiệu cách làm một mạch đèn led trái tim kết hợp Arduino với IC HC595, bạn có thể dùng nó để tỏ tình, làm quà tặng bạn gái rất ý nghĩa và lãng mạn. Trước khi bắt đầu bạn cần tìm hiểu các bài viết sau đây:

  1. Điều khiển 8 đèn LED sáng theo ý muốn của bạn, dễ hay khó ?
  2. Tổng quan về cách làm mạch in bằng phương pháp ủi thủ công

Nếu bạn đã nắm rõ cách sử dụng IC HC595 và phương pháp làm mạch in thủ công thì chúng ta hãy bắt đầu ngay thôi:

Bạn cần chuẩn bị những thứ sau:

Sơ đồ nguyên lý

 

Sơ đồ mạch in bạn có thể download tại đây

Chú ý sơ đồ nối chân linh kiện theo hình sau:

 

Phần tiếp theo không thể thiếu được, đó là lập trình điều khiển led:

// Khai báo các chân sẽ sử dụng để giao tiếp IC HC595
int latchPin = 10;
int clockPin = 12;
int dataPin = 11;

// Khai báo mảng dùng điều khiển IC
byte ledStatus[3]= {};
byte SangHet=0b11111111;
byte TatHet=0b00000000;

// Khai báo các kiểu chạy
byte Chay1[9]= {0b00000000,0b10000000,0b11000000,0b11100000,0b11110000,0b11111000,0b11111100,0b11111110,0b11111111};
byte Chay2[9]= {0b11111111,0b01111111,0b00111111,0b00011111,0b00001111,0b00000111,0b00000011,0b00000001,0b00000000};

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

// Hàm shiftOut ra IC 595
// Ở đây bạn hoàn toàn có thể sử dụng vòng lặp cho code ngắn gọn và chuyên nghiệp hơn
// Nhưng tôi thích làm thế này nhìn cho dễ hiểu
void shiftOutHC595(int dataPin, int clockPin, byte ledStatus[]) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin,clockPin,MSBFIRST,ledStatus[0]);
  shiftOut(dataPin,clockPin,MSBFIRST,ledStatus[1]);
  shiftOut(dataPin,clockPin,MSBFIRST,ledStatus[2]);
  digitalWrite(latchPin, HIGH);
}

// Hàm chạy led kiểu 1
void Kieu1(int _delay)
{

   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=Chay1[i];
      ledStatus[1]=TatHet;
      ledStatus[2]=TatHet;
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }

   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=SangHet;
      ledStatus[1]=Chay1[i];
      ledStatus[2]=TatHet;
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }

   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=SangHet;
      ledStatus[1]=SangHet;
      ledStatus[2]=Chay1[i];
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }
}

// Hàm chạy led kiểu 1
void Kieu2(int _delay)
{
   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=Chay2[i];
      ledStatus[1]=SangHet;
      ledStatus[2]=SangHet;
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }

   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=TatHet;
      ledStatus[1]=Chay2[i];
      ledStatus[2]=SangHet;
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }

   for (int i = 0;i<=8;i++)
   {
      ledStatus[0]=TatHet;
      ledStatus[1]=TatHet;
      ledStatus[2]=Chay2[i];
      shiftOutHC595(dataPin,clockPin,ledStatus);
      delay(_delay);
   }

}

// Hàm chạy led kiểu 3
void Kieu3(int _delay, int SoLan)
{
for (int i = 0;i<=SoLan;i++) {
   ledStatus[0]=SangHet;
   ledStatus[1]=SangHet;
   ledStatus[2]=SangHet;
   shiftOutHC595(dataPin,clockPin,ledStatus);
   delay(_delay);
   ledStatus[0]=TatHet;
   ledStatus[1]=TatHet;
   ledStatus[2]=TatHet;
   shiftOutHC595(dataPin,clockPin,ledStatus);
   delay(_delay);
}
  
}

void loop() { 
// Gọi hàm chạy kiểu 1 thời gian delay 50
Kieu1(50);
// Gọi hàm chạy kiểu 2 thời gian delay 50
Kieu2(50);
// Gọi hàm chạy kiểu 3 thời gian delay 500 và vòng lặp chạy 5 lần
Kieu3(500,5);
}

Xong rồi, sau khi hoàn thành mạch in, hàn linh kiện hãy upload code, kết nối mạch với Arduino và chạy thôi, bạn hãy tự sáng tạo các kiểu chạy led khác nhau và cùng chia sẻ với mọi người nhé. Nếu bạn có ý định dùng mạch trái tim này để tỏ tình, tặng bạn gái thì hãy dùng Arduino Mini Pro hoặc Arduino Nano cho rẻ :D hay muốn tiết kiệm hơn bạn có thể dùng Attiny85  và 1 số con vi điều khiển AVR khác tương thích với Arduino. Cách sử dụng Attiny85  tương tự Attiny13, bạn có thể tìm hiểu các bài viết liên quan đến Attiny13 tại đây:

 

Cuối cùng là video test sản phẩm:

lên
4 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Attiny13 học lệnh từ remote, điều khiển on/off 3 kênh

Có bao giờ bạn có tự hỏi như mình: liệu có thể làm một thiết bị remote từ xa sử dụng điều khiển TV hay không? Với bài viết Infrared remote control (điều khiển bằng hồng ngoại) với Arduino của bạn NTP_PRO, mình đã làm được điều đó. Nhưng thực sự Arduino UNO quá đắt để làm được việc này! Vì vậy, mình dùng một dòng chip khác là ATtiny13. Và hôm nay, mình sẽ hướng dẫn các bạn làm nên mạch này!

lên
7 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Điều khiển Arduino thông qua Bluetooth bằng điện thoại Android

Kết nối Arduino với các thiết bị, module điện tử khác là 1 việc tương đối dễ dàng, hôm nay tôi sẽ giới thiệu với các bạn cách kết nối Arduino với module Bluetooth và điều khiển nó thông qua điện thoại Android. Các bạn có thể ứng dụng để điều khiển các thiết bị điện trong nhà như bật tắt đèn, quạt, bật tắt bình nóng lạnh, ... hoặc tự làm một chiếc ô tô điều khiển từ xa bằng Bluetooth ... và ...

lên
17 thành viên đã đánh giá bài viết này hữu ích.