domingo, 27 de noviembre de 2016

Detección de Objetos con Sensor Ultrasonico HC-SR04 + Arduino


COYOBOTICS PROYECTO 01_092023 


DETECCIÓN DE OBJETOS CON EL SENSOR ULTRASONICO HC-SR004






DIAGRAMA DE CONEXIÓN







EL CÓDIGO

   
  EL DISPOSITIVO FUNCIONANDO                                                                                






jueves, 3 de noviembre de 2016

Control de Motores DC Driver L298N



Driver L298N


Diagrama de Conexión
Driver L298N para el control de dos motores DC


EL SKETCH



/*
Este programa emplea el driver L298N para controlar la velocidad y giro de 2 motores DC de 600ma de corriente máxima.

El Driver L298N estará alimentado por una fuente externa de 9 Volts . Arduino estará alimentado por una batería de 5 Volts. .  GND de Arduino y GND del Driver L298N deberán estar conectadas a un punto común.

*/

//Motor Izquierdo

int Velocidad_MI = 10;        // Pin PWM para controlar la velocidad de giro del motor Izquierdo

int GiroCW_MI= 9; // Control del sentido de giro CW Motor Izquierdo
int GiroCCW_MI = 8; // Control del sentido de giro CCW Motor Izquierdo

//Motor Derecho



int Velocidad_MD = 5; // Pin PWM para el control de la velocidad de giro del motor derecho

int GiroCW_MI = 7; //Control del sentido de giro CW Motor Derecho
int GiroCCW_MI = 6; // Control del sentido de giro CCW Motor Derecho

void setup ( )
{

pinMode(Velocidad_MD, OUTPUT);
pinMode(Velocidad_MI, OUTPUT);

pinMode(GiroCW_MI, OUTPUT);
pinMode(GiroCCW_MI, OUTPUT);

pinMode(GiroCW_MD, OUTPUT);
pinMode(GiroCCW_MD, OUTPUT);

}

//Subrutinas de control, que se ejecutan una a una

//Primera subrutina en la que ambos motores deberán girar CW a una velocidad fija.

void Subrutina1( )

{
digitalWrite(GiroCW_MI, HIGH);
digitalWrite(GiroCW_MD, HIGH);

analogWrite(Velocidad_MD, 180); //Establece la velocidad del motor A en 180
analogWrite(Velocidad_MI, 180); //Establece la velocidad del motor B en 180
delay(5000); //Los motores giran CW durante 5 segundos

digitalWrite(GiroCW_MI, LOW);
digitalWrite(GiroCW_MD, LOW);
delay(2000);

//Cambio de Giro de los motores, ahora en sentido CCW a velocidad 180

digitalWrite(GiroCCW_MI, HIGH);
digitalWrite(GiroCCW_MD, HIGH);

analogWrite(Velocidad_MD, 180); //Establece la velocidad del MI en 180
analogWrite(Velocidad_MI, 180); //Establece la velocidad del MD en 180
delay(5000);

//Apagar los motores
digitalWrite(GiroCCW_MI , LOW);
digitalWrite(GiroCCW_MD , LOW);
delay(3000); //motores A y B apagados durante 3 segundos

}

void Subrutina2( )
{
//Giro de motores CW que acelerarán desde 0 a máxima velocidad

digitalWrite(GiroCW_MI , HIGH);
digitalWrite(GiroCW_MD , HIGH);

//Aceleración de los motores desde 0 a máxima velocidad

for (int a = 0;  a < 256;   a++)        //a inicia en 0, hasta 256, a se incrementa 1 en cada ciclo
{
analogWrite(Velocidad_MD, a);
analogWrite(Velocidad_MI, a);
delay(20);
}

//Desaceleración de los motores de máxima velocidad a cero

for (int a = 255;  a>=0;  a--)  //para a = 255, mientras a sea >= 0, a decrementa 1 en cada ciclo
{
analogWrite(Velocidad_MD, a);
analogWrite(Velocidad_MI, a);
delay(20);
}

//Apagar motores

digitalWrite(GiroCW_MI , LOW);
digitalWrite(GiroCW_MD , LOW);
delay(3000); //motores apagados durante 3 segundos

}

void loop ( )
//Llamado a las subrutinas 1 y 2
{
Subrutina1( );
delay(3000);
Subrutina2( );
delay(3000);
}






miércoles, 19 de octubre de 2016

Control de Velocidad de Motor DC aplicando Pulse Width Modulation



HARDWARE

Componentes requeridos:

A) Arduino UNO
B) Transistor NPN 2N2222A
C) Motor DC 6V @400 mA
D) 3 Resistencias de 220 Ohms
E) 1 Resistencia de 1 Kohm
F) 1 Potenciometro de 10 Kohm
G) 1 Piezoelectrico
H) 3 Leds 5 mm


¿Como funciona?

La velocidad del motor estará determinada por el valor de resistencia del potenciometro que es leido desde el pin A5 de arduino, y mediante código se determina la formula matemática para el ancho de pulso (duración del high-low)

Si la velocidad del motor esta en el rango de 100 - 200 el led verde se encenderá (condición normal de operación).

Si la velocidad excede el valor 230 (250 es el máximo valor) el led  rojo se enciende junto con una alarma de advertencia de máxima velocidad del motor.

El led amarillo (señal de advertencia) se encenderá cuando el valor para la velocidad este en el rango de 210-229. El dato de la velocidad sera mostrado en el monitor de puerto serie del IDE


EL SKETCH


/*
Este programa CONTROLA LA VELOCIDAD DE GIRO DE UN MOTOR DC de baja corriente mediante PWM (Pulse Width Modulation), empleando un potenciómetro de 10 Kohm y un transistor 2N2222A de 600mA de corriente máxima de salida.

La base del transistor se conectará al pin 9 de Arduino y el potenciómetro estará enviando sus valores de resistencia al pin analógico 5. Se emplea una resistencia de 1 Kohm en la base del transistor para protección.

Se configura la comunicación con el puerto serie a 9,600 baudios a fin de poder monitorear el valor prefijado en el potenciómetro, que puede ir desde 0 a un valor máximo de 255 (máximo ancho de pulso, máxima velocidad del motor)

Se emplean 3 LED´S (VERDE - AMARILLO - ROJO) que se encenderán de acuerdo a las RPM del motor.

Si la velocidad de giro alcanza los 225 RPM, el LED ROJO se enciende y una alarma así nos lo hará saber.

*/

int MOTOR1 = 9;     //La Señal para la activación del motor en pin digital 9, conectado a la base de Q1
int Potenciometro = 5;    //Potenciómetro a la entrada analógica 5 (Pata central del pot)

int LED_ROJO = 2;
int LED_AMARILLO = 4;
int LED_VERDE = 6;

int ALARMA = 8;

void setup()
{
 // Se configura el pin digital 9 como salida y el pin analógico 5 como entrada. Los pins 2-4-6 también se   //configuran como salida, así como el pin digital 8 para la alarma:

pinMode(MOTOR1 , OUTPUT);
pinMode(LED_ROJO, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(ALARMA, OUTPUT);

pinMode(Potenciometro, INPUT);

Serial.begin(9600);  //Se inicia la comunicación con el puerto Serie a una velocidad de 9,600 baudios

}

void loop() {
//Se lee el valor de resistencia en el potenciómetro, que puede ir de 0 a 1023.

int Valor = analogRead(Potenciometro);  
int Velocidad_del_Motor = Valor/4;      //Se declara la variable que alojara la velocidad del motor.

 if(Velocidad_del_Motor >=50 and Velocidad_del_Motor <=125)

     {
     digitalWrite(LED_VERDE, HIGH);
     
     digitalWrite(LED_AMARILLO, LOW);

     digitalWrite(LED_ROJO, LOW);
    
     }
       
   else
   
     {
   digitalWrite(LED_AMARILLO, HIGH);
   digitalWrite(LED_VERDE, LOW);
   digitalWrite(LED_ROJO, LOW);
     }

   if(Velocidad_del_Motor >=220)

      {
     digitalWrite(LED_VERDE, LOW);
     digitalWrite(LED_AMARILLO, LOW);
     digitalWrite(LED_ROJO, HIGH);

     tone(ALARMA,700, 200);
     delay(1000);
     noTone(ALARMA);
     }

//El ancho de pulso enviado a la base de Q1, estará determinado por Valor/4, lo que provoca que el motor gire a más rpm o menos rpm.

analogWrite(MOTOR1, Velocidad_del_Motor);

//Se imprime el dato de la velocidad del motor, en el monitor del puerto serie.

Serial.println(Velocidad_del_Motor);      
 
}


DEMOSTRACIÓN