Tìm kiếm mã

Hướng dẫn ESP32 10/55 - Bộ đếm số sử dụng Màn hình 7 đoạn 74HC595 - Bộ học IoT ESP32

Hướng dẫn ESP32 10/55 - Bộ đếm số sử dụng Màn hình 7 đoạn 74HC595 - Bộ học IoT ESP32

Trong hướng dẫn này, chúng ta sẽ tạo một bộ đếm kỹ thuật số sử dụng màn hình bảy đoạn được điều khiển bởi vi điều khiển ESP32. Bộ đếm sẽ tăng từ 0 đến 9 rồi giảm trở lại 0, cung cấp hình ảnh trực quan rõ ràng về quá trình đếm. Chúng ta cũng sẽ khám phá cách bật từng đoạn riêng lẻ và hiển thị chữ cái trên màn hình bảy đoạn.

ESP32_Animte7Segment-segments

Dự án này sử dụng thanh ghi dịch 74HC595 để điều khiển màn hình, cho phép chúng ta quản lý các đoạn một cách hiệu quả mà không cần sử dụng quá nhiều chân GPIO trên ESP32. Bằng cách gửi các giá trị nhị phân đến thanh ghi dịch, chúng ta có thể làm sáng các đoạn tương ứng để biểu diễn số và chữ cái. Để hiểu sâu hơn về quy trình, bạn có thể tham khảo video (trong video tại 03:15).

ESP32_Animte7Segment-letters

Phần cứng được giải thích

Các thành phần chính của dự án này bao gồm vi điều khiển ESP32, thanh ghi dịch 74HC595 và màn hình bảy đoạn. ESP32 là một vi điều khiển mạnh mẽ với khả năng Wi-Fi và Bluetooth tích hợp, phù hợp cho các dự án IoT. 74HC595 là một thanh ghi dịch cho phép chúng ta điều khiển nhiều đầu ra chỉ bằng một vài chân đầu vào. Nó hoạt động bằng cách nhận dữ liệu nối tiếp và chuyển đổi thành đầu ra song song, hoàn hảo để điều khiển màn hình bảy đoạn.

Màn hình bảy đoạn bao gồm bảy đèn LED riêng lẻ được sắp xếp theo hình số tám. Mỗi đoạn có thể được bật hoặc tắt bằng cách gửi giá trị nhị phân thích hợp đến thanh ghi dịch. Ví dụ, để hiển thị số 0, tất cả các đoạn ngoại trừ đoạn giữa (G) cần được sáng.

ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-1

Chi tiết bảng dữ liệu

Nhà sản xuất Texas Instruments
Số bộ phận 74HC595
Điện áp Logic/IO 2 V đến 6 V
Điện áp cung cấp 2 V đến 6 V
Dòng điện đầu ra (mỗi kênh) 6 mA
Dòng điện đỉnh (mỗi kênh) 35 mA
Hướng dẫn tần số PWM Lên đến 1 kHz
Ngưỡng logic đầu vào 0,3 VCC đến 0,7 VCC
Sụt áp / RDS(on) / bão hòa 0,2 V tối đa
Giới hạn nhiệt 125 °C
Đóng gói DIP-16
Ghi chú / biến thể Có sẵn trong nhiều loại đóng gói

 

  • Đảm bảo nguồn điện áp phù hợp (2 V đến 6 V).
  • Giới hạn dòng điện đầu ra để tránh quá nhiệt.
  • Sử dụng điện trở riêng cho mỗi đoạn để có độ sáng tối ưu.
  • Cẩn thận với việc nối dây để tránh đoản mạch và kết nối sai.
  • Tuân thủ cẩn thận sơ đồ chân để tránh cấu hình sai.

Hướng dẫn nối dây

ESP32-10-seven-segment-wiring

Bắt đầu bằng cách thiết lập bảng mạch của bạn. Kết nối thanh nối đất (đường màu xanh) và thanh nguồn (đường màu đỏ). Đất nên kết nối với đường màu xanh ở một bên của bảng mạch, trong khi nguồn nên kết nối với đường màu đỏ ở phía đối diện. Sử dụng dây màu đen để kết nối đất của ESP32 với thanh nối đất và dây màu đỏ để kết nối chân 3.3V của ESP32 với thanh nguồn.

Tiếp theo, cắm thanh ghi dịch 74HC595 vào bảng mạch, đảm bảo rãnh được định hướng chính xác. Kết nối chân 11 (DS) với chân 25 trên ESP32, chân 12 (SH_CP) với chân 26 và chân 14 (ST_CP) với chân 27. Kết nối đất (chân 8) của thanh ghi dịch với thanh nối đất và chân 10 (MR) với thanh nguồn để kích hoạt.

Đối với màn hình bảy đoạn, kết nối các chân tương ứng với các đoạn (a-g) với các chân đầu ra của thanh ghi dịch. Sử dụng điện trở (220 ohm) nối tiếp cho mỗi đoạn để giới hạn dòng điện. Đảm bảo bạn có kết nối đúng cho chân chung, có thể là cực dương chung hoặc cực âm chung tùy thuộc vào loại màn hình của bạn.

Ví dụ mã & hướng dẫn chi tiết

Trong hàm setup, chúng ta bắt đầu bằng cách định nghĩa các chân kết nối với thanh ghi dịch là đầu ra. Điều này đảm bảo rằng ESP32 của chúng ta có thể điều khiển dữ liệu được gửi đến màn hình.

void setup ()
{
  //đặt các chân là đầu ra
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

Ở đây, chúng ta định nghĩa STcp, SHcpDS là các chân kết nối với ST_CP, SH_CP và DS của thanh ghi dịch. Việc đặt các chân này là đầu ra cho phép chúng ta điều khiển thanh ghi dịch.

Vòng lặp chính của chương trình đếm từ 0 đến 9, gửi các giá trị tương ứng đến màn hình bằng hàm shiftOut.

for(int num = 0; num <10; num++)
{
    digitalWrite(STcp,LOW); // kéo ST_CP xuống mức thấp và giữ thấp trong suốt thời gian truyền
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); // kéo ST_CP lên mức cao để lưu dữ liệu
    delay(1000);
}

Vòng lặp này tăng biến num, gửi giá trị tương ứng từ datArray đến màn hình mỗi giây. Hàm shiftOut truyền dữ liệu đến thanh ghi dịch, sau đó thanh ghi này sẽ làm sáng các đoạn tương ứng.

Trình diễn / Điều mong đợi

Sau khi hoàn tất việc nối dây và nạp mã, bạn sẽ thấy màn hình bảy đoạn đếm từ 0 đến 9, tạm dừng một lát trước khi đếm ngược về 0. Mỗi số sẽ được hiển thị trong một giây. Nếu muốn tăng tốc độ đếm, bạn có thể điều chỉnh độ trễ trong vòng lặp (trong video tại 15:30).

Khi điều khiển từng đoạn riêng lẻ, hãy nhớ gửi các giá trị nhị phân chính xác để hiển thị chữ cái hoặc các đoạn cụ thể. Nếu màn hình hiển thị mờ, hãy cân nhắc thêm điện trở riêng cho từng đoạn để đảm bảo độ sáng đồng đều trên toàn màn hình.

Mốc thời gian trong video

  • 00:00 Bắt đầu
  • 1:53 Giới thiệu về màn hình bảy đoạn
  • 4:38 Giải thích cách nối dây
  • 13:15 Mã Arduino-1
  • 17:01 Chọn cổng COM và bo mạch ESP32
  • 18:43 Trình diễn-1
  • 20:13 Hiển thị chỉ một chữ số
  • 21:38 Bộ đếm lên và xuống
  • 23:07 Bật/tắt từng đoạn
  • 24:53 Hiển thị A, B, C, D, E và F

Hình ảnh

ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
ESP32-10-seven-segment-wiring
809-ESP32 Tutorial 10/55 - Arduino code for 2.5 7 segment
Ngôn ngữ: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.