Wireless touch switch nga adunay dugang nga fluorescent backlight

Mga pagtimbaya sa tanan nga mga magbabasa sa seksyon nga "DIY o Buhata Kini Imong Kaugalingon" sa Habr! Ang artikulo karong adlawa mahitungod sa touch switch sa TTP223 chip | datasheet. Ang switch naglihok sa nRF52832 microcontroller | datasheet, usa ka YJ-17103 nga module nga adunay giimprinta nga antenna ug usa ka connector alang sa usa ka eksternal nga MHF4 antenna ang gigamit. Ang touch switch naglihok sa CR2430 o CR2450 nga mga baterya. Ang konsumo sa transmit mode dili mosobra sa 8 mA, sa sleep mode dili molapas sa 6 μA.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Sama sa tanan nga nangaging mga proyekto, kini usa usab ka proyekto sa Arduino, ang programa gisulat sa Arduino IDE. Ang pagpatuman sa software sa device gibase sa Mysensors protocol | Mga librarya sa GitHub, Ang nRF5 board nagsuporta sa GitHub sa Mysensors. English-language nga community forum - http://forum.mysensors.org, Russian-language community forum - http://mysensors.ru/forum/
(Alang sa gustong magtuon - Документация, Serial nga Protocol, API, Protokol, parser | sa mga gusto mutabang(mga kontribusyon) sa pagpalambo sa proyekto - Документация)

Ang touch switch board naugmad sa Deeptrace nga programa, nga gikonsiderar ang sunod nga paghimo gamit ang Laser Ironing Technology (LUT) nga pamaagi. Ang board gihimo sa mga dimensyon nga 60x60mm (usa ka standard nga glass panel adunay mga sukat nga 80x80mm). Ang sirkito giimprenta sa mga panid sa Antenna magazine ug gibalhin gamit ang Bosch nga puthaw nga adunay setting nga "Len" (maximum power) ngadto sa double-sided foil fiberglass board nga 1.5mm, 35µm (kung wala ang lain).
Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang pag-ukit gihimo gamit ang usa ka solusyon sa ferric chloride, nga giandam kaniadto sa mga proporsyon nga 1.5 ka kutsarita kada 250 ml nga mainit nga tubig. Ang proseso mikabat ug 15 minutos.
Ang pag-drill sa mga lungag alang sa interlayer vias ug alang sa pag-fasten sa battery holder gihimo gamit ang DREMEL 3000 mini-drill nga gitaod sa DREMEL 220 drill stand. Ang mga lungag alang sa interlayer vias gi-drill gamit ang 0,4mm drill, mga lungag alang sa battery holder nga adunay 1,1mm drill. . Ang pagputol ubay sa mga utlanan sa board gihimo gamit ang parehas nga mini-drill nga adunay DREMEL 540 attachment (Cutting circle d=32.0mm). Ang pagpul-ong gihimo sa usa ka respirator.
Ang tinning sa etched board gihimo gamit ang Rose alloy sa tubig nga solusyon (1 teaspoon nga crystallized citric acid kada 300 ml nga tubig).

Ang proseso sa pagsolda gikuha mga usa ka oras, kadaghanan sa oras gigugol sa pagsolda wire (tinned, 0.4 mm ang diyametro) sa mga lungag alang sa interlayer vias.

Ang tabla gihugasan gamit ang FLUX OFF aerosol cleaner.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang laraw sa lawas sa aparato gihimo sa usa ka three-dimensional nga editor sa disenyo nga gitabangan sa kompyuter. Mga sukod sa kaso 78,5mm X 78,5mm X 12mm.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang nahuman nga modelo sa kaso ug ang tabon sa kompartamento sa baterya gitipigan sa format nga STL, nan kinahanglan nga andamon kini nga mga modelo alang sa pag-imprinta sa usa ka tig-imprinta sa SLA (pagdugang mga suporta, oryentasyon). Niini nga yugto, usa ka gamay nga problema ang mitungha, tungod kay ang lugar sa pag-imprinta sa mga tig-imprenta sa SLA sa panimalay gamay ra. Ang modelo sa kaso sa aparato sa labing kamalaumon nga posisyon kalabot sa oras sa pag-imprenta wala mohaum sa mga sukat sa lugar sa pag-imprinta. Kung gibutang ang modelo sa 45 degrees, naghatag usab kini usa ka makapahigawad nga sangputanan; ang gibug-aton sa suporta parehas sa gibug-aton sa modelo sa lawas. Nakahukom nga i-print ang modelo nga patindog, paghimo usa ka suporta sa usa sa mga atubangan nga kilid, nga nagkauyon nga daan sa kamatuoran sa post-processing. Ang pag-imprenta sa lawas mikabat ug 5 ka oras nga adunay layer setting nga 50 microns. Sunod, ang pagproseso gihimo gamit ang pino kaayo nga sandpaper (dili nako isulat ang numero tungod kay wala ako kahibalo :)). Ang tabon sa baterya milungtad og 40 ka minuto aron maimprinta.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang mga glass panel gikan sa Aliexpress gibaligya nga adunay usa ka plastik nga bayanan nga gipapilit; wala’y mga problema sa pagtangtang sa frame. Gikuha nako ang glass panel pagkahuman gipainit kini gamit ang usa ka regular nga hairdryer.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang diffuser alang sa LED backlight gihimo sa double-sided tape nga adunay acrylic adhesive 3M 9088-200. Alang sa fluorescent nga suga adunay daghang mga materyales nga mapilian, Chinese adhesive tape ug adhesive paper nga giputol sa mga tape gikan sa domestic company nga Luminofor. Ang pagpili gihimo pabor sa usa ka domestic nga tiggama; sumala sa akong gibati, kini mas hayag ug mas dugay. Usa ka kuwadrado nga papel nga adunay fluorescent nga pigment ang gipapilit sa ibabaw gamit ang 3M 9088-200 double-sided tape.

Ang bildo gipapilit sa switch body gamit ang double-sided tape nga adunay 3M VHB 4910 acrylic adhesive.
Wireless touch switch nga adunay dugang nga fluorescent backlight

Ang tabon giayo sa usa ka screw M 1,4 X 5 mm.

Ang gasto sa aparato mao ang 890 nga mga rubles.

Sunod miabot ang bahin sa programa. Adunay pipila ka mga problema. Kini nahimo nga ang TTP223 sensor chips nagtrabaho nga maayo sa usa ka lig-on nga 3.3V nga suplay sa kuryente ug dili kaayo maayo kung direkta nga gipaandar gikan sa usa ka maayo nga na-discharge nga baterya. Kung gisugdan ang aparato nga adunay suplay sa kuryente sa palibot sa 2.5v, dugang pagkahuman sa usa ka dugang nga "pagkuha" kung nagtrabaho sa presentasyon sa Mysensors, ang TTP223 microcircuit (pagkahuman dayon sa pagkakalibrate) hinungdan sa pagkabalda sa MK tungod kay kini adunay usa ka aktibo nga trigger.

Ang sirkito sa suplay sa kuryente sa microcircuit giusab (pagdumala sa kuryente TTP223 uban sa gpio MK), dugang nga yuta ang gihatag, ug ang mga resistor nga adunay mas taas nga resistensya gipulihan sa rgb led lines (nga nagdagan sa pikas bahin sa capacitive sensor board). Gidugang usab kini sa software: pagpaaktibo sa gahum alang sa capacitive microcircuit pagkahuman gisugdan ang Mysensors framework ug pagtrabaho sa presentasyon. Ang paglangan alang sa auto-calibration sa TTP223 chip kung ang gahum gigamit nadoble. Ang tanan niini nga mga pagbag-o hingpit nga nagwagtang niini nga problema.

Sa wala pa tan-awon ang code sa programa, girekomenda ko nga pamilyar ka sa sukaranan nga istruktura sa mga sketch sa Mysensors.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}

void setup()
{

}

void presentation()
{
//Тут происходит презентация ноды и ее сенсоров на контролере через маршрутизатор
sendSketchInfo("Name of my sensor node", "1.0"); // презентация названия ноды, версии ПО
present(CHILD_ID, S_WHATEVER, "Description"); // презентация сенсоров ноды, описания сенсоров
}

void loop()
{

}

Touch switch program test code: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
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

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

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* 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 RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

Ang switch adunay touch button ug tact button sa likod sa device. Kini nga tact button gamiton para sa mga service mode, over-the-air binding mode, ug device reset. Ang buton adunay iron anti-bounce feature. Ang linya sa capacitive sensor ug ang linya sa tact button konektado pinaagi sa Schottky diodes ug konektado sa analog pin p0.05, ug usab gikan sa capacitive sensor ug ang tact button adunay mga linya sa MK pins p0.25 ug p0.27 .0.05 para sa pagbasa sa mga estado human ma-activate ang interrupt sa pin p0.05. XNUMX. Sa pin pXNUMX, usa ka interrupt pinaagi sa comparator (NRF_LPCOMP) pinaagi sa EVENTS_UP gi-activate. Nakadawat ko og inspirasyon aron masulbad ang problema dinhi и dinhi.

Ang switch gidugang sa Mysensors network, nga gidumala sa smart home controller Majordomo (website sa proyekto)

PHP code para sa pagdugang ug switch sa statusUpdate nga pamaagi

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

Tan-awa ang resulta sa video

Wireless touch switch nga adunay dugang nga fluorescent backlight

Sa ulahi, usa ka kapilian ang gihimo gamit ang usa ka boost converter, apan kini wala’y kalabutan sa operasyon sa TTP223 capacitive microcircuit; adunay labi nga tinguha alang sa maayo ug managsama nga pag-iilaw kung gipugos ang mga yawe sa tibuuk nga kinabuhi sa baterya.

Tan-awaWireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Github nga proyekto - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Ruso nga sinultihan site sa komunidad Mga mysensor

Telegram chat Mysensors — dali nga solusyon sa mga problema sa Mysensors, mga tip, mga limbong, pag-install sa mga tabla, pagtrabaho sa atmega 328, stm32, nRF5 microcontrollers sa Arduino IDE — @mysensors_rus

Pipila ka mga litratoWireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Wireless touch switch nga adunay dugang nga fluorescent backlight

Source: www.habr.com

Idugang sa usa ka comment