لمسة لاسلكية التبديل مع الإضاءة الخلفية الفلورسنت إضافية

تحياتي لجميع القراء من DIY أو افعل ذلك بنفسك على قسم هبر! مقال اليوم سيكون حول التبديل اللمس على رقاقة TTP223 | ورقة البيانات . يعمل المفتاح على متحكم nRF52832 | تم استخدام ورقة بيانات ، وحدة YJ-17103 مع هوائي مطبوع وموصل لهوائي خارجي MHF4. يتم تشغيل مفتاح اللمس بواسطة بطاريات CR2430 أو CR2450. الاستهلاك في وضع النقل ليس أكثر من 8mA ، في وضع السكون لا يزيد عن 6mA.



مثل كل المشاريع السابقة ، يعد هذا المشروع أيضًا أحد مشاريع Arduino ، حيث يتم كتابة البرنامج في Arduino IDE. يعتمد تطبيق برنامج الجهاز على بروتوكول Mysensors | مكتبات جيثب ، دعم جيثب لوحات nRF5 في Mysensors. منتدى مجتمع اللغة الإنجليزية - http://forum.mysensors.org ، منتدى مجتمع اللغة الروسية - http://mysensors.ru/forum/
(للراغبين في الدراسة - التوثيق ، البروتوكول التسلسلي ، API ، البروتوكول ، المحلل اللغوي | للراغبين في المساعدة في تطوير المشروع - التوثيق )

تم تطوير لوحة التبديل باللمس في برنامج Diptrace ، مع مراعاة التصنيع اللاحق وفقًا لطريقة تقنية Laser Iron (LUT). لقد تم تطوير اللوحة بأحجام 60 × 60 مم (اللوحة الزجاجية القياسية لها أبعاد 80 × 80 مم). طُبعت الدائرة على صفحات مجلة Antenna وتم نقلها بواسطة مكواة بوش مع إعداد "Len" (الطاقة القصوى) على صفيحة من الألياف الزجاجية المطلية بالرقائق على الوجهين 1.5 مم و 35 ميكرون (لعدم وجود أخرى).


تم إجراء الحفر باستخدام محلول من كلوريد الحديديك ، تم إعداده مسبقًا بنسب 1.5 جزء من ملعقة لكل 250 مل من الماء الدافئ. استغرقت العملية 15 دقيقة.
تم حفر ثقوب التحولات البينية وتثبيت حامل البطارية مع مثقاب صغير DREMEL 3000 مثبت على حامل حفر DREMEL 220. تم حفر ثقوب التحولات البينية مع مثقاب 0.4 مم ، فتحات حامل البطارية مع مثقاب 1.1 ملم. تم إجراء التشذيب على طول حدود اللوحة باستخدام نفس المثقاب المصغر باستخدام فوهة DREMEL 540 (عجلة القطع d = 32.0 مم). تم زراعة المحاصيل في جهاز التنفس الصناعي.
تم إجراء عملية شد الألواح المحفورة باستخدام سبيكة روز في محلول مائي (1 ملعقة صغيرة من حمض الستريك المتبلور في 300 مل من الماء).

استغرقت عملية اللحام حوالي ساعة ، وقضى معظم الوقت في لحام السلك (معلب ، قطره 0.4 مم) في الثقوب للتحولات البينية.

تم غسل اللوحة باستخدام منظف الأيروسول FLUX OFF.




تم تطوير علبة الجهاز في محرر تصميم ثلاثي الأبعاد بمساعدة الكمبيوتر. أبعاد الهيكل 78.5 مم × 78.5 مم × 12 ملم.


تم حفظ الطراز النهائي للغطاء وغطاء البطارية بتنسيق STL ، ثم كان من الضروري تحضير هذه النماذج للطباعة على طابعة SLA (إضافة دعامات واتجاه). في هذه المرحلة ، نشأت مشكلة صغيرة ، حيث أن مساحة طباعة طابعات SLA المنزلية صغيرة. لم يتناسب حجم جسم الجهاز في الموضع الأمثل بالنسبة إلى وقت الطباعة في حجم منطقة الطباعة. عند وضع النموذج على 45 درجة ، أعطى أيضًا نتيجة مخيبة للآمال ، كان وزن الدعم مساوٍ لوزن نموذج الحالة. تقرر طباعة النموذج رأسيًا ، وتقديم الدعم على أحد الجوانب الأمامية ، متفقًا مسبقًا على حقيقة المعالجة اللاحقة. استغرق الأمر 5 ساعات لاغلاق العلبة مع إعداد طبقة 50 ميكرون. بعد ذلك ، تمت المعالجة باستخدام ورق صنفرة ناعم للغاية (لن أكتب الرقم ، لأنني لا أعرف :)). تمت طباعة غطاء البطارية لمدة 40 دقيقة.


تباع الألواح الزجاجية مع Aliexpress بإطار بلاستيكي مُلصق بالفعل ، ولم تكن هناك مشاكل في إزالة الإطار. خلعت قبل التدفئة لوحة زجاجية مع مجفف شعر عادي.




لقد تم تصنيع ناشر الإضاءة الخلفية LED من شريط مزدوج الجوانب بمادة لاصقة أكريليك 3M 9088-200. بالنسبة للإضاءة الفلورية ، كان هناك العديد من المواد للاختيار من بينها ، شريط لاصق صيني وورق لاصق مقطوع إلى أشرطة من شركة Luminophore المحلية. تم الاختيار لصالح شركة تصنيع محلية ؛ وفقًا لمشاعري ، فقد كان أكثر إشراقًا وأطول. تم لصق مربع مصنوع من الورق ذي صبغة الفلورسنت على الشريط 3M 9088-200 على الوجهين.

تم لصق الزجاج على علبة قاطع الدائرة باستخدام شريط على الوجهين مع مادة لاصقة أكريليك 310 VHB 4910.


تم تثبيت الغطاء بمسمار M 1.4 X 5mm.

كانت تكلفة الجهاز 890 روبل.

وجاء بعد ذلك الجزء البرمجيات. لا مشكلة اتضح أن الدوائر الدقيقة لجهاز استشعار TTP223 تعمل بشكل مثالي مع الطاقة المستقرة عند 3.3 فولت ، وهي ليست جيدة جدًا عند التشغيل مباشرة من بطارية مفرغة جيدًا. في بداية الجهاز مع الطاقة في منطقة 2.5 فولت ، بالإضافة إلى "سحب" إضافي عند العمل على عرض Mysensors ، تسببت رقاقة TTP223 (مباشرة بعد المعايرة) في توقف MK بسبب كونها مع الزناد النشط.

تم تغيير دائرة توفير الطاقة للرقاقة (إدارة الطاقة TTP223 مع gpio MK) ، وتم توفير أرضية إضافية ، على خطوط rgb led (التي تمر على الجانب الآخر من لوحة الاستشعار بالسعة) ، وتم استبدال المقاومات ذات المقاومة العالية. تمت إضافته أيضًا إلى البرنامج: تنشيط الطاقة لدائرة كهربائية دقيقة بالسعة بعد بدء تشغيل إطار Mysensors والعمل على العرض التقديمي. يتضاعف تأخير المعايرة التلقائية لرقاقة TTP223 عند تطبيق الطاقة عليها. كل هذه التغييرات ثابتة تماما هذه المشكلة.

قبل عرض رمز البرنامج ، أوصي بأن تتعرف على البنية الأساسية للرسومات في 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()
{

}



رمز الاختبار لبرنامج التبديل اللمس:
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



يحتوي المفتاح على زر لمس وزر ساعة في الجزء الخلفي من الجهاز. سيتم استخدام زر الساعة هذا في أوضاع الخدمة ، وضع التقاط الهواء ، وضعف الجهاز. زر ينفذ الحديد ترتد المضادة. يتم توصيل خط المستشعر السعوي وخط زر الساعة عبر ثنائيات Schottky وتوصيلهما بالتناظرية p0.05 ، والخطوط المؤدية إلى دبابيس MK p0.25 و p0.27 تذهب إلى المستشعر بالسعة وزر الساعة لقراءة الحالات بعد تنشيط المقاطعة على دبوس p0. 05. على رقم التعريف الشخصي p0.05 ، يتم تنشيط مقاطعة عبر المقارنة (NRF_LPCOMP) بواسطة EVENTS_UP. حصلت على إلهام لحل المشكلة هنا وهنا .

تمت إضافة المفتاح إلى شبكة Mysensors ، التي تديرها وحدة تحكم المنزل الذكي ، Magordomo ( موقع المشروع )

كود PHP للإضافة إلى طريقة التبديل 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'); } } 



مشاهدة النتيجة على الفيديو





في وقت لاحق ، تم إجراء خيار باستخدام محول التعزيز ، لكن هذا لا يتعلق بتشغيل رقاقة سعوية TTP223 ، فهناك رغبة أكبر في الحصول على إضاءة جيدة وموحدة عند اختبار الصنابير لعمر البطارية بالكامل.

نظرة





مشروع جيثب - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

موقع مجتمع اللغة الروسية Mysensors

Telegram chat Mysensors - حل سريع لمشاكل Mysensors ، والنصائح ، والحيل ، وتثبيت لوحات ، والعمل مع atmega 328 ، stm32 ، nRF5 ميكروكنترولر في Arduino IDE -mysensors_rus

بعض الصور









Source: https://habr.com/ru/post/ar457992/


All Articles