Cảm ứng điện dung là một phương tiện đơn giản để phát hiện đầu vào của người dùng bằng cách đo hằng số điện môi. Nếu nó khác với phép đo cơ sở thì nó có thể được sử dụng làm đầu vào. Trong quá khứ, chúng tôi đã sử dụng một Cảm biến cảm ứng MPR121 để kích hoạt một sự kiện bằng Raspberry Pi Pico. MPR121 là một cảm biến Stemma QT đáng tin cậy có nhiều kiểu dáng khác nhau dành cho kẹp cá sấu và thước đo dây tiêu chuẩn. Chúng tôi yêu thích nó đến nỗi chúng tôi đã đưa nó vào danh sách trang bổ trợ Stemma QT và Grove tốt nhất. Nhưng có cách nào để làm điều đó mà không cần sử dụng bảng cảm biến không?
Chỉ sử dụng một đoạn dây và điện trở 1 Mega Ohm trong một quả chuối, chúng ta có thể tạo giao diện cảm ứng của riêng mình và có một bữa ăn nhẹ lành mạnh. Trong hướng dẫn này, chúng ta sẽ sử dụng quả chuối để bật và tắt đèn LED.
Tại sao một cái gì đó rất đơn giản? Học cách bật/tắt đèn LED là cách tốt nhất để hiểu mọi phần trong dự án của bạn hoạt động như thế nào. Chắc chắn chúng ta có thể biến quả chuối thành thanh không gian và chơi Tro chơi flappy Birds, sử dụng nó để mở một cửa sổ trình duyệt và “Rick-roll” một người bạn hoặc khởi động rô-bốt lao điên cuồng về phía cửa. Nhưng trước khi có thể làm được điều đó, chúng ta cần hiểu cách thức và lý do mọi thứ hoạt động, và đèn LED đơn giản là một cách dễ dàng và rẻ tiền để thực hiện điều này.
Đối với dự án này, bạn sẽ cần
Xây dựng mạch
Có hai phần trong mạch: đầu vào và đầu ra. Đầu vào là một quả chuối (tùy chọn), được kết nối với GPIO 16 trên Raspberry Pi Pico bằng dây nhảy dài. GPIO 16 cũng có một Điện trở 1 MegaOhm để kết nối nó với GND. Đây là một điện trở kéo xuống và đảm bảo rằng chân GPIO nhìn thấy tham chiếu 0V không đổi. Không có nó, đầu vào sẽ thất thường. Quá trình này có thể được lặp lại cho nhiều đầu vào, giới hạn duy nhất của bạn là chân GPIO, điện trở 1 Mega Ohm và chuối.
Đầu ra là một đèn LED đơn giản với chân dài (Anode) được kết nối với GPIO 15 và chân ngắn (Cathode) được kết nối với GND thông qua điện trở 100 Ohm.
Có thể thay chuối bằng bất cứ thứ gì dẫn điện. Giấy nhôm, đất nặn và các loại trái cây/rau củ khác có thể được sử dụng làm nguyên liệu đầu vào. Bạn cũng có thể từ bỏ các đầu vào ẩm thực cho dây trần. Trong một số trường hợp, điều này hoạt động tốt hơn.
Xây dựng mạch và kiểm tra kỹ các kết nối của bạn trước khi tiếp tục.
Cấu hình CircuitPython
Chúng tôi chọn CircuitPython cho dự án này vì hai lý do chính. Một, nó rất dễ sử dụng và dễ hiểu. Mã của chúng tôi dễ đọc, dễ gỡ lỗi và chúng tôi có thể viết nó trên mọi thiết bị, ngay cả Chromebook. Thứ hai, CircuitPython có mô-đun Touchio giúp dễ dàng tạo đầu vào cảm ứng bằng GPIO. Nhưng trước khi có thể bắt đầu dự án, chúng ta cần viết phiên bản mới nhất của CircuitPython cho Raspberry Pi Pico.
1. Tới trang CircuitPython chính thức cho Quả mâm xôi Pi Pico Và tải xuống hình ảnh chương trình cơ sở UF2 phát hành mới nhất. Tại thời điểm viết bài này là CircuitPython 8.10. Chúng tôi đã chọn Raspberry Pi Pico vì chúng tôi không cần Wi-Fi, nhưng dự án này có thể được sử dụng để kích hoạt một sự kiện web, vì vậy bạn sẽ cần một Mâm xôi Pi Pico W.
2. Trong khi giữ nút BOOTSEL, hãy kết nối Raspberry Pi Pico với máy tính của bạn. Một ổ đĩa mới, RPI-RP2 sẽ xuất hiện.
3. Sao chép tệp CircuitPython UF2 đã tải xuống vào RPI-RP2. Thao tác này sẽ ghi CircuitPython vào bộ lưu trữ flash bên trong của Pico. Một ổ đĩa mới, CIRCUITPY sẽ xuất hiện.
Viết mã
Để viết mã, chúng tôi đã sử dụng Thonny trên Windows 10. Bạn có thể thoải mái sử dụng trình soạn thảo văn bản mà mình chọn, nhưng Thonny có tích hợp CircuitPython (và MicroPython) tuyệt vời giúp sử dụng dễ dàng. Hơn hết, nó miễn phí và dễ cài đặt trên các thiết bị Windows, macOS và Linux.
Viết mã
1. Tải xuống và cài đặt Thonny nếu bạn chưa có nó. Thonny là một trình soạn thảo Python bao gồm Python 3, MicroPython và CircuitPython.
2. Mở Thonny và đi đến Công cụ >> Tùy chọn.
3. Chọn Phiên dịch, sau đó đặt trình thông dịch là CircuitPython, chuyển thành tự động và bấm OK. Thonny bây giờ sẽ kết nối với Pico đang chạy CircuitPython.
4. Bấm vào Tệp >> Mở và chọn thiết bị CircuitPython. Sau đó chọn code.py. Code.py được CircuitPython sử dụng làm tệp chính cho một dự án. Nó được thiết lập để tự động chạy khi Pico được cấp nguồn.
5. Xóa bất kỳ mã nào trong code.py. Nếu bạn cần mã, hãy đảm bảo sao lưu mã vào máy tính của bạn.
6. Nhập bốn mô-đun mã cần thiết để dự án hoạt động. Touchio được sử dụng để tạo đầu vào cảm ứng điện dung bằng chân GPIO. Thời gian kiểm soát khoảng thời gian mã sẽ tạm dừng giữa các hành động. Bảng được sử dụng để hoạt động với GPIO, nhập bằng cách sử dụng * có nghĩa là chúng tôi không phải bao gồm tên mô-đun. Digitalio được sử dụng để kiểm soát trạng thái của mã pin. Nó có thể là một đầu vào hoặc đầu ra.
import touchio
import time
from board import *
from digitalio import DigitalInOut, Direction
7. Tạo một đối tượng, đèn led và đặt chân GPIO thành GP15, sau đó đặt nó thành đầu ra. Điều này sẽ đảm bảo rằng khi đèn LED được kích hoạt, dòng điện sẽ chạy từ chân GPIO 15 đến cực dương của đèn LED. Khi cực âm được kết nối với GND thông qua điện trở 100 Ohm, mạch hoàn chỉnh sẽ bật đèn LED.
led = DigitalInOut(GP15)
led.direction = Direction.OUTPUT
số 8. Tạo một đối tượng, led_state và lưu trữ giá trị nguyên 0 bên trong đối tượng đó. Đối tượng này sẽ được sử dụng để ghi lại trạng thái hiện tại của đèn LED. Nó có thể tắt (0) hoặc bật (1).
led_state = 0
9. Tạo một đối tượng, touch_pin để tạo kết nối giữa mã và chân GPIO vật lý.
touch_pin = touchio.TouchIn(GP16)
10. Tạo một vòng lặp để liên tục chạy mã.
while True:
11. Bên trong vòng lặp tạo một chức năng in sẽ báo cáo trạng thái hiện tại của chân đầu vào cảm ứng. Chúng tôi sử dụng %s để sử dụng giá trị được lưu trữ trong touch_pin.value và chuyển đổi nó thành một chuỗi để nối vào văn bản.
print("The pin state is %s" % touch_pin.value)
12. Viết một bài kiểm tra có điều kiện để kiểm tra xem đầu vào có bị chạm không và đèn LED có bị tắt không. Cả hai bài kiểm tra phải vượt qua để vượt qua bài kiểm tra có điều kiện.
if touch_pin.value == True and led_state == False:
13. Đặt đèn LED bật, sau đó cập nhật đối tượng led_state thành 1, để mã biết rằng đèn LED đang bật. Ngủ trong nửa giây để ngăn tình cờ gỡ lỗi (nhấn đúp). Mã này sẽ chỉ chạy nếu kiểm tra có điều kiện vượt qua.
led.value = True
led_state = 1
time.sleep(0.5)
14. Tạo một bài kiểm tra có điều kiện để kiểm tra xem đầu vào đã được chạm chưa và đèn LED hiện đang sáng hay không. Mã này sẽ tắt đèn LED.
elif touch_pin.value == True and led_state == True:
15. Tắt đèn LED, cập nhật đối tượng led_state để mã biết đèn LED tắt, sau đó tạm dừng nửa giây.
led.value = False
led_state = 0
time.sleep(0.5)
16. Ngoài các bài kiểm tra có điều kiện, nhưng vẫn ở trong vòng lặp, hãy tạm dừng mã trong 0,1 giây. Mỗi lần vòng lặp lặp lại, nó sẽ tạm dừng trong 0,1 giây, điều này rất hữu ích để tạo nhịp cho mã dự án.
time.sleep(0.1)
17. Lưu mã vào code.py trên thiết bị CircuitPython (Mâm xôi Pi Pico).
18. Mã sẽ tự động chạy, nếu không nhấp vào Dừng và sau đó Chạy.
19. Chạm vào quả chuối để bật/tắt đèn LED.
Hoàn thành danh sách mã
import touchio
import time
from board import *
from digitalio import DigitalInOut, Direction
led = DigitalInOut(GP15)
led.direction = Direction.OUTPUT
led_state = 0
touch_pin = touchio.TouchIn(GP16)
while True:
print("The pin state is %s" % touch_pin.value)
if touch_pin.value == True and led_state == False:
led.value = True
led_state = 1
time.sleep(0.5)
elif touch_pin.value == True and led_state == True:
led.value = False
led_state = 0
time.sleep(0.5)
time.sleep(0.1)