مرحبا جميعا!
لدي اليوم مقال حول كيف يمكنك ، بمساعدة مكبرات صوت Yandex Alice و Arduino ، فتح باب متصل بجهاز اتصال داخلي. إذا كنت مهتمًا ، من فضلك ، تحت القط.
غالبًا ما يحدث أن يتصل شخص ما بجهاز الاتصال الداخلي ، وفي تلك اللحظة تكون مشغولًا بشيء ما ، أو أنك كسول جدًا بحيث لا يمكنك الخروج لفتح الباب. موقف مألوف ، أليس كذلك؟
والاتصال الداخلي الخاص بي لا يفتح الباب على الإطلاق دون التقاط سماعة الهاتف ، وإذا لم ترفع سماعة الهاتف في غضون 30 ثانية بعد المكالمة ، فسيتوقف زر فتح الباب عن العمل حتى تصل مكالمة جديدة. نظرًا لأن الاتصال الداخلي ليس رخيصًا (في ذلك الوقت) ، فقد خنقني الضفدع لتغييره إلى آخر. وقررت محاربته.
ظهرت أول فكرة لتبسيط حياتي منذ 10 سنوات ، قررت صنع محول هاتف داخلي حتى يتم تكرار المكالمة من الاتصال الداخلي إلى هاتفي المنزلي. ارسم مخططًا ، وقم بتجميع نموذج أولي على لوح التجارب. كل شيء يعمل ، لكني لم أتجاوز هذا النموذج الأولي. كل شيء ما زال ملقى في سلة المهملات حتى يومنا هذا.
تم تنفيذ المشروع الثاني على جهاز توجيه TL-MR3020 مع برنامج CyberWRT الثابت وبرنامج BareSIP هاتف SIP. عندما تضغط على زر اللوحة الخارجية ، قام جهاز التوجيه ، بالتوازي مع مكالمة الاتصال الداخلي ، بالاتصال بالهاتف المحمول وكان من الممكن حتى أثناء وجودك في مدينة أخرى التحدث إلى الشخص الذي يقف بالقرب من باب شقتك ، لكن الهاتف الناعم أو جهاز التوجيه نفسه يعمل بشكل غير مستقر للغاية ويجب التخلي عنه
لكن هنا ، لسعادتي ، في العام الماضي أعطوني مساعد صوت أليس في عيد ميلادي وكان لدي فكرة جديدة - لفتح الباب بصوتي ، من خلال عمود ياندكس
واليوم جاء اليوم الذي تعهدت فيه بتنفيذ فكرتي.
قليلا عن كيفية عمل محطة باب الاتصال الداخلي عبر الفيديو
اللوحة الخارجية متصلة بشاشة الاتصال الداخلي باستخدام 4 أسلاك GND و +12 V والصوت والفيديو.
إذا كنت على لوحة الاتصال ، أغلق سلك الصوت عبر مقاوم 100 أوم إلى GND ، فسيتم سماع إشارة الاتصال. وإذا تم تطبيق +12 V على سلك الصوت ، فسيعمل مرحل فتح القفل الكهرومغناطيسي.
توضح الصورة أدناه مخطط اتصال اللوحة الخارجية بهاتف الباب.
إذا كنت تستخدم كبل اتصال داخلي خاص لتوصيل محطة الباب بالشاشة ، فعادة ما يتم توصيله وفقًا للإرشادات التالية:
GND - تجديل
+ 12V - سلك أحمر
صوت - سلك أزرق
فيديو - قلب مركزي للكابل المحوري
مخطط
يتضح من الرسم التخطيطي أنه لتوصيل الجهاز الموجود على Arduino بالاتصال الداخلي ، تحتاج إلى توصيل سلكين فقط. لتوصيل هذه الأسلاك ، استخدمت ما لدي في متناول اليد. بدلاً من المرحل ، يمكنك استخدام مفتاح في ترانزستور NPN أو optocoupler PC817.
لقد استخدمت جهاز استقبال الأشعة تحت الحمراء ، وهو أول جهاز لفت انتباهي ، والذي أسقطته ذات مرة من جهاز تلفزيون قديم والذي ظل مستلقياً على رفّي في سلة المهملات لسنوات عديدة.
المكونات المستخدمة
اردوينو نانو
ريلاي وحدة
استقبال الأشعة تحت الحمراء 38 كيلو هرتز
أسلاك دوبونت
بدلاً من Arduino nano ، يمكنك استخدام أي متحكم آخر من خط Arduino. لقد استخدمت Arduino nano لأن لدي الكثير منهم.
مصدر اردوينو
الكود بسيط للغاية ومباشر.
لتلقي وحفظ رمز الزر المضغوط ، تحتاج إلى وضع وحدة تحكم Arduino في وضع إضافة زر بعيد. ستحتاج إلى تعيين وصلة مرور على دبابيس D2 و GND والضغط على زر إعادة الضبط في Arduino ، وبعد ذلك سيضيء مؤشر LED الخاص بالنظام على لوحة التحكم وستنتظر وحدة التحكم حتى يتم الضغط على الزر الموجود على جهاز التحكم عن بُعد.
أوصي باستخدام جهاز التحكم عن بُعد الخاص بالتلفزيون ، بحيث يمكنك ، بالإضافة إلى التحكم الصوتي ، فتح الباب من جهاز التحكم عن بُعد دون النهوض من الأريكة. على جهاز التحكم عن بعد ، من الأفضل اختيار زر نادرًا ما تستخدمه ، وعادةً ما تكون أربعة أزرار ملونة مصممة للنص التليفزيوني. بعد استلام الرمز ، سيومض Arduino بمرح بمصباح LED ويعود إلى وضع الاستعداد.
يمكنك الضغط على الأزرار بقدر ما تريد ، لكن Arduino سيتذكر آخر ضغطة فقط. للخروج من وضع حفظ الكود ، يكفي إزالة العبور والضغط على زر "إعادة الضبط" الموجود في وحدة التحكم الدقيقة.
كود اردوينو
#include <IRremote.h>
#include <EEPROM.h>
//#define TOLERANCE 35 //
#define IR_RECEIVE_PIN 11 //
#define RELAY_PIN 12 //
#define SET_PIN 2 //
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn(); //
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(SET_PIN, INPUT_PULLUP); //D10 , « »
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// Serial.begin(115200);
while(!digitalRead(SET_PIN)) // D2 GND
{
set_command();
}
}
void loop()
{
if (irrecv.decode(&results)) //
{
if(LoadEEPROM()==results.value) // (ir_command==results.value)LoadEEPROM();
{
digitalWrite(RELAY_PIN, HIGH); //
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(RELAY_PIN, LOW); //
}
irrecv.resume(); //
}
}
void set_command() //
{
digitalWrite(LED_BUILTIN, HIGH);
if (irrecv.decode(&results))
{
digitalWrite(LED_BUILTIN, LOW);
SaveEEPROM(results.value); // EEPROM
irrecv.resume(); //
}
delay(100);
}
void SaveEEPROM(unsigned long ir_code) // EEPROM
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}
unsigned long LoadEEPROM() // EEPROM
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}
#include <EEPROM.h>
//#define TOLERANCE 35 //
#define IR_RECEIVE_PIN 11 //
#define RELAY_PIN 12 //
#define SET_PIN 2 //
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn(); //
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(SET_PIN, INPUT_PULLUP); //D10 , « »
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// Serial.begin(115200);
while(!digitalRead(SET_PIN)) // D2 GND
{
set_command();
}
}
void loop()
{
if (irrecv.decode(&results)) //
{
if(LoadEEPROM()==results.value) // (ir_command==results.value)LoadEEPROM();
{
digitalWrite(RELAY_PIN, HIGH); //
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(RELAY_PIN, LOW); //
}
irrecv.resume(); //
}
}
void set_command() //
{
digitalWrite(LED_BUILTIN, HIGH);
if (irrecv.decode(&results))
{
digitalWrite(LED_BUILTIN, LOW);
SaveEEPROM(results.value); // EEPROM
irrecv.resume(); //
}
delay(100);
}
void SaveEEPROM(unsigned long ir_code) // EEPROM
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}
unsigned long LoadEEPROM() // EEPROM
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}
عند وضع الشفرة التي نشرتها أعلاه علنًا ، يرجى الإشارة إلى رابط المصدر.
الاتصال بمحطة Yandex.Station Alice
للاتصال بمكبر صوت ذكي ، تحتاج إلى Yandex Smart Remote.
ليس من الضروري شرائه من محرك بحث روسي وشركاء ، يمكن شراء جهاز التحكم عن بعد من Aliexpress بسعر أرخص قليلاً. لكن الفرق ليس كبيرًا بما يكفي للعب اليانصيب لشراء جهاز التحكم عن بعد من الصينيين. لن أخبرك بكيفية توصيل جهاز التحكم عن بعد بالمحطة ، نظرًا لوجود الكثير من الإرشادات التفصيلية حول هذا الموضوع على الإنترنت ، يمكنك العثور عليها بسهولة من نفس Yandex. سأخبرك فقط عن كيفية إعداد التفاعل بين محطة Yandex.Station وفتاحة Arduino.
للقيام بذلك ، عليك الذهاب إلى التطبيق Yandex.Browser - جميع الخدمات - الأجهزة - إدارة الجهاز - التحكم عن بعد - إضافة جهاز - التكوين يدويًا - أدخل اسم "الباب" - أضف أمرًا - أدخل اسم الأمر الصوتي "فتح" - خذ جهاز التحكم عن بعد من أي أجهزة منزلية ، أرسله إلى Yandex. واضغط على الزر المطلوب. بعد أن ينطفئ مؤشر LED الأزرق بجهاز التحكم عن بُعد ، يصبح العمود جاهزًا لتنفيذ هذا الأمر. الآن يمكنك التحقق من عبارة "Alice open the door" ، بعد قليل من التفكير ، ستقوم بتنفيذ طلبك.
استنتاج
سيسمح لك استخدام جهاز التحكم عن بُعد من Yandex في المنزل الذكي بالتحكم في أي أجهزة منزلية ، بما في ذلك جهاز التحكم عن بُعد. ومن السهل أيضًا ، بعد تجميع أبسط دائرة على Arduino ، دمج التحكم في أي أجهزة أخرى لا تحتوي على جهاز تحكم عن بعد. إنه بسيط وموثوق ولا يتطلب اتصال هذه الأجهزة بالإنترنت.
إذا أعجبك مقالتي ، يمكنك الاشتراك في قناتي حتى لا يفوتك المنشور التالي.
إذا كان لديك أي أسئلة ، يمكنك طرحها في التعليقات.