Duda programando 1 servo+1 motor CC ...Linefolloweeer!! (SOLVED in FORO INT)

Hola,

Primeramente quisiera presentarme:
Soy Xavi de Barcelona y desde hace un mes ± he adquirido un Arduino UNO nuevo con el StartedKit. La idea es aprender un poco de conceptos de electricidad (y algo de electronica)… …con ayuda de youtube (dios lo bendiga) y blogs de fanáticos del tema, estoy intentando montar mi primer siguelineas. He conectado al arduino un servo (para dirección de las ruedas delanteras), 2 sensores IR (compre los CNY70 que, por lo visto, hacen su función) y un motor CC (para las ruedas traseras). El problema lo tengo en el codigo, pues si programo por separado el motor CC me funciona (por PWM), y si programo los 2 sensores y servo, también funcionan. …peeeero, si programo las 2 cosas juntas, no funcionan bien los componentes…cachis!
Total, os escribo para ver si alguna alma caritativa puede echarme una mano. Copio aquí el codigo que da NO funciona bien. …tener presente que soy un amater/rookie total… …el modelo que estoy diseñando solamente pretendo que vaya en linea recta y haga algún giro (velocidad constante para el motor CC), y, eso sí, el servo hace girar las ruedas delanteras según la respuesta de los 2 sensores (CNY70)…
Sin más, os envio a saludo a todos/as y agradezco cualquier sugerencia. Por descontado, puedo hacer fotos e intentar pasaros la documentación que me pidais! …copio/pego el codigo a continuación:

#include <Servo.h>
Servo miServo;
int inPinDER = 4;
int inPinIZ = 2;
int motor = 10;
int valueDER = 0;
int valueIZ = 0;
int valueMotor = 40;
void setup() {
pinMode(inPinDER, INPUT);
pinMode(inPinIZ, INPUT);
pinMode (motor, OUTPUT);
analogWrite (motor, valueMotor); //este enciende el motor CC que dá tracción a las ruedas traseras
miServo.attach(11);
miServo.write (90); //pongo recto la dirección (servo)
}
void loop() {
valueDER = digitalRead(inPinDER);
valueIZ = digitalRead(inPinIZ);
if (valueDER == 0) {
miServo.write (5);//derecha
}
else if (valueDER == 1 & valueIZ == 1){
miServo.write (90);//centrorecto
}

else if (valueIZ == 0) {
miServo.write (130);//iz

}
delay (250);
}

ACTUALIZACIÓN:
He visto que mi problema se centra en estas líneas de código en el metodo setup():
analogWrite (motor, valueMotor); //enciende motor CC
miServo.attach(11); //crea el objeto de la clase servo para el motor que uso para la dirección del coche

…si elimino (o comento) la linea de miServo.attach(11);, la anterior funciona bien!

=(

ALTO... :astonished:

Mejor si, sube fotos y más que nada también, el esquema de como tienes conectadas las cosas.

¿No serás que están tomando la corriente del mismo Arduino y este se está quedando sin "aire"?

Cuidado con esas cosas, los servos y los motores necesitan de seguro más amperaje que los que el Arduino le puede proporcionar, quizás ese sea el problema.

Muchas gracias por responder, Ok, pasaré unas fotografías del proyecto. También intentaré hacer el esquema eléctrico, aunque esto me costará un poquito, dadas mis casi nulas nociones del tema. Respecto a la alimentación, he conectado 2 pilas de 9v. Una para alimentar al arduino y otra esclusivamente para el motor CC (aunque me hubiera gustado hacerlo con 1 sola bateria, esta opción me era más simple). Agradezco tu respuesta, así que en seguida intentaré pasar la información que me pides!

Salu2!

Hola otra vez!

Más o menos he podido hacer el esquema de como tengo conectado el tiglado… …es la primera vez que uso el Fritzing este, y la verdad, es una caña!(aunque como vereis no esta muy ordenados los componentes) …no he encontrado el sensor IR CNY70 en el programa, y he puesto otro en el esquema, pero el principio es lo mismo. Las resistencias que he conectado a los sensores CNY70 son de 15Koms y 220oms.
Por separado los componentes funcionan bien; Es decir, si no incluyo en la programación la parte relativa al control del motor CC, los servos y sensores responden bien (la parte relativa al motor CC es pinMode (motor, OUTPUT); y analogWrite (motor, valueMotor); ) …en cambio, si solo programo el motor CC sí que funciona bien. El problema viene cuando pongo los 2 codigos juntos (sensores y servo + motor CC)…
Bufff, creo que me he explicado fatal, espero con esto haber podido ampliar la información del proyecto con la esperanza de que alguna alma bondadosa me ilumine el camino (linea) para poder seguir con mi primera version del linefolowerrr!
Mil gracias de antemano y envio a un saludo a toda la comunidad arduino!
PD: Tambien incluyo unas fotos del cuerpo del cachibache, compré por 10 euros al lado de mi casa un coche teledirigido y en cuestión de 5 minutos, ya lo tenia desbalijado por completo (esto si que me sale bien!..jijiji, toda la infancia rompiendo jugetes para ver como eran por dentro!).

DSC_0001 copia.jpg

DSC_0004 copia.jpg

DSC_0003 copia.jpg

esquemaFritzingLINE copia.jpg

Me olvidaba, ....por descontado que no pretendo que sea una maravilla de bot, la verdad... ...con solo que vaya poco a poco siguiendo la linea me daré por victorioso! ...si este sale más o menos bien, me gustaría empezar una versión 2.0 menos cutre...jejejej ...he detectado que las imagenes solamente se ven desde usuarios registrado, es cierto esto? ¿o he subido mal las imagenes?

Salu2!

Hola de nuevo!

En un intento de conseguir que alguien me ilumine la linea, os adjunto el esquema electrico (aproximado) que he implementado. Soy muy nuevo con esto, así que disculpat por las aberraciones posibles cometidas…
…en el esquema he omitido 1 diodo para el motor CC y las resistencias de los componentes CNY70 (ya que este no lo he enconteado en el Fritzing), y he colocado en su lugar otro sensor IR que desconozco totalmente. …Ah! las dos baterias son pilas de 9V,…
En fin, os agradezco de antemano la ayuda

Salu2!

FritzingLINE_esquema copia.jpg

Buenas!
Sigo con mi odisea personal del linefolloweeeer! …he cambiado el código y sigue sin funcionarme… …alguna sugerencia/consejo?

Gracias por anticipado!

PD: He adquirido un soldador nuevo y madre mia que diferencia! …por fin los sensores me han quedado más o menos dignos!

Salu2! roboticos

copio/pego el código nuevo:

#include <Servo.h>
Servo miServo;
int inPinDER = 4;
int inPinIZ = 2;
int motor = 10;
int valueDER;
int valueIZ;
int valueMotor = 100;
void setup() {
Serial.begin (9600);
pinMode(inPinDER, INPUT);
pinMode(inPinIZ, INPUT);
pinMode (motor, OUTPUT);
}
void loop() {
valueDER = digitalRead(inPinDER);
valueIZ = digitalRead(inPinIZ);
if (valueDER == 0) {
girarDer();
arrancar();
}
else if (valueDER == 1 & valueIZ == 1){
arrancar();
}
else if (valueIZ == 0) {
girarIz();
arrancar();
}
delay (1000);
}
void arrancar() {
analogWrite (motor, valueMotor);
delay(250);
analogWrite (motor, 0);
}
void girarDer() {
miServo.attach(11);
miServo.write (5);//derecha
miServo.detach();
}
void girarIz() {
miServo.attach(11);
miServo.write (140);//derecha
miServo.detach();
}

Hola!

Bueno, al fin he conseguido arreglar el problema. Se trataba de leer la documentación. Tenia el motor conectado en una entrada de PWM que, según documentación de la libreria servo, no se puede usar (pines 9 y 10 creo). Total, cambio de pin y todo funciona! Espero que a alguien le sirva mi pequeña odisea, Gracias y Salu2!

Enhorabuena por haber dado con la solución tu solo. Tiene mucho mérito y seguro que estas más que satisfecho ;)

Un saludo!

Gracias Jukar! :blush: :blush: :blush: jejejej, pues la verdad es que puse oto post en el foro Internacional y me ayudaron super rápido! :) Un Saludo para ti también!

En breves pondre un video de la 1ª versión acabada del linefollower!

jumpering: En breves pondre un video de la 1ª versión acabada del linefollower!

Aquí estaremos para verlo ;)