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

مثل كل المشاريع السابقة، هذا المشروع هو أيضًا مشروع Arduino، البرنامج مكتوب في Arduino IDE. يعتمد تنفيذ البرنامج الخاص بالجهاز على Mysensors | , في أجهزة الاستشعار الخاصة بي. منتدى المجتمع الإنجليزي - ، منتدى مجتمع اللغة الروسية -
(للراغبين بالدراسة - , , , , | لأولئك الذين يريدون المساعدة) في تطوير المشروع - )
تم تطوير لوحة التبديل التي تعمل باللمس في برنامج Diptreys، مع الأخذ في الاعتبار الإنتاج اللاحق باستخدام طريقة تقنية الكي بالليزر (LUT). تم تصميم اللوحة بأبعاد 60 × 60 مم (أبعاد اللوحة الزجاجية القياسية 80 × 80 مم). تمت طباعة المخطط على صفحات مجلة Antenna وتم نقله باستخدام مكواة Bosch مع إعداد "Len" (الطاقة القصوى) إلى لوح من الألياف الزجاجية المطلي بالرقائق على الوجهين 1.5 مم، 35 ميكرومتر (في حالة عدم وجود لوح آخر).

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


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

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

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


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

تم تثبيت الغطاء بمسمار M 1,4 × 5 مم.
كانت تكلفة الجهاز 890 روبل.
التالي جاء الجزء البرمجيات. لم تكن هناك مشاكل. لقد اتضح أن الدوائر الدقيقة لمستشعر TTP223 تعمل بشكل جيد مع مصدر طاقة ثابت يبلغ 3.3 فولت وليس بشكل جيد عند تشغيلها مباشرة من بطارية جيدة التفريغ. عند بدء تشغيل الجهاز بمصدر طاقة يبلغ حوالي 2.5 فولت، بالإضافة إلى "السحب" الإضافي عند العمل على العرض التقديمي لـ Mysensors، تسببت شريحة TTP223 (بعد المعايرة مباشرة) في مقاطعة MK لأنه كان مزودًا بمشغل نشط.
تم تغيير دائرة إمداد الطاقة للدائرة الدقيقة (إدارة الطاقة TTP223 مع gpio MK)، وتم توصيل أرض إضافية، وتم استبدال المقاومات ذات المقاومة الأعلى على خطوط rgb led (التي تعمل على طول الجانب الآخر من لوحة الاستشعار السعوية). تمت إضافة البرنامج أيضًا: تنشيط الطاقة للدائرة الدقيقة السعوية بعد بدء إطار عمل Mysensors والعمل على العرض التقديمي. مضاعفة تأخير المعايرة التلقائية لشريحة TTP223 عند توصيل الطاقة بها. كل هذه التغييرات قضت على هذه المشكلة تمامًا.
قبل عرض رمز البرنامج، أوصي بالتعرف على البنية الأساسية للرسومات في Mysensors.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}
الإعداد باطل()
{
}
الفراغ موجود ()
{
//هنا يتم عرض العقدة وأجهزة الاستشعار الخاصة بها على وحدة التحكم عبر جهاز التوجيه
sendSketchInfo("اسم عقدة المستشعر الخاصة بي", "1.0"); // عرض اسم العقدة وإصدار البرنامج
الحاضر(معرف الطفل، S_WHATEVER، "الوصف"); // عرض أجهزة استشعار العقدة، وأوصاف أجهزة الاستشعار
}
حلقة فارغة()
{
}
رمز الاختبار لبرنامج تبديل اللمس: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;
#تعريف MY_RADIO_NRF5_ESB
//#تعريف عقدتي السلبية
#تعريف معرف العقدة الخاص بي 30
#تعريف معرف العقدة الأصلية 0
#حدد عقدتي الأصلية ثابتة
#تعريف MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0، gpio 5)
#يشمل
// انظر https://www.mysensors.org/download/serial_api_20
#تعريف معرف SENS_CHILD_ID 0
#تعريف معرف الطفل VOLT 254
رسالتي sensMsg(SENS_CHILD_ID, V_VAR1);
//رسالتي voltMsg(معرف_الطفل_VOLT، V_VOLTAGE)؛
void preHwInit() {
النوم(2000)؛
pinMode(RED_LED، الإخراج)؛
digitalWrite(RED_LED، عالي)؛
pinMode(GREEN_LED، الإخراج)؛
digitalWrite(GREEN_LED، عالي)؛
pinMode(BLUE_LED، الإخراج)؛
digitalWrite(BLUE_LED، عالية)؛
pinMode(MODE_PIN، الإدخال)؛
pinMode(SENS_PIN، الإدخال)؛
}
باطل قبل()
{
NRF_POWER->DCDCEN = 1؛
NRF_UART0->تمكين = 0؛
النوم(1000)؛
الكتابة الرقمية(BLUE_LED، منخفض)؛
النوم(150)؛
digitalWrite(BLUE_LED، عالية)؛
}
الفراغ موجود () {
sendSketchInfo("مستشعر EFEKTA Sens 1CH", "1.1");
الحاضر(SENS_CHILD_ID، S_CUSTOM، "حالة التبديل");
//الحاضر(CHILD_ID_VOLT، S_MULTIMETER، "البطارية");
}
إعداد باطل () {
الكتابة الرقمية(BLUE_LED، منخفض)؛
النوم(100)؛
digitalWrite(BLUE_LED، عالية)؛
النوم(200)؛
الكتابة الرقمية(BLUE_LED، منخفض)؛
النوم(100)؛
digitalWrite(BLUE_LED، عالية)؛
lpComp();
الكشف = خطأ؛
وقت النوم W = وقت النوم؛
pinMode (31 ، الإخراج) ؛
الكتابة الرقمية (31 ، عالية) ؛
/*
بينما (المؤقت < 10) {
المؤقت++؛
digitalWrite(GREEN_LED، منخفض)؛
انتظر(5)؛
digitalWrite(GREEN_LED، عالي)؛
انتظر(500)؛
}
المؤقت = 0؛
*/
النوم(7000)؛
بينما (المؤقت < 3) {
المؤقت++؛
digitalWrite(GREEN_LED، منخفض)؛
النوم(15)؛
digitalWrite(GREEN_LED، عالي)؛
النوم(85)؛
}
المؤقت = 0؛
النوم(1000)؛
}
حلقة باطلة () {
إذا (الكشف) {
إذا (digitalRead(MODE_PIN) == 1 و button_flag == 0 و digitalRead(SENS_PIN) == 0) {
//الكشف عن الزر الخلفي
زر العلم = 1؛
عدم النوم = 1؛
}
إذا (digitalRead(MODE_PIN) == 1 و button_flag == 1 و digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED، منخفض)؛
انتظر(10)؛
digitalWrite(RED_LED، عالي)؛
انتظر(50)؛
}
إذا (digitalRead(MODE_PIN) == 0 و button_flag == 1 و digitalRead(SENS_PIN) == 0) {
عدم النوم = 0؛
زر العلم = 0؛
digitalWrite(RED_LED، عالي)؛
lpComp_reset();
}
إذا (digitalRead(SENS_PIN) == 1 وsens_flag == 0 وdigitalRead(MODE_PIN) == 0) {
//كشف الاستشعار
sens_flag = 1؛
عدم النوم = 1؛
newmillis = millis();
وقت المقاطعة = newmillis - oldmillis؛
SLEEP_TIME_W = SLEEP_TIME_W - وقت المقاطعة؛
إذا (أرسل(sensMsg.set(الكشف))) {
إرسال العلم = 1؛
}
}
إذا (digitalRead(SENS_PIN) == 1 وsens_flag == 1 وdigitalRead(MODE_PIN) == 0) {
إذا (send_flag == 1) {
بينما (المؤقت < 10) {
المؤقت++؛
digitalWrite(GREEN_LED، منخفض)؛
انتظر(20)؛
digitalWrite(GREEN_LED، عالي)؛
انتظر(30)؛
}
المؤقت = 0؛
{} آخر
بينما (المؤقت < 10) {
المؤقت++؛
digitalWrite(RED_LED، منخفض)؛
انتظر(20)؛
digitalWrite(RED_LED، عالي)؛
انتظر(30)؛
}
المؤقت = 0؛
}
}
إذا (digitalRead(SENS_PIN) == 0 وsens_flag == 1 وdigitalRead(MODE_PIN) == 0) {
sens_flag = 0؛
عدم النوم = 0؛
إرسال العلم = 0؛
digitalWrite(GREEN_LED، عالي)؛
النوم(500)؛
lpComp_reset();
}
إذا (SLEEP_TIME_W < 60000) {
وقت النوم W = وقت النوم؛
إرسال حالة البطارية();
}
}
آخر {
//إذا (الكشف == -1) {
وقت النوم W = وقت النوم؛
إرسال حالة البطارية();
}
إذا (nosleep == 0) {
oldmillis = millis();
النوم(وقت النوم W)؛
}
}
void sendBatteryStatus() {
انتظر(20)؛
جهد البطارية = hwCPUVoltage();
انتظر(2)؛
إذا (جهد البطارية > الحد الأقصى لقيمة البطارية) {
النسبة المئوية الحالية للبطارية = 100؛
}
وإلا إذا (جهد البطارية < البطارية_vcc_min) {
النسبة المئوية الحالية للبطارية = 0؛
{} آخر
النسبة المئوية الحالية للبطارية = (100 * (جهد البطارية - الحد الأدنى لقيمة البطارية)) / (الحد الأقصى لقيمة البطارية - الحد الأدنى لقيمة البطارية)؛
}
إرسال مستوى البطارية (نسبة البطارية الحالية، 1)؛
انتظر (2000، C_INTERNAL، I_BATTERY_LEVEL)؛
//إرسال(powerMsg.set(جهد البطارية)، 1)؛
//انتظر(2000، 1، V_VAR1)؛
}
باطل lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN؛
NRF_LPCOMP->ANADETECT = 1؛
NRF_LPCOMP->INTENSET = B0100؛
NRF_LPCOMP->تمكين = 1؛
NRF_LPCOMP->TASKS_START = 1؛
NVIC_SetPriority(LPCOMP_IRQn، 15)؛
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}
باطل s_lpComp() {
إذا ((NRF_LPCOMP->ENABLE) و(NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100؛
}
}
باطل r_lpComp() {
NRF_LPCOMP->INTENSET = B0100؛
}
#إذا __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(الحدث)
الحدث = 0؛
حدث (باطل)
#else
#define NRF5_RESET_EVENT(الحدث) الحدث = 0
#endif
خارجي "C" {
void LPCOMP_IRQHandler(void) {
الكشف = صحيح؛
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();
الكشف = خطأ؛
NRF_LPCOMP->EVENTS_UP = 0؛
r_lpComp();
}
MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>
/*
* أوصاف الدبابيس. يتم تجاهل السمات بواسطة متغير arduino-nrf5.
* التعريف مأخوذ من Arduino Primo Core مع المنافذ المرتبة
*/
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
{ المنفذ 0، 2، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A0، PWM4، NOT_ON_TIMER}،
{ المنفذ 0، 3، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A1، PWM5، NOT_ON_TIMER}،
{ المنفذ 0، 4، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A2، PWM6، NOT_ON_TIMER}،
{ المنفذ 0، 5، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A3، PWM7، NOT_ON_TIMER}،
{المنفذ 0، 6، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // INT3
{المنفذ 0، 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}، //مصباح LED للمستخدم
{المنفذ 0، 9، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // NFC1
{المنفذ 0، 10، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // NFC2
{المنفذ 0، 11، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // TX
{ المنفذ 0، 12، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // استقبال
{المنفذ 0، 13، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // SDA
{المنفذ 0، 14، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // SCL
{المنفذ 0، 15، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // SDA1
{المنفذ 0، 16، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // SCL1
{المنفذ 0، 17، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // TP4
{المنفذ 0، 18، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // TP5
{المنفذ 0، 19، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // INT2
{المنفذ 0، 20، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // INT1
{المنفذ 0، 21، PIO_DIGITAL، PIN_ATTR_DIGITAL، No_ADC_Channel، NOT_ON_PWM، NOT_ON_TIMER}، // INT1
{ المنفذ 0، 22، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، لا توجد قناة ADC، PWM9، ليس مؤقت التشغيل}،
{ المنفذ 0، 23، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، لا توجد قناة ADC، PWM8، ليس مؤقت التشغيل}،
{ المنفذ 0، 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}، //مصباح LED أحمر
{ PORT0، 26، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، No_ADC_Channel، PWM11، NOT_ON_TIMER}، //مصباح LED أخضر
{ PORT0، 27، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، No_ADC_Channel، PWM11، NOT_ON_TIMER}، //مصباح LED أزرق
{ المنفذ 0، 28، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A4، PWM3، NOT_ON_TIMER}،
{ المنفذ 0، 29، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A5، PWM2، NOT_ON_TIMER}،
{ المنفذ 0، 30، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A6، PWM1، NOT_ON_TIMER}،
{ المنفذ 0، 31، PIO_DIGITAL، (PIN_ATTR_DIGITAL|PIN_ATTR_PWM)، ADC_A7، PWM0، NOT_ON_TIMER}
};
// لا تقم بإزالة هذا السطر
#يشمل
#endif
MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_
#ifdef __cplusplus
خارجي "C"
{
#endif // __cplusplus
// عدد الدبابيس المحددة في مجموعة PinDescription
#define PINS_COUNT (32u)
#تعريف NUM_DIGITAL_PINS (32u)
#تعريف NUM_ANALOG_INPUTS (8u)
#تعريف NUM_ANALOG_OUTPUTS (8u)
/*
* مصابيح LED
*
*هذا اختياري
*
* باستخدام أجهزة الاستشعار الخاصة بي، يمكنك استخدام
* hwPinMode() بدلاً من pinMode()
* يسمح لك hwPinMode() باستخدام الأوضاع المتقدمة مثل OUTPUT_H0H1 لتشغيل مصابيح LED.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#تعريف PIN_LED1 (16)
#تعريف PIN_LED2 (15)
#تعريف PIN_LED3 (17)
#تعريف RED_LED (PIN_LED1)
#تعريف GREEN_LED (PIN_LED2)
#تعريف BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#تعريف MODE_PIN (25)
#تعريف SENS_PIN (27)
/*
* المنافذ التناظرية
*
* إذا قمت بتغيير g_APinDescription، استبدل PIN_AIN0 بـ
* أرقام المنافذ التي تم تعيينها بواسطة مجموعة g_APinDescription.
* يمكنك إضافة PIN_AIN0 إلى مجموعة g_APinDescription إذا
* إذا كنت تريد توفير منافذ تناظرية مستقلة عن وحدة التحكم الدقيقة، فيمكنك الإضافة
* PIN_AIN0..PIN_AIN7 إلى مجموعة g_APinDescription المخصصة الخاصة بك
* تم تعريفه في MyBoardNRF5.cpp
*/
ثابت ثابت uint8_t A0 = ADC_A0؛
ثابت ثابت uint8_t A1 = ADC_A1؛
ثابت ثابت uint8_t A2 = ADC_A2؛
ثابت ثابت uint8_t A3 = ADC_A3؛
ثابت ثابت uint8_t A4 = ADC_A4؛
ثابت ثابت uint8_t A5 = ADC_A5؛
ثابت ثابت uint8_t A6 = ADC_A6؛
ثابت ثابت uint8_t A7 = ADC_A7؛
/*
* واجهات تسلسلية
*
* RX و TX مطلوبان.
* إذا لم يكن لديك منفذ تسلسلي، استخدم الدبابيس غير المستخدمة
* CTS وRTS اختيارية.
*/
#تعريف PIN_SERIAL_RX (11)
#تعريف PIN_SERIAL_TX (12)
#ifdef __cplusplus
}
#endif
#endif
يحتوي المفتاح على زر لمس وزر براعة في الجزء الخلفي من الجهاز. سيتم استخدام زر اللمس هذا في أوضاع الخدمة ووضع ربط الهواء وتصفير الجهاز. الزر يحتوي على حديد مضاد للارتداد. يتم توصيل خط مستشعر السعة وخط زر الساعة من خلال ثنائيات شوتكي وتوصيلهما بالدبوس التناظري p0.05، وأيضًا من مستشعر السعة وزر الساعة هناك خطوط إلى دبابيس MK p0.25 وp0.27 .0.05 لقراءة الحالات بعد تفعيل المقاطعة على الدبوس p0.05. على الطرف pXNUMX، يتم تنشيط المقاطعة عبر المقارنة (NRF_LPCOMP) بواسطة EVENTS_UP. تلقى الإلهام لحل المشكلة и .
تمت إضافة المحول إلى شبكة Mysensors التي تديرها وحدة تحكم المنزل الذكي Majordomo ()
كود PHP لإضافته إلى طريقة تحديث حالة المحول
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، هناك رغبة أكبر في الإضاءة الخلفية الجيدة والموحدة عند الضغط على عمر البطارية بأكمله.
شاهد

مشروع جيثب -
يتحدث الروسية com.mysensors
- حل سريع للمشكلات باستخدام أجهزة Mysensors والنصائح والحيل وتثبيت اللوحة والعمل مع وحدات التحكم الدقيقة atmega 328 وstm32 وnRF5 في Arduino IDE -
صور قليلة




المصدر: www.habr.com
