Pages - Menu

Translate

domingo, 10 de octubre de 2021

Construye tu propio Micro PLC Arduino nano v0.9z

 

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);
}

Popular Posts