Grupo 3 Recibe donativo de 6 escritorios Noviembre 29 de 2016 |
sábado, 3 de diciembre de 2016
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
jueves, 10 de noviembre de 2016
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
Suscribirse a:
Entradas (Atom)