Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Xin chào tất cả độc giả của phần “DIY hoặc Do It Yourself” trên Habr! Bài viết hôm nay sẽ nói về công tắc cảm ứng trên chip TTP223 | bảng dữliệu. Switch hoạt động trên vi điều khiển nRF52832 | bảng dữliệu, mô-đun YJ-17103 có ăng-ten được in và đầu nối cho ăng-ten MHF4 bên ngoài đã được sử dụng. Công tắc cảm ứng hoạt động bằng pin CR2430 hoặc CR2450. Mức tiêu thụ ở chế độ truyền không quá 8 mA, ở chế độ ngủ không quá 6 µA.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Giống như tất cả các dự án trước, dự án này cũng là một dự án Arduino, chương trình được viết bằng Arduino IDE. Việc triển khai phần mềm của thiết bị dựa trên giao thức Mysensors | Thư viện GitHub, hỗ trợ bo mạch nRF5 GitHub trong Mysensors. diễn đàn cộng đồng tiếng anh - http://forum.mysensors.org, diễn đàn cộng đồng tiếng Nga - http://mysensors.ru/forum/
(Dành cho những ai muốn học - Tài liệu, Giao thức nối tiếp, API, Nghị định thư, Trình phân tích cú pháp | dành cho những người muốn hỗ trợ (đóng góp) trong quá trình phát triển dự án - Tài liệu)

Bảng công tắc cảm ứng được phát triển trong chương trình Deeptrace, có tính đến quá trình sản xuất tiếp theo bằng phương pháp Công nghệ ủi bằng laze (LUT). Bảng được phát triển với kích thước 60x60mm (tấm kính tiêu chuẩn có kích thước 80x80mm). Mạch điện được in trên các trang của tạp chí Antenna và được chuyển bằng bàn ủi Bosch có cài đặt “Len” (công suất tối đa) lên một tấm ván sợi thủy tinh hai mặt 1.5mm, 35µm (trong trường hợp không có loại khác).
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Quá trình khắc được thực hiện bằng dung dịch clorua sắt, đã chuẩn bị trước đó theo tỷ lệ 1.5 muỗng cà phê trên 250 ml nước ấm. Quá trình này mất 15 phút.
Các lỗ khoan cho các via xen kẽ và để gắn chặt giá đỡ pin được thực hiện bằng máy khoan mini DREMEL 3000 gắn trên đế khoan DREMEL 220. Các lỗ cho vias giữa các lớp được khoan bằng mũi khoan 0,4mm, lỗ cho giá đỡ pin bằng mũi khoan 1,1mm . Việc cắt dọc theo các viền của bảng được thực hiện bằng cùng một mũi khoan mini có gắn phụ kiện DREMEL 540 (Vòng tròn cắt d=32.0mm). Việc cắt tỉa được thực hiện trong mặt nạ phòng độc.
Việc đóng hộp tấm khắc được thực hiện bằng hợp kim Rose trong dung dịch nước (1 thìa cà phê axit citric kết tinh trên 300 ml nước).

Quá trình hàn mất khoảng một giờ, phần lớn thời gian được dùng để hàn dây (đóng hộp, đường kính 0.4 mm) vào các lỗ dành cho các vias xen kẽ.

Bảng được rửa bằng chất tẩy rửa khí dung FLUX OFF.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Thiết kế thân thiết bị được thực hiện trong trình chỉnh sửa thiết kế ba chiều có sự hỗ trợ của máy tính. Kích thước vỏ 78,5mm X 78,5mm X 12 mm.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Mẫu hoàn thiện của vỏ và nắp ngăn chứa pin được lưu ở định dạng STL, sau đó cần chuẩn bị các mẫu này để in trên máy in SLA (thêm giá đỡ, định hướng). Ở giai đoạn này, một vấn đề nhỏ đã nảy sinh vì diện tích in của máy in SLA gia đình nhỏ. Mẫu vỏ thiết bị ở vị trí tối ưu nhất so với thời gian in không vừa với kích thước của vùng in. Khi đặt mô hình ở góc 45 độ cũng cho kết quả đáng thất vọng, trọng lượng của giá đỡ bằng trọng lượng của thân mô hình. Người ta quyết định in mô hình theo chiều dọc, tạo ra sự hỗ trợ ở một trong các mặt trước, đã đồng ý trước với thực tế xử lý hậu kỳ. Việc in phần thân mất 5 giờ với cài đặt lớp 50 micron. Tiếp theo, quá trình xử lý được thực hiện bằng giấy nhám rất mịn (tôi sẽ không viết số vì tôi không biết :)). Nắp pin mất 40 phút để in.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Các tấm kính từ Aliexpress được bán với khung nhựa đã được dán sẵn, không có vấn đề gì khi tháo khung. Tôi tháo tấm kính ra sau khi làm nóng trước bằng máy sấy tóc thông thường.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Bộ khuếch tán cho đèn nền LED được làm bằng băng keo hai mặt với keo acrylic 3M 9088-200. Đối với đèn huỳnh quang, có một số vật liệu để lựa chọn, băng dính Trung Quốc và giấy dính được cắt thành băng từ công ty nội địa Luminofor. Sự lựa chọn có lợi cho một nhà sản xuất trong nước, theo cảm nhận của tôi, nó tỏa sáng hơn và lâu hơn. Một hình vuông giấy có bột màu huỳnh quang được dán lên trên bằng băng keo hai mặt 3M 9088-200.

Kính được dán vào thân công tắc bằng băng dính hai mặt bằng keo acrylic 3M VHB 4910.
Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Nắp được cố định bằng vít M 1,4 X 5 mm.

Giá của thiết bị là 890 rúp.

Tiếp theo là phần chương trình. Có một số vấn đề. Hóa ra chip cảm biến TTP223 hoạt động tốt với nguồn điện 3.3V ổn định và không hoạt động tốt lắm khi được cấp nguồn trực tiếp từ pin đã xả tốt. Khi khởi động thiết bị với nguồn điện khoảng 2.5v, cộng thêm sau một lần “rút điện” bổ sung khi thực hiện bản trình bày Mysensors, vi mạch TTP223 (ngay sau khi hiệu chỉnh) đã khiến MK bị gián đoạn do nó đang được kích hoạt.

Mạch cấp nguồn cho vi mạch đã được thay đổi (tTP223 quản lý nguồn với gpio MK), nối đất bổ sung và các điện trở có điện trở cao hơn được thay thế trên các dây dẫn rgb (chạy ở phía bên kia của bảng cảm biến điện dung). Nó cũng được thêm vào phần mềm: kích hoạt nguồn cho vi mạch điện dung sau khi khởi động khung Mysensors và xử lý bài thuyết trình. Độ trễ tự động hiệu chỉnh chip TTP223 khi cấp nguồn đã tăng gấp đôi. Tất cả những thay đổi này đã loại bỏ hoàn toàn vấn đề này.

Trước khi xem mã chương trình, tôi khuyên bạn nên tự làm quen với cấu trúc cơ bản của bản phác thảo trong Mysensors.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}

void setup ()
{

}

void hiện tại()
{
//Ở đây nút và các cảm biến của nó được trình bày cho bộ điều khiển thông qua bộ định tuyến
sendSketchInfo("Tên nút cảm biến của tôi", "1.0"); // trình bày tên nút, phiên bản phần mềm
present(CHILD_ID, S_WHATEVER, "Description"); // trình bày các cảm biến nút, mô tả các cảm biến
}

void loop ()
{

}

Mã kiểm tra chương trình chuyển đổi cảm ứng:test_sens.ino
/**
ТЕСТОВЫЙ СКЕТЧ СЕНСОРНОГО ВЫКЛЮЧАТЕЛЯ С ПРЕРЫВАНИЯМИ НА NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#xác định MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define KIỂM TRA LIÊN KẾT_VẬN_THĂNG_CỦA_MY_BỊ TẮT
#define IRT_PIN 3 //(PORT0, gpio 5)
#bao gồm
// xem https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
Tin nhắn của tôi sensMsg(SENS_CHILD_ID, V_VAR1);
//Thông điệp của tôi voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
ngủ(2000);
pinMode(ĐÈN LED ĐỎ, ĐẦU RA);
digitalWrite(ĐÈN LED ĐỎ, CAO);
pinMode(ĐÈN LED XANH LÁ, ĐẦU RA);
digitalWrite(ĐÈN LED XANH LÁ, CAO);
pinMode(ĐÈN LED XANH DƯƠNG, ĐẦU RA);
digitalWrite(ĐÈN LED XANH DƯƠNG, CAO);
pinMode(CHẾ ĐỘ_PIN, ĐẦU VÀO);
pinMode(SENS_PIN, ĐẦU VÀO);
}

void trước()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->BẬT = 0;
ngủ(1000);
digitalWrite(ĐÈN LED XANH DƯƠNG, THẤP);
ngủ(150);
digitalWrite(ĐÈN LED XANH DƯƠNG, CAO);
}

void hiện tại() {
sendSketchInfo("Cảm biến EFEKTA cảm biến 1CH", "1.1");
hiện tại(SENS_CHILD_ID, S_CUSTOM, "CHUYỂN ĐỔI TRẠNG THÁI");
//hiện tại(CHILD_ID_VOLT, S_MULTIMETER, "Pin");
}

void setup () {
digitalWrite(ĐÈN LED XANH DƯƠNG, THẤP);
ngủ(100);
digitalWrite(ĐÈN LED XANH DƯƠNG, CAO);
ngủ(200);
digitalWrite(ĐÈN LED XANH DƯƠNG, THẤP);
ngủ(100);
digitalWrite(ĐÈN LED XANH DƯƠNG, CAO);
lpComp();
phát hiện = sai;
GIỜ_NGỦ_W = GIỜ_NGỦ;
pinMode (31, OUTPUT);
digitalWrite (31, CAO);
/*
trong khi (bộ đếm thời gian < 10) {
bộ đếm thời gian++;
digitalWrite(ĐÈN LED XANH LÁ, THẤP);
chờ đợi(5);
digitalWrite(ĐÈN LED XANH LÁ, CAO);
chờ đợi(500);
}
bộ đếm thời gian = 0;
*/
ngủ(7000);
trong khi (bộ đếm thời gian < 3) {
bộ đếm thời gian++;
digitalWrite(ĐÈN LED XANH LÁ, THẤP);
ngủ(15);
digitalWrite(ĐÈN LED XANH LÁ, CAO);
ngủ(85);
}
bộ đếm thời gian = 0;
ngủ(1000);
}

void loop () {

nếu (phát hiện) {
nếu (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//phát hiện nút phía sau
button_flag = 1;
nosleep = 1;
}
nếu (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(ĐÈN LED ĐỎ, THẤP);
chờ đợi(10);
digitalWrite(ĐÈN LED ĐỎ, CAO);
chờ đợi(50);
}
nếu (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(ĐÈN LED ĐỎ, CAO);
lpComp_reset();
}

nếu (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//phát hiện cảm biến
cờ_cảm_giác = 1;
nosleep = 1;
newmillis = millis();
thời gian ngắt = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - thời gian ngắt;
nếu (gửi(sensMsg.set(phát hiện))) {
gửi_cờ = 1;
}
}
nếu (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
nếu (gửi_cờ == 1) {
trong khi (bộ đếm thời gian < 10) {
bộ đếm thời gian++;
digitalWrite(ĐÈN LED XANH LÁ, THẤP);
chờ đợi(20);
digitalWrite(ĐÈN LED XANH LÁ, CAO);
chờ đợi(30);
}
bộ đếm thời gian = 0;
} Else {
trong khi (bộ đếm thời gian < 10) {
bộ đếm thời gian++;
digitalWrite(ĐÈN LED ĐỎ, THẤP);
chờ đợi(20);
digitalWrite(ĐÈN LED ĐỎ, CAO);
chờ đợi(30);
}
bộ đếm thời gian = 0;
}
}
nếu (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
cờ_cảm_giác = 0;
nosleep = 0;
gửi_cờ = 0;
digitalWrite(ĐÈN LED XANH LÁ, CAO);
ngủ(500);
lpComp_reset();
}
nếu (SLEEP_TIME_W < 60000) {
GIỜ_NGỦ_W = GIỜ_NGỦ;
gửiTrạng thái pin();
}
}
khác {
//nếu (phát hiện == -1) {
GIỜ_NGỦ_W = GIỜ_NGỦ;
gửiTrạng thái pin();
}
nếu (nosleep == 0) {
oldmillis = millis();
ngủ(GIỜ_NGỦ_W);
}
}

void sendBatteryStatus() {
chờ đợi(20);
Điện áp pin = hwCPUVoltage();
chờ đợi(2);

nếu (điện áp pin > điện áp pin_vcc_max) {
hiện tạiBatteryPercent = 100;
}
nếu không thì nếu (điện áp pin < pin_vcc_phút) {
hiện tạiBatteryPercent = 0;
} Else {
currentBatteryPercent = (100 * (điện áp pin - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
chờ (2000, C_INTERNAL, I_BATTERY_LEVEL);
//gửi(powerMsg.set(điện áp pin), 1);
//chờ(2000, 1, V_VAR1);
}

không có lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->BẬT = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

không có s_lpComp() {
nếu ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

không có r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#nếu __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(sự kiện)
sự kiện = 0;
sự kiện (hư)
#khác
#define NRF5_RESET_EVENT(sự kiện) sự kiện = 0
#endif

bên ngoài "C" {
void LPCOMP_IRQHhandler(void) {
phát hiện = đúng;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->ĐẾM + 2);
}
}

không có lpComp_reset() {
s_lpComp();
phát hiện = sai;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
*Mô tả chân cắm. Thuộc tính bị bỏ qua bởi biến thể arduino-nrf5.
* Định nghĩa lấy từ Arduino Primo Core với các cổng được sắp xếp
*/
const PinDescription g_APinDescription[]=
{
{ KHÔNG_CỔNG, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không_có_Kênh_ADC, KHÔNG_BẬT_PWM, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN}, // LFCLK
{ KHÔNG_CỔNG, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không_có_Kênh_ADC, KHÔNG_BẬT_PWM, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM10, KHÔNG BẬT_HẸN_ĐỊNH_HẸN}, //ĐÈN_SÁNG_DỤNG
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM9, KHÔNG BẬT_HẸN_GIỜ},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM8, KHÔNG BẬT_HẸN_GIỜ},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, Không có kênh ADC, KHÔNG BẬT PWM, KHÔNG BẬT HẸN GIỜ}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM11, KHÔNG BẬT_HẸN_ĐỊNH_HẸN}, //ĐÈN LED ĐỎ
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM11, KHÔNG BẬT_HẸN_HẸN}, //ĐÈN LED XANH LÁ CÂY
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), Không có kênh ADC, PWM11, KHÔNG BẬT HẸN GIỜ}, //ĐÈN LED XANH DƯƠNG
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, KHÔNG_BẬT_HẸN_ĐỊNH_HẸN},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, KHÔNG_BẬT_HẸN_GIỜ}
};

// Không xóa dòng này
#bao gồm

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#kết thúc // __cplusplus

// Số lượng chân được xác định trong mảng PinDescription
#define PINS_COUNT (32u)
#define SỐ_PIN_KỸ_THUẬT_ĐIỀU (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* Đèn LED
*
* Đây là tùy chọn
*
* Với My Sensors, bạn có thể sử dụng
* hwPinMode() thay vì pinMode()
* hwPinMode() cho phép sử dụng các chế độ nâng cao như OUTPUT_H0H1 để điều khiển đèn LED.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define ĐÈN LED ĐỎ (PIN_LED1)
#define ĐÈN LED XANH LÁ (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define MÃ_PIN_NGẮT (5)
#define MODE_PIN (25)
#xác định SENS_PIN (27)

/*
* Cổng tương tự
*
* Nếu bạn thay đổi g_APinDescription, hãy thay thế PIN_AIN0 bằng
* số cổng được ánh xạ bởi Mảng g_APinDescription.
* Bạn có thể thêm PIN_AIN0 vào Mảng g_APinDescription nếu
* bạn muốn cung cấp cổng analog MCU độc lập, bạn có thể thêm
* PIN_AIN0..PIN_AIN7 vào Mảng g_APinDescription tùy chỉnh của bạn
* được định nghĩa trong MyBoardNRF5.cpp
*/
tĩnh const uint8_t A0 = ADC_A0;
tĩnh const uint8_t A1 = ADC_A1;
tĩnh const uint8_t A2 = ADC_A2;
tĩnh const uint8_t A3 = ADC_A3;
tĩnh const uint8_t A4 = ADC_A4;
tĩnh const uint8_t A5 = ADC_A5;
tĩnh const uint8_t A6 = ADC_A6;
tĩnh const uint8_t A7 = ADC_A7;

/*
* Giao diện nối tiếp
*
* Cần phải có RX và TX.
* Nếu bạn không có cổng nối tiếp, hãy sử dụng các chân chưa sử dụng
* CTS và RTS là tùy chọn.
*/
#xác định PIN_SERIAL_RX (11)
#xác định PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

Công tắc có nút cảm ứng và nút bấm khéo léo ở mặt sau của thiết bị. Nút khéo léo này sẽ được sử dụng cho các chế độ dịch vụ, chế độ liên kết qua mạng và đặt lại thiết bị. Nút bấm có tính năng chống nảy bằng sắt. Đường của cảm biến điện dung và đường của nút chiến thuật được kết nối thông qua điốt Schottky và được kết nối với chân analog p0.05, đồng thời từ cảm biến điện dung và nút chiến thuật cũng có các đường đến các chân MK p0.25 và p0.27 .0.05 để đọc trạng thái sau khi kích hoạt ngắt trên chân p0.05. Trên chân pXNUMX, ngắt qua bộ so sánh (NRF_LPCOMP) qua EVENTS_UP được kích hoạt. Tôi đã nhận được cảm hứng để giải quyết vấn đề đây и đây.

Công tắc đã được thêm vào mạng Mysensors, được quản lý bởi bộ điều khiển nhà thông minh Majordomo (địa điểm dự án)

Mã PHP để thêm một nút chuyển vào phương thức statusUpdate

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

Xem kết quả trong video

Chơi video

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Sau đó, một tùy chọn đã được thực hiện với bộ chuyển đổi tăng cường, nhưng điều này không liên quan đến hoạt động của vi mạch điện dung TTP223, người ta mong muốn có được ánh sáng tốt và đồng đều hơn khi nhấn các phím trong suốt thời lượng pin.

XemCông tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Dự án Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Nói tiếng Nga trang web cộng đồng cảm biến của tôi

Trò chuyện Telegram Mysensors — giải pháp nhanh chóng cho các vấn đề với Mysensors, mẹo, thủ thuật, cài đặt bảng mạch, làm việc với bộ vi điều khiển atmega 328, stm32, nRF5 trong Arduino IDE — @mysensors_rus

Vài hình ảnhCông tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Công tắc cảm ứng không dây có thêm đèn nền huỳnh quang

Nguồn: www.habr.com

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster