Micro PLC Arduino nano v0.9z
8 Entradas Digitales: 5, 12, 24v DC
8 Salidas a Rele
1 Entrada analogica 0-10v
1 Entrada analogica 4-20mA
1 Reloj interno DS1307 I2C
1 puerto I2C para oled 128x32
1 puerto I2C para LCD
1 Reguladore de voltaje integrado de 5v 3A
1 Puerto Serial - TTl para modulo Bluetooth
Soportes para Riel DIN aplicable para tableros electricos
==========================================================================
Gerber y demas: Download
Materiales:
1xIC LM2596 -5.0
1x SS34
1x 100uH/3A
1x 100uF/50v
1x 100/16v
2x Diodo Zener 5.1v
2x 100R 1206
1x 1k 1206
1x 2k 1206
1x 250R 1206
8x 4k7 1206
12x 10k 1206
16x 510R 1206
8x ledRojo 1206
8x ledAzul 1206
1x ledVerde 1206
1x DS1307 SMD
1x Cristal 32.768kHz
1x Soporte pila CR2032
1x ULN2803 SMD
8x PC817 Octoacopladores
8x Rele HF49FD 005-1HAA
2x 4xPinesHembra
1x 4xPinesMacho
2x 15xPinesHembra
3x 2xBornera 5.08mm
3x 3xBornera 5.08mm
2x 5xBornera 5.08mm
1x 8xBornera 5.08mm
Codigo de ejemplo:
=======================================================================
// MicroPLC v1.0 con nano // Autor: Romer Zurco Limachi // xD //Incluir las librerias "DS1307 y LiquidCrystal_I2C" #include <Wire.h> #include <LiquidCrystal_I2C.h> #include "RTClib.h" RTC_DS1307 rtc; LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Direccion de la pantalla 0x20, 0x27, 0x3F char daysOfTheWeek[7][12] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"}; //Definimos las Entradas y los estados #define I1 9 #define I2 8 #define I3 7 #define I4 6 #define I5 5 #define I6 4 #define I7 3 // Interrupcion 1 con Arduino UNO, nano #define I8 2 // Interrupcion 0 con Arduino UNO, nano bool I_1 = 1; bool I_2 = 1; bool I_3 = 1; bool I_4 = 1; bool I_5 = 1; bool I_6 = 1; bool I_7 = 1; bool I_8 = 1; // SDA = A4 // SCL = A5 // Definimos la entradas Analogicas #define vDC A6 // 0-10v #define mA A7 // 4-20mA int vDC_9 = 0; int mA_10 = 0; // Definimos las Salidas #define Q1 A3 #define Q2 A2 #define Q3 A1 #define Q4 A0 #define Q5 13 // L #define Q6 12 #define Q7 11 #define Q8 10 bool Q_1 = 0; bool Q_2 = 0; bool Q_3 = 0; bool Q_4 = 0; bool Q_5 = 0; bool Q_6 = 0; bool Q_7 = 0; bool Q_8 = 0; void setup () { while (!Serial); // for Leonardo/Micro/Zero Serial.begin(9600); if (! rtc.begin()) { Serial.println("No se pudo encontrar el RTC"); while (1); } if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); // la siguiente línea establece el RTC en la fecha y hora en que se compiló este ejemplo // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Esta línea establece el RTC con una fecha y hora explícitas, por ejemplo, para establecer // 21 de enero de 2014 a las 3am llamarías: // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); } lcd.begin(16, 2); //carga la LCD con 16x2 caracteres //lcd.begin(20, 4); //carga la LCD con 16x2 caracteres lcd.clear(); //limpia la pantalla lcd.setCursor(0, 0); //posiciona el cursor columna 1, fila 0 lcd.print(" Romer Zurco L. "); //Imprime un texto lcd.setCursor(0, 1); //posiciona el cursor columna 1, fila 1 lcd.print(" Cel.: xxxxxxxx "); //Imprime un texto pinMode(I1, INPUT); pinMode(I2, INPUT); pinMode(I3, INPUT); pinMode(I4, INPUT); pinMode(I5, INPUT); pinMode(I6, INPUT); pinMode(I7, INPUT); pinMode(I8, INPUT); pinMode(Q1, OUTPUT); pinMode(Q2, OUTPUT); pinMode(Q3, OUTPUT); pinMode(Q4, OUTPUT); pinMode(Q5, OUTPUT); pinMode(Q6, OUTPUT); pinMode(Q7, OUTPUT); pinMode(Q8, OUTPUT); delay(1000); lcd.clear(); } void loop() { HoraLCD(); // Actualiza Fecha y Hora. /////////////////////Lee las entradas Digitales/////////////////////// I_1 = digitalRead(I1); I_2 = digitalRead(I2); I_3 = digitalRead(I3); I_4 = digitalRead(I4); I_5 = digitalRead(I5); I_6 = digitalRead(I6); I_7 = digitalRead(I7); I_8 = digitalRead(I8); /////////////////////Lee las entradas Analogicas/////////////////////// vDC_9 = analogRead(vDC); mA_10 = analogRead(mA); ///////////////////// Lee las salidas Digitales /////////////////////// Q_1 = digitalRead(Q1); Q_2 = digitalRead(Q2); Q_3 = digitalRead(Q3); Q_4 = digitalRead(Q4); Q_5 = digitalRead(Q5); Q_6 = digitalRead(Q6); Q_7 = digitalRead(Q7); Q_8 = digitalRead(Q8); delay(10); /////////////////////ON-OFF/////////////////////// if (I_1 == LOW && I_2 == HIGH) { //on SET digitalWrite(Q1, HIGH); delay(500); digitalWrite(Q2, HIGH); delay(500); } if (I_2 == LOW) { //off RESET digitalWrite(Q1, LOW); delay(500); digitalWrite(Q2, LOW); delay(500); } /////////////////////ON-OFF/////////////////////// if (I_3 == LOW && I_4 == HIGH) { //on SET digitalWrite(Q3, HIGH); delay(500); digitalWrite(Q4, HIGH); delay(500); } if (I_4 == LOW) { //off RESET digitalWrite(Q3, LOW); delay(500); digitalWrite(Q4, LOW); delay(500); } /////////////////////ON-OFF/////////////////////// if (I_5 == LOW && I_6 == HIGH) { //on SET digitalWrite(Q5, HIGH); delay(500); digitalWrite(Q6, HIGH); delay(500); } if (I_6 == LOW) { //off RESET digitalWrite(Q5, LOW); delay(500); digitalWrite(Q6, LOW); delay(500); } /////////////////////ON-OFF/////////////////////// if (I_7 == LOW && I_8 == HIGH) { //on SET digitalWrite(Q7, HIGH); delay(500); digitalWrite(Q8, HIGH); delay(500); } if (I_8 == LOW) { //off RESET digitalWrite(Q7, LOW); delay(500); digitalWrite(Q8, LOW); delay(500); } delay(10); } void HoraLCD() { DateTime now = rtc.now(); // Carga los datos del reloj DS1307 /////////////////////Mensaje de Hora/////////////////////// lcd.setCursor(0, 0); if (now.day() < 10) { lcd.print("0"); } lcd.print(now.day(), DEC); lcd.print('/'); if (now.month() < 10) { lcd.print("0"); } lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(11, 0); //lcd.print("("); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); //lcd.print(")"); lcd.setCursor(0, 1); if (now.hour() < 10) { lcd.print("0"); } lcd.print(now.hour(), DEC); lcd.print(':'); if (now.minute() < 10) { lcd.print("0"); } lcd.print(now.minute(), DEC); lcd.print(':'); if (now.second() < 10) { lcd.print("0"); } lcd.print(now.second(), DEC); lcd.setCursor(9, 1); lcd.print("ZurcoIS"); delay(10); }