Mục lục:
Video: Cảm ứng điện dung với vi điều khiển PIC16F886: 3 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Trong hướng dẫn này, chúng ta sẽ xem xét cách bạn có thể sử dụng vi điều khiển PIC16F886 để phát hiện sự khác biệt về điện dung, điều này sau này có thể được sử dụng để biết liệu touch pad có đang được nhấn hay không. Thật tốt khi làm quen với vi điều khiển pic trước khi thực hiện dự án này.
Bước 1: Nối dây mạch của bạn
Đầu tiên, chúng ta hãy bắt đầu bằng cách đấu dây mạch theo sơ đồ trên. Để làm bàn phím cảm ứng, bạn có thể gấp lá nhôm thành hình vuông và dán trên dây. Bạn có thể thử nghiệm xung quanh với các giá trị khác nhau cho điện trở 100k, tôi thấy 100k hoạt động tốt đối với tôi.
Chân RC4 được sử dụng để bắt đầu sạc / xả điện dung cần đo. C12IN0 được kết nối với mặt - của một bộ so sánh bên trong và chân C1IN được kết nối với mặt + của cùng một bộ so sánh. Bộ vi điều khiển coi điện dung được sạc đầy khi điện áp C12IN0 đạt trên điện áp C1IN. Bộ phân áp điện trở đảm bảo C1IN gần 5 volt.
Vì bàn phím cảm ứng phụ thuộc vào việc có một điện dung đáng kể giữa bạn và mặt đất mạch điện nên có khả năng pin không hoạt động.
Bước 2: Tệp tiêu đề
Đã kết thúc với tất cả các kết nối? Tốt, chúng tôi sẽ tiếp tục với tệp tiêu đề. Chúng tôi sẽ sử dụng trình biên dịch XC8 và như tiêu đề cho thấy bây giờ bạn sẽ tạo một tệp tiêu đề mới trong dự án của mình và sao chép-dán đoạn mã sau. Bạn cũng có thể sao chép và dán nó lên trên mã chính của mình mà không cần bất kỳ tệp tiêu đề nào.
#define CALIBRATION_SAMPLE 20 # xác định TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
số int;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int trànCount = 0; // phóng điện dung cần đo RC4 = 0; _delay_ms (DISCHARGE_TIME); // cung cấp đủ độ trễ để hoàn toàn (gần như hoàn toàn thực sự) xả "tụ điện" // xóa cờ tràn bộ định thời T0IF = 0; // đợi bộ đếm thời gian tràn, bắt đầu đếm từ 0 while (! t0IF); T0IF = 0; // bắt đầu sạc điện dung cần đo RC4 = 1; // đợi điện dung nạp đến điện áp giới thiệu while (C1OUT) {timerCount = TMR0; if (T0IF) {trànCount ++; T0IF = 0; }} count = (256 * trànCount) + timerCount; // đặt lại timerCount timerCount = 0; trànCount = 0; số lần trả lại; }
int isTouching (int dung sai) {
// trung bình của nhiều mẫu double average = 0; for (int i = 0; i calibrationValue +rance) trung bình ++; } trung bình / = TOUCH_SAMPLE; // trung bình sẽ là một số từ 0 đến 1 nếu (trung bình> 0,2) return 1; trả về 0; }
void hiệu chỉnh () {
int trung bình = 0; int mẫu [CALIBRATION_SAMPLE]; // lấy giá trị trung bình for (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); trung bình + = mẫu ; } trung bình / = CALIBRATION_SAMPLE; calibrationValue = trung bình; // lấy giá trị max / min maxCalibrationValue = samples [0]; minCalibrationValue = mẫu [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = mẫu ; if (samples <minCalibrationValue) minCalibrationValue = samples ; }}
void setupCapacitiveTouch () {
// thiết lập chân sạc / xả làm đầu ra, trong trường hợp này là RC4 TRISCbits. TRISC4 = 0; // thiết lập timer0 T0CS = 0; PSA = 1; // thiết lập bộ so sánh C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // xóa các giá trị đếm count = 0; // xóa các giá trị hiệu chuẩn calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // chạy hiệu chuẩn khi bắt đầu hiệu chỉnh (); }
Bước 3: Viết mã chính
Bắt đầu với mã chính, bạn sẽ cần bao gồm tệp tiêu đề đã tạo ở bước trước. Đoạn mã sau là một ví dụ về cách bạn có thể sử dụng hàm isTouching như một công tắc. Trong trường hợp của tôi, tôi đã đặt tên cho tiêu đề là CapitiveTouch.h.
#bao gồm
#include "CapitiveTouch.h"
// biến này cho biết nút đã được nhấn hay chưa
int lastState = 0;
void main () {
// thiết lập RC5 làm đầu ra TRISCbits. TRISC5 = 0; // bạn cần gọi hàm này khi khởi động chương trình setupCapacitiveTouch (); _delay_ms (1000); // hiệu chỉnh sau khi thiết lập chính xác của bạn calibrate (); while (1) {// kiểm tra xem nút có được nhấn không if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; khác RC5 = 1; lastState = 1; } // kiểm tra xem nút có được phát hành không if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
hiệu chỉnh:
Khi hàm này được gọi là các biến calibrationValue, maxCalibrationValue và minCalibrationValue sẽ được cập nhật. Calue được sử dụng bởi chức năng isTouching. Hãy nhớ rằng bàn di chuột phải được để yên trong quá trình hiệu chuẩn.
setupCapacitiveTouch:
Cần được gọi trong phần đầu của chương trình của bạn. Nó thiết lập các bit cần thiết được sử dụng bởi các chức năng khác. Nó cũng chạy một callibration. Tuy nhiên, tôi đã nhận được kết quả tốt hơn bằng cách chờ một giây và chạy hiệu chuẩn lại riêng lẻ.
isTouching:
Hàm này trả về 1 nếu nó phát hiện thấy sự gia tăng điện dung trên C12IN0 và trả về 0 nếu điện dung gần với điện dung trong quá trình hiệu chuẩn. Nói một cách đơn giản, nếu ai đó chạm vào pad, hàm isTouching sẽ trả về 1. Hàm cũng muốn một tham số làm đầu vào, đây là dung sai để nó kích hoạt. Giá trị dung sai càng cao thì độ nhạy càng kém. Trong thiết lập của tôi, tôi thấy 15 hoạt động tốt, nhưng vì điều này phụ thuộc vào tần số ocsillator và bao nhiêu điện dung được thêm vào khi bạn nhấn nó, bạn nên thử nghiệm xung quanh giá trị này cho đến khi bạn tìm thấy thứ gì đó phù hợp với mình.
getChargeTime:
Khi bạn muốn biết mất bao lâu để sạc điện dung đến điện áp CVREF, hàm này sẽ kiểm tra nó và trả về một số nguyên. Để tính thời gian tính bằng giây, bạn sử dụng công thức sau: (4 * getChargeTime) / OscillatorFrequency = chargeTimeInSeconds Công thức này cũng có thể được sử dụng để lấy đầu vào dung sai từ hàm isTouching thành giây.
Đề xuất:
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Bảng điều khiển cầm tay với bộ điều khiển và cảm biến không dây (Arduino MEGA & UNO): 10 bước (có hình ảnh)
Bảng điều khiển cầm tay với bộ điều khiển và cảm biến không dây (Arduino MEGA & UNO): Những gì tôi đã sử dụng: - Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " Màn hình cảm ứng TFT 320x480 HXD8357D- Buzzer- Loa 4Ohm 3W- Đèn LED 5mm- Máy in Ultimaker 2+ w / Black PLA Filament- Lasercutter w / MDF wood- Phun sơn đen (cho gỗ) - 3x nRF24
Điều khiển các thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) với Màn hình nhiệt độ và độ ẩm: 9 bước
Điều khiển thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) Có Hiển thị nhiệt độ và độ ẩm: xin chào, tôi là Abhay và đây là blog đầu tiên của tôi về Các thiết bị điện và hôm nay tôi sẽ hướng dẫn bạn cách điều khiển các thiết bị điện bằng điều khiển từ xa bằng cách xây dựng cái này dự án đơn giản. cảm ơn atl lab đã hỗ trợ và cung cấp tài liệu
Tree of Life (Cảm biến cảm ứng điện dung Arduino điều khiển động cơ Servo): 6 bước (có hình ảnh)
Tree of Life (Cảm biến cảm ứng điện dung Arduino điều khiển động cơ Servo): Đối với dự án này, chúng tôi đã tạo ra một cây lúa bao gồm một cảm biến cảm ứng điện dung và một động cơ servo. Khi chạm vào tấm lót, mô tơ servo sẽ được kích hoạt và gạo (hoặc bất cứ thứ gì bạn muốn cho vào đó) sẽ được giải phóng. Đây là một đoạn video ngắn
Cảm ứng điện dung với Evive (Bộ điều khiển dựa trên Arduino): 6 bước (có hình ảnh)
Cảm ứng điện dung với Evive (Bộ điều khiển dựa trên Arduino): Bạn có biết màn hình cảm ứng của điện thoại thông minh hoạt động như thế nào không? Điện thoại thông minh có một loạt các cảm biến cảm ứng bên dưới màn hình kính. Ngày nay, nó dựa trên công nghệ cảm ứng điện dung và ngay cả khi chạm nhẹ cũng có thể dễ dàng phát hiện ra. Cảm ứng điện dung được cảm nhận