Buenas noches, estoy realizando un proyecto con luces automáticas y han surgido varias complicaciones (cabe aclarar que soy novato). Pero antes que nada dejo la lista de los materiales que estoy empleando
Materiales:
2 Arduino Nano
6 relevadores (1 Modulo de 4 reles y 1 Modulo de 2)
6 Lamparas a 127V CA
4 Sensores Ultrasonicos HC-SR04
Cable en general
El objetivo es realizar unas luces automáticas para una escalera en una casa de 3 pisos (anexo el diagrama)
Los problemas comienza cuando trato de hacer todo con un solo arduino ya que el programa tiene varias variantes de operación las cuales son:
1 solo Arduino
1.- Subida de la planta baja: Cuando sube uno, el sensor 4 manda la señal y activa las lamparas 1,2,3 y 4
2.- Segundo Piso: Este piso tiene 2 variantes:
2.1.- Cuando vas de bajada el sensor 2 manda a activar las lamparas 1,2,3 y 4
2.2.- Cuando subes al tercer piso el sensor 3 manda a activar las lamparas 5 y 6
3.- Tercer Piso: Cuando vas de bajada solo activa las lamparas 5 y 6
Al emplear solo un arduino los problemas comienzan cuando uso la función delay para la activación, poniendo un ejemplo hipotetico:
Voy de subida desde la planta baja y el sensor 4 activa las lamparas 1,2,3 y 4 y yo quisiera seguir subiendo al tercer piso. Debido a la activación de las primeras 4 el arduino se queda pasmado por el delay y pasa por alto que active el sensor 3. Otro problema que me surge es al momento de las cargas, ya que la fuente que uso no alcanza activar todos los reles (solo prenden los leds pero no conmutan)
2 Arduinos
Mi opción de novato fue usar un segundo arduino donde el primer arduino se ocupe de los primeros 2 pisos (Ultrasonico 2 y 4) y el segundo arduino se emplee solo para el tercer piso (Ultrasonico 1 y 3).
Anexo el codigo que empleo para el primer arduino
int ledPin1 = 2;
int ledPin2 = 3;
int ledPin3 = 4;
int ledPin4 = 5;
int trigPin1 = 6;
int echoPin1 = 7;
int trigPin2 = 8;
int echoPin2 = 9;
void setup() {
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}
void firstsensor(){ // Piso 1.
int duration1, distance1;
digitalWrite (trigPin1, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
Serial.print("Planta Baja: ");
Serial.print(distance1);
Serial.print("cm ");
if (distance1 > 15) {
digitalWrite (ledPin1, HIGH);
delay(100);
digitalWrite (ledPin2, HIGH);
delay(100);
digitalWrite (ledPin3, HIGH);
delay(100);
digitalWrite (ledPin4, HIGH);
} else {
digitalWrite (ledPin1, LOW);
delay(100);
digitalWrite (ledPin2, LOW);
delay(100);
digitalWrite (ledPin3, LOW);
delay(100);
digitalWrite (ledPin4, LOW);
delay(3000);
}
}
void secondsensor(){ // Piso 2.
int duration2, distance2;
digitalWrite (trigPin2, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin2, LOW);
duration2 = pulseIn (echoPin2, HIGH);
distance2 = (duration2/2) / 29.1;
Serial.print("Segundo Piso: ");
Serial.print(distance2);
Serial.print("cm ");
if (distance2 > 15) {
digitalWrite (ledPin1, HIGH);
delay(100);
digitalWrite (ledPin2, HIGH);
delay(100);
digitalWrite (ledPin3, HIGH);
delay(100);
digitalWrite (ledPin4, HIGH);
} else {
digitalWrite (ledPin1, LOW);
delay(100);
digitalWrite (ledPin2, LOW);
delay(100);
digitalWrite (ledPin3, LOW);
delay(100);
digitalWrite (ledPin4, LOW);
delay(3000);
}
}
void loop() {
Serial.println("\n");
firstsensor();
secondsensor();
delay(100);
}
El codigo anterior es el mismo para el segundo arduino solo que en ese caso solo activa las lamparas 5 y 6 (del diagrama). Eh visto acerca de la función millis pero veo que es para blinky leds donde las pausas son tiempos exactos predeterminados, en mi caso esas pausas que requiero son cuando se mande manda la señal del sensor.
Asi que para no hacer mas larga la cosa mis dudas son las siguientes:
1.- ¿Habría la posibilidad de hacer todo con 1 solo arduino empleando la función millis?
2.- ¿Para los componentes empleados ya sea con 1 arduino o dos que fuente me recomiendan emplear?
3.- Dado que son 3 pisos otra cuestion que me preocupa es la distancia, del piso 3 al 1 son como 12 metros de recorrido de cable, ¿tendria algun problema con las señales de los sensores o su alimentación? ya que todo iria en un gabinete en el tercer piso (arduinos, reles y fuente/s)
Gracias de antemano y saludos