Smart socket REDMOND SkyPort 100S

Ini adalah kelanjutan dari artikel pertama saya tentang Redmond Smart Cap . Pada artikel ini, kita akan berbicara tentang perangkat Redmond lain - Smart socket REDMOND SkyPort 100S. Perangkat ini juga didasarkan pada chip nRF51822, dan seperti yang mereka katakan di sini, Tuhan sendiri memerintahkan untuk mencoba. Jadi, soket ini dibeli. Kasing dibongkar semudah pangkalan, akses ke port pemrograman bahkan lebih nyaman. Tetapi melihat ke depan, saya akan mengatakan bahwa semuanya sedikit lebih rumit daripada yang tampak pada saya pada awalnya. Saya tidak membunyikan rangkaian outlet ini, karena Sudah ada banyak ulasan tentang peningkatan dan modifikasi outlet ini.



Dalam salah satu ulasan saya menemukan sebuah sirkuit, dan ini terbatas. Dari diagram jelas bahwa hanya 4 pin pada modul nRF51822 yang terlibat dengan cara yang sama seperti pada smart base. Perangkat ini memiliki tombol jam yang terhubung ke pin p0.00, dua LED, merah terhubung ke pin p0.01, hijau terhubung ke pin p0.02. Relai elektromagnetik pada 10A terhubung ke pin p0.03. Jadi, mulai Arduino IDE dan mulailah melempar instance:


#define BUTTON_PIN 0 #define RED_LED_PIN 1 #define GREEN_LED_PIN 2 #define RELAY_PIN 3 boolean iswitch = 0; boolean flag_button = 0; static uint32_t previousMillis; //#define MY_DEBUG #define MY_DISABLED_SERIAL #define MY_RADIO_NRF5_ESB //#define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_LOW) #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX) //#define MY_PASSIVE_NODE #define MY_NODE_ID 201 #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC #define MY_TRANSPORT_UPLINK_CHECK_DISABLED #define RELAY_ID 1 #include <MySensors.h> MyMessage lMsg(RELAY_ID, V_STATUS); void preHwInit() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(RED_LED_PIN, OUTPUT); pinMode(GREEN_LED_PIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); } void before() { digitalWrite(RED_LED_PIN, HIGH); } void presentation() { sendSketchInfo("REDMOND R nRF51", "1.0"); wait(300); present(RELAY_ID, S_BINARY, "RELAY SWITCH"); wait(300); } void setup() { digitalWrite(RED_LED_PIN, LOW); wait(300); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(200); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(200); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(500); send(lMsg.set(iswitch)); wait(500); } void loop() { if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) { flag_button = 1; previousMillis = millis(); wait(20); } if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) { //   ,   } if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) { if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) { if (iswitch == 0) { digitalWrite(GREEN_LED_PIN, HIGH); wait(10); } else if (iswitch == 1) { digitalWrite(GREEN_LED_PIN, LOW); wait(10); } flag_button = 0; iswitch = !iswitch; digitalWrite(RELAY_PIN, iswitch); wait(1500); send(lMsg.set(iswitch)); } if (millis() - previousMillis > 3000) { flag_button = 0; } } } void receive(const MyMessage & message) { if (message.type == V_STATUS) { if (message.sensor == RELAY_ID) { if (mGetCommand(message) == 1) { if (message.isAck()) { //AckG = 1; } else { wait(50); if (iswitch == 0) { digitalWrite(GREEN_LED_PIN, HIGH); }else if (iswitch == 1) { digitalWrite(GREEN_LED_PIN, LOW); } iswitch = !iswitch; wait(10); digitalWrite(RELAY_PIN, iswitch); wait(1500); send(lMsg.set(iswitch)); } } if (mGetCommand(message) == 2) { } } } } 

Seperti yang Anda lihat, kode ini kecil dan cukup sederhana, terima kasih untuk itu kepada komunitas Mysensors.


Ketika kode selesai, saya menghubungkan programmer ke perangkat dan mem-flashnya. Menghubungkan programmer ke outlet sangat sederhana, dalam kasus saya, saya mengambil dua resistor output biasa, menggigit kawat dengan pemotong kawat, membuat kait dari kawat, membengkokkannya, memasukkan kait ini ke kabel programmer dan "terhubung" ke outlet, video menunjukkan bagaimana saya melakukannya Sudah waktunya untuk menguji apa yang terjadi. Saya memasukkan smart outlet ke outlet :), membuka Majordomo , semuanya baik-baik saja, outlet sudah ada di jaringan Maysensors. Saya mengirim perintah pertama untuk menghidupkan dan ... reboot :) ... giliran tak terduga. Hal pertama yang terlintas dalam pikiran adalah power drawdown saat relay menyala. Dia mengubah program, menghapus masuknya LED ketika relay dihidupkan, untuk mengurangi konsumsi. Dan itu berhasil, soket berhenti me-reboot ketika relay dimatikan ... Tapi tidak lama :). Dan menjadi jelas bahwa modul tersebut tidak memiliki daya. Rangkaian catu daya transformer dirancang agar cukup hanya untuk bekerja dalam mode BLE. Mysensor juga menggunakan mode berbeda dari modul radio 2,4 GHz (kompatibilitas dengan RF24 - ANT). Jadi kami memiliki defisit sekitar 10mA. Setelah membahas masalah ini dalam obrolan kami, para Mysensor memutuskan untuk menambahkan kapasitor ballast, karena ini adalah manipulasi yang sangat sederhana, apa yang perlu Anda ulangi. Inilah yang terjadi:


gambar


gambar


Sambil memasang kembali stopkontak, ia mulai menguji dengan sedikit bersemangat. Perkembangannya sekarang luar biasa. Saya menulis ulang logika program kembali, menambahkan #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX) lain, yaitu, saya "memotong" radio dengan kekuatan penuh (ya, sangat sederhana dengan Mysensors ) ... Ini berfungsi. Tidak ada kesalahan Tidak ada reboot. Ini kemenangan :)


gambar



Tetapi pabrikan ini juga memiliki perangkat lain pada nRF51822 - sensor asap, sensor gerak, sensor gas, konverter termal, kipas, pelembap, pembersih, ketel ...;)


Obrolan telegram komunitas kami, tempat mereka akan selalu membantu memasang perpustakaan, mendukung papan, menjelaskan bagaimana dalam setengah jam untuk merakit jaringan sensor pada arduins tanpa sakit kepala - https://t.me/mysensors_rus

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


All Articles