Hola a a todos!
Acabo de descubrir la plataforma Arduino, pequeña pero matona, y estaba montando un pequeño proyecto con ella. Desgraciadamente mi habilidad en este campo no es mucha; en la uni tenian un "trato" con una empresa local y haciamos los proyectos de electronica y PICs siempre con los productos de ellos, y mejor no os mento la dichosa empresa porque todos mis compañeros y yo le acabamos cogiendo asco.
A ver si me podeis echar un cable para iniciarme con Arduino:
Quiero controlar dos servomotores con el Arduino a traves de un pulsador. Digamos que seria como las puertas de un bar del oeste automaticas, accionar el pulsador y se abren (girar dos motores en sentido inverso, mismo angulo). Volver a pulsar y se cierren. Asi continuamente.
Os pego el codigo del programa que tengo:
//pines de entrada
int pulsador = 8; // pin de control para pulsador//pines de salida
int controlServoIzq = 9; // pin de control para servo izquierdo
int controlServoDer = 10; // pin de control para servo derecho//variables
int semaforo1 = 0; // Semaforo bloqueante para apertura
int semaforo2 = 0; // Semaforo bloqueante para cierreint minPulse = 500; // Posicion MIN del servo
int maxPulse = 2500; // Posicion MAX del servoint desplazamiento = 0; //variable de 0 a MAX-MIN para controlar el angulo de los motores
int pulsoServoIzq = 0; // Amount to pulse the servoL
int pulsoServoDer = 0; // Amount to pulse the servoRvoid setup() {
//inicializar pines E/S
pinMode(pulsador,INPUT); //Entrada pulsador
pinMode(controlServoIzq, OUTPUT); //Salida servo izquierdo
pinMode(controlServoDer, OUTPUT); //Salida servo derecho//inicializar variables
pulsoServoIzq = minPulse; // Set the motor position values to the minimum
pulsoServoDer = maxPulse;
}void loop() {
while(semaforo1==0) { //bloqueo el loop hasta accionar el pulsador
if(digitalRead(pulsador)==HIGH) {
semaforo1 = semaforo1 + 1;
}
}pulsoServoIzq = desplazamiento + minPulse; // Pulso para motor izquierdo
pulsoServoDer = maxPulse - desplazamiento; // Pulso para motor derecho (inverso al izquierdo)digitalWrite(controlServoIzq, HIGH); // Encender motor izquierdo
delayMicroseconds(pulsoServoIzq); // La duracion del delay marca el giro
digitalWrite(controlServoIzq, LOW); // apagar motor izquierdodigitalWrite(controlServoDer, HIGH); // Encender motor derecho
delayMicroseconds(pulsoServoDer); // La duracion del delay marca el giro
digitalWrite(controlServoDer, LOW); // apagar motor derechowhile(semaforo2==0) {
if(digitalRead(pulsador)==HIGH) {
semaforo2 = semaforo2 + 1;
}
}pulsoServoIzq = maxPulse - desplazamiento; // Pulso para motor izquierdo
pulsoServoDer = desplazamiento + minPulse; // Pulso para motor derecho (inverso al izquierdo)digitalWrite(controlServoDer, HIGH); // Encender motor derecho
delayMicroseconds(pulsoServoDer); // La duracion del delay marca el giro
digitalWrite(controlServoDer, LOW); // apagar motor derechodigitalWrite(controlServoIzq, HIGH); // Encender motor izquierdo
delayMicroseconds(pulsoServoIzq); // La duracion del delay marca el giro
digitalWrite(controlServoIzq, LOW); // apagar motor izquierdosemaforo1=0; //bloqueo de nuevo los semaforos
semaforo2=0;
}
Al hacer compile/verify con el IDE me dice Binary sketch size: 1440 bytes (of a 14336 byte maximum)
Este codigo está medio sacado de la web, medio montado por mi. He montado un par de "semaforos" para bloquear el bucle, es lo unico que se me ocurria. Y lo de los motores esta sacado de la web y adaptado a mis necesidades.
Ahora bien, lo he montado todo sobre una placa, soldando y haciendo lo que buenamente he podido:
Los cables azules que salen hacia arriba son para otro pulsador.
Y el resultado es que nada se mueve, y no se si es mi montaje electrico (soy un poquito patas) o algo en el programa.