Hola soy nuevo en esto de Arduino y ya que tenia un starter kit del mega 2560 `por un trabajo de clase me he decidido ha enfrascarme en la automatización de mi gallinero el problema es que he hecho un programación sencilla adaptando otra programación de un trabajo de clase y tengo varios problemas :
- Cuando alimento solo con una pila de 9V el 28BYJ-48 no se enciende debo aparte conectar el USB para que empiece a andar el motor esta con su drive
- La programación esta hecha para que cuando sea de noche suba la puerta y tras un determinado tiempo vuelva a bajar y no se como incorporar otra orden en sentido adverso para cuando sea de día se abra y después de un determinado tiempo vuelva bajar.
querría añadir alguna melodía para que las gallinas y patos lo interpreten pero me parece igual demasiado embrollo no se.
Este es mi código de programación:
//Utilizo una LDR y una R=10K como divisor de tensión
// La LDR a +5V y la R a masa.
// Con la entrada analógica A0 de Arduino leo la tensión, que va a depender de la luz
//Declaración de los pines del Arduino para conectar al ULN2003 y correspondencia con los del motor 28BYJ48
#define motor1 8 // pin 1 del ULN2003, corresponde a Azul del motor (pin 1)
#define motor2 9 // pin 2 del ULN2003, corresponde a Rosa del motor (pin 2)
#define motor3 10 // pin 3 del ULN2003, corresponde a Amarillo del motor (pin 3)
#define motor4 11 // pin 4 del ULN2003, corresponde a Naranja del motor (pin 4)
int velocidadmotor = 1000; //variable para velocidad de pasos del motorto set stepper speed
int conta = 0; // variable para llevar la cuenta de los pasos
int cuentas720g = 1024; // número de pasos para giro de 720º - 128 pasos son 90 grados asi que 720 grados 1024
//Array para excitar al ULN2003 que a su vez ataca al motor
int nivelesSalida[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
// Lo vamos a girar en secuencia de medio paso
void setup() {
//declare the motor pins as outputs
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
pinMode(motor3, OUTPUT);
pinMode(motor4, OUTPUT);
Serial.begin(9600);
}
void loop() {
float sensorLDR = analogRead(A0)*5.0/1000; //convierto lectura A0 a tensión
Serial.println(sensorLDR); //para ver en "monitor serie" el valor
if(sensorLDR <1.0) //midiendo la tensión, veo que este valor delimita presencia/ausencia de luz
{
for(conta=0;conta<cuentas720g;conta++) //se repite los pasos necesarios para 720grados dos vuelta y aumentar si seria necesario para subir puerta
giroID(); //sentido del reloj
delay(10000); //tiempo con la puerta abierta
for(conta=0;conta<(cuentas720g);conta++) //idem para el otro lado
giroDI();
}
else
delay(10000); // tiempo de espera antes de volver a comprobar el estado de la LDR
}
// giro Derecha a Izq.
//
void giroDI()
{
for(int i = 0; i < 8; i++)
{
SalidaDato(i); //sacar por Outputs el valor 'i' del array
delayMicroseconds(velocidadmotor);
}
}
void giroID() //giro Izq. a Derecha
{
for(int i = 7; i >= 0; i--)
{
SalidaDato(i);
delayMicroseconds(velocidadmotor);
}
}
void SalidaDato(int posi) // sacamos por los pines de arduino los bits correspondientes
{
digitalWrite(motor1, bitRead(nivelesSalida[posi], 0)); //usamos la función bitRead para extraer el bit 0
digitalWrite(motor2, bitRead(nivelesSalida[posi], 1)); //idem con bit 1
digitalWrite(motor3, bitRead(nivelesSalida[posi], 2)); //idem
digitalWrite(motor4, bitRead(nivelesSalida[posi], 3)); //idem
Aquí se aprecia el problema de alimentación qué en el momento que desconecto el USB se me apaga el motor paso a paso 28BYJ-48


