Giao tiếp led 7 đoạn với Raspberry Pi

0
5453
Giao tiếp Led 7 đoạn với Raspberry Pi

Trong bài viết này, dientuviet sẽ hướng dẫn các bạn biết cách giao tiếp giữa led 7 đoạn với Raspberry Pi. Led 7 đoạn là một loại linh kiện giá rẻ được dùng để hiển thị cho các ứng dụng. Bạn có thể kết hợp một vài led 7 đoạn lại với nhau để hiển thị nhiệt độ, giá trị bộ đếm, v.v. Trong hướng dẫn này, chúng ta sẽ kết nối led 7 đoạn với các chân GPIO của Raspberry Pi. Sau đó, chúng ta sẽ viết một chương trình bằng ngôn ngữ Python để hiển thị  các số thập phân từ 0 đến 9 trên led 7 đoạn.

Đọc thêm bài viết: Giao tiếp led 7 đoạn với Arduino

Giới thiệu Led 7 đoạn

Led 7 đoạn (7-segment Display) được thiết kế để hiển thị các chữ số và một số ký tự. Led 7 đoạn bao gồm 7 led đơn (mỗi đoạn là 1 led đơn) được xếp lại với nhau thành hình chữ nhật như hình minh họa bên dưới. Khi được điều khiển để chiếu sáng thì sẽ hiển thị chữ số của hệ thập phân hoặc thập lục phân. Đôi khi Led số 8 được sử dụng để hiển thị dấu chấm thập phân (dp – decimal point). Khi có nhiều Led 7 đoạn được nối với nhau thì có thể hiển thị được các số lớn hơn 2 chữ số. 

Ký hiệu và hình dạng của led 7 đoạn

Led 7 đoạn có nhiều loại và kích thước khác nhau. Về cơ bản có hai loại led 7 đoạn: Cathode chung và Anode chung. Cấu trúc bên trong của cả hai loại gần giống nhau. Điểm khác nhau là cách kết nối giữa các cực của đèn Led đơn với chân chung.

  • Led 7 đoạn loại Anode chung (CA – Common Anode): Đối với led 7 đoạn loại Anode chung thì tất cả các cực Anode của tất cả các đèn Led đơn được nối chung lại với nhau và nối với mức logic “1” hoặc nối với nguồn VCC. Các chân cathode còn lại sẽ được nối với tín hiệu logic mức thấp (Low) hay mức logic 0 thông qua 1 điện trở giới hạn dòng điện để có thể hiển thị số hoặc ký tự như mong muốn. 

Led 7 đoạn loại anode chung

  • Led 7 đoạn loại Cathode chung (CC – Common Cathode): Đối với led 7 đoạn loại Cathode chung thì tất cả các cực Cathode của các Led đơn sẽ được nối chung lại với nhau và nối với mức logic “0”, các đoạn Led đơn sẽ sáng bằng cách áp đưa vào các cực anode một mức logic “1” hoặc mức thấp cao (High) thông qua một điện trở hạn dòng. 

Tùy thuộc vào chữ số thập phân được hiển thị mà Led đơn nào sẽ được điều khiển để chiếu sáng. Ví dụ, để hiển thị số 4, chúng ta sẽ cần làm cho các đoạn Led đoạn b, c, f và g tương ứng sáng lên. Do đó, các chữ số khác nhau từ 0 đến 9 có thể được hiển thị bằng cách sử dụng led 7 đoạn như hình minh họa dưới đây.

Số thập phân hiện thị trên led 7 đoạn

Linh kiện cần thiết

STT Tên linh kiện Số lượng
1 Raspberry Pi 3 Model B 1
2 Led 7 đoạn loại cathode chung 1
3 Điện trở 1 kΩ 1
4 Breadboard 1
5 Dây cắm breadboard  

Sơ đồ mạch

Sơ đồ mạch giao tiếp led 7 đoạn với Raspberry Pi

Các kết nối được thực hiện để giao tiếp led 7 đoạn với Raspberry Pi, được đưa ra trong bảng bên dưới. Tôi đã sử dụng 7 đoạn loại cathode chung trong bày viết này.

Led 7 đoạn (cathode chung) Raspberry Pi
a GPIO15
b GPIO02
c GPIO21
d GPIO20
e GPIO16
f GPIO17
g GPIO27
GND GND

Chương trình

# Đính kèm thư viện RPi.GPIO
import RPi.GPIO as GPIO
# Gọi hàm time để tạo thời gian trễ 
import time


GPIO.setwarnings(False)
GPIO.setmode (GPIO.BOARD)

# Khởi tạo các chân GPIO là đầu ra

GPIO.setup(10,GPIO.OUT)
GPIO.setup(3,GPIO.OUT)
GPIO.setup(40,GPIO.OUT)
GPIO.setup(38,GPIO.OUT)
GPIO.setup(36,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)


digitclr=[0,0,0,0,0,0,0]
digit0=[1,1,1,1,1,1,0]
digit1=[0,1,1,0,0,0,0]
digit2=[1,1,0,1,1,0,1]
digit3=[1,1,1,1,0,0,1]
digit4=[0,1,1,0,0,1,1]
digit5=[1,0,1,1,0,1,1]
digit6=[1,0,1,1,1,1,1]
digit7=[1,1,1,0,0,0,0]
digit8=[1,1,1,1,1,1,1]
digit9=[1,1,1,0,0,1,1]

gpin=[10,3,40,38,36,11,13]

# Vòng lặp xóa và sau đó ghi để hiển thị

def digdisp(digit):
for x in range (0,7):
GPIO.output(gpin[x], digitclr[x])
for x in range (0,7):
GPIO.output(gpin[x], digit[x])

# Vòng lặp để hiển thị các số thập phân từ 0 đến 9

while True:
digdisp(digit0)
time.sleep(1)
digdisp(digit1)
time.sleep(1)
digdisp(digit2)
time.sleep(1)
digdisp(digit3)
time.sleep(1)
digdisp(digit4)
time.sleep(1)
digdisp(digit5)
time.sleep(1)
digdisp(digit6)
time.sleep(1)
digdisp(digit7)
time.sleep(1)
digdisp(digit8)
time.sleep(1)
digdisp(digit9)
time.sleep(1)

GPIO.cleanup()

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây