PROYECTO ARDUINO
EL COCHE QUE SE ESTACIONA SOLO APPARCAR
OBJETIVO:
Poder establecer una forma automatica para estacionar un vehiculo usando progrmacion y sensores
Dar a conocer un poco mas del arduino y ser demostrado en el proyecto a realizar con su configuración y su respectiva maqueta.
RESUMEN:
Este proyecto cuenta de un vehiculo autonomo capaz de poder estacionarse como un vehiculo real teniendo en cuenta que el vehiculo es capaz de estacionarse de manera segura sin tener ningun choque puesto que posee una variedad de sensores ultrasónicos.
Actualmente todos hemos visto anuncios de coches que aparcan solos, es un
sistema que está en auge, ya que solo unas marcas disponen de ello. Es una
tecnología que a la mayoría de la población le gustaría tener en su propio coche.
Claro está que no todos los coches están preparados para ello, no podemos
modificar nuestro coche hasta el punto de que aparque solo, lo que si podemos
tener es una ayuda al aparcar, como cuanta distancia tenemos detrás en
centímetros, o cuanta delante, incluso lateral o bien la usual cámara trasera, etc.
Este proyecto mezcla esto, ya que directamente no aparcaría su coche pero si
podría darle una asistencia.
Materiales:
- Arduino (hay muchas versiones, aquí uso el UNO)
- Sensor de ultrasonido HC-SR04 (hay parecidos como HY-SRF05)
- Modulo bluetooth HC-05
- Transformador encendedor de coche(12v) /Arduino (9v) o portapilas
- Cable usb tipo A a usb tipo B
- Cables tanto macho-macho como hembra-macho
- Placa Ariston
- Chasis del coche con motores y ruedas
- Puente doble H L298N
CONEXONES
VIDEOS
En este video se da a conocer como en la vida real se usa vehículos que se estacionan por su cuenta esto gracias a sensores que llevan equipados y se estacionan sin necesidad del chofer
https://www.youtube.com/watch?v=1I9U22UV5C4
En este video se da a conocer un proyecto relacionando con el estacionamiento del vehiculo en progrmacion arduino
- Arduino (hay muchas versiones, aquí uso el UNO)
- Sensor de ultrasonido HC-SR04 (hay parecidos como HY-SRF05)
- Modulo bluetooth HC-05
- Transformador encendedor de coche(12v) /Arduino (9v) o portapilas
- Cable usb tipo A a usb tipo B
- Cables tanto macho-macho como hembra-macho
- Placa Ariston
- Chasis del coche con motores y ruedas
- Puente doble H L298N
CONEXONES
VIDEOS
En este video se da a conocer como en la vida real se usa vehículos que se estacionan por su cuenta esto gracias a sensores que llevan equipados y se estacionan sin necesidad del chofer
https://www.youtube.com/watch?v=1I9U22UV5C4
En este video se da a conocer un proyecto relacionando con el estacionamiento del vehiculo en progrmacion arduino
https://www.youtube.com/watch?v=FJTombQ2luI



CONFIGURACION DEL CODIGO PARA LA APP
video demostraticvo del programa
PROGRAMACIÓN DEL SENSOR ULTRASÓNICO
VIDEO DE EXPLICACIÓN DE LOS MOTORES
CÓDIGO DEL ARDUINO
#include <SoftwareSerial.h>
#include <Ultrasonic.h>
SoftwareSerial Diego(1, 0); // Tx, Rx
int motor1pwm = 9;
int motor2pwm = 5;
int motor1delante = 8;
int motor1detras = 7;
int motor2delante = 4;
int motor2detras = 6;
Ultrasonic ultrasonic1(11,12); // (Trig PIN,Echo PIN)
Ultrasonic ultrasonic2(10,13); // (Trig PIN,Echo PIN)
int lectura[4];
int lectura2[11];
int media;
int media2;
int BluetoothData;
int i=0;
byte respuesta= 0;
int caso=0;
int diferencia;
float duracion1=0;
float duracion2=0;
float duracionintervalo;
float tiempo1=0;
float tiempo2=0;
float duracionultimointervalo;
int profundidadminima=1000;
int mediaminima;
const int led = A0;
i nt opcionbateria=0;
int aparcar=0;
int aux=0;
int pasobateria=0;
void setup() {
Diego.begin(9600);
pinMode(motor1pwm, OUTPUT);
pinMode(motor2pwm, OUTPUT);
pinMode(motor1delante, OUTPUT);
pinMode(motor1detras, OUTPUT);
pinMode(motor2delante, OUTPUT);
pinMode(motor2detras, OUTPUT);
pinMode(led, OUTPUT);
delay(1000);
}
void motor (int pwm1, int pwm2, int motor1A, int motor1B, int motor2A, int motor2B){
analogWrite(motor1pwm, pwm1);
analogWrite(motor2pwm, pwm2);
digitalWrite(motor1delante, motor1A);
digitalWrite(motor1detras, motor1B);
digitalWrite(motor2detras, motor2A);
digitalWrite(motor2delante, motor2B);
}
void loop() {
if (Diego.available()){ // asi solo lee cuando debe
BluetoothData=Diego.read();
analogWrite(led, 0);
motor(115, 115,0 ,0 ,0 ,0);
opcionbateria=0;
aparcar=0;
aux=0;
pasobateria=0;
caso = 0;
}
switch(BluetoothData){
case 'a' : //Aparcando automatico
analogWrite(led, 200);
if(aux ==0 || aux == 1){
motor(110, 110,1 ,0 ,0 ,1); //<-----------
duracion1 = millis();
if(duracion1>= tiempo1 && caso == 0){
tiempo1=duracion1;
aux = 1;
}
for(i=1; i<4; i++){
delay(10);
lectura[i];
Ultrasonic Ranging(CM);
if(i==3)
{
media = (lectura[1]+lectura[2]+ lectura[3])/3;
}
}
if(media>=25 && aux==1){ //distancia minima para aparcar
caso=1;
if(media<= profundidadminima){
profundidadminima = media;
}
duracion2 = millis();
if(duracion2>= tiempo2){
tiempo2=duracion2;
}
}
if(media<=12 && caso==1){
duracionintervalo = (tiempo2-tiempo1)/1000;
motor(110, 110,0 ,0 ,0 ,0);
aux = 0;
if(duracionintervalo>=1.05 && profundidadminima<=29){ // En linea
aparcar = 1;
Diego.print(" En linea");
}
if(duracionintervalo>=0.52 && profundidadminima>=30){ // En bateria
aparcar = 2;
Diego.print(" En bateria");
}
if((duracionintervalo<0.52) || (duracionintervalo<1.04 && profundidadminima<30) || (duracionintervalo>1.06 && profundidadminima<25) ){ //No entra y continua
aparcar = 3 ;
Diego.print(" Continua");
}
caso = 2;
aux = 2;
delay (1000);
}
}
if(aux==2){
//Diego.println(caso);
delay(10);
if(aparcar == 2 && caso==2){
//En Bateria
// Diego.println(aparcar);
// RETROCEDE UN POCO
if(pasobateria==0){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==0){
tiempo1=duracion1;
opcionbateria=1;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==1){
tiempo2=duracion2;
motor(100, 100, 0, 1, 1, 0);//<-----------
}
if((tiempo2-tiempo1)/1000 >=0.75){
motor(90, 90, 0, 0, 0, 0);
opcionbateria = 3;
pasobateria=1;
}
}
delay(10);
//GIRA
if(pasobateria==1){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==3){
tiempo1=duracion1;
opcionbateria=4;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==4){
tiempo2=duracion2;
motor(85, 80, 0, 1, 0, 0);//<-----------
}
if((tiempo2-tiempo1)/1000 >=0.5){
motor(110, 115, 0, 0, 0, 0);
opcionbateria = 5;
pasobateria = 2;
}
}
delay(10);
// MARCHA ATRAS
if(pasobateria==2){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==5){
tiempo1=duracion1;
opcionbateria=6;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==6){
tiempo2=duracion2;
motor(100, 100, 0, 1, 1, 0);//<-----------
}
if((tiempo2-tiempo1)/1000 >=0.4){
motor(145, 145, 0, 0, 0, 0);
opcionbateria = 7;
pasobateria=3;
Diego.println("\n Aparcado");
}
}
delay(100);
}
if(aparcar == 1 && caso==2){
//En linea
// RETROCEDE UN POCO
if(pasobateria==0){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==0){
tiempo1=duracion1;
opcionbateria=1;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==1){
tiempo2=duracion2;
motor(115, 115, 0, 1, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.5){//<---------------------------------------------------------------------------------------
motor(115, 90, 0, 0, 0, 0);
opcionbateria = 3;
pasobateria=1;
}
}
delay(10);
//GIRA a 45º
if(pasobateria==1){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==3){
tiempo1=duracion1;
opcionbateria=4;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==4){
tiempo2=duracion2;
motor(115, 90, 0, 1, 0, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.25){//<---------------------------------------------------------------------------------------
motor(100, 100, 0, 0, 0, 0);
opcionbateria = 5;
pasobateria = 2;
}
}
delay(10);
// MARCHA ATRAS
if(pasobateria==2){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==5){
tiempo1=duracion1;
opcionbateria=6;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==6){
tiempo2=duracion2;
motor(100, 100, 0, 1, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.8){//<---------------------------------------------------------------------------------------
motor(90, 115, 0, 0, 0, 0);
opcionbateria = 7;
pasobateria=3;
}
}
//GIRA DE NUEVO PARA ENDEREZAR
if(pasobateria==3){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==7){
tiempo1=duracion1;
opcionbateria=8;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==8){
tiempo2=duracion2;
motor(90, 115, 0, 0, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.3){//<---------------------------------------------------------------------------------------
motor(110, 110, 0, 0, 0, 0);
opcionbateria = 9;
pasobateria=4;
Diego.println("\n Aparcado");
} 1|
//No entra
if(aparcar==3 && caso==2){
Diego.println(aparcar);
motor(150, 150,1 ,0 ,0 ,1);
Diego.print("\n No es suficiente \n ");
caso = 0;
aux = 0;
}
}
break;
case 'b': //Distancia trasera
analogWrite(led, 200);
motor(115, 115,0 ,0 ,0 ,0);
for(i=1; i<11; i++){
delay(50);
lectura2[i] = int(CM);
if(i==10){
media2 = (lectura2[1]+lectura2[2]+ lectura2[3]+ lectura2[4]+ lectura2[5]+ lectura2[6]+ lectura2[7]+ lectura2[8]+ lectura2[9]+ lectura2[10])/10;
}
}
delay(50);
Diego.println(" ");
Diego.println(media2);
Diego.println("cm");
case 'f':// Aparcar manual en bateria
delay(10);
analogWrite(led, 200);
//En Bateria
// RETROCEDE UN POCO
if(pasobateria==0){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==0){
tiempo1=duracion1;
opcionbateria=1;
Diego.println("Manual Bateria");
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==1){
tiempo2=duracion2;
motor(105, 105, 0, 1, 1, 0);//<------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.55){//<---------------------------------------------------------------------------------------
motor(90, 90, 0, 0, 0, 0);
opcionbateria = 3;
pasobateria=1;
}
}
delay(10);
//GIRA
if(pasobateria==1){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==3){
tiempo1=duracion1;
opcionbateria=4;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==4){
tiempo2=duracion2;
motor(90, 90, 0, 1, 0, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.65){//<---------------------------------------------------------------------------------------
motor(110, 110, 0, 0, 0, 0);
opcionbateria = 5;
pasobateria = 2;
}
}
delay(10);
if(pasobateria==2){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==5){
tiempo1=duracion1;
opcionbateria=6;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==6){
tiempo2=duracion2;
motor(110, 110, 0, 1, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.5){//<---------------------------------------------------------------------------------------
motor(115, 115, 0, 0, 0, 0);
opcionbateria = 7;
pasobateria=3;
Diego.println(" Aparcado");
}
break;
case 'e':// Aparcar manual en linea
delay(10);
analogWrite(led, 200);
//En linea
// RETROCEDE UN POCO
if(pasobateria==0){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==0){
tiempo1=duracion1;
opcionbateria=1;
Diego.println("Manual Linea");
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==1){
tiempo2=duracion2;
motor(115, 115, 0, 1, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.4){//<---------------------------------------------------------------------------------------
motor(115, 90, 0, 0, 0, 0);
opcionbateria = 3;
pasobateria=1;
}
}
delay(10);
//GIRA a 45º
if(pasobateria==1){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==3){
tiempo1=duracion1;
opcionbateria=4;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==4){
tiempo2=duracion2;
motor(115, 90, 0, 1, 0, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.25){//<---------------------------------------------------------------------------------------
motor(100, 100, 0, 0, 0, 0);
opcionbateria = 5;
pasobateria = 2;
}
}
delay(10);
// MARCHA ATRAS
if(pasobateria==2){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==5){
tiempo1=duracion1;
opcionbateria=6;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==6){
tiempo2=duracion2;
motor(100, 100, 0, 1, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.8){//<---------------------------------------------------------------------------------------
motor(90, 115, 0, 0, 0, 0);
opcionbateria = 7;
pasobateria=3;
}
}
//GIRA DE NUEVO PARA ENDEREZAR
if(pasobateria==3){
duracion1 = millis();
if(duracion1>= tiempo1 && opcionbateria ==7){
tiempo1=duracion1;
opcionbateria=8;
}
duracion2 = millis();
if(duracion2>= tiempo2 && opcionbateria==8){
tiempo2=duracion2;
motor(90, 115, 0, 0, 1, 0);//<---------------------------------------------------------------------------------------
}
if((tiempo2-tiempo1)/1000 >=0.35){//<---------------------------------------------------------------------------------------
motor(110, 110, 0, 0, 0, 0);
opcionbateria = 9;
pasobateria=4;
Diego.println(" aparcar");
}
}
break;
}
delay(100); //se prepara
}
}









