Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pintu Geser Otomatis untuk Garasi

Komponen dan persediaan

Arduino Nano R3
× 1
Breadboard (generik)
Untuk menahan Arduino Nano dan layar Oled
× 1
Tampilan Adafruit Oled
Untuk menampilkan status sensor, penghitung waktu, dan tindakan.
× 1
Modul Relai (Generik)
4 modul relai. Saya hanya menggunakan tiga dari mereka.
× 1
SparkFun Breadboard Power Supply 5V/3.3V
Saya menggunakan catu daya mini 5V dari 220V
× 1
Sakelar Tombol Tekan SparkFun 12mm
Untuk tombol reset (hapus alarm kerusakan)
× 1

Tentang proyek ini

Latar belakang

Nah, ceritanya dimulai suatu hari ketika saya tiba di rumah dan saya menyadari bahwa remote kontrol pintu geser tidak berfungsi. "Baterai!" Saya pikir, tapi tidak, ini bukan alasannya. Saya menyelidiki sedikit dan betapa mengejutkannya ketika saya melepas penutup motor pintu:seekor kadal kecil benar-benar dikarbonisasi di ruang kecil antara papan kontrol elektronik dan penyangga plastik (omong-omong, saya tidak akan mengunggah gambar dari adegan yang mengerikan). Saya kira reptil kecil itu menyentuh pengencang 220V dan menghasilkan korsleting. Hasilnya adalah kematiannya dan semua sirkuit terbakar.

Saya telah menghapus dari papan beberapa komponen yang dapat saya simpan untuk digunakan dalam proyek saya, tetapi Anda dapat melihat di foto ini bagaimana akhirnya.

Pada saat itu saya memutuskan bahwa ini mungkin alasan yang tepat untuk membuat proyek Arduino dan membangun kembali unit kontrol secara lengkap.

PERINGATAN

Untuk proyek ini Anda harus berurusan dengan komponen yang terhubung ke 220V secara langsung (atau 110V). Perhatikan bahwa ini mungkin berbahaya jika Anda tidak terlalu ahli dengan instalasi semacam ini. Tolong, hati-hati dan lanjutkan dengan hati-hati. Selalu lakukan simulasi sebelum menghubungkan ke sirkuit motor yang sebenarnya.

Komponen &Sirkuit

Proyek ini dibagi menjadi beberapa bagian, tetapi yang saya sajikan di sini adalah sirkuit Arduino yang mengontrol putaran motor dan lampu sinyal, serta memperhitungkan status sensor sakelar batas dan fotosel pengaman.

Pada awalnya, Anda mungkin berpikir bahwa membangun dan memprogram itu mudah, tetapi saya dapat meyakinkan Anda bahwa saya harus mengatasi banyak kesulitan yang membuat proyek ini begitu menarik.

Komponen penting lainnya untuk keseluruhan proyek adalah:

  • Motor listrik 220V dan panduan serta mekanisme fisik:ini tidak terpengaruh oleh tindakan kadal.
  • Penerima radio jarak jauh untuk mengeluarkan perintah "Buka":Saya telah menggunakan unit siap pakai komersial yang menyertakan pengontrol jarak jauh dan penerima.
  • Relai 220V untuk mendukung arus tinggi yang digunakan oleh motor.
  • Unit kontrol utama yang dibuat dengan Arduino Nano dan aksesori lain yang kompatibel seperti layar OLED dan modul relai. Inilah yang saya tunjukkan di portal ini.

Saya juga telah menambahkan beberapa peningkatan dan beberapa tindakan otomatis yang tidak termasuk dalam unit kontrol asli komersial.

Pinouts untuk Proyek Ini

Informasi berikut merangkum pin komponen dan cara menghubungkannya:

Seperti yang Anda lihat, untuk proyek ini saya telah menggunakan layar OLED yang langsung terpasang ke papan. Dalam kondisi kerja normal, tampilan ini terletak di dalam penutup pelindung mekanisme dan elektronik. Sehingga, Anda tidak dapat melihatnya. Sebenarnya, tampilan ini dimaksudkan untuk digunakan hanya untuk memeriksa status komponen saat Anda menyesuaikan pengaturan dan melakukan penyempurnaan kode (penyesuaian waktu maksimum misalnya).

Informasi yang diberikan oleh tampilan ini juga dapat dikirim ke port serial dan diperiksa dari laptop dengan perangkat lunak Arduino IDE, tetapi menurut saya tampilan kecil ini adalah cara yang keren untuk mengoperasikan unit tanpa perlu menggunakan laptop atau perangkat tambahan apa pun. perangkat.

Informasi yang ditampilkan dalam OLED adalah sebagai berikut:

  • Fase kode yang dieksekusi (Membuka pintu, menutup pintu, menunggu perintah "Buka", loop utama, ...)
  • Waktu yang berlalu untuk tindakan utama (Membuka, menunggu sebelum menutup kembali dan menutup)
  • Status fotosel (aktif saat seseorang atau sesuatu berada di jalur penutupan)
  • Status sensor batas TERTUTUP (aktif saat pintu tertutup penuh)
  • Status sensor batas TERBUKA (aktif saat pintu terbuka penuh)
  • Sinyal perintah BUKA (aktif saat remote control ditekan dan modul radio mengaktifkan relai)

Catatan:Layar OLED yang saya gunakan berukuran 0,96 inci dan memiliki resolusi 128 x 64 piksel. Tampilan ini dapat menggunakan I2C atau SPI untuk berkomunikasi dengan perangkat kontrol (dalam hal ini Arduino Nano) dan saya menggunakan SPI (Serial Peripheral Interface).

Diagram Alir

Bagan alur berikut merangkum kode perangkat lunak dengan cara yang mudah dibaca:

Kode

  • Versi kode perangkat lunak bahasa Inggris
  • Kode
Versi kode perangkat lunak bahasa InggrisC/C++
Di sini Anda memiliki kode dengan semua komentar yang diterjemahkan ke dalam bahasa Inggris. Ini mencakup daftar singkat kosakata untuk memahami arti variabel dan label.
/**************************** ***************************************** Otomatisisme untuk pintu geser bermotor**** ************************************************** ***************//* Komentar diterjemahkan ke bahasa Inggris, tetapi untuk membantu Anda memahami nama variabel dan label, di sini Anda memiliki kosakata cepat "Catalan-Inggris" :Bucle principal =Loop utama Sequencia Obertura =Urutan pembukaan Sequencia Tancament =Urutan penutupan Obrir =Buka; Obert =Buka Tancar =Tutup; Tancat =Bombeta Tertutup =Bola lampu Llum =lampu Porta =Gerbang / pintu Avaria =Suhu Kegagalan =Catatan Waktu =perjalanan pintu*/// Perpustakaan untuk Tampilan Lama#include #include #include #include // Kami mendefinisikan pin yang akan digunakan oleh sirkuit kontrolint FOTOCELULA =2;int BOMBETA =5; //Relai 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; //Relay 2int MOTOR_TANCAR =12; //Relay 3int OBRIR =4;// Kami mendefinisikan pin yang akan digunakan oleh layar Oled#define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 display(OLED_MOSI, OLED_SET, OLED_RESET, OLED_SETCLK, , OLED_CS);// Kami mendefinisikan variabel global unsigned long TEMPS_PORTA_OBERTA =20000; unsigned long TEMPS_MAXIM_RECORREGUT =15000; //Nanti kita akan mendefinisikan ulang nilai interval ini =1000; // Interval adalah berapa lama kita menunggu TEMPS_DISPLAY =1; // Waktu dalam detik untuk menampilkan DURADA =300; // Lingkaran untuk bola lampuunsigned long beforeMillis =0; // Melacak waktu sejak peristiwa terakhir dipecatunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // waktu dalam milidetik untuk status bohlam boolean LLUM =false; // lampu ON atau OFFboolean AVARIA =false; //waktu perjalanan pintu terlampaui tanpa mendeteksi pembatasan pengaturan switchvoid() { // Matikan motor dan lampu digitalWrite(MOTOR_OBRIR, HIGH); digitalWrite(MOTOR_TANCAR, TINGGI); digitalWrite(BOMBETA, TINGGI); // Kami menginisialisasi pin untuk automatism pinMode(FOTOCELULA, INPUT_PULLUP); pinMode(TANCAT, INPUT_PULLUP); pinMode(OBERT, INPUT_PULLUP); pinMode(OBRIR, INPUT_PULLUP); pinMode(BOMBETA, OUTPUT); pinMode(MOTOR_OBRIR, OUTPUT); pinMode(MOTOR_TANCAR, OUTPUT); // Menampilkan inisialisasi Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); tampilan.display(); // Tampilkan penundaan logo awal Adafruit(1000); tampilan.clearDisplay(); tampilan.display(); // Kami menyiapkan ukuran teks untuk tampilan (tidak penting karena nanti secara dinamis didefinisikan ulang) display.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); sebelumnyaMillis =mili(); while (digitalRead(OBRIR) ==HIGH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("BUCLE PRINCIPAL..."); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if (AVARIA dan (milis() - sebelumnyaMillis <60000)) { digitalWrite(BOMBETA, RENDAH); } else (digitalWrite(BOMBETA, HIGH)); }; // Kami menunggu sampai perintah Buka dikeluarkan dan sementara itu tampilan sedang disegarkan yang menunjukkan status sensor goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // Waktu maksimum membuka pintu (jika melebihi itu akan menunjukkan beberapa kegagalan) sebelumnyaMillis =milis(); digitalWrite(MOTOR_OBRIR, RENDAH); digitalWrite(BOMBETA, RENDAH); delay(1000);A:if (digitalRead(OBERT) ==HIGH) { masuk ke PORTA_OBERTA; }; if (digitalRead(OBRIR) ==RENDAH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Ordre Esperant per tancar"); // "Menunggu perintah untuk menutup" display.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); digitalWrite(MOTOR_OBRIR, TINGGI); digitalWrite(BOMBETA, TINGGI); penundaan (1000); while (digitalRead(OBRIR) ==TINGGI) {}; //Jangan lakukan apapun sampai perintah OPEN dikeluarkan goto SEQUENCIA_TANCAMENT; }; //--Kontrol waktu dan tampilan yang menyegarkan--------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Obrint porta"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { digitalWrite(MOTOR_OBRIR, HIGH); AVARIA =benar; // buka PORTA_OBERTA; }; //--light Kontrol frekuensi berkedip------------------ if ((currentMillis - TEMPS_LLUM)>=1000) //Berkedip dengan kecepatan rendah { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; ke A;SEQUENCIA_TANCAMENT:interval =28000; // Waktu maksimum menutup pintu (jika melebihi itu akan menunjukkan beberapa kegagalan)! sebelumnyaMillis =mili(); digitalWrite(MOTOR_TANCAR, RENDAH); digitalWrite(BOMBETA, RENDAH); if (DigitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, TINGGI); ke BUCLE_PRINCIPAL; }; if (digitalRead(OBRIR) ==RENDAH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Ordre Esperant per obrir"); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); digitalWrite(MOTOR_TANCAR, TINGGI); digitalWrite(BOMBETA, TINGGI); penundaan (1000); while (digitalRead(OBRIR) ==TINGGI) {}; //Jangan lakukan apapun sampai perintah OPEN dikeluarkan goto SEQUENCIA_OBERTURA; }; if (Baca digital(FOTOCELULA) ==TINGGI) { digitalTulis(MOTOR_TANCAR, TINGGI); penundaan (1000); buka SEQUENCIA_OBERTURA; }; //--Kontrol waktu dan penyegaran tampilan--------------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Porta Tancant"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =benar; ke BUCLE_PRINCIPAL; }; //--light Kontrol frekuensi berkedip------------------ if ((currentMillis - TEMPS_LLUM)>=300) // Berkedip dengan kecepatan tinggi { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; goto B;PORTA_OBERTA:interval =30000; // Waktu menunggu sebelum menutup pintu! (30 detik untuk memasuki mobil...) sebelumnyaMillis =milis(); digitalWrite(MOTOR_OBRIR, TINGGI); delay(500);C:if (digitalRead(OBRIR) ==LOW) { masuk ke SEQUENCIA_TANCAMENT; }; //--Kontrol waktu dan penyegaran tampilan--------------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Pelengkapan Porta Oberta"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { goto SEQUENCIA_TANCAMENT; }; //--Frekuensi kedip senyawa khusus dalam keadaan menunggu------------------ // (Berkedip singkat 100 milidetik antara periode lama 2 detik) jika (LLUM ==false ) { DURADA =100; } lain DURADA =2000; if ((Millis saat ini - TEMPS_LLUM)>=DURADA) // { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; masuk C;}
KodeC/C++
Ini adalah kode C++ untuk dikompilasi dan diunggah ke Arduino Nano
/********************************* ************************************ Automatisme per porta corredera motoritzada********* ************************************************** **********/// Koleksi per fer server display#include #include #include #include // Definim pin per port automatisme FOTOCELULA =2;int BOMBETA =5; //Relai 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; //Relay 2int MOTOR_TANCAR =12; //Relay 3int OBRIR =4;// Menentukan pin per tampilan#menentukan OLED_MOSI 11#menentukan OLED_CLK 13#menentukan OLED_DC 9#menentukan OLED_CS 10#menentukan OLED_RESET 8Adafruit_SSD1306 tampilan(OLED_MOSI, OLED_CLK, OLED_SET, OLED_m);// Menetapkan variabel globalsunsigned long TEMPS_PORTA_OBERTA =20000; unsigned long TEMPS_MAXIM_RECORREGUT =15000; //Despres ho redefinimint interval =1000; // Interval adalah berapa lama kita menunggu TEMPS_DISPLAY =1; // temps en segons per imprimir en pantallaint DURADA =300; // Cicle bombeta senyalitzaciounsigned long beforeMillis =0; // Melacak waktu sejak peristiwa terakhir dipecatunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // temps en milisegons de estate llum senyalitzacioboolean LLUM =false; // Llum encessa si ON i apagada si OFFboolean AVARIA =false; //Excedit el temps de recorregut sense detectar finals de carreravoid setup() { // Inicialitzem els pins per automatisme porta pinMode(FOTOCELULA, INPUT_PULLUP); pinMode(TANCAT, INPUT_PULLUP); pinMode(OBERT, INPUT_PULLUP); pinMode(OBRIR, INPUT_PULLUP); pinMode(BOMBETA, OUTPUT); pinMode(MOTOR_OBRIR, OUTPUT); pinMode(MOTOR_TANCAR, OUTPUT); // Motor apaguem i llum digitalWrite(MOTOR_OBRIR, HIGH); digitalWrite(MOTOR_TANCAR, TINGGI); digitalWrite(BOMBETA, TINGGI); // Inicialitzem dan tampilan Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); tampilan.display(); // Mostra pantalla inicial de Adafruit delay(1000); tampilan.clearDisplay(); tampilan.display(); // siapkan tampilan per teks tampilan.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); sebelumnyaMillis =mili(); while (digitalRead(OBRIR) ==HIGH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("BUCLE PRINCIPAL..."); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if (AVARIA dan (milis() - sebelumnyaMillis <60000)) { digitalWrite(BOMBETA, RENDAH); } else (digitalWrite(BOMBETA, HIGH)); }; //Esperem fins que premem OBRIR i anem pantalla refrescant per sensor estate paling langka pergi ke SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA OBRINT !!!!!!!!! sebelumnyaMillis =mili(); digitalWrite(MOTOR_OBRIR, RENDAH); digitalWrite(BOMBETA, RENDAH); delay(1000);A:if (digitalRead(OBERT) ==HIGH) { masuk ke PORTA_OBERTA; }; if (digitalRead(OBRIR) ==RENDAH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Ordre Esperant per tancar"); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); digitalWrite(MOTOR_OBRIR, TINGGI); digitalWrite(BOMBETA, TINGGI); penundaan (1000); while (digitalRead(OBRIR) ==TINGGI) {}; //No fem res fins que premem OBRIR goto SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Obrint porta"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { digitalWrite(MOTOR_OBRIR, HIGH); AVARIA =benar; // buka PORTA_OBERTA; }; //--Control-de-cadencia-de-la-llum-intermitent------------------ if ((currentMillis - TEMPS_LLUM)>=1000) // Cadencia de la llum intermiten de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; ke A;SEQUENCIA_TANCAMENT:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA TANCANT !!!!!!!!! sebelumnyaMillis =mili(); digitalWrite(MOTOR_TANCAR, RENDAH); digitalWrite(BOMBETA, RENDAH); if (DigitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, TINGGI); ke BUCLE_PRINCIPAL; }; if (digitalRead(OBRIR) ==RENDAH) { display.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Ordre Esperant per obrir"); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); digitalWrite(MOTOR_TANCAR, TINGGI); digitalWrite(BOMBETA, TINGGI); penundaan (1000); while (digitalRead(OBRIR) ==TINGGI) {}; //No fem res fins que premem OBRIR goto SEQUENCIA_OBERTURA; }; if (Baca digital(FOTOCELULA) ==TINGGI) { digitalTulis(MOTOR_TANCAR, TINGGI); penundaan (1000); buka SEQUENCIA_OBERTURA; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Porta Tancant"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =benar; ke BUCLE_PRINCIPAL; }; //--Control-de-cadencia-de-la-llum-intermitent------------------ if ((currentMillis - TEMPS_LLUM)>=300) // Cadencia de la llum intermiten de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; goto B;PORTA_OBERTA:interval =30000; // TEMPS MAXIM ESPERANT AMB PORTA OBERTA !!!!!!!!! sebelumnyaMillis =mili(); digitalWrite(MOTOR_OBRIR, TINGGI); delay(500);C:if (digitalRead(OBRIR) ==LOW) { masuk ke SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(Millis saat ini - Mili sebelumnya) / 1000; tampilan.clearDisplay(); tampilan.setTextSize(1); display.setCursor(0, 0); display.println("Pelengkapan Porta Oberta"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); tampilan.setTextSize(1); display.setCursor(0, 20); display.print("Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print("Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print("Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print("Urutan OBRIR:"); display.println(!digitalRead(OBRIR)); tampilan.display(); if ((Millis saat ini - Mili sebelumnya)>=interval) { goto SEQUENCIA_TANCAMENT; }; //--Control-de-cadencia-de-la-llum-intermitent------------------ if (LLUM ==false) { DURADA =100; } lain DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // Cadencia de la llum intermiten de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =saat iniMillis; }; masuk C;}

Skema

Cara menyambungkan kabel ke sensor, relai, dan modul radio dari unit kontrol utama. schematics_Kzy9lps55T.fzzScreenshoot dari skema fritzing Ini adalah daftar pin Arduino yang digunakan dan cara menghubungkannya ke komponen lainnya. pinouts_x7JmwoGJTY.txt Addon perangkat keras ini menanggapi pertanyaan dari irshad2318 (lihat posting untuk proyek ini)

Proses manufaktur

  1. DHT Tiny Breakout untuk Raspberry Pi
  2. Aksesori terbaik untuk Raspberry Pi Anda
  3. SIGHT:Untuk Tunanetra
  4. Drone Bawah Air:Kisah Kegilaan
  5. Sliding Headstock Otomatis untuk Pembubutan Swiss dan Produksi
  6. Pertumbuhan otomatis:masa depan cerah bagi UKM yang menganut otomatisasi
  7. Terima kasih atas Kenangannya!
  8. Memilih Peredam Kejut Terbaik untuk Kendaraan
  9. Gergaji Band Manual untuk Segala Acara
  10. Apa itu Pers Daya Otomatis?