Buenas, estoy haciendo un juguete para jugar (fastidiar) con los gatos, en base es una torreta con punteros láser con 2 servos, eje X y eje Y.
En principio la hice manual (con un joystick) y funcionaba bien, se movían los servos correctamente y al pulsar el botón del joystick, se activaba el relé y se encendían los punteros láser, hasta aqui todo bien, pero se me ocurrió hacerla automática (como las ametralladoras de Aliens, el regreso), poniéndole 4 sensores PIR (HC-SR501) cubriendo los 180 grados frontales, cada sensor abarca 45 grados (la base está diseñada de esa forma), porque quiero que la torreta "persiga" al gato que tenga delante.
El tema es que con un solo sensor, el programa funciona bien, pero al poner los 4 se me vuelve loco el invento, y me trae de cabeza, añado que he mirado por internet y no he encontrado casi nada con mas de un PIR y mi nivel de Arduino es flojete, os adjunto el codigo, a ver si me podéis echar un cable, ya que estoy ilusionado con el juguete, porque me lo he diseñado e impreso yo mismo (soy aprendiz de muchas cosas, jejeje).
#include <Servo.h>
int sensor45 = 2; // pines de los sensores
int sensor90 = 3;
int sensor135 = 4;
int sensor180 = 5;
Servo serbas; // servo base
Servo serbat; // servo bateria
int rele = 12; // pin del rele
void setup() {
serbas.attach(10); // asigno pin 10 al servo de la base
serbas.write(90); // lo situo en posicion de descanso
serbat.attach(9); // asigno pin 9 al servo de la bateria
serbat.write(65); // lo situo en posicion de descanso
pinMode(sensor45, INPUT); // declaro los pines como entrada
pinMode(sensor90, INPUT);
pinMode(sensor135, INPUT);
pinMode(sensor180, INPUT);
pinMode(rele, OUTPUT); // declaro el rele como salida
digitalWrite(sensor45, LOW); // apago los sensores
digitalWrite(sensor90, LOW);
digitalWrite(sensor135, LOW);
digitalWrite(sensor180, LOW);
}
void loop() { // y partir de aqui es donde falla
if (digitalRead(sensor45 == HIGH)){
serbas.write(28);
serbat.write(90);
digitalWrite(rele, HIGH);
delay(15);
}else{
serbas.write(90);
serbat.write(65);
digitalWrite(rele, LOW);
delay(15);
}
if (digitalRead(sensor90 == HIGH)){
serbas.write(73);
serbat.write(90);
digitalWrite(rele, HIGH);
delay(15);
}else{
serbas.write(90);
serbat.write(65);
digitalWrite(rele, LOW);
delay(15);
}
if (digitalRead(sensor135 == HIGH)){
serbas.write(108);
serbat.write(90);
digitalWrite(rele, HIGH);
delay(15);
}else{
serbas.write(90);
serbat.write(65);
digitalWrite(rele, LOW);
delay(15);
}
if (digitalRead(sensor180 == HIGH)){
serbas.write(153);
serbat.write(90);
digitalWrite(rele, HIGH);
delay(15);
}else{
serbas.write(90);
serbat.write(65);
digitalWrite(rele, LOW);
delay(15);
}
}
Decir también que la placa es Arduino UNO, los servos son los SG-90 y el relé es un módulo Keyes que me vino en el Starter Kit, muchas gracias de antemano y un saludo.