Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (12)
Arduino Robot Ps
Seguimos programando…
Esta vez, implementaremos un nuevo accesorio a nuestro robot. Un pequeño altavoz que nos proporcione información de en que punto del proceso se encuentra.
/********************************************************************************************* Tutorial: Arduino Robot Ps V1.0 Autor: Pesadillo.com Agosto 2015 http://www.pesadillo.com ********************************************************************************************/ //esto es una linea comentada (no se ejecuta en el codigo) /* Esto es una frase comentada (no se ejecuta en el codigo) */ /* En este ejercicio simplificamos variables no utilizadas (salidas analógicas para el control de velocidad) con respecto al código anterior. Implementamos un altavoz (buzz) de PC para averiguar en que punto del proceso se encuentra nuestro Arduino Robot Ps. Nos informará con sonidos de lo que hace. */ #define MOTOR1_CTL1 8 // I1 #define MOTOR1_CTL2 9 // I2 #define MOTOR2_CTL1 6 // I3 #define MOTOR2_CTL2 7 // I4 #define MOTOR_DIR_FORWARD 0 #define MOTOR_DIR_BACKWARD 1 int speakerPin = 13; // declaro pin para speaker (aprobechamos que la masa esta al lado de este pin) void setup() { // Configuramos pines para motor 1 pinMode(MOTOR1_CTL1,OUTPUT); pinMode(MOTOR1_CTL2,OUTPUT); // Configuramos pines para motor 2 pinMode(MOTOR2_CTL1,OUTPUT); pinMode(MOTOR2_CTL2,OUTPUT); // Configuramos pin para salida (OUTPUT) del altavoz (speaker) pinMode(speakerPin, OUTPUT); } /* void NOMBRE son subprocesos a los que llamamos desde el programa principal */ void motorStart(char motor_num, byte direction) { /*En este void se reclaman dos variables (una de tipo "caracter (CHAR)" y otra de tipo BYT (byte) para especificar el numero de motor y direccion*/ char pin_ctl1; char pin_ctl2; if (motor_num == 1) { pin_ctl1 = MOTOR1_CTL1; pin_ctl2 = MOTOR1_CTL2; } else { pin_ctl1 = MOTOR2_CTL1; pin_ctl2 = MOTOR2_CTL2; } switch (direction) { case MOTOR_DIR_FORWARD: { digitalWrite(pin_ctl1,LOW); digitalWrite(pin_ctl2,HIGH); } break; case MOTOR_DIR_BACKWARD: { digitalWrite(pin_ctl1,HIGH); digitalWrite(pin_ctl2,LOW); } break; } } void motorStop(char motor_num) { /*Este void "motorstop" detiene el motor que recibe entre parentesis (mediante una variable del tipo caracter ej. a,b,c,d,1,2,3...)*/ if (motor_num == 1)//si el motor es el 1 { digitalWrite(MOTOR1_CTL1,LOW);//ponemos a 0v (low) la salida digitalWrite(MOTOR1_CTL2,LOW);//ponemos a 0v (low) la salida del pin MOTOR1_CTL2 (nombre del pin que hemos puesto mas arriba y que se corresponde don el pon 9 del Arduino) } else { digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); } } void loop() { // usamos un bucle para hacer efecto silvido. for (int i=500; i>200; i--) { digitalWrite(speakerPin, HIGH); delayMicroseconds(i); digitalWrite(speakerPin, LOW); delayMicroseconds(i+500); } delay(5000); // espera 5 segundos // avance motorStart(1, MOTOR_DIR_FORWARD); motorStart(2, MOTOR_DIR_FORWARD); delay(1100);//2200 milisegundos = +- 1metro //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro derecha 90g motorStart(1, MOTOR_DIR_FORWARD); motorStart(2, MOTOR_DIR_BACKWARD); delay(230);//= +-90g //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro izquierda 90g motorStart(2, MOTOR_DIR_FORWARD); motorStart(1, MOTOR_DIR_BACKWARD); delay(230);//= +-90g //paro motorStop(1); motorStop(2); delay (5000);//paramos 5 segundos // giro derecha 180g motorStart(1, MOTOR_DIR_FORWARD); motorStart(2, MOTOR_DIR_BACKWARD); delay(460);//=+-180grados //paro motorStop(1); motorStop(2); delay (5000);//esperamos 5 segundos }
Y así queda nuestra nueva implementación:
Y ya podéis hacer la prueba… no olvidéis retocar los valores del bucle
for (int i=500; i>200; i--)//restamos (de grave a agudo) { digitalWrite(speakerPin, HIGH); delayMicroseconds(i); digitalWrite(speakerPin, LOW); delayMicroseconds(i+500); }
por
for (int i=200; i<500; i++)//sumamos (de agudo a grave) { digitalWrite(speakerPin, HIGH); delayMicroseconds(i); digitalWrite(speakerPin, LOW); delayMicroseconds(i+500); }
u otras combinaciones (modificando los valores numéricos) para conseguir vuestro propio sonido.
Con este bucle creamos una onda cuadrada con una determinada frecuencia que es lo que interpreta el altavoz (speaker).
A valores mas pequeños, frecuencias mas altas = Sonidos más agudos.
Seguimos mañana.
Tuitear 1.915 Veces leído 0 comentarios |
12 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |