Raspberry Pi Bàn Phím Ma Trận Servo Motor

Hướng dẫn này sẽ chỉ bạn cách sử dụng Raspberry Pi và bàn phím ma trận để điều khiển servo motor. Chi tiết:

Code cho Raspberry Pi cũng cho phép sử dụng nhiều mật khẩu khác nhau.

Linh Kiện Cần Thiết

1×Raspberry Pi 5
1×Bàn Phím Ma Trận
1×động cơ servo
1×Adapter Nguồn 5V
1×Đầu Cắm Nguồn DC
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ề Bàn Phím Ma Trận và Servo Motor

Nếu bạn chưa quen với bàn phím ma trận và servo motor (bao gồm sơ đồ chân, chức năng, lập trình, v.v.), các hướng dẫn sau có thể giúp bạn:

Sơ Đồ Đấu Nối

sơ đồ đấu nối Raspberry Pi bàn phím ma trận động cơ servo

This image is created using Fritzing. Click to enlarge image

Xin lưu ý rằng sơ đồ đấu nối hiển thị ở trên chỉ phù hợp cho servo motor có mô-men xoắn thấp. Trong trường hợp motor rung thay vì xoay, bạn phải sử dụng nguồn điện bên ngoài để cung cấp thêm công suất cho servo motor. Sơ đồ bên dưới minh họa sơ đồ đấu nối với nguồn điện bên ngoài cho servo motor.

TO BE ADD IMAGE

Xin đừng quên kết nối GND của nguồn điện bên ngoài với GND của Raspberry Pi.

Code Raspberry Pi - xoay Servo Motor nếu mật khẩu đúng

Nếu mật khẩu đúng, servo motor sẽ được đặt về góc 90° trong thời gian 5 giây. Sau khi hết 5 giây, servo motor sẽ được đặt lại về góc 0°.

Các Bước Thực Hiện

  • Đảm bảo bạn đã cài đặt Raspbian hoặc hệ điều hành khác tương thích với Raspberry Pi trên Pi của mình.
  • Đả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.
  • Đả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 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 keypad_servo.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-keypad-servo-motor import RPi.GPIO as GPIO import time # Define keypad layout KEYPAD = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#'] ] # Define GPIO pins for rows, columns, and servo motor ROW_PINS = [17, 27, 22, 24] COL_PINS = [25, 8, 7] SERVO_PIN = 16 # Adjust this to the actual GPIO pin connected to the servo motor # Passwords to unlock PASSWORDS = [ [1, 2, 3, 4], # 1st password 1234 [5, 6, 7, 8], # 2nd password 5678 [9, 0, 1, 2] # 3rd password 9012 ] # Initialize GPIO GPIO.setmode(GPIO.BCM) # Set up row pins as inputs with pull-up resistors for row_pin in ROW_PINS: GPIO.setup(row_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set up column pins as outputs for col_pin in COL_PINS: GPIO.setup(col_pin, GPIO.OUT) GPIO.output(col_pin, GPIO.HIGH) # Set up servo pin as an output GPIO.setup(SERVO_PIN, GPIO.OUT) servo = GPIO.PWM(SERVO_PIN, 50) # 50 Hz frequency # Function to move servo to a specified angle def move_servo(angle): duty_cycle = (angle / 18) + 2.5 servo.ChangeDutyCycle(duty_cycle) time.sleep(1) # Adjust this sleep duration based on servo response time def get_key(): key = None # Scan each column for col_num, col_pin in enumerate(COL_PINS): GPIO.output(col_pin, GPIO.LOW) # Check each row for row_num, row_pin in enumerate(ROW_PINS): if GPIO.input(row_pin) == GPIO.LOW: key = KEYPAD[row_num][col_num] # Wait for key release while GPIO.input(row_pin) == GPIO.LOW: time.sleep(0.05) GPIO.output(col_pin, GPIO.HIGH) return key def check_password(input_password): return input_password in PASSWORDS entered_keys = [] try: while True: pressed_key = get_key() if pressed_key is not None: print(f"Pressed: {pressed_key}") if pressed_key == '*': entered_keys = [] # reset the input password elif pressed_key == '#': if check_password(entered_keys): print("Password correct! Access granted.") move_servo(90) time.sleep(20) # Wait for 20 seconds move_servo(0) else: print("Incorrect password. Try again.") entered_keys = [] # reset the input password else: entered_keys.append(pressed_key) time.sleep(0.1) except KeyboardInterrupt: GPIO.cleanup()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 keypad_servo.py

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.

  • Nhấn 12345#
  • Nhập 5642B#
  • Kiểm tra kết quả trên Serial Monitor và vị trí của servo motor.
PuTTY - Raspberry Pi
The incorrect password! try again The correct password! Rotating Servo Motor to 90° Rotating Servo Motor to 0°

Giải Thích Code

Các mật khẩu hợp lệ được định nghĩa trước trong code Raspberry Pi. Một chuỗi gọi là input_password được sử dụng để lưu trữ mật khẩu được người dùng nhập vào. Trên bàn phím ma trận, hai phím (*#) được sử dụng cho mục đích đặc biệt: xóa mật khẩu và kết thúc mật khẩu. Khi một phím trên bàn phím ma trận được nhấn:

  • Nếu phím được nhấn không phải là một trong hai phím đặc biệt, nó sẽ được thêm vào input_password.
  • Nếu phím được nhấn là *, input_password sẽ được xóa. Điều này có thể được sử dụng để bắt đầu hoặc bắt đầu lại việc nhập mật khẩu.
  • Nếu phím được nhấn là #:
    • Raspberry Pi kiểm tra nếu input_password khớp với một trong các mật khẩu đã định nghĩa trước, servo motor sẽ xoay đến góc 90°.
    • Bất kể mật khẩu có đúng hay không, input_password sẽ được xóa cho lần nhập tiếp theo.
    • Sau một khoảng thời gian, Raspberry Pi xoay servo motor về góc 0°.

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.