autonomo

 

 

#include <Servo.h>  ///// recuerden que al incluir la librería servo se desactivan los PWM de los pins                                            9 y 10 del arduino uno
Servo servo1;

int AngSerDer = 15;  ////angulo para la derecha
int AngSerCen = 90; //////angulo para el centro
int AngSerIzq = 165;    /////angulo para la izquierda

int izqA = 10;      //// pines 5,6,7 y 8 al puente H
int izqB = 9;
int derA = 5;
int derB = 6;
int vel = 255;            // Velocidad de los motores se puede variar (0-255)
int estado = '1';         // inicia en espera

int pecho = 2;            // define el pin 2 como (pecho) para el Ultrasonido
int ptrig = 3;            // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia;  // para Calcular distancia

int DisDer;
int DisIzq;
int DisEcoDer;
int DisEcoIzq;
int DisFrenteEco;

void setup()
{
  Serial.begin(9600);    // inicia el puerto serial para comunicacion con el Bluetooth
  servo1.attach(11);   //// servo1 se conecta al pin 11, no usar 9 ni 10
  pinMode(derA, OUTPUT);
  pinMode(derB, OUTPUT);
  pinMode(izqA, OUTPUT);
  pinMode(izqB, OUTPUT);

  pinMode(pecho, INPUT);   // define el pin 2 como entrada (pecho)
  pinMode(ptrig,OUTPUT);   // define el pin 3 como salida  (ptrig)
  pinMode(13,OUTPUT);

}

void loop()

{

  if(Serial.available()>0){        // lee el bluetooth y almacena en estado
    estado = Serial.read();
  }
  if(estado=='2')
{           // Boton desplazar al Frente
    servo1.write(AngSerCen);
    analogWrite(derB, 0);  
    analogWrite(izqB, 0);
    analogWrite(derA, vel);
    analogWrite(izqA, vel);
 }
  if(estado=='3')
{          // Boton IZQ
    servo1.write(AngSerIzq);
    analogWrite(derB, vel);  
    analogWrite(izqB, 0);
    analogWrite(derA, 0);
    analogWrite(izqA, vel);    
  }
  if(estado=='4')
{         // Boton Parar
    servo1.write(AngSerCen);
    analogWrite(derB, 0);  
    analogWrite(izqB, 0);
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
  }
  if(estado=='5')
{          // Boton DER
    servo1.write(AngSerDer);
    analogWrite(derB, 0);  
    analogWrite(izqB, vel);
    analogWrite(izqA, 0);
    analogWrite(derA, vel);
  }

  if(estado=='6')
{          // Boton Reversa
    servo1.write(AngSerCen);
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
    analogWrite(derB, vel);
    analogWrite(izqB, vel);    
  }

///////http://elxedelectronics.blogspot.mx/

  if (estado =='7'){          // Boton ON,  se mueve sensando distancia

     digitalWrite(ptrig, HIGH);   // genera el pulso de trigger por 10us
     delay(0.01);
     digitalWrite(ptrig, LOW);
   
     duracion = pulseIn(pecho, HIGH);              // Lee el tiempo del Echo
     distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
     delay(10);
   
     if (distancia <= 15 && distancia >=2)
   {                                        // si la distancia es menor de 15cm
     
        digitalWrite(13,HIGH);                 // Enciende LED

       ////////////// voltear derecha

      servo1.write(AngSerDer);
      analogWrite(derB, 0);  
      analogWrite(izqB, 0);
      analogWrite(derA, 0);  
      analogWrite(izqA, 0);
      delay(700);
      digitalWrite(ptrig, HIGH);   // genera el pulso de trigger por 10us
     delay(0.01);
     digitalWrite(ptrig, LOW);
   
     duracion = pulseIn(pecho, HIGH);              // Lee el tiempo del Echo
     DisEcoDer = (duracion/2) / 29;            // calcula la distancia en centimetros
     delay(10);
     DisDer = DisEcoDer;  ///guarda la variable DisEcoDer para luego compararla
     delay(500);

//////////////////voltear izquierda

      servo1.write(AngSerIzq);
      analogWrite(derB, 0);  
      analogWrite(izqB, 0);
      analogWrite(derA, 0);  
      analogWrite(izqA, 0);
      delay(700);
       digitalWrite(ptrig, HIGH);   // genera el pulso de trigger por 10us
     delay(0.01);
     digitalWrite(ptrig, LOW);
   
     duracion = pulseIn(pecho, HIGH);              // Lee el tiempo del Echo
     DisEcoIzq = (duracion/2) / 29;            // calcula la distancia en centimetros
     delay(10);
      DisIzq = DisEcoIzq;   ///guarda la variable DisEcoIzq para luego compararla
      delay(500);

      if (DisDer > DisIzq)   /// se comparan las variables y con ello las distancias
      {
    servo1.write(AngSerCen);    /// se detiene un momento voltea, retrocede un poco      
    delay(400);                             ///  y elige su nueva dirección
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
    analogWrite(derB, vel);
    analogWrite(izqB, vel);
    delay(300);
    analogWrite(derB, 0);  
    analogWrite(izqB, vel);
    analogWrite(izqA, 0);
    analogWrite(derA, vel);
    delay(500);
    analogWrite(derB, 0);  
    analogWrite(izqB, 0);
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
    delay(200);
 
      }

      if (DisDer < DisIzq)
      {
    servo1.write(AngSerCen);
    delay(400);
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
    analogWrite(derB, vel);
    analogWrite(izqB, vel);
    delay(300);
    analogWrite(derB, vel);  
    analogWrite(izqB, 0);
    analogWrite(derA, 0);
    analogWrite(izqA, vel);    
    delay(500);
    analogWrite(derB, 0);  
    analogWrite(izqB, 0);
    analogWrite(derA, 0);  
    analogWrite(izqA, 0);
    delay(200);

      }

   
     }
     else{                   // Si no hay obstaculos se desplaza al frente
         analogWrite(derB, 0);  
         analogWrite(izqB, 0);
         analogWrite(derA, vel);
         analogWrite(izqA, vel);
     }
  }
  if(estado=='1'){          // detiene los motores queda en espera
     servo1.write(AngSerCen);
     analogWrite(derB, 0);  
     analogWrite(izqB, 0);
     analogWrite(derA, 0);  
     analogWrite(izqA, 0);
  }
}

views
20


ElectroMercado

  • : tutorial_
  • arduino
6 Comentarios
  1. German
    German 2 semanas

    Tenes el esquema de conexión (diagrama)?

    0
  2. German
    German 2 semanas

    @manosalva y los materiales que usaste

    0
  3. DitecnoDigital
    DitecnoDigital 2 semanas

    excelente @manosalva si podrías agregar lo que te dijo @german estaría mas completo, una captura de pantalla (imagen) , para el diagrama y una lista nombrando los elementos, gracias.

    0
  4. manosalva Autor
    manosalva 2 semanas

    la verdad no tengo planos del proyecto pues todo lo arme sobre la marcha pero con gusto te armo un plano y te lo subo 🙂

    2+
  5. manosalva Autor
    manosalva 2 semanas

    los materiales son
    el atmega 328p de arduino uno
    un puente h l293d
    un sensor de distancia hc-sr04
    un modulo bluetooth hc-05
    regulador de 5 voltios
    un cristal de 16.000 mhz (el mismo cristal que trae la placa de arduino )
    dos condensadores de 22 pico faradios ceramicos (los mismos que trae el arduino)
    un pulsador
    una resistencia de 10k
    un servo sg90
    dos motoreductores
    dos ruedas
    una rueda loca
    baterias y cables
    una base de acrilico
    algunos tornillos

    esos serian los materiales el armado si es ingenio de cada persona igual puedes montar todo en un proto board

    2+

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account