Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Lep pozdrav vsem bralcem razdelka »Naredi sam ali naredi sam« na Habru! Današnji članek bo govoril o stikalu na dotik na čipu TTP223 | podatkovni list. Stikalo deluje na mikrokontrolerju nRF52832 | podatkovni list, uporabljen je bil modul YJ-17103 s tiskano anteno in priključkom za zunanjo anteno MHF4. Stikalo na dotik deluje na baterije CR2430 ali CR2450. Poraba v načinu oddajanja ne presega 8 mA, v načinu mirovanja pa ne več kot 6 µA.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Kot vsi dosedanji projekti je tudi ta Arduino projekt, program je napisan v Arduino IDE. Programska izvedba naprave temelji na protokolu Mysensors | Knjižnice GitHub, Plošča nRF5 podpira GitHub v Mysensors. Forum skupnosti v angleškem jeziku - http://forum.mysensors.org, forum skupnosti v ruskem jeziku - http://mysensors.ru/forum/
(Za tiste, ki želite študirati - Dokumentacija, Serijski protokol, API, Protokol, razčlenjevalnik | za tiste, ki želijo pomagati (prispevkov) v razvoju projekta - Dokumentacija)

Stikalna plošča na dotik je bila razvita v programu Deeptrace ob upoštevanju naknadne izdelave po metodi laserske tehnologije likanja (LUT). Plošča je bila razvita v dimenzijah 60x60mm (standardna steklena plošča ima dimenzije 80x80mm). Vezje je bilo natisnjeno na straneh revije Antenna in preneseno z Boschevim likalnikom z nastavitvijo "Len" (največja moč) na dvostransko folijo iz steklenih vlaken 1.5 mm, 35 µm (v odsotnosti drugega).
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Jedkanje smo izvedli z raztopino železovega klorida, ki smo jo predhodno pripravili v razmerju 1.5 čajne žličke na 250 ml tople vode. Postopek je trajal 15 minut.
Vrtanje lukenj za vmesne prehode in za pritrditev nosilca baterije je bilo opravljeno z mini svedrom DREMEL 3000, nameščenim na stojalo za vrtanje DREMEL 220. Luknje za vmesne prehode so bile izvrtane s svedrom 0,4 mm, luknje za držalo baterije s svedrom 1,1 mm . Obrezovanje po robovih plošče je bilo opravljeno z istim mini svedrom z nastavkom DREMEL 540 (Rezalni krog d=32.0 mm). Obrezovanje je potekalo v respiratorju.
Kositrenje jedkane plošče je bilo opravljeno z Rose zlitino v vodni raztopini (1 čajna žlička kristalizirane citronske kisline na 300 ml vode).

Postopek spajkanja je trajal približno eno uro, večino časa smo porabili za spajkanje žice (kositrene, premera 0.4 mm) v luknje za vmesne prehode.

Plošča je bila oprana z aerosolnim čistilom FLUX OFF.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Zasnova ohišja naprave je bila izvedena v urejevalniku tridimenzionalnega računalniško podprtega oblikovanja. Dimenzije ohišja 78,5 mm X 78,5 mm X 12 mm.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Dokončan model ohišja in pokrova predala za baterije je bil shranjen v STL formatu, nato je bilo potrebno te modele pripraviti za tisk na SLA tiskalniku (dodajanje nosilcev, orientacija). Na tej stopnji se je pojavila majhna težava, saj je območje tiskanja gospodinjskih tiskalnikov SLA majhno. Model ohišja naprave v najbolj optimalnem položaju glede na čas tiskanja ni ustrezal dimenzijam površine tiskanja. Tudi pri postavitvi modela pod kotom 45 stopinj je rezultat razočaral, teža nosilca je bila enaka teži modela telesa. Odločeno je bilo, da se model natisne navpično, tako da se na eni od sprednjih strani naredi nosilec, pri čemer se vnaprej strinja z dejstvom naknadne obdelave. Tiskanje telesa je trajalo 5 ur z nastavitvijo plasti 50 mikronov. Sledila je obdelava z zelo fino zrnatim brusnim papirjem (številke ne bom napisal, ker ne vem :)). Tiskanje pokrova baterije je trajalo 40 minut.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Steklene plošče iz Aliexpressa se prodajajo z že prilepljenim plastičnim okvirjem, z odstranitvijo okvirja ni bilo težav. Stekleno ploščo sem odstranil, potem ko sem jo predgrel z navadnim sušilcem za lase.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Difuzor za LED osvetlitev ozadja je izdelan iz dvostranskega lepilnega traku z akrilnim lepilom 3M 9088-200. Za fluorescenčne sijalke je bilo na izbiro več materialov, kitajski lepilni trak in na trakove narezan lepilni papir domačega podjetja Luminofor. Izbira je bila narejena v korist domačega proizvajalca, po mojih občutkih je svetil svetlejše in dlje. Z dvostranskim trakom 3M 9088-200 smo na vrh prilepili kvadrat papirja s fluorescenčnim pigmentom.

Steklo smo prilepili na ohišje stikala z dvostranskim lepilnim trakom z akrilnim lepilom 3M VHB 4910.
Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Pokrov je bil pritrjen z vijakom M 1,4 X 5 mm.

Stroški naprave so bili 890 rubljev.

Sledil je programski del. Bilo je nekaj težav. Izkazalo se je, da senzorski čipi TTP223 odlično delujejo s stabiliziranim napajanjem 3.3 V in ne zelo dobro, če se napajajo neposredno iz dobro izpraznjene baterije. Pri zagonu naprave z napajanjem okoli 2.5 V, plus po dodatnem "črpanju" pri izdelavi predstavitve Mysensors, je mikrovezje TTP223 (takoj po kalibraciji) povzročilo prekinitev MK, ker je bil z aktivnim sprožilcem.

Spremenjen je bil napajalni tokokrog mikrovezja (upravljanje napajanja TTP223 z gpio MK), dobavljena dodatna ozemljitev in zamenjani upori z večjim uporom na rgb led linijah (ki potekajo na drugi strani kapacitivnega senzorja). Dodano je bilo tudi v programsko opremo: aktivacija napajanja za kapacitivno mikrovezje po zagonu ogrodja Mysensors in izdelavi predstavitve. Zakasnitev za samodejno kalibracijo čipa TTP223 ob priključitvi napajanja je bila podvojena. Vse te spremembe so ta problem popolnoma odpravile.

Pred ogledom programske kode priporočam, da se seznanite z osnovno strukturo skic v 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()
{

}

Testna koda programa stikala na dotik: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

Stikalo ima gumb na dotik in gumb na dotik na zadnji strani naprave. Ta taktični gumb bo uporabljen za storitvene načine, način povezovanja po zraku in ponastavitev naprave. Gumb ima železno funkcijo proti odboju. Linija kapacitivnega senzorja in linija taktnega gumba sta povezana preko Schottky diod in povezana z analognim zatičem p0.05, prav tako iz kapacitivnega senzorja in taktnega gumba potekajo linije do MK zatičev p0.25 in p0.27 .0.05 za branje stanja po aktiviranju prekinitve na pinu p0.05. Na pinu pXNUMX se aktivira prekinitev preko komparatorja (NRF_LPCOMP) preko EVENTS_UP. Dobil sem navdih za rešitev problema tukaj и tukaj.

Stikalo je bilo dodano v omrežje Mysensors, ki ga upravlja krmilnik pametnega doma Majordomo (spletno mesto projekta)

Koda PHP za dodajanje stikala metodi 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');
} 
}

Rezultat si oglejte v videu

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Kasneje je bila narejena možnost z ojačevalnim pretvornikom, vendar to ni povezano z delovanjem kapacitivnega mikrovezja TTP223, večja je želja po dobri in enakomerni osvetlitvi ob pritisku na tipke skozi celotno življenjsko dobo baterije.

GlejBrezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Projekt Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

rusko govoreči spletno mesto skupnosti Mysensors

Telegram klepet Mysensors — hitra rešitev težav z Mysensors, nasveti, triki, namestitev plošč, delo z mikrokontrolerji atmega 328, stm32, nRF5 v Arduino IDE — @mysensors_rus

Nekaj ​​fotografijBrezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Brezžično stikalo na dotik z dodatno fluorescenčno osvetlitvijo

Vir: www.habr.com

Dodaj komentar