Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Hilsen alle læsere af afsnittet "Gør det selv eller gør det selv" på Habr! Dagens artikel vil handle om touch-kontakten på TTP223-chippen | datablad. Switchen fungerer på nRF52832 mikrocontrolleren | datablad, blev der brugt et YJ-17103-modul med en printet antenne og et stik til en ekstern MHF4-antenne. Berøringskontakten fungerer på CR2430- eller CR2450-batterier. Forbruget i sendetilstand er ikke mere end 8 mA, i dvaletilstand ikke mere end 6 µA.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Som alle tidligere projekter er dette også et Arduino-projekt, programmet er skrevet i Arduino IDE. Softwareimplementeringen af ​​enheden er baseret på Mysensors-protokollen | GitHub biblioteker, nRF5 board support GitHub i Mysensors. Engelsksproget fællesskabsforum - http://forum.mysensors.org, russisksproget fællesskabsforum - http://mysensors.ru/forum/
(For dem, der ønsker at studere - Records, Seriel protokol, API, protokol, parser | for dem der ønsker at hjælpe (bidrag) i udviklingen af ​​projektet - Records)

Touch switchboardet blev udviklet i Deeptrace-programmet, under hensyntagen til efterfølgende fremstilling ved hjælp af laserstrygeteknologien (LUT) metoden. Pladen er udviklet i dimensionerne 60x60 mm (et standard glaspanel har dimensionerne 80x80 mm). Kredsløbet blev trykt på siderne af Antennemagasinet og overført med et Bosch-jern med "Len"-indstillingen (maksimal effekt) til en dobbeltsidet foliefiberplade 1.5 mm, 35 µm (i mangel af en anden).
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Ætsning blev udført med en opløsning af jern(III)chlorid, tidligere fremstillet i forholdet 1.5 teskefulde pr. 250 ml varmt vand. Processen tog 15 minutter.
Boring af huller til mellemlagsviaer og til fastgørelse af batteriholderen er udført med et DREMEL 3000 minibor monteret på et DREMEL 220 borestativ. Huller til mellemlagsviaer blev boret med et 0,4mm bor, huller til batteriholderen med et 1,1mm bor. . Trimning langs brættets kanter blev udført med det samme minibor med en DREMEL 540 vedhæftning (Skærecirkel d=32.0 mm). Beskæringen foregik i respirator.
Fortinning af den ætsede plade blev udført under anvendelse af Rose-legering i en vandig opløsning (1 teskefuld krystalliseret citronsyre pr. 300 ml vand).

Loddeprocessen tog omkring en time, det meste af tiden gik med at lodde tråd (fortinnet, 0.4 mm i diameter) i hullerne til mellemlags-vias.

Pladen blev vasket med FLUX OFF aerosolrens.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Designet af enhedens krop blev udført i en tredimensionel computerstøttet designeditor. Kuffertmål 78,5 mm X 78,5 mm X 12 mm.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Den færdige model af kabinettet og batterirummets dæksel blev gemt i STL-format, så var det nødvendigt at forberede disse modeller til udskrivning på en SLA-printer (tilføjelse af understøtninger, orientering). På dette stadium opstod der et lille problem, da udskriftsområdet for husholdnings SLA-printere er lille. Modellen af ​​enhedens kabinet i den mest optimale position i forhold til udskrivningstiden passede ikke ind i udskriftsområdets dimensioner. Ved at placere modellen ved 45 grader gav det også et skuffende resultat, vægten af ​​støtten var lig med vægten af ​​kropsmodellen. Det blev besluttet at udskrive modellen lodret ved at lave en støtte på en af ​​forsiderne, efter at have aftalt på forhånd med efterbehandlingen. Udskrivning af kroppen tog 5 timer med en lagindstilling på 50 mikron. Dernæst blev behandlingen udført med meget finkornet sandpapir (jeg vil ikke skrive nummeret, fordi jeg ikke ved det :)). Batteridækslet tog 40 minutter at udskrive.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Glaspaneler fra Aliexpress sælges med en plastramme, der allerede er limet; der var ingen problemer med at fjerne rammen. Jeg fjernede glaspanelet efter at have forvarmet det med en almindelig hårtørrer.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Diffusoren til LED-baggrundsbelysningen var lavet af dobbeltklæbende tape med akrylklæber 3M 9088-200. Til fluorescerende belysning var der flere materialer at vælge imellem, kinesisk klæbebånd og klæbepapir skåret i bånd fra det indenlandske firma Luminofor. Valget blev truffet til fordel for en indenlandsk producent; ifølge mine følelser skinnede den lysere og længere. Et kvadrat papir med fluorescerende pigment blev limet ovenpå med 3M 9088-200 dobbeltsidet tape.

Glasset blev limet til kontaktlegemet ved hjælp af dobbeltsidet tape med 3M VHB 4910 akrylklæber.
Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Dækslet blev fastgjort med en skrue M 1,4 X 5 mm.

Omkostningerne ved enheden var 890 rubler.

Dernæst kom programdelen. Der var nogle problemer. Det viser sig, at TTP223-sensorchips fungerer fremragende med en stabiliseret 3.3V strømforsyning og ikke særlig godt, når de får strøm direkte fra et godt afladet batteri. Ved start af enheden med en strømforsyning omkring 2.5v, plus efter en ekstra "nedtrækning" ved udarbejdelse af Mysensors-præsentationen, forårsagede TTP223-mikrokredsløbet (umiddelbart efter kalibrering) en afbrydelse af MK'en, da den var med en aktiv trigger.

Strømforsyningskredsløbet til mikrokredsløbet blev ændret (strømstyring TTP223 med gpio MK), yderligere jord blev tilført, og modstande med højere modstand blev udskiftet på rgb led-linjerne (som kører på den anden side af det kapacitive sensorkort). Det blev også tilføjet til softwaren: aktivering af strøm til det kapacitive mikrokredsløb efter start af Mysensors-rammeværket og udarbejdelse af præsentationen. Forsinkelsen for automatisk kalibrering af TTP223-chippen, når der tilsluttes strøm, er blevet fordoblet. Alle disse ændringer eliminerede fuldstændigt dette problem.

Inden du ser programkoden, anbefaler jeg, at du sætter dig ind i den grundlæggende opbygning af skitser i 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()
{

}

Berøringskontakt program testkode: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

Kontakten har en touch-knap og en takt-knap på bagsiden af ​​enheden. Denne taktknap vil blive brugt til servicetilstande, over-the-air bindingstilstand og enhedsnulstilling. Knappen har en jern anti-bounce funktion. Linjen på den kapacitive sensor og linie på taktknappen er forbundet gennem Schottky-dioder og forbundet til den analoge pin p0.05, og også fra den kapacitive sensor og taktknappen er der linjer til MK pindene p0.25 og p0.27 .0.05 for aflæsning af tilstande efter aktivering af afbrydelsen på pin p0.05. XNUMX. På pin pXNUMX aktiveres et interrupt via komparatoren (NRF_LPCOMP) via EVENTS_UP. Jeg fik inspiration til at løse problemet her и her.

Switchen blev føjet til Mysensors-netværket, styret af smart home-controlleren Majordomo (projektets hjemmeside)

PHP-kode til at tilføje en switch til statusUpdate-metoden

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

Se resultatet i videoen

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Senere blev der lavet en mulighed med en boost-konverter, men det er ikke relateret til driften af ​​det kapacitive mikrokredsløb TTP223; der er mere ønske om god og ensartet belysning, når man trykker på tasterne gennem hele batteriets levetid.

SeTrådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Projekt Githubgithub.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

russisktalende community site Mine sensorer

Telegram chat Mysensors — hurtig løsning på problemer med Mysensors, tips, tricks, installation af boards, arbejde med atmega 328, stm32, nRF5 mikrocontrollere i Arduino IDE — @mysensors_rus

Nogle billederTrådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Trådløs berøringsafbryder med ekstra fluorescerende baggrundsbelysning

Kilde: www.habr.com

Tilføj en kommentar