Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Pozdrav svim čitateljima rubrike “Uradi sam ili uradi sam” na Habru! Današnji članak bit će o dodirnom prekidaču na TTP223 čipu | podatkovni list. Prekidač radi na nRF52832 mikrokontroleru | podatkovni list, korišten je modul YJ-17103 s tiskanom antenom i konektorom za vanjsku MHF4 antenu. Prekidač na dodir radi na baterije CR2430 ili CR2450. Potrošnja u načinu prijenosa nije veća od 8 mA, u načinu mirovanja ne više od 6 µA.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Kao i svi dosadašnji projekti i ovaj je Arduino projekt, program je napisan u Arduino IDE. Programska implementacija uređaja temelji se na Mysensors protokolu | GitHub biblioteke, nRF5 ploča podržava GitHub u Mysensors. Forum zajednice na engleskom jeziku - http://forum.mysensors.org, forum zajednice na ruskom jeziku - http://mysensors.ru/forum/
(Za one koji žele studirati - Документация, Serijski protokol, API, protokol, parser | za one koji žele pomoći (doprinosi) u razvoju projekta - Документация)

Ploča s prekidačem na dodir razvijena je u programu Deeptrace, uzimajući u obzir naknadnu proizvodnju metodom tehnologije laserskog glačanja (LUT). Ploča je razvijena u dimenzijama 60x60mm (standardna staklena ploča je dimenzija 80x80mm). Krug je otisnut na stranicama časopisa Antenna i prebačen Bosch peglom s postavkom "Len" (maksimalna snaga) na dvostranu foliju od stakloplastike 1.5 mm, 35 µm (u nedostatku druge).
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Jetkanje je provedeno otopinom željeznog klorida, prethodno pripremljenom u omjeru od 1.5 čajne žličice na 250 ml tople vode. Proces je trajao 15 minuta.
Bušenje rupa za međuslojne otvore i za pričvršćivanje držača baterije izvedeno je mini bušilicom DREMEL 3000 postavljenom na stalak za bušenje DREMEL 220. Rupe za međuslojne otvore izbušene su bušilicom od 0,4 mm, rupe za držač baterije bušilicom od 1,1 mm . Obrezivanje po rubovima ploče učinjeno je istom mini bušilicom s nastavkom DREMEL 540 (krug rezanja d=32.0 mm). Obrezivanje je obavljeno u respiratoru.
Kositrenje jetkane ploče učinjeno je pomoću Rose legure u vodenoj otopini (1 žličica kristalizirane limunske kiseline na 300 ml vode).

Proces lemljenja trajao je oko sat vremena, najviše vremena je potrošeno na lemljenje žice (kositrene, promjera 0.4 mm) u rupama za međuslojne otvore.

Ploča je oprana FLUX OFF sredstvom za čišćenje u spreju.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Dizajn tijela uređaja izveden je u trodimenzionalnom uređivaču dizajna potpomognutom računalom. Dimenzije kućišta 78,5 mm X 78,5 mm X 12 mm.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Gotov model kućišta i poklopca pretinca za baterije je spremljen u STL formatu, te je te modele bilo potrebno pripremiti za ispis na SLA printeru (dodavanje nosača, orijentacija). U ovoj fazi pojavio se mali problem, jer je područje ispisa kućanskih SLA pisača malo. Model kućišta uređaja u najoptimalnijem položaju u odnosu na vrijeme ispisa nije se uklapao u dimenzije ispisne površine. Kod postavljanja modela na 45 stupnjeva, također je dao razočaravajući rezultat, težina nosača bila je jednaka težini modela tijela. Odlučeno je da se model ispisuje okomito, čineći oslonac na jednoj od prednjih strana, slažući se unaprijed s činjenicom naknadne obrade. Ispis tijela trajao je 5 sati s postavkom sloja od 50 mikrona. Dalje je obrada izvršena vrlo fino zrnatim brusnim papirom (neću pisati broj jer ne znam :)). Ispis poklopca baterije trajao je 40 minuta.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Staklene ploče iz Aliexpressa prodaju se s već zalijepljenim plastičnim okvirom, nije bilo problema s uklanjanjem okvira. Uklonio sam staklenu ploču nakon što sam je prethodno zagrijao običnim sušilom za kosu.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Difuzor za LED pozadinsko osvjetljenje izrađen je od dvostrane trake s akrilnim ljepilom 3M 9088-200. Za fluorescentnu rasvjetu bilo je na izbor nekoliko materijala, kineska ljepljiva traka i ljepljivi papir izrezan na trake domaće tvrtke Luminofor. Izbor je napravljen u korist domaćeg proizvođača, prema mojim osjećajima, svjetlio je svjetlije i duže. Kvadrat papira s fluorescentnim pigmentom zalijepljen je na vrhu s 3M 9088-200 dvostranom trakom.

Staklo je zalijepljeno na tijelo prekidača pomoću dvostrane trake s 3M VHB 4910 akrilnim ljepilom.
Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Poklopac je pričvršćen vijkom M 1,4 X 5 mm.

Trošak uređaja bio je 890 rubalja.

Slijedio je programski dio. Bilo je nekih problema. Ispostavilo se da senzorski čipovi TTP223 rade odlično sa stabiliziranim napajanjem od 3.3 V, a ne baš dobro kada se napajaju izravno iz dobro ispražnjene baterije. Prilikom pokretanja uređaja s napajanjem od oko 2.5 V, plus nakon dodatnog "povlačenja" prilikom izrade Mysensors prezentacije, mikro krug TTP223 (odmah nakon kalibracije) izazvao je prekid MK jer je bio s aktivnim okidačem.

Promijenjen je krug napajanja mikro kruga (upravljanje napajanjem TTP223 s gpio MK), dovedeno je dodatno uzemljenje i zamijenjeni otpornici s većim otporom na rgb led vodovima (koji prolaze s druge strane ploče kapacitivnog senzora). Dodano je i softveru: aktivacija napajanja za kapacitivni mikro krug nakon pokretanja okvira Mysensors i izrade prezentacije. Odgoda za auto-kalibraciju TTP223 čipa kada se priključi napajanje je udvostručena. Sve ove promjene u potpunosti su eliminirale ovaj problem.

Prije pregleda programskog koda, preporučam da se upoznate s osnovnom strukturom skica u Mysensorsu.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()
{

}

Testni kod programa prekidača na dodir: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

Prekidač ima tipku na dodir i tipku na dodir na stražnjoj strani uređaja. Ovaj dodirni gumb koristit će se za servisne načine rada, bežični način povezivanja i resetiranje uređaja. Gumb ima željeznu značajku protiv odbijanja. Linija kapacitivnog senzora i linija tipke sata spojene su preko Schottky dioda i spojene na analogni pin p0.05, a također od kapacitivnog senzora i tipke sata vode do MK pinova p0.25 i p0.27 .0.05 za očitavanje stanja nakon aktiviranja prekida na pinu p0.05. Na pinu pXNUMX aktivira se prekid preko komparatora (NRF_LPCOMP) preko EVENTS_UP. Dobio sam inspiraciju da riješim problem ovdje и ovdje.

Prekidač je dodan u mrežu Mysensors kojom upravlja kontroler pametne kuće Majordomo (stranica projekta)

PHP kod za dodavanje prekidača 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 pogledajte u videu

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Kasnije je napravljena opcija s pretvaračem pojačanja, ali to nije povezano s radom kapacitivnog mikro kruga TTP223, postoji više želje za dobrim i ujednačenim osvjetljenjem prilikom pritiskanja tipki tijekom cijelog trajanja baterije.

gledatiBežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Projekt Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

ruskog govornog područja mjesto zajednice Moji senzori

Telegram chat Mysensors — brzo rješenje problema s Mysensorsima, savjeti, trikovi, instaliranje ploča, rad s atmega 328, stm32, nRF5 mikrokontrolerima u Arduino IDE — @mysensors_rus

Neke fotografijeBežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Bežični prekidač na dodir s dodatnim fluorescentnim pozadinskim osvjetljenjem

Izvor: www.habr.com

Dodajte komentar