Hola.
Antes de nada felicidades por esta web mediante la cual conocí a Arduino, estoy encantado con el, soy aficionado a la electrónica, no se mucho pero me gusta cacharrera hasta que lo rompo jejejeje.
El caso es que me compre una de esas aspiradoras que van solas por casa, que cuando vuelves de tomarte una cañita te la encuentra cargando y la casa limpia , La cuestión es que a raíz de ver la aspiradora por casa me empezó a picar la curiosidad de los robots y mirando y mirando termine con un arduino en casa.
Después de mucho mirar cual seria mi primer proyecto decidí que fuera un mando para la Roomba (La juani para mi mujer) esa aspiradora que comente al principio, mire por la web y encontré un proyecto en la web de Zakyfiles de como hacer uno con un pic16f84 en Picbasic, mire el código que me resulto fácil ya que se un poco de Basic y lo aplique a arduino, con el cual estoy muy verde ya que yo de C no se na de na jeje.
Lo que hago es enviar pulsos por las patilla 13 de arduino ya que así no tengo que andar poniendo la resistencia al diodo.
Los tiempos están sacados y adaptados según vi en la aspiradora, a fuerza de prueba y error ya que no entendí muy bien como cojo y transforma los tiempos para el envío, el utiliza en el pic un cristal de 4MHZ y yo utilizo el de 16MHZ que trae arduino, supongo que eso tendrá algo que ver?.
Bueno después de esta paliza os pongo el código haber si me decís por que no va fino del todo el mando, ya que si que enciende la maquina pero no reconoce bien del todo cada código.
// Mando IR Roomba 5xx.
int outPin = 13;
void setup()
{
pinMode(outPin, OUTPUT); // establece el pin digital como salida
}
void envia1(){ // ENVIA 1 AL PIN 13
for (byte i=0;i<114;i++){
digitalWrite(outPin, HIGH);
delayMicroseconds(16);
digitalWrite(outPin, LOW);
delayMicroseconds(3);
}
digitalWrite(outPin, LOW);
delay(1);
}
void envia0(){ // ENVIA 0 AL PIN 13
for (byte i=0;i<38;i++){
digitalWrite(outPin, HIGH);
delayMicroseconds(16);
digitalWrite(outPin, LOW);
delayMicroseconds(3);
}
digitalWrite(outPin, LOW);
delay(3);
}
void loop(){
if (digitalRead(8) == HIGH){ // envia el comando Cleaner al activar el pulsador entrada 8
envia1();
envia0();
envia0();
envia0();
envia1();
envia0();
envia0();
envia0();
delay(32);
}
else if (digitalRead(7) == HIGH){ // envia el comando Spot al activar el pulsador entrada 7
envia1();
envia0();
envia0();
envia0();
envia0();
envia1();
envia0();
envia0();
delay(32);
}
}
Un saludo y Gracias por todo.