Raspberry Pi LED Fade (Điều chỉnh độ sáng)

Hướng dẫn này sẽ chỉ cho bạn cách lập trình Raspberry Pi để điều chỉnh độ sáng LED. Chúng ta sẽ đi qua ba ví dụ và so sánh sự khác biệt giữa chúng:

Phần cứng cần chuẩn bị

1×Raspberry Pi 5
1×LED Kit
1×LED (red)
1×LED Module
1×điện trở 220 ohm
1×breadboard (bo mạch thí nghiệm)
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về LED

Pinout của LED

LED có hai chân:

  • Chân Cathode(-) cần được kết nối với GND (0V)
  • Chân Anode(+) được sử dụng để điều khiển trạng thái của LED
LED sơ đồ chân

Cách Hoạt Động

Khi chân cathode(-) được kết nối với GND:

  • Kết nối GND với chân anode(+) sẽ làm LED TẮT.
  • Kết nối VCC với chân anode(+) sẽ làm LED BẬT.
  • Tạo tín hiệu PWM cho chân anode(+) sẽ điều chỉnh độ sáng của LED theo giá trị PWM. Giá trị này nằm trong khoảng từ 0 đến 255, với giá trị cao hơn làm LED sáng hơn và giá trị thấp hơn làm LED tối hơn.
  • Nếu giá trị PWM là 0, điều này tương đương với GND và LED sẽ TẮT.
  • Nếu giá trị PWM là 255, điều này tương đương với VCC và LED sẽ sáng hoàn toàn.
how LED works

※ Lưu ý:

Đối với hầu hết các LED, phải đặt một điện trở giữa chân anode (+) và VCC. Giá trị của điện trở được xác định bởi thông số kỹ thuật của LED.

Raspberry Pi - điều chỉnh độ sáng LED

Một số chân trên Raspberry Pi có thể được lập trình để tạo ra tín hiệu PWM. Để điều chỉnh độ sáng LED, chúng ta có thể kết nối chân anode (+) của LED với một chân trên Raspberry Pi, cathode (-) với đất, và lập trình Raspberry Pi để tạo PWM trên chân đó.

Sơ đồ đấu dây

Raspberry Pi LED sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Cách Lập Trình

  • Thiết lập đầu ra digital trên chân Raspberry Pi bằng cách sử dụng hàm GPIO.setup().
  • Ví dụ, chân GPIO18:
GPIO.setup(18, GPIO.OUT)
  • Điều chỉnh độ sáng của LED bằng cách tạo tín hiệu PWM sử dụng hàm pwm.ChangeDutyCycle().
pwm = GPIO.PWM(LED_PIN, 1000) pwm.start(0) pwm.ChangeDutyCycle(brightness)

Độ sáng có thể nằm trong khoảng từ 0 đến 100.

Raspberry Pi Code điều chỉnh độ sáng LED

Hướng dẫn từng bước

  • Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích nào khác với Raspberry Pi.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ với PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH bằng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Tạo file script Python led_fade.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-led-fade import RPi.GPIO as GPIO from time import sleep LED_PIN = 18 fadePercent = 5 brightness = 0 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN,GPIO.OUT) pwm = GPIO.PWM(LED_PIN, 1000) pwm.start(0) try: while True: pwm.ChangeDutyCycle(brightness) # change the brightness for next time through the loop: brightness = brightness + fadePercent; # reverse the direction of the fading at the ends of the fade: if brightness <= 0 or brightness >= 100: fadePercent = -fadePercent; # wait for 30 milliseconds to see the dimming effect sleep(0.03); finally: GPIO.cleanup()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 led_fade.py
  • Kiểm tra độ sáng của LED.

Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Giải Thích Code

Hãy xem phần giải thích từng dòng có trong phần comment của source code!

※ Lưu ý:

Ví dụ trên sử dụng hàm time.sleep() để tạo hiệu ứng fade-in và fade-out. Tuy nhiên, hàm time.sleep() làm cho LED fade một cách không mượt mà và chặn các code khác chạy. Trong các phần tiếp theo, chúng ta sẽ học cách fade-in và fade-out mượt mà mà không chặn code khác bằng cách sử dụng hàm millis().

Cách fade in/out LED trong khoảng thời gian nhất định mà không sử dụng time.sleep()

Hướng dẫn từng bước

  • Tạo file script Python led_fade.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-led-fade import RPi.GPIO as GPIO import time LED_PIN = 18 FADE_PERIOD = 3000 FADE_IN_MODE = True FADE_OUT_MODE = False fadeMode = FADE_IN_MODE start_time = 0 brightness = 0 def _map(x, in_min, in_max, out_min, out_max): return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min) GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN,GPIO.OUT) pwm = GPIO.PWM(LED_PIN, 1000) pwm.start(0) start_time = time.time()*1000 try: while True: progress = time.time()*1000 - start_time if fadeMode == FADE_IN_MODE: if progress <= FADE_PERIOD: brightness = _map(progress, 0, FADE_PERIOD, 0, 100) print(brightness) pwm.ChangeDutyCycle(brightness) else: start_time = time.time()*1000 fadeMode = FADE_OUT_MODE progress = 0 if fadeMode == FADE_OUT_MODE: if progress <= FADE_PERIOD: brightness = 100 - _map(progress, 0, FADE_PERIOD, 0, 100) print(brightness) pwm.ChangeDutyCycle(brightness) else: start_time = time.time()*1000 fadeMode = FADE_IN_MODE progress = 0 finally: pwm.stop() GPIO.cleanup()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 led_fade.py
  • Kiểm tra độ sáng của LED.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.