jueves, 30 de mayo de 2019

                  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


https://www.youtube.com/watch?v=FJTombQ2luI




               Resultado de imagen para coche que se aparca solo


              Resultado de imagen para coche que se aparca solo

Resultado de imagen para carro que se estaciona solo arduino



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



No hay comentarios:

Publicar un comentario