Bảng mạch cho phép bạn tạo mạch mà không cần phải hàn bất cứ thứ gì. Nó là một công cụ tuyệt vời để thử nghiệm với điện tử, Có một dự án để xây dựng có thể giúp bạn duy trì động lực trong khi học.
Breadboarding với The Game Simon
Có một số trò chơi đơn giản tạo nên những dự án tuyệt vời cho người mới bắt đầu sử dụng Raspberry Pi. Một trò chơi dễ dàng giúp bạn bắt đầu là Simon. Simon là một trò chơi trí nhớ trong đó một loạt đèn nhấp nháy theo thứ tự ngẫu nhiên và người chơi phải nhớ trình tự. Khi người chơi tiến bộ, độ dài của trình tự tăng lên.
Các Thành Phần Bắt Buộc
Để bắt đầu, bạn sẽ cần những điều sau:
- Một Raspberry Pi
- Một thẻ nhớ microSD flash với hệ điều hành Raspbian
- 4 x đèn LED các màu khác nhau
- 4 x điện trở (bất cứ thứ gì từ 220 Ohm đến 1 Kilo-Ohm)
- 4 nút x
- 1 x breadboard
- Cáp jumper để kết nối mọi thứ
Bạn có thể sử dụng bất kỳ Raspberry Pi nào cho dự án này, nhưng các mô hình Pi Zero không kết nối với breadboard dễ dàng nếu không có một số mối hàn. Dù bạn sử dụng kiểu máy nào, bạn cũng sẽ cần nguồn điện, màn hình, bàn phím và chuột.
Nếu bạn chưa từng thiết lập Raspberry Pi trước đây, bạn có thể tìm hiểu cách chuẩn bị mọi thứ sẵn sàng cho hướng dẫn này trong hướng dẫn dành cho người mới bắt đầu sử dụng Raspberry Pi
Bạn sẽ viết mã Python trong hướng dẫn này và bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào để viết nó, nhưng bạn có thể tìm thấy một trình soạn thảo mã dễ dàng hơn. Có một số ứng dụng đã được cài đặt trên Hệ điều hành Raspberry Pi và Thonny được thiết kế để dễ dàng cho người mới bắt đầu. Cho dù bạn sử dụng cái nào, bạn sẽ cần có thể lưu và chạy mã của mình để làm theo hướng dẫn này.
Bắt Đầu Với Breadboard
Nếu bạn chưa bao giờ sử dụng breadboard trước đây, bạn có thể muốn bắt đầu bằng cách đọc hướng dẫn về breadboard . Hiểu cách thức hoạt động của breadboard sẽ giúp bạn hiểu cách tạo mạch.
Raspberry Pi có hai hàng chân cắm vào / ra đa năng (GPIO). Các chân này cho phép bạn kết nối các thành phần với Raspberry Pi của mình. Một số chân gửi thông tin, những chân khác cung cấp nguồn điện và một số nối đất cho thiết bị điện tử của bạn.
Bắt đầu bằng cách kết nối chân GPIO với bo mạch của bạn. Không quan trọng chân nào, miễn đó là chân GPIO và không phải là chân nguồn hoặc chân nối đất. Trên đây là biểu đồ của các chân GPIO, sẽ giúp bạn xác định được chân nào sẽ sử dụng. Hướng dẫn này sử dụng chân số 18, cũng được gắn nhãn GPIO 24.
Chân cắm sẽ cung cấp một số điện năng cho breadboard và cho phép Raspberry Pi giao tiếp với các thành phần trên bo mạch. Sau đó kết nối chân số 6 trên Pi với thanh nối đất của bảng mạch. Điều này sẽ nối đất cho bo mạch và cho phép chúng tôi tạo mạch.
Nguồn điện đến từ Raspberry quá cao để kết nối trực tiếp với đèn LED. Sử dụng điện trở làm giảm mức công suất và ngăn đèn LED bị cháy. Kết nối một bên của điện trở với cùng một đường dây mà chân GPIO được cắm vào và đầu cuối vào phía bên kia của bảng mạch. Sau đó đặt cực dương của đèn LED sau điện trở. Đầu âm của đèn LED có thể được kết nối trực tiếp với âm. Kết quả cuối cùng sẽ giống như sơ đồ trên. Kiểm tra kỹ hệ thống dây điện của bạn và bật Pi. Đèn LED sẽ sáng.
Bây giờ, bạn đã tạo một mạch bằng Raspberry Pi mà bạn có thể điều khiển bằng cách sử dụng mã.
Sử Dụng Mã Python Để Điều Khiển Đèn LED
Hướng dẫn này sẽ đưa bạn qua mã theo từng bước, nhưng nếu bạn muốn tham khảo mã đã hoàn thành bất kỳ lúc nào, nó có sẵn trên Pastebin .
Ngay bây giờ, nguồn sẽ chuyển sang đèn LED, nhưng muốn kiểm soát khi nào nó bật và tắt. Đoạn mã Python sau đây sẽ cho phép chúng ta giao tiếp
import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18GPIO.setup(red, GPIO.OUT)GPIO.output(red, GPIO.LOW)
Vài dòng đầu tiên thiết lập mọi thứ. Thư viện Raspberry Pi GPIO được nhập. Các như GPIO chỉ cho phép chúng ta tham khảo RPi.GPIO như GPIO để tiết kiệm một chút gõ. Chế độ chân GPIO được đặt thành BOARD . Bạn không phải sử dụng cài đặt này, nhưng có thể dễ dàng tham khảo các chân theo thứ tự của chúng trong các hàng GPIO.
Cuối cùng, đặt cảnh báo thành false. Điều này sẽ dừng các cảnh báo không cần thiết.
Ba dòng tiếp theo điều khiển đèn LED. Đèn LED màu đỏ được gắn vào chân GPIO 18. Thay vì ghi nhớ điều đó, biến màu đỏ sẽ lưu vị trí. Tiếp theo, GPIO.setup nói với chương trình của chúng tôi rằng nó được gửi thông tin ra đến đỏ pin. Cuối cùng, chúng tôi thiết lập GPIO. đầu ra trên chân màu đỏ xuống mức thấp . Khi bạn chạy chương trình này, đèn sẽ tắt. Để bật lại, hãy chuyển GPIO.LOW sang GPIO.HIGH và chạy lại chương trình.
Lưu mã và nhấp vào chạy để xem mã hoạt động. Nếu không có nút chạy trong trình chỉnh sửa mã của bạn, hãy lưu nó và chạy python myfilename.py trong cửa sổ đầu cuối. Trước tiên, bạn sẽ cần điều hướng đến cùng một thư mục với tệp Python mới của mình. Kiểm tra bảng gian lận Raspberry Pi nếu bạn không chắc chắn về cách thực hiện.
Thêm Nhiều Hơn Một Đèn LED
Để tạo trò chơi Simon, cần bốn đèn có màu sắc khác nhau. Các bước tương tự mà bạn đã sử dụng để thiết lập đèn LED màu đỏ có thể được sử dụng để thiết lập ba bước còn lại. Hệ thống dây điện của bạn sẽ giống như sơ đồ dưới đây:
Mã của bạn sẽ giống như sau:
import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.output(red, GPIO.HIGH)GPIO.output(yellow, GPIO.HIGH)GPIO.output(green, GPIO.HIGH)GPIO.output(blue, GPIO.HIGH)
Khi bạn đã kiểm tra các đèn LED, hãy đặt GPIO.output thành GPIO.LOW để tắt từng đèn LED một lần nữa.
Mặc dù màu sắc của dây mà bạn sử dụng không quan trọng nhưng hãy cố gắng sử dụng những màu có ý nghĩa với bạn để giúp bạn đọc bảng dễ dàng hơn. Ví dụ, dây đen thường được sử dụng cho dây nối đất (âm). Trong mạch này, bạn có thể muốn kết hợp màu của dây với màu của đèn LED.
Điều Khiển Đèn LED Bằng Các Nút
Bắt đầu bằng cách thêm một nút vào bảng của bạn. Nút sẽ cần được kết nối với cả mặt đất và chân GPIO. Mạch sẽ trông giống như sau:
Để làm cho nút điều khiển thành đèn LED, cần thêm vào mã của mình. Thiết lập nút tương tự như thiết lập đèn LED, ngoại trừ chân GPIO được đặt làm đầu vào, không phải đầu ra. Mã này cũng thiết lập điện trở kéo lên bên trong trên Pi, cần thiết để làm cho nút hoạt động chính xác.
GPIO.setup (32, GPIO.IN, pull_up_down = GPIO.PUD_UP)
Bây giờ cần mã để kiểm tra xem nút đã được nhấn chưa.
game = Truewhile game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW)
muốn chương trình của mình tiếp tục kiểm tra xem một nút có được nhấn hay không, vì vậy sử dụng vòng lặp while . Bởi vì vòng lặp sẽ không bao giờ sai, nó tiếp tục chạy và kiểm tra nút cho đến khi kết thúc chương trình theo cách thủ công bằng cách nhấn nút dừng hoặc sử dụng phím tắt Ctrl + c .
Tiếp theo, để dễ dàng tham chiếu đầu vào mà pin GPIO của nút lưu thông tin đó trong biến redButtonState . Nếu đầu vào nút thay đổi thành 0, biết nút đã được nhấn.
Nếu nút được nhấn, đèn LED màu đỏ sẽ bật. Sau đó, sau một giây, đèn LED sẽ tắt. Để xác định thời gian này, chúng tôi sử dụng hàm time.sleep (1) . Để làm cho việc này hoạt động, bạn sẽ cần nhập thư viện thời gian ở đầu tập lệnh của mình.
Khi một nút hoạt động, bạn có thể thêm ba nút nữa, một nút cho mỗi đèn LED. Mã của bạn sẽ giống như sau:
import random import timeimport RPi.GPIO as GPIOGPIO.setmode (GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) game = True while game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW) yellowButtonState = GPIO.input(36) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) time.sleep(1) GPIO.output(yellow, GPIO.LOW) greenButtonState = GPIO.input(38) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) time.sleep(1) GPIO.output(green, GPIO.LOW) blueButtonState = GPIO.input(40) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) time.sleep(1) GPIO.output(blue, GPIO.LOW)
Bảng của bạn sẽ trông giống như sau:
Tất cả các thiết bị điện tử hiện đã có mặt. Nếu bạn có bất kỳ sự cố nào, hãy kiểm tra lại mã của bạn xem có bất kỳ lỗi nào không. Hãy nhớ rằng, bạn có thể tải xuống mã đầy đủ từ Pastebin nếu bạn gặp khó khăn!
Tạo Trò Chơi
Dự án này đã bao gồm tất cả những điều cơ bản bạn cần biết để bắt đầu sử dụng breadboard. Nhưng biến những kỹ năng này thành một trò chơi sẽ thực sự thể hiện những gì bạn có thể làm!
Trong Simon, người chơi nhìn thấy một loạt đèn nhấp nháy và phải nhớ mẫu. Nó bắt đầu dễ dàng chỉ với một ánh sáng. Mỗi cấp độ thêm một ánh sáng ngẫu nhiên vào mô hình để làm cho trò chơi khó hơn.
Tạo Mẫu
Bước này khá đơn giản. Một mảng sẽ giữ mẫu ánh sáng của chúng ta . Mảng thứ hai sẽ lưu trữ các chân GPIO cho đèn của chúng ta . Mỗi vòng lặp của trò chơi, một ánh sáng ngẫu nhiên mới sẽ được thêm vào cuối mảng hoa văn. sử dụng ngẫu nhiên. hàm randint () để chọn một số từ 0 đến 3, đại diện cho 4 đèn LED.
pattern = []lights = [red, yellow, green, blue]while game: pattern.append(random.randint(0,3))
Tiếp theo, chúng ta phải thắp đèn để hiện họa tiết.
while game: pattern.append(random.randint(0,3)) for x in pattern: GPIO.output(lights[x], GPIO.HIGH) time.sleep(1) GPIO.output(lights[x], GPIO.LOW) time.sleep(0.5)
Điều quan trọng là phải tạm dừng giữa hai đèn. Điều này giúp bạn dễ dàng xem liệu cùng một ánh sáng có được sử dụng liên tục trong mẫu hay không.
Nhận Đầu Vào Của Người Chơi
Tiếp theo, trò chơi phải chờ người chơi đoán thứ tự của đèn. Chương trình phải kiểm tra từng ánh sáng trong mẫu và chờ người chơi nhấn một nút. Điều này yêu cầu các vòng lặp lồng nhau:
for x in pattern: waitingForInput = True while waitingForInput: redButtonState = GPIO.input(32) yellowButtonState = GPIO.input(36) greenButtonState = GPIO.input(38) blueButtonState = GPIO.input(40) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(red, GPIO.LOW) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(green, GPIO.LOW) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(blue, GPIO.LOW)
Hầu hết mã ở trên đang sử dụng lại mã đã viết để kiểm tra các nút.
Kiểm Tra Đầu Vào Của Người Chơi
Từ đây, khá dễ dàng để kiểm tra xem người chơi đã nhập đúng mẫu chưa. Mỗi khi họ nhấn một nút, trò chơi có thể kiểm tra xem đó có phải là nút chính xác hay không. Để thực hiện việc này, hãy thêm một câu lệnh if khác vào mỗi đầu vào nút:
if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False if x != 0: game = False time.sleep(1) GPIO.output(red, GPIO.LOW)
Biến x từ vòng lặp for của chúng ta có số lượng đèn tiếp theo. Đèn LED màu đỏ ở vị trí đầu tiên, hoặc số 0. Nếu người chơi nhấn nút LED màu đỏ khi chúng ta có số 0 trong mẫu. Đặt biến trò chơi thành false sẽ dừng vòng lặp trò chơi và kết thúc chương trình