Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Groeten aan alle lezers van de sectie “DIY of Do It Yourself” op Habr! Het artikel van vandaag gaat over de aanraakschakelaar op de TTP223-chip | data papier. De schakelaar werkt op de nRF52832-microcontroller | data papierwerd een YJ-17103-module met een gedrukte antenne en een connector voor een externe MHF4-antenne gebruikt. De aanraakschakelaar werkt op CR2430- of CR2450-batterijen. Het verbruik in de zendmodus bedraagt ​​maximaal 8 mA, in de slaapmodus maximaal 6 µA.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Net als alle voorgaande projecten is ook dit een Arduino-project, het programma is geschreven in de Arduino IDE. De software-implementatie van het apparaat is gebaseerd op het Mysensors-protocol | GitHub-bibliotheken, nRF5-bord ondersteunt GitHub in Mijnsensoren. Engelstalig communityforum - http://forum.mysensors.org, Russischtalig gemeenschapsforum - http://mysensors.ru/forum/
(Voor degenen die willen studeren - Документация, Serieel protocol, API, protocol, ontleder | voor wie wil helpen (bijdragen) bij de ontwikkeling van het project - Документация)

Het aanraakschakelbord is ontwikkeld in het Deeptrace-programma, waarbij rekening is gehouden met de daaropvolgende productie met behulp van de Laser Ironing Technology (LUT)-methode. De plaat is ontwikkeld in de afmetingen 60x60mm (een standaard glaspaneel heeft de afmetingen 80x80mm). Het circuit werd afgedrukt op de pagina's van het tijdschrift Antenna en overgebracht met een Bosch-strijkijzer met de "Len" -instelling (maximaal vermogen) op een dubbelzijdige folieglasvezelplaat van 1.5 mm, 35 µm (bij afwezigheid van een ander).
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Het etsen werd uitgevoerd met een oplossing van ijzerchloride, vooraf bereid in een verhouding van 1.5 theelepels per 250 ml warm water. Het proces duurde 15 minuten.
Het boren van gaten voor tussenlaagse via's en voor het bevestigen van de batterijhouder werd uitgevoerd met een DREMEL 3000 miniboor gemonteerd op een boorstandaard DREMEL 220. Gaten voor tussenlaagse via's werden geboord met een boor van 0,4 mm, gaten voor de batterijhouder met een boor van 1,1 mm . Het afsnijden langs de randen van de plank werd gedaan met dezelfde miniboor met een DREMEL 540 opzetstuk (snijcirkel d=32.0 mm). Het snoeien gebeurde met een gasmasker.
Het vertinnen van het geëtste bord gebeurde met een Rose-legering in een waterige oplossing (1 theelepel gekristalliseerd citroenzuur per 300 ml water).

Het soldeerproces duurde ongeveer een uur, waarbij het grootste deel van de tijd werd besteed aan het solderen van draad (vertind, 0.4 mm in diameter) in de gaten voor tussenlaagse via's.

De plaat werd gewassen met FLUX OFF spuitbusreiniger.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Het ontwerp van de behuizing van het apparaat werd uitgevoerd in een driedimensionale computerondersteunde ontwerpeditor. Afmetingen behuizing 78,5 mm x 78,5 mm x 12 mm.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Het voltooide model van de behuizing en het deksel van het batterijcompartiment werd opgeslagen in STL-formaat, waarna het nodig was om deze modellen voor te bereiden voor afdrukken op een SLA-printer (steunen toevoegen, oriëntatie). In dit stadium deed zich een klein probleem voor, omdat het afdrukgebied van huishoudelijke SLA-printers klein is. Het model van de apparaatbehuizing in de meest optimale positie ten opzichte van de printtijd paste niet in de afmetingen van het printgebied. Bij het plaatsen van het model op 45 graden gaf het eveneens een teleurstellend resultaat; het gewicht van de steun was gelijk aan het gewicht van het lichaamsmodel. Er werd besloten om het model verticaal af te drukken, waarbij een steun aan een van de voorkanten werd aangebracht, nadat er vooraf overeenstemming was bereikt over de nabewerking. Het printen van de body duurde 5 uur met een laaginstelling van 50 micron. Vervolgens werd de verwerking uitgevoerd met zeer fijnkorrelig schuurpapier (ik zal het nummer niet schrijven omdat ik het niet weet :)). Het afdrukken van het batterijklepje duurde 40 minuten.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Glazen panelen van AliExpress worden verkocht met een al gelijmd plastic frame; er waren geen problemen met het verwijderen van het frame. Ik heb het glazen paneel verwijderd nadat ik het had voorverwarmd met een gewone haardroger.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

De diffuser voor de LED-achtergrondverlichting was gemaakt van dubbelzijdige tape met acrylkleefstof 3M 9088-200. Voor fluorescentieverlichting kon men kiezen uit verschillende materialen: Chinees plakband en in tapes gesneden zelfklevend papier van het binnenlandse bedrijf Luminofor. De keuze werd gemaakt ten gunste van een binnenlandse fabrikant, volgens mijn gevoelens scheen deze helderder en langer. Een vierkant papier met fluorescerend pigment werd erop geplakt met dubbelzijdige tape 3M 9088-200.

Het glas werd op het schakelaarhuis gelijmd met behulp van dubbelzijdige tape met 3M VHB 4910 acrylkleefstof.
Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Het deksel werd bevestigd met een schroef M 1,4 X 5 mm.

De kosten van het apparaat bedroegen 890 roebel.

Vervolgens kwam het programmaonderdeel. Er waren enkele problemen. Het blijkt dat TTP223-sensorchips uitstekend werken met een gestabiliseerde 3.3V-voeding en niet erg goed wanneer ze rechtstreeks worden gevoed vanuit een goed ontladen batterij. Bij het opstarten van het apparaat met een voeding van ongeveer 2.5 V, plus na een extra "drawdown" bij het uitwerken van de Mysensors-presentatie, veroorzaakte de TTP223-microschakeling (onmiddellijk na kalibratie) een onderbreking van de MK omdat deze een actieve trigger had.

Het voedingscircuit naar de microschakeling werd gewijzigd (energiebeheer TTP223 met gpio MK), er werd extra aarde aangebracht en er werden weerstanden met hogere weerstand vervangen op de rgb-ledlijnen (die aan de andere kant van het capacitieve sensorbord lopen). Ook werd het aan de software toegevoegd: activering van de stroom voor de capacitieve microschakeling na het starten van het Mysensors-framework en het uitwerken van de presentatie. De vertraging voor automatische kalibratie van de TTP223-chip wanneer de stroom wordt ingeschakeld, is verdubbeld. Al deze veranderingen hebben dit probleem volledig geëlimineerd.

Voordat u de programmacode bekijkt, raad ik u aan om vertrouwd te raken met de basisstructuur van schetsen in 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()
{

}

Aanraakschakelaar programma testcode: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();
}

MijnBoardNRF5.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

MijnBoardNRF5.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

De schakelaar heeft een aanraakknop en een tactknop aan de achterkant van het apparaat. Deze tactknop wordt gebruikt voor servicemodi, draadloze verbindingsmodus en apparaatreset. De knop is voorzien van een ijzeren anti-stuitfunctie. De lijn van de capacitieve sensor en de lijn van de tactknop zijn verbonden via Schottky-diodes en verbonden met de analoge pin p0.05, en ook vanaf de capacitieve sensor en de tactknop zijn er lijnen naar de MK-pinnen p0.25 en p0.27 .0.05 voor het lezen van statussen na het activeren van de interrupt op pin p0.05. Op pin pXNUMX wordt een interrupt via de comparator (NRF_LPCOMP) via EVENTS_UP geactiveerd. Ik kreeg inspiratie om het probleem op te lossen hier и hier.

De switch is toegevoegd aan het Mysensors-netwerk, beheerd door de smart home controller Majordomo (project site)

PHP-code voor het toevoegen van een schakelaar aan de statusUpdate-methode

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

Zie het resultaat in de video

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Later is er gekozen voor een boostconverter, maar deze heeft niets te maken met de werking van de capacitieve microschakeling TTP223; er is meer behoefte aan een goede en gelijkmatige verlichting bij het indrukken van de toetsen gedurende de gehele levensduur van de batterij.

ZienDraadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Project Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Russisch sprekend gemeenschapssite Mijnsensoren

Telegramchat Mijnsensoren — snelle oplossing voor problemen met Mysensors, tips, trucs, boards installeren, werken met atmega 328, stm32, nRF5 microcontrollers in de Arduino IDE — @mysensors_rus

Weinig foto'sDraadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Draadloze aanraakschakelaar met extra fluorescerende achtergrondverlichting

Bron: www.habr.com

Voeg een reactie