Hola, actualmente estoy haciendo un tanque-robot, lo estoy controlando con una aplicación android que he hecho.
los componentes que estoy utilizando son los siguientes:
arduino uno (dispongo de un mega también)
L293d Motor driver
bluesmirf bluetooth module
rp5 robot chasis
un servo hi-tech hs-311
SRf05 proximity sensor
la parte del control del robot iba perfecta hasta que le anyadi el código del servo, cuando lo intento controlar no me va. y cuando desconecto el servo del arduino como que tiene un retardo de un par de segundos cuando aprieto cualquier botón de dirección, mi siguiente idea es instalar el sensor de proximidad para que cuando se valla a chocar se paren los motores.
aquí os dejo el código y me decís cual puede ser el problema va?
#include <Servo.h>
Servo servoloco; // create servo object to control a servo
char puertoserie; // variable to receive data from the serial port
int motor_izquierda[] = {3, 5};
int motor_derecha[] = {6, 9};
int val = 0; // variable to store the value coming from the sensor
void setup() {
servoloco.attach(11); // attaches the servo on pin 11 to the servo object v
Serial.begin(9600); // start serial communication at 9600bps
int i;
for(i = 0; i < 2; i++){
pinMode(motor_izquierda[i], OUTPUT);
pinMode(motor_derecha[i], OUTPUT);
}
}
void loop() {
if( Serial.available() ) // if data is available to read
{
puertoserie = Serial.read(); // read it and store it in 'val'
}
if( puertoserie == 'w' )
{
go_forward_both_motors_on();
}
if( puertoserie == 's' )
{
go_backwards_both_motors_on();
}
if( puertoserie == 'd' )
{
go_right();
}
if( puertoserie == 'a' )
{
go_left();
}
if( puertoserie == 'q' )
{
stop_motors_both_motors_off();
}
if ( puertoserie == 'o' )
{
}
if ( puertoserie == 'z' )
{
stop_motors_both_motors_off();
}
{
servoloco.write(0); // sets the servo position according to the scaled value
delay(100); // waits for the servo to get there
servoloco.write(170); // sets the servo position according to the scaled value
delay(100); // waits for the servo to get there
}
}
void stop_motors_both_motors_off(){
digitalWrite(motor_izquierda[0], LOW);
digitalWrite(motor_izquierda[1], LOW);
digitalWrite(motor_derecha[0], LOW);
digitalWrite(motor_derecha[1], LOW);
}
void go_left(){
digitalWrite(motor_izquierda[0], HIGH);
digitalWrite(motor_izquierda[1], LOW);
digitalWrite(motor_derecha[0], HIGH);
digitalWrite(motor_derecha[1], LOW);
}
void go_right(){
digitalWrite(motor_izquierda[0], LOW);
digitalWrite(motor_izquierda[1], HIGH);
digitalWrite(motor_derecha[0], LOW);
digitalWrite(motor_derecha[1], HIGH);
}
void go_forward_both_motors_on(){
digitalWrite(motor_izquierda[0], LOW);
digitalWrite(motor_izquierda[1], HIGH);
digitalWrite(motor_derecha[0], HIGH);
digitalWrite(motor_derecha[1], LOW);
}
void go_backwards_both_motors_on(){
digitalWrite(motor_izquierda[0], HIGH);
digitalWrite(motor_izquierda[1], LOW);
digitalWrite(motor_derecha[0], LOW);
digitalWrite(motor_derecha[1], HIGH);
}