Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Gréiss un all Lieser vun der Rubrik "DIY or Do It Yourself" op Habr! Den Artikel vun haut geet iwwer den Touchschalter um TTP223 Chip | Datenblat. De Schalter funktionnéiert um nRF52832 Mikrokontroller | Datenblat, e YJ-17103 Modul mat enger gedréckter Antenne an engem Stecker fir eng extern MHF4 Antenne gouf benotzt. Den Touchschalter funktionnéiert op CR2430 oder CR2450 Batterien. Verbrauch am Iwwerdroungsmodus ass net méi wéi 8 mA, am Schlofmodus net méi wéi 6 µA.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wéi all virdrun Projeten, ass dëst och en Arduino Projet, de Programm ass an der Arduino IDE geschriwwen. D'Softwareimplementatioun vum Apparat baséiert op dem Mysensors Protokoll | GitHub Bibliothéiken, nRF5 Verwaltungsrot Ënnerstëtzung GitHub an Mysensors. Engleschsproocheg Gemeinschaftsforum - http://forum.mysensors.org, russeschsproochege Gemeinschaftsforum - http://mysensors.ru/forum/
(Fir déi, déi studéiere wëllen - Dokumentatioun, Serial Protokoll, API, Protokoll, Parser | fir déi, déi wëllen hëllefen (Beiträg) an der Entwécklung vum Projet - Dokumentatioun)

Den Touch Switch Board gouf am Deeptrace Programm entwéckelt, andeems d'folgend Fabrikatioun mat der Laser Ironing Technology (LUT) Method berücksichtegt gëtt. De Board gouf an Dimensiounen vu 60x60mm entwéckelt (e Standard Glasplack huet Dimensiounen vun 80x80mm). De Circuit gouf op de Säiten vum Antenne Magazin gedréckt a mat engem Bosch Eisen mat der "Len" Astellung (maximal Kraaft) op eng duebelsäiteg Folie Glasfaserplat 1.5mm, 35μm (am Fehlen vun engem aneren) transferéiert.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Ätzen gouf mat enger Léisung vu Ferrichlorid duerchgefouert, virdru virbereet an de Verhältnisser vun 1.5 Teelöffel pro 250 ml waarmt Waasser. De Prozess huet 15 Minutten gedauert.
Drilling Lächer fir Interlayer Vias a fir d'Befestigung vum Batteriehalter gouf mat engem DREMEL 3000 Mini-Bohr op engem DREMEL 220 Buerstand montéiert. . Trimmen laanscht d'Grenze vum Bord gouf mat der selwechter Mini-Bohr mat engem DREMEL 0,4-Befestigung gemaach (Schneidkrees d = 1,1 mm). Pruning gouf an engem respirator gemaach.
D'Tinnung vum Ätschte Board gouf mat der Rose-Legierung an enger wässerlecher Léisung gemaach (1 Teelöffel kristalliséierter Zitrounesaier pro 300 ml Waasser).

De Lötprozess huet ongeféier eng Stonn gedauert, de gréissten Deel vun der Zäit gouf d'Loddrat (verdënntem, 0.4 mm Duerchmiesser) an de Lächer fir Interlayer-Vias verbruecht.

D'Plattform gouf mat FLUX OFF Aerosolreiniger gewäsch.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Den Design vum Apparatkierper gouf an engem dreidimensionalen Computer-assistéierten Design Editor duerchgefouert. Case Dimensiounen 78,5 mm X 78,5 mm X 12 mm.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

De fäerdege Modell vum Fall an Batterie Fach Cover gouf am STL Format gespäichert, dann war et néideg dës Modeller fir Dréckerei op engem SLA Dréckerspäicher virbereeden (adder Ënnerstëtzung, Orientatioun). Op dëser Etapp ass e klenge Problem entstanen, well d'Drockberäich vu SLA-Druckere vum Stot kleng ass. De Modell vum Apparatfall an der optimaler Positioun par rapport zu der Dréckzäit huet net an d'Dimensioune vum Drockgebitt gepasst. Wann Dir de Modell op 45 Grad plazéiert, huet et och en enttäuschenden Resultat ginn; D'Gewiicht vun der Ënnerstëtzung war gläich wéi d'Gewiicht vum Kierpermodell. Et gouf decidéiert de Modell vertikal ze drécken, eng Ënnerstëtzung op enger vun de viischten Säiten ze maachen, am Viraus mat der Tatsaach vun der Postveraarbechtung ausgemaach. D'Dréckerei vum Kierper huet 5 Stonnen mat enger Layer-Astellung vu 50 Mikron gedauert. Als nächst gouf d'Veraarbechtung mat ganz feinkornem Sandpapier duerchgefouert (ech schreiwen d'Zuel net well ech et net weess :)). D'Batteriedeckel huet 40 Minutten gedauert fir ze drécken.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Glasplacke vun Aliexpress gi mat engem Plastikrahmen verkaaft, dee scho gekollt ass; et waren keng Probleemer mat der Entféierung vum Frame. Ech hunn d'Glaspanel erofgeholl nodeems ech se mat engem normale Hoerrockner virgeheizt hunn.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

D'Diffusor fir d'LED Géigeliicht gouf aus doppelseiteg Band mat Acrylklebstoff 3M 9088-200 gemaach. Fir Leuchtstoffbeleuchtung waren et e puer Materialien fir ze wielen, Chinesesch Klebeband a Pechpabeier an Bänner aus der Hausfirma Luminofor geschnidden. D'Wiel gouf zugonschte vun engem Haushersteller gemaach; no menge Gefiller huet et méi hell a méi laang geschéngt. E Quadrat vu Pabeier mat fluoreszenter Pigment gouf uewen mat 3M 9088-200 doppelseiteg Band gekollt.

D'Glas gouf op d'Schalterkierper gekollt mat zweesäitege Band mat 3M VHB 4910 Acrylklebstoff.
Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

De Cover gouf mat enger Schraube M 1,4 X 5 mm fixéiert.

D'Käschte vum Apparat war 890 Rubel.

Als nächst koum de Programmdeel. Et waren e puer Problemer. Et stellt sech eraus datt TTP223 Sensor Chips super funktionnéieren mat enger stabiliséierter 3.3V Energieversuergung an net ganz gutt wann se direkt vun enger gutt entladter Batterie ugedriwwe ginn. Beim Start vum Apparat mat enger Energieversuergung ëm 2.5v, plus no engem zousätzleche "Dowdown" beim Ausschaffen vun der Mysensors Presentatioun, huet den TTP223 Mikrokrees (direkt no der Kalibrierung) eng Ënnerbriechung vum MK verursaacht well et mat engem aktiven Ausléiser war.

D'Energieversuergung Circuit zu der microcircuit war geännert (Muecht Gestioun TTP223 mat gpio MK), zousätzlech Buedem war geliwwert, a resistors mat méi héich Resistenz goufen op der rgb gefouert Linnen ersat (déi op der anerer Säit vun der capacitive Sensor Verwaltungsrot lafen). Et gouf och an d'Software bäigefüügt: d'Aktivatioun vun der Kraaft fir de kapazitiven Mikrokrees no der Start vum Mysensors Kader an der Presentatioun auszeschaffen. D'Verzögerung fir d'Autokalibratioun vum TTP223 Chip wann d'Kraaft ugewannt gëtt ass verduebelt ginn. All dës Ännerungen hunn dëse Problem komplett eliminéiert.

Ier Dir de Programmcode kuckt, recommandéieren ech Iech mat der Basisstruktur vu Skizzen an Mysensors vertraut ze maachen.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 Programm 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

De Schalter huet en Touch-Knäppchen an en Takt-Knäppchen op der Réck vum Apparat. Dësen Taktknäppchen gëtt fir Servicemodi, Iwwer-der-Loft Bindungsmodus an Apparat zréckgesat. De Knäppchen huet eng Eisen Anti-Bounce Feature. D'Linn vum kapazitiven Sensor an d'Linn vum Auerknäppchen sinn duerch Schottky-Dioden ugeschloss a verbonne mam Analog-Pin p0.05, an och vum kapazitiven Sensor an dem Auerknäppchen ginn et Linnen op d'MK-Pins p0.25 an p0.27 .0.05 fir liesen Staaten no aktivéieren der Ënnerbriechung op PIN p0.05. XNUMX. Op Pin pXNUMX gëtt en Ënnerbriechung iwwer de Comparator (NRF_LPCOMP) iwwer EVENTS_UP aktivéiert. Kritt Inspiratioun fir de Problem ze léisen hei и hei.

De Schalter gouf an de Mysensors Netzwierk bäigefüügt, verwalt vum Smart Home Controller Majordomo (Projet Websäit)

PHP Code fir e Schalter op d'StatusUpdate Method ze addéieren

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

Kuckt d'Resultat am Video

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Méi spéit gouf eng Optioun mat engem Boost Converter gemaach, awer dëst ass net mat der Operatioun vum kapazitiven Mikrokrees TTP223 verbonnen; et gëtt méi Wonsch fir eng gutt an eenheetlech Beliichtung wann Dir d'Schlësselen duerch d'ganz Batterieleszäit dréckt.

ViewWireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Projet Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Russesch-allgemengen Communautéit Site Mysensoren

Telegram Chat Mysensors - séier Léisung fir Probleemer mat Mysensors, Tipps, Tricks, Installatioun vu Boards, schafft mat atmega 328, stm32, nRF5 Mikrokontroller an der Arduino IDE - @mysensors_rus

E puer FotoenWireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Wireless Touchschalter mat zousätzlech Leuchtstoffbeliichtung

Source: will.com

Setzt e Commentaire