UNIVERSIDAD DON BOSCO SAN SALVADOR, EL SALVADOR
Grupo: Grupo #4
Materia: Aplicaciones Electrónicas Básicas
Tema: Trabajo
Elaborado por: David Alexander Reyes De la O - RD182670 Ricardo Antonio Regalado González – RG161933
Maestro/a: Ing. Herbert Cardona
Domingo 28 de octubre de 2018
Diagrama Eléctrico de conexiones de sistema de parqueo nivel 1
Esquemático
Esquemático de etapa de potencia
PCB de etapa de potencia
Programas: Prueba US #include #include <Wire.h>
// Definicion de los pines para echo y trigger #define TRIGGER_PIN 7 #define ECHO_PIN
6
#define MAX_DISTANCE 200 // Se crea objeto para la clase new ping NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); int distance; int Led = 13; int maxdist = 40; int mindist = 0; int Disponibles = 1; int Ocupados = 0;
void setup() { Serial.begin(9600); }
void loop() { // Se obtiene la medicion de tiempo de viaje entre el sonido y guarda variabe uS int uS = sonar.ping_median(); // Calculá la distancia con base en una constante distance = uS / US_ROUNDTRIP_CM; if (distance > mindist and distance < maxdist)
{ digitalWrite(Led, HIGH); Disponibles = 0; Ocupados = 1; Serial.print ("Disponibles = "); Serial.print (Disponibles); Serial.println(); } else { digitalWrite(Led, LOW); Disponibles = 1; Ocupados = 0; Serial.print (" Ocupados = "); Serial.print (Ocupados); Serial.println(); } delay(2000); }
Prueba 2US #include #include <Wire.h>
#define SONAR_NUM 2
// Number of sensors.
#define MAX_DISTANCE 200 // Maximum distance (in cm) to ping.
NewPing sonar[SONAR_NUM] = { // Sensor object array.
NewPing(5, 4, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. NewPing(7, 6, MAX_DISTANCE), };
int distance1; int distance2; int Led = 13; int maxdist = 40; int mindist = 0; int Disponibles = 1; int Disponibles1 = 1; int Ocupados1 = 1; int Ocupados = 1; int Total = 0; int Total1 = 0;
void setup() { Serial.begin(9600); }
void loop() {
// Calculá la distancia con base en una constante distance1 = sonar[0].ping_cm(); distance2 = sonar[1].ping_cm();
if (distance1 > mindist and distance1 < maxdist) {
digitalWrite(Led, HIGH); Disponibles = 0; Ocupados = 1; } else { digitalWrite(Led, LOW); Disponibles = 1; Ocupados = 0; }
if (distance2 > mindist and distance2 < maxdist) { digitalWrite(Led, HIGH); Disponibles1 = 0; Ocupados1 = 1; } else { digitalWrite(Led, LOW); Disponibles1 = 1; Ocupados1 = 0; }
Total = Disponibles + Disponibles1; Serial.print ("Disponibles = "); Serial.print (Total); Serial.println();
Total1 = Ocupados + Ocupados1; Serial.print ("Ocupados = "); Serial.print (Total1); Serial.println();
delay(2000); }
Prueba RTC #include <Wire.h> #include #include LiquidCrystal_I2C lcd(0x27,16,2);
RTC_DS1307 rtc;
String daysOfTheWeek[7] = { "Dom", "Lun", "Mar", "Mie", "Jue", "Vier", "Sab" }; String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };
void setup() { lcd.backlight(); lcd.init(); Serial.begin(9600); delay(1000);
if (!rtc.begin()) { Serial.println(F("Couldn't find RTC"));
while (1); } else // Fijar fecha y hora de compilacion rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
void printDate(DateTime date) { lcd.clear(); Serial.print("Fecha: "); Serial.print(date.year(), DEC); Serial.print('/'); lcd.print("Fecha: "); lcd.print(date.year(), DEC); lcd.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); lcd.print(date.month(), DEC); lcd.print('/'); Serial.print(date.day(), DEC); Serial.print(" ("); lcd.print(date.day(), DEC); lcd.print(" ("); Serial.print(daysOfTheWeek[date.dayOfTheWeek()]); Serial.print(") "); lcd.print(daysOfTheWeek[date.dayOfTheWeek()]); lcd.print(") ");
Serial.print("Hora: "); Serial.print(date.hour(), DEC); Serial.print(':'); lcd.setCursor(0,1); lcd.print("Hora: "); lcd.print(date.hour(), DEC); lcd.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); lcd.print(date.minute(), DEC); lcd.print(':'); Serial.print(date.second(), DEC); Serial.println(); lcd.print(date.second(), DEC); }
void loop() { // Obtenemos la fecha actual y lo mostramos por el puerto Serial DateTime now = rtc.now(); printDate(now); delay(1000); }
Prueba Datalogger US #include <SPI.h> #include #include <SD.h> #include <Wire.h>
const int chipSelect = 53; // sd // Definicion de los pines para echo y trigger #define TRIGGER_PIN 7 #define ECHO_PIN
6
#define MAX_DISTANCE 200 // Se crea objeto para la clase new ping NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); int distance; int Led = 13; int maxdist = 40; int mindist = 0; int Disponibles = 1; int Ocupados = 0;
void setup() { //Comunicacion Serial.begin(9600); while (!Serial) { ; } Serial.print("Iniciando SD..."); //Inicializamos la sd pinMode(53, OUTPUT); // verifica si hay SD if (!SD.begin(chipSelect)) { Serial.println("Falla en tarjeta, o no insertada");
return; } Serial.println("SD inicializada"); Serial.println("Creando archivo..."); }
void loop() { //Hacemos una cadena para la union de datos String dataString = "";
// Abre al archivo // Cierra si es que hay uno abierto File dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre de archivo int sensor = Disponibles; //Declara para almacenar int sensor2 = Ocupados; //Declara para almacenar dataString += (" ") ; dataString += String (" Disponibles ") + String(sensor); //escribir dataString += String (" Ocupados ") + String(sensor2) + String (" ") ; //escribir
// Se obtiene la medicion de tiempo de viaje entre el sonido y guarda variabe uS int uS = sonar.ping_median(); // Calculá la distancia con base en una constante distance = uS / US_ROUNDTRIP_CM; if (distance > mindist and distance < maxdist) { digitalWrite(Led, HIGH); Disponibles = 0;
Ocupados = 1; } else { digitalWrite(Led, LOW); Disponibles = 1; Ocupados = 0; } delay(1000);
// Si el archivo esta disponible escribe if (dataFile) { Serial.println(" Dato almacenado: "); dataFile.println(dataString); dataFile.close(); // Imprime lo registrado Serial.println(dataString); } // Si no esta almacenado el archivo else { Serial.println("Error abriendo datalog.txt"); } }
Prueba Datalogger RTC #include <SPI.h> #include <SD.h> #include <Wire.h>
#include "RTClib.h"
File logFile;
RTC_DS1307 rtc;
void setup() { Serial.begin(9600); Serial.print(F("Iniciando SD ...")); if (!SD.begin(53)) { Serial.println(F("Error al iniciar")); return; } Serial.println(F("Iniciado correctamente"));
if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } else{ // Fijar fecha y hora de compilacion rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } }
void logValue(DateTime date)
{ logFile.print(date.year(), DEC); logFile.print('/'); logFile.print(date.month(), DEC); logFile.print('/'); logFile.print(date.day(), DEC); logFile.print(" "); logFile.print(date.hour(), DEC); logFile.print(':'); logFile.print(date.minute(), DEC); logFile.print(':'); logFile.print(date.second(), DEC); logFile.print(" "); logFile.println(); }
void loop() { // Abrir archivo y escribir valor logFile = SD.open("datalog.txt", FILE_WRITE);
if (logFile) { DateTime now = rtc.now(); logValue(now); logFile.close();
}
else { Serial.println(F("Error al abrir el archivo")); } delay(10000); }
Prueba Datalogger 2US y RTC #include <SPI.h> #include #include <SD.h> #include #include <Wire.h>
const int chipSelect = 53; // sd // Definicion de los pines para echo y trigger #define SONAR_NUM 2
// Number of sensors.
#define MAX_DISTANCE 200 // Maximum distance (in cm) to ping.
NewPing sonar[SONAR_NUM] = { // Sensor object array. NewPing(5, 4, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. NewPing(7, 6, MAX_DISTANCE), };
int distance1; int distance2; int Led = 13; int maxdist = 40;
int mindist = 0; int Disponibles = 1; int Disponibles1 = 1; int Ocupados1 = 1; int Ocupados = 1; int Total = 0; int Total1 = 0; int cambio = 0; int cambio1 = 0; int cambio2 = 0;
File dataFile;
RTC_DS1307 rtc;
//Almacenamiento de sd de datos US y RTC // Si el archivo esta disponible escribe void gSD() { //Hacemos una cadena para la union de datos String dataString = ""; // Abre al archivo // Cierra si es que hay uno abierto dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre de archivo int sensor = Total; //Declara para almacenar int sensor2 = Total1; //Declara para almacenar dataString += (" ") ; dataString += String (" Disponibles ") + String(sensor); //escribir
dataString += String (" Ocupados ") + String(sensor2) + String (" ") ; //escribir
if (dataFile) { DateTime now = rtc.now(); logValue(now); Serial.println(" Dato almacenado: "); dataFile.println("Parqueos: "); dataFile.println(dataString); dataFile.close(); // Imprime lo registrado Serial.println("Parqueos: "); Serial.println(dataString); } // Si no esta almacenado el archivo else { Serial.println("Error abriendo datalog.txt"); } delay(1000); }
void setup() { //Comunicacion Serial.begin(9600); while (!Serial) { ; } Serial.print("Iniciando SD...");
//Inicializamos la sd pinMode(53, OUTPUT); // verifica si hay SD if (!SD.begin(chipSelect)) { Serial.println("Falla en tarjeta, o no insertada"); return; } Serial.println("SD inicializada"); Serial.println("Creando archivo...");
if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } else{ // Fijar fecha y hora de compilacion rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } }
void logValue(DateTime date){ Serial.print("Fecha: "); Serial.print(date.year(), DEC); Serial.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); Serial.print(date.day(), DEC); Serial.print(" ");
Serial.print("Hora: "); Serial.print(date.hour(), DEC); Serial.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); Serial.print(date.second(), DEC); Serial.println(); dataFile.println(" "); dataFile.print("Fecha: "); dataFile.print(date.year(), DEC); dataFile.print('/'); dataFile.print(date.month(), DEC); dataFile.print('/'); dataFile.print(date.day(), DEC); dataFile.print(" "); dataFile.print("Hora: "); dataFile.print(date.hour(), DEC); dataFile.print(':'); dataFile.print(date.minute(), DEC); dataFile.print(':'); dataFile.print(date.second(), DEC); dataFile.print(" "); dataFile.println(); }
void loop() { //Inicia la parte del sensor US
// Calculá la distancia con base en una constante distance1 = sonar[0].ping_cm(); distance2 = sonar[1].ping_cm();
//SENSOR US1 if (distance1 > mindist and distance1 < maxdist) { Disponibles = 0; Ocupados = 1; } else { Disponibles = 1; Ocupados = 0; }
//INICIO US2 if (distance2 > mindist and distance2 < maxdist) { Disponibles1 = 0; Ocupados1 = 1; } else { Disponibles1 = 1; Ocupados1 = 0; }
Total = Disponibles + Disponibles1; Serial.print("Disponibles: "); Serial.println(Total); Total1 = Ocupados + Ocupados1; Serial.print("Ocupados: "); Serial.println(Total1); delay(2000); //FINALIZA PARTE SENSOR US
if (Total == 0 and Total1 == 2 and cambio == 0) { gSD(); cambio = cambio + 1; cambio1 = 0; cambio2 = 0; } else if (Total == 2 and Total1 == 0 and cambio1 == 0) { gSD(); cambio = 0; cambio1 = cambio1 + 1; cambio2 = 0; } else if (Total == 1 and Total1 == 1 and cambio2 == 0) { gSD(); cambio = 0; cambio1 = 0;
cambio2 = cambio2 + 1; } }
Programa Base: #include <SPI.h> #include #include <Wire.h> #include <SD.h> #include #include LiquidCrystal_I2C lcd(0x27,16,2);
//Constante de ping donde se almacenara los datos en la SD const int chipSelect = 53; // sd
//Definición número de sensores #define SONAR_NUM 2
// Number of sensors.
#define MAX_DISTANCE 200 // Maximum distance (in cm) to ping.
// Definicion de los pines para echo y trigger NewPing sonar[SONAR_NUM] = { // Sensor object array. NewPing(5, 4, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. NewPing(7, 6, MAX_DISTANCE), };
int distance1; int distance2;
int Led1 = 9; int Led2 = 10; int Led3 = 11; int Led4 = 12; int maxdist = 40; int mindist = 0; int Disponibles = 1; int Disponibles1 = 1; int Ocupados1 = 1; int Ocupados = 1; int Total = 0; int Total1 = 0; int cambio = 0; int cambio1 = 0; int cambio2 = 0;
File dataFile;
RTC_DS1307 rtc;
String daysOfTheWeek[7] = { "Dom", "Lun", "Mar", "Mie", "Jue", "Vier", "Sab" }; String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };
//Almacenamiento de SD de datos US y RTC // Si el archivo esta disponible escribe void gSD() { //Hacemos una cadena para la union de datos
String dataString = ""; // Abre al archivo // Cierra si es que hay uno abierto dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre de archivo int sensor = Total; //Declara para almacenar int sensor2 = Total1; //Declara para almacenar dataString += (" ") ; dataString += String (" Disponibles ") + String(sensor); //escribir dataString += String (" Ocupados ") + String(sensor2) + String (" ") ; //escribir
if (dataFile) { DateTime now = rtc.now(); logValue(now); Serial.println(" Dato almacenado: "); dataFile.println("Parqueos: "); dataFile.println(dataString); dataFile.close(); // Imprime lo registrado Serial.println("Parqueos: "); Serial.println(dataString); } // Si no esta almacenado el archivo else { Serial.println("Error abriendo datalog.txt"); } delay(1000); }
void setup() { lcd.backlight(); lcd.init(); Serial.begin(9600); pinMode (Led1, 9); pinMode (Led2, 10); pinMode (Led3, 11); pinMode (Led4, 12); delay(1000);
while (!Serial) { ; } Serial.print("Iniciando SD..."); //Inicializamos la sd pinMode(53, OUTPUT); // verifica si hay SD if (!SD.begin(chipSelect)) { Serial.println("Falla en tarjeta, o no insertada"); return; } Serial.println("SD inicializada"); Serial.println("Creando archivo...");
if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); }
else{ // Fijar fecha y hora de compilacion rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } }
void logValue(DateTime date){ dataFile.println(" "); dataFile.print("Fecha: "); dataFile.print(date.year(), DEC); dataFile.print('/'); dataFile.print(date.month(), DEC); dataFile.print('/'); dataFile.print(date.day(), DEC); dataFile.print(" "); dataFile.print("Hora: "); dataFile.print(date.hour(), DEC); dataFile.print(':'); dataFile.print(date.minute(), DEC); dataFile.print(':'); dataFile.print(date.second(), DEC); dataFile.print(" "); dataFile.println(); }
void printDate(DateTime date) { lcd.clear();
Serial.print(date.year(), DEC); Serial.print('/'); lcd.print(date.year(), DEC); lcd.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); lcd.print(date.month(), DEC); lcd.print('/'); Serial.print(date.day(), DEC); Serial.print(" ("); lcd.print(date.day(), DEC); lcd.print(" ("); Serial.print(daysOfTheWeek[date.dayOfTheWeek()]); Serial.print(") "); lcd.print(daysOfTheWeek[date.dayOfTheWeek()]); lcd.print(") "); Serial.print(date.hour(), DEC); Serial.print(':'); lcd.setCursor(0,1); lcd.print(date.hour(), DEC); lcd.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); lcd.print(date.minute(), DEC); lcd.print(':'); Serial.print(date.second(), DEC); Serial.println(); lcd.print(date.second(), DEC);
delay(3000); }
void loop() { // Obtenemos la fecha actual y lo mostramos por el puerto Serial DateTime now = rtc.now(); printDate(now); // Se espera 1 seg. entre mediciones delay(1000);
// Calculá la distancia con base en una constante distance1 = sonar[0].ping_cm(); distance2 = sonar[1].ping_cm();
if (distance1 > mindist and distance1 < maxdist) { digitalWrite(Led1, HIGH); digitalWrite(Led2, LOW); digitalWrite(Led3, HIGH); digitalWrite(Led4, LOW); Disponibles = 0; Ocupados = 1; } else { digitalWrite(Led2, HIGH); digitalWrite(Led1, LOW); digitalWrite(Led4, HIGH);
digitalWrite(Led3, LOW); Disponibles = 1; Ocupados = 0; }
if (distance2 > mindist and distance2 < maxdist) { digitalWrite(Led1, HIGH); digitalWrite(Led2, LOW); digitalWrite(Led3, HIGH); digitalWrite(Led4, LOW); Disponibles1 = 0; Ocupados1 = 1; } else { digitalWrite(Led1, LOW); digitalWrite(Led2, HIGH); digitalWrite(Led4, HIGH); digitalWrite(Led3, LOW); Disponibles1 = 1; Ocupados1 = 0; } Total = Disponibles + Disponibles1; Serial.print ("Disponibles = "); Serial.print (Total); Serial.println(); Total1 = Ocupados + Ocupados1;
Serial.print ("Ocupados = "); Serial.print (Total1); Serial.println();
if (Total == 0 and Total1 == 2 and cambio == 0) { gSD(); cambio = cambio + 1; cambio1 = 0; cambio2 = 0; } else if (Total == 2 and Total1 == 0 and cambio1 == 0) { gSD(); cambio = 0; cambio1 = cambio1 + 1; cambio2 = 0; } else if (Total == 1 and Total1 == 1 and cambio2 == 0) { gSD(); cambio = 0; cambio1 = 0; cambio2 = cambio2 + 1; }
lcd.clear(); lcd.print ("Disponibles = ");
lcd.print (Total); lcd.setCursor(0,1); lcd.print ("Ocupados = "); lcd.print (Total1); delay(3000); }
Tabla de registros:
Por Hacer
Haciendo
Terminado
Comprar elementos
X
X
Probar elementos
X
X
Prueba LCD con módulo I2C
X
X
Prueba Sensor Ultrasónico
X
X
Prueba con 2 Sensores Ultrasónico
X
X
Programación con LCD con I2C junto al Ultrasónico
X
X
Prueba con RTC
X
X
Programación con LCD I2C, Sensor Ultrasónico y RTC
X
X
Prueba Datalogger
X
X
Programación con LCD I2C, Sensor Ultrasónico y RTC con Datalogger (Almacenamiento de fecha)
X
X
Programación con LCD I2C, Sensor Ultrasónico y RTC con Datalogger (Almacenamiento datos del sensor)
X
X
Programación con LCD I2C, Sensor Ultrasónico y RTC con Datalogger (Almacenamiento de ambos datos)
X
X
Programación con LCD I2C, 2 Sensores Ultrasónicos y RTC con Datalogger (Almacenamiento de ambos datos)
X
X
Case para dispositivos de parqueo
X
X
Programación Completa
X
X