Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (13)
Arduino Robot Ps
Seguimos probando…
Una vez implementado este accesorio es hora de probarlo:
Un buen comportamiento, pero con alguna modificación de código quedaría mejor la exactitud de movimientos.
Intentando mejorar el código y simplificación de comandos he llegado a esto:
/********************************************************************************************* 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. ********************************************************************************************/ #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() //creamos el comando "avanza" y especificamos el comportamiento de las salidas (sentido de giro de los motores) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); } void para() //comando "para" donde dejamos de suministrar energia a los morores { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); pitido(2); } void girad() //giro a derecha { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,HIGH); digitalWrite(MOTOR2_CTL2,LOW); } void girai() //giro a izquierda (vease que se alimenta uno de los polos de las bobinas del motor en funcion del giro deseado) { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); } void atras()//atras... invertimos "avanza" { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,HIGH); 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); } //fin pitido delay(5000);// espera 5 segundos //Ejecutamos los comandos deseados llamando a los subprocesos: avanza(); delay (2000);//paramos 5 segundos para(); delay (5000);//paramos 5 segundos atras(); delay (2000);//paramos 5 segundos para(); delay (5000);//paramos 5 segundos girad(); delay(230);//= +-90g para(); delay (5000);//paramos 5 segundos girai(); delay(230);//= +-90g para(); delay (5000);//paramos 5 segundos // giro derecha 180g girad(); delay(460);//=+-180grados para(); delay (10000);//paramos 10 segundos pitido(3);//damos 3 pitidos delay (3000);//esperamos 3 segundos }
Un código más entendible… podéis probarlo enviando la programación a la placa para ver su comportamiento.
El próximo día seguiremos con el desarrollo y aprendizaje.
Tuitear 1.844 Veces leído 0 comentarios |
13 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |