Hola,
estoy intentando controlar varios motores y servos con arduino y una app que hecho con appinventor2.
su funcionamiento es sencillo, con seis sliders regulo cuatro motores y dos servos.
La app manda una cadena de datos al arduino. Esto parece que funciona, con el monitor serial veo que llegan los datos bien.
el problema es que si por ejemplo solo muevo un slider de un motor se mueven los tres.
He mirado con un miniosciloscopio y veo que el pin pwm que tengo configurado con el slider tiene un valor pwm correcto, pero observo las otras salidas y tambien tienen señal pwm y sus sliders estan a 0.
Alguien sabe que puede pasar?
adjunto el sketch de arduino a ver si alguién tiene idea de que puede pasar o tiene una idea mejor para que esto no suceda.
La señal que que envia desde la app es un valor de 133 (en la app lo tengo de 0 a 255), la señal en el pin 3 a nivel alto es de unos 1060 microsegundos, aproximadamente a nivel bajo esta los mismos microsegundos, si vario el slider de la app esta señal tambien varia correctamente.
El problema esta en el pin 5 y 6 tengo una señal a nivel alto de 248 microsegundos, cuando tendría que estar a 0,
gracias.
// simulación roboping con sliders v1_1
#include <SoftwareSerial.h> // libreria para poder utilzar otros pins de comunicación
#include <Servo.h>
SoftwareSerial BT(12, 13); // RX, TX para hacer pruebas utilizo los en los pines 0 y 1
int motor1 = 3; //pin motor inferior
int motor2 = 5; //pin motor superior izquierda
int motor3 = 6; //pin motor superior derecha
//int motor_elevador =11; //pin motor elevador
//SoftwareSerial BT(7,8); // RX, TX
//int motor1 =3; //pin motor inferior
//int motor2 =5; //pin motor superior izquierda
//int motor3 =6; //pin motor superior derecha
//int motor_elevador =11; //pin motor elevador
//int servo_h_pin =3;
//int servo_v_pin =5;
int servo_h_pin = 9;
int servo_v_pin = 10;
//int servo_pisto_pin =7;
Servo servo_h; // crea el objeto servo horizontal
Servo servo_v; // crea el objeto servo vertical
//Servo servo_pisto;
//int pos_horizontal = 0; //posición inicial del servo horizontal
//int pos_vertical = 0; //posición inicial del servo vertical
void setup()
{
BT.begin(9600); // velocidad del puerto del módulo bluetooth
Serial.begin(9600);
pinMode (motor1, OUTPUT); // declaramos el los motores como salidas
pinMode (motor2, OUTPUT); // declaramos el los motores como salidas
pinMode (motor3, OUTPUT); // declaramos el los motores como salidas
//pinMode (motor_elevador,OUTPUT); // declaramos el los motores como salidas
servo_h.attach (servo_h_pin); // vincula el servo horizontal al pin 9
servo_v.attach (servo_v_pin); // vincula el servo vertical al pin 10
//servo_pisto.attach (servo__pisto_pin);// vincula el servo que controla el piston con el pin 11
servo_h.write (90);
servo_v.write (90);
//servo_pisto.write (15);
}
void loop()
{
// cuando haya datos disponibles
while (BT.available () > 0 )
{
delay(5);
int valor_servo_h = BT.parseInt(); //leemos el primer valor entero (servo horizontal) y lo almacenamos en la variable
int valor_servo_v = BT.parseInt(); //leemos el segundo valor entero (servo vertical) y lo almacenamos en la variable
int valor_motor3 = BT.parseInt(); //leemos el tercer valor entero (motor superior derecha) y lo almacenamos en la variable
int valor_motor2 = BT.parseInt(); //leemos el cuarto valor entero (motor superior izquierda) y lo almacenamos en la variable
int valor_motor1 = BT.parseInt(); //leemos el quinto valor entero (motor inferior) y lo almacenamos en la variable
//int valor_m_elevador = BT.parseInt(); //leemos el último valor entero (motor elevador) y lo almacenamos en la variable
// int valor_servo_pisto = BT.parseInt(); //leemos el último valor entero (motor elevador) y lo almacenamos en la variable
// cuando lea el carácter fin de línea ('\n') quiere de decir que ha finalizado el envío de los 6 valores
if (BT.read() == '\n')
{
//enviamos los valores recibidos de los sliders a los pines de los motores y servos
servo_h.write (valor_servo_h);
servo_v.write (valor_servo_v);
//servo_pisto.write (valor_servo_pisto);
analogWrite (motor3, valor_motor3);
analogWrite (motor2, valor_motor2);
analogWrite (motor1, valor_motor1);
//analogWrite (motor_elevador,valor_m_elevador);
Serial.println(valor_servo_h);
Serial.println(valor_servo_v);
Serial.println(valor_motor3);
Serial.println(valor_motor2);
Serial.println(valor_motor1);
//BT.println(motor_elevador,valor_m_elevador);
delay (100);
}
}
}
estoy intentando controlar varios motores y servos con arduino y una app que hecho con appinventor2.
su funcionamiento es sencillo, con seis sliders regulo cuatro motores y dos servos.
La app manda una cadena de datos al arduino. Esto parece que funciona, con el monitor serial veo que llegan los datos bien.
el problema es que si por ejemplo solo muevo un slider de un motor se mueven los tres.
He mirado con un miniosciloscopio y veo que el pin pwm que tengo configurado con el slider tiene un valor pwm correcto, pero observo las otras salidas y tambien tienen señal pwm y sus sliders estan a 0.
Alguien sabe que puede pasar?
adjunto el sketch de arduino a ver si alguién tiene idea de que puede pasar o tiene una idea mejor para que esto no suceda.
La señal que que envia desde la app es un valor de 133 (en la app lo tengo de 0 a 255), la señal en el pin 3 a nivel alto es de unos 1060 microsegundos, aproximadamente a nivel bajo esta los mismos microsegundos, si vario el slider de la app esta señal tambien varia correctamente.
El problema esta en el pin 5 y 6 tengo una señal a nivel alto de 248 microsegundos, cuando tendría que estar a 0,
gracias.
// simulación roboping con sliders v1_1
#include <SoftwareSerial.h> // libreria para poder utilzar otros pins de comunicación
#include <Servo.h>
SoftwareSerial BT(12, 13); // RX, TX para hacer pruebas utilizo los en los pines 0 y 1
int motor1 = 3; //pin motor inferior
int motor2 = 5; //pin motor superior izquierda
int motor3 = 6; //pin motor superior derecha
//int motor_elevador =11; //pin motor elevador
//SoftwareSerial BT(7,8); // RX, TX
//int motor1 =3; //pin motor inferior
//int motor2 =5; //pin motor superior izquierda
//int motor3 =6; //pin motor superior derecha
//int motor_elevador =11; //pin motor elevador
//int servo_h_pin =3;
//int servo_v_pin =5;
int servo_h_pin = 9;
int servo_v_pin = 10;
//int servo_pisto_pin =7;
Servo servo_h; // crea el objeto servo horizontal
Servo servo_v; // crea el objeto servo vertical
//Servo servo_pisto;
//int pos_horizontal = 0; //posición inicial del servo horizontal
//int pos_vertical = 0; //posición inicial del servo vertical
void setup()
{
BT.begin(9600); // velocidad del puerto del módulo bluetooth
Serial.begin(9600);
pinMode (motor1, OUTPUT); // declaramos el los motores como salidas
pinMode (motor2, OUTPUT); // declaramos el los motores como salidas
pinMode (motor3, OUTPUT); // declaramos el los motores como salidas
//pinMode (motor_elevador,OUTPUT); // declaramos el los motores como salidas
servo_h.attach (servo_h_pin); // vincula el servo horizontal al pin 9
servo_v.attach (servo_v_pin); // vincula el servo vertical al pin 10
//servo_pisto.attach (servo__pisto_pin);// vincula el servo que controla el piston con el pin 11
servo_h.write (90);
servo_v.write (90);
//servo_pisto.write (15);
}
void loop()
{
// cuando haya datos disponibles
while (BT.available () > 0 )
{
delay(5);
int valor_servo_h = BT.parseInt(); //leemos el primer valor entero (servo horizontal) y lo almacenamos en la variable
int valor_servo_v = BT.parseInt(); //leemos el segundo valor entero (servo vertical) y lo almacenamos en la variable
int valor_motor3 = BT.parseInt(); //leemos el tercer valor entero (motor superior derecha) y lo almacenamos en la variable
int valor_motor2 = BT.parseInt(); //leemos el cuarto valor entero (motor superior izquierda) y lo almacenamos en la variable
int valor_motor1 = BT.parseInt(); //leemos el quinto valor entero (motor inferior) y lo almacenamos en la variable
//int valor_m_elevador = BT.parseInt(); //leemos el último valor entero (motor elevador) y lo almacenamos en la variable
// int valor_servo_pisto = BT.parseInt(); //leemos el último valor entero (motor elevador) y lo almacenamos en la variable
// cuando lea el carácter fin de línea ('\n') quiere de decir que ha finalizado el envío de los 6 valores
if (BT.read() == '\n')
{
//enviamos los valores recibidos de los sliders a los pines de los motores y servos
servo_h.write (valor_servo_h);
servo_v.write (valor_servo_v);
//servo_pisto.write (valor_servo_pisto);
analogWrite (motor3, valor_motor3);
analogWrite (motor2, valor_motor2);
analogWrite (motor1, valor_motor1);
//analogWrite (motor_elevador,valor_m_elevador);
Serial.println(valor_servo_h);
Serial.println(valor_servo_v);
Serial.println(valor_motor3);
Serial.println(valor_motor2);
Serial.println(valor_motor1);
//BT.println(motor_elevador,valor_m_elevador);
delay (100);
}
}
}