Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (14)
Arduino Robot Ps
Seguimos probando…
Siguiendo con el objetivo de simplificar las ordenes de mando para nuestro pequeño robot, nos hemos puesto las manos a la obra y hemos llegado a una simplificación interesante:
/********************************************************************************************* Tutorial: Robot Ps Autor: www.pesadillo.com - 12 Agosto 2015 http://www.pesadillo.com/ Implementamos altavoz para proporcionar pitidos de señalizacion. Simplificamos los giros en motores. Simplificamos codigo enviando a los subprocesos los tiempos de ejecución del comando. ********************************************************************************************/ #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 void setup() { // Setup pins for motor 1 pinMode(MOTOR1_CTL1,OUTPUT); pinMode(MOTOR1_CTL2,OUTPUT); // Setup pins for motor 2 pinMode(MOTOR2_CTL1,OUTPUT); pinMode(MOTOR2_CTL2,OUTPUT); // set the speaker pin mode to output pinMode(speakerPin, OUTPUT); } void motorStart(char motor_num, byte direction) { 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) { if (motor_num == 1) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,LOW); } else { digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); } } //pitidos void pitido(char pitidos_num) { for (int pip=0; pip<pitidos_num; pip++) { for (int i=300; i>0; i--) { digitalWrite(speakerPin, HIGH); delayMicroseconds(200); digitalWrite(speakerPin, LOW); delayMicroseconds(200); } delay (50); } } // avance void avanza(int avanza_num) //seguimos con el SUBPROCESO "avanza" al que le pedimos un valor numerico (INT) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); delay (avanza_num);//Aplicamos el valor numerico obtenido entre parentesis } void para(int para_num) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); pitido(2); delay(para_num); } //giro derecha void girad(int girad_num) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,HIGH); digitalWrite(MOTOR2_CTL2,LOW); delay (girad_num); } //giro izquierda void girai(int girai_num) { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); delay (girai_num); } //atras void atras(int atras_num) { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,HIGH); digitalWrite(MOTOR2_CTL2,LOW); delay (atras_num); } 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); } //fin silvido delay(5000);// espera 5 segundos //He aqui el código simplificado con los comandos del anterior desarrollo: avanza(2000);//enviamos cuanto avanza para(2000);//enviamos cuanto para atras(2000);//enviamos cuanto atras... para(2000); girad(230);//= +-90g para(2000); girai(230);//= +-90g para(2000); girad(460);// giro derecha 180g para(2000); //Final // Como se observa muchisimo mas simple pitido(3); delay (3000); }
El próximo día rizaremos más el rizo y conseguiremos un nuevo objetivo.
Tuitear 1.755 Veces leído 0 comentarios |
14 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |