Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Pozdrav svim čitaocima rubrike “Uradi sam ili uradi sam” na Habru! Današnji članak će biti o dodirnom prekidaču na TTP223 čipu | list sa podacima. Prekidač radi na mikrokontroleru nRF52832 | list sa podacima, korišten je modul YJ-17103 sa štampanom antenom i konektorom za eksternu MHF4 antenu. Prekidač na dodir radi na CR2430 ili CR2450 baterijama. Potrošnja u režimu prenosa nije veća od 8 mA, u režimu mirovanja ne veća od 6 µA.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Kao i svi prethodni projekti, i ovaj je Arduino projekat, program je napisan u Arduino IDE. Softverska implementacija uređaja bazirana je na Mysensors protokolu | GitHub biblioteke, nRF5 ploča podržava GitHub Mysensors Forum zajednice na engleskom jeziku - http://forum.mysensors.org, forum zajednice na ruskom jeziku - http://mysensors.ru/forum/
(Za one koji žele da studiraju - Dokumentacija, Serijski protokol, API, Protokol, Parser | za one koji žele pomoći (doprinosa) u razvoju projekta - Dokumentacija)

Tabla za prekidače na dodir razvijena je u programu Deeptrace, uzimajući u obzir naknadnu proizvodnju metodom Laser Ironing Technology (LUT). Ploča je razvijena u dimenzijama 60x60mm (standardna staklena ploča ima dimenzije 80x80mm). Kolo je odštampano na stranicama časopisa Antenna i prebačeno Bosch peglom sa postavkom "Len" (maksimalna snaga) na dvostranu folijsku ploču od fiberglasa 1.5 mm, 35 µm (u nedostatku druge).
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Nagrizanje je izvršeno otopinom željeznog klorida, prethodno pripremljenom u omjeru od 1.5 kašič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 montiranom na stalak za bušilicu DREMEL 220. Rupe za međuslojne spojeve izbušene su bušilicom od 0,4 mm, rupe za držač baterije burgijom od 1,1 mm . Obrezivanje po ivicama ploče je obavljeno istom mini bušilicom sa DREMEL 540 nastavkom (krug rezanja d=32.0mm). Orezivanje je obavljeno na respiratoru.
Kalajsovanje jetkane ploče je obavljeno pomoću legure Rose u vodenom rastvoru (1 kašičica kristalizovane limunske kiseline na 300 ml vode).

Proces lemljenja je trajao oko sat vremena, a najviše vremena utrošeno je na lemljenje žice (kalajisane, prečnika 0.4 mm) u rupama za međuslojne prelaze.

Ploča je oprana sredstvom za čišćenje aerosola FLUX OFF.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Dizajn kućišta uređaja izveden je u trodimenzionalnom kompjuterskom uređivaču dizajna. Dimenzije kućišta 78,5 mm X 78,5 mm X 12 mm.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Završeni model kućišta i poklopca pregrade za baterije je sačuvan u STL formatu, zatim je bilo potrebno ove modele pripremiti za štampanje na SLA štampaču (dodavanje nosača, orijentacija). U ovoj fazi pojavio se mali problem, jer je površina za ispis kućnih SLA štampača mala. Model kućišta uređaja u najoptimalnijem položaju u odnosu na vrijeme štampe nije se uklapao u dimenzije površine za štampu. Prilikom postavljanja modela na 45 stepeni, to je takođe dalo razočaravajući rezultat, težina oslonca bila je jednaka težini modela karoserije. Odlučeno je da se model odštampa okomito, praveći oslonac na jednoj od prednjih strana, unaprijed se složivši s činjenicom naknadne obrade. Štampanje tela je trajalo 5 sati sa postavkom sloja od 50 mikrona. Zatim je obrada obavljena vrlo finim brusnim papirom (neću pisati broj jer ne znam :)). Štampanje poklopca baterije trajalo je 40 minuta.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Staklene ploče iz Aliexpressa prodaju se sa već zalijepljenim plastičnim okvirom, nije bilo problema sa uklanjanjem okvira. Uklonio sam staklenu ploču nakon što sam je prethodno zagrijao običnim fenom za kosu.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Difuzor za LED pozadinsko osvjetljenje izrađen je od dvostrane trake sa akrilnim ljepilom 3M 9088-200. Za fluorescentnu rasvjetu bilo je na izboru nekoliko materijala, kineska ljepljiva traka i ljepljivi papir izrezan na trake domaće kompanije Luminofor. Izbor je napravljen u korist domaćeg proizvođača, po mom osjećaju sijao je jače i duže. Na vrh je zalijepljen kvadrat papira sa fluorescentnim pigmentom dvostranom trakom 3M 9088-200.

Staklo je zalijepljeno na tijelo prekidača pomoću dvostrane trake sa 3M VHB 4910 akrilnim ljepilom.
Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

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

Cijena uređaja iznosila je 890 rubalja.

Slijedio je programski dio. Bilo je nekih problema. Ispostavilo se da TTP223 senzorski čipovi rade odlično sa stabilizovanim napajanjem od 3.3 V i ne baš dobro kada se napajaju direktno iz dobro ispražnjene baterije. Prilikom pokretanja uređaja sa napajanjem od oko 2.5v, plus nakon dodatnog “ispadanja” prilikom izrade Mysensors prezentacije, mikrokolo TTP223 (odmah nakon kalibracije) izazvalo je prekid rada MK jer je bio sa aktivnim okidačem.

Promijenjeno je strujno kolo mikrokola (upravljanje napajanjem TTP223 sa gpio MK), dodatno uzemljenje, a zamijenjeni su otpornici većeg otpora na rgb led vodovima (koji rade na drugoj strani kapacitivne senzorske ploče). Dodato je i softveru: aktivacija napajanja kapacitivnog mikrokola nakon pokretanja Mysensors okvira i izrade prezentacije. Kašnjenje za automatsku kalibraciju TTP223 čipa kada se uključi napajanje je udvostručeno. Sve ove promjene u potpunosti su eliminirale ovaj problem.

Prije pregleda programskog koda, preporučujem da se upoznate sa osnovnom strukturom skica u Mysensorima.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 dugme za dodir i dugme za takt na poleđini uređaja. Ovo taktično dugme će se koristiti za servisne režime, bežični način povezivanja i resetovanje uređaja. Dugme ima funkciju protiv odbijanja gvožđa. Linija kapacitivnog senzora i linija taktnog dugmeta su povezane preko Šotkijevih dioda i spojene na analogni pin p0.05, a takođe od kapacitivnog senzora i taktnog dugmeta vode do MK pinova p0.25 i p0.27 .0.05 za čitanje 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 dodat u mrežu Mysensors, kojom upravlja pametni kućni kontroler Majordomo (web 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 sa dodatnom fluorescentnom rasvjetom

Kasnije je napravljena opcija sa pojačanim pretvaračem, ali to nije povezano s radom kapacitivnog mikrokruga TTP223, postoji više želje za dobrim i ujednačenim osvjetljenjem pri pritiskanju tipki tijekom cijelog vijeka trajanja baterije.

PogledBežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Projekt Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

govori ruski stranica zajednice Mysensors

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

Neke fotografijeBežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

Bežični prekidač na dodir sa dodatnom fluorescentnom rasvjetom

izvor: www.habr.com

Dodajte komentar