Se sei già registrato           oppure    

Orario: 01/05/2024 17:09:36  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (7)   1   2   3   4   5   [6]   7    (Ultimo Msg)


Sensore di movimento e crepuscolare con arduino
FinePagina

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 24/11/2017 22:36:50

raga ecco com'è collegato arduino ,l'unica differenza che invece di arduino uno ho collegato arduino nano



Immagine Allegata: SCHEMA PIR CREP_bb.jpg
 
ForumEA/S/SCHEMA PIR CREP_bb.jpg

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 24/11/2017 22:43:54

dimenticavo di dire che il positivo e il negativo del relè,di arduino,e del pir sono collegati direttamente ad un alimentatore da 220v a 5volt 700ma

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 24/11/2017 23:10:51

ho impostato il tempo sul pir a minimo che dovrebbero essere 20 secondi e modificato lo sketch come di seguito. Cosa succede che in condizioni di buio appena do corrente ad arduino il relè si eccita e resta eccitato per 8 minuti e ancora non si stacca .




#define SOGLIAFOTORESISTENZA 400

int pinFoto = A0;
int pinRele = 4;
int pinPir = 5;

int attesaMovimenti = 100; // Millisecondi tra una rilevazione di movimento e un'altra
long primoMovimento = 0; // Gestirà il tempo delle letture
long tempoAccensione = 0; // Millis di accensione del rele
int durataAccensione = 180; // Tempo di attivazione del rele
int inMovimento = false; // Flag per gestire il sensore PIR
int valorePir = 0; // Letture del PIR
int valoreFoto = 0; // Lettura della fotoresistenza
int releAcceso = 0; // Stato attuale del rele

void setup() {
pinMode(pinFoto, INPUT);
pinMode(pinPir, INPUT);
pinMode(pinRele, OUTPUT);

analogWrite(pinRele, HIGH); // La maggior parte dei relè si diseccitano con un valore alto
}

void loop() {
valoreFoto = analogRead(valoreFoto);

if (valoreFoto < SOGLIAFOTORESISTENZA) {
valorePir = digitalRead(pinPir);

if (valorePir == HIGH) {
if (inMovimento == true) {
if (millis() > primoMovimento + attesaMovimenti) {
// Attivo il relè
digitalWrite(pinRele, LOW);
tempoAccensione = millis();
releAcceso = 1;
}
} else {
// Metto da parte il tempo del primo movimento
inMovimento = 1;
primoMovimento = millis();
}
} else {
inMovimento = false;
}

}

if (releAcceso == 1 && (millis() > tempoAccensione + (durataAccensione * 60 * 1000))) {
// Spengo il rele
digitalWrite(pinRele, HIGH);
primoMovimento = 0;
releAcceso = 0;
}

delay(100);

}

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 24/11/2017 23:25:22

CALCOLA ho provato anche il tuo sketch che sarebbe il seguente :

#define SOGLIAFOTORESISTENZA 400
#define fotoCellula A0

int pinFoto = 3;
int pinRele = 4;
int pinPir = 5;


int attesaMovimenti = 100; // Millisecondi tra una rilevazione di movimento e un'altra
long primoMovimento = 0; // Gestirà il tempo delle letture
long tempoAccensione = 0; // Millis di accensione del rele
int durataAccensione = 180; // Tempo di attivazione del rele
int inMovimento = false; // Flag per gestire il sensore PIR
int valorePir = 0; // Letture del PIR
int valoreFoto = 0; // Lettura della fotoresistenza
int releAcceso = 0; // Stato attuale del rele

void setup() {
pinMode(pinFoto, INPUT);
pinMode(pinPir, INPUT);
pinMode(pinRele, OUTPUT);

analogWrite(pinRele, LOW); // La maggior parte dei relè si diseccitano con un valore alto
}

void loop() {
valoreFoto = analogRead(fotoCellula);

if (valoreFoto < SOGLIAFOTORESISTENZA) {
valorePir = digitalRead(pinPir);

if (valorePir == LOW) {
if (inMovimento == true) {
if (millis() > primoMovimento + attesaMovimenti) {
// Attivo il relè
digitalWrite(pinRele, HIGH);
tempoAccensione = millis();
releAcceso = 1;
}
} else {
// Metto da parte il tempo del primo movimento
inMovimento = 1;
primoMovimento = millis();
}
} else {
inMovimento = false;
}

}

if (releAcceso == 1 && (millis() > tempoAccensione + (durataAccensione * 60 * 1000))) {
// Spengo il rele
digitalWrite(pinRele, HIGH);
primoMovimento = 0;
releAcceso = 0;
}

delay(100);

}

ma devo cambiare anche qualcosa nei collegamenti? no perche non fa niente il relè al passaggio d'avanti al pir

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 25/11/2017 08:27:48

Ho trovato nel codice quella che a mio avviso era una incongruenza e l'ho segnalata e corretta, non ho letto con attenzione tutto il codice. Inoltre premetto che non ho ancora ben chiaro cosa vuoi fare, in quanto ho seguito distrattamente la tua discussione.

Mi sembra di aver capito che quando la fotoresistenza indica un valore corrispondente al buio e davanti al pir passa qualcosa, si deve attivare il relè temporizzato per il tempo impostato nel codice. E' così che deve essere?
Quando qualcosa passa davanti al pir lo stato del pinPir è alto o basso?



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 25/11/2017 11:55:19

Se la logica è quello che ho supposto sopra, prova così:


#define SOGLIAFOTORESISTENZA 400
#define fotoCellula A0

int pinFoto = 3;
int pinRele = 4;
int pinPir = 5;

////////////////////////////////////////////////////////////////

int durataAccensione = 3; // Tempo di attivazione del rele in minuti

//////////////////////////////////////////////////////////////////

unsigned long tempoAccensione = 0; // Millis di accensione del rele
boolean inMovimento = false; // Flag per gestire il sensore PIR
boolean stopFoto = false;
int valorePir = 0; // Letture del PIR
int valoreFoto = 0; // Lettura della fotoresistenza
int releAcceso = 0; // Stato attuale del rele

void setup() {
Serial.begin(115200);
pinMode(pinFoto, INPUT);
pinMode(pinPir, INPUT);
pinMode(pinRele, OUTPUT);
analogWrite(pinRele, LOW); // La maggior parte dei relè si diseccitano con un valore alto
}

void loop() {
valoreFoto = analogRead(fotoCellula);
valorePir = digitalRead(pinPir); 
Serial.println("");
Serial.print("fotocellula:  "); Serial.println(valoreFoto);
Serial.print("Pir: "); Serial.println(valorePir);

if (valoreFoto < SOGLIAFOTORESISTENZA && stopFoto == false) {stopFoto = true;}

if (valorePir == HIGH && inMovimento == false && stopFoto == true) { inMovimento = true; tempoAccensione = millis();}

if ((inMovimento == true) && (millis() < (tempoAccensione + (durataAccensione * 60000)))){digitalWrite(pinRele, HIGH);
Serial.print("Relay : acceso. Countdown: "); Serial.println((tempoAccensione + durataAccensione * 60000) - millis());}
else {digitalWrite(pinRele, LOW); inMovimento = false; stopFoto = false; Serial.println ("relay spento");} 
 


delay(100);

} 


Il codice presuppone che il pir eccitato ponga il pin 5 in HIGH, se non è così ed il pin è posto in LOW, occorre modificare l'istruzione
if (valorePir == HIGH ...
in
if (valorePir == LOW...



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 25/11/2017 13:14:01

CITAZIONE (calcola, 25/11/2017 08:27:48 ) Discussione.php?214851&6#MSG81

Ho trovato nel codice quella che a mio avviso era una incongruenza e l'ho segnalata e corretta, non ho letto con attenzione tutto il codice. Inoltre premetto che non ho ancora ben chiaro cosa vuoi fare, in quanto ho seguito distrattamente la tua discussione.

Mi sembra di aver capito che quando la fotoresistenza indica un valore corrispondente al buio e davanti al pir passa qualcosa, si deve attivare il relè temporizzato per il tempo impostato nel codice. E' così che deve essere?
Quando qualcosa passa davanti al pir lo stato del pinPir è alto o basso?

si è proprio cosi che dovrebbe essere eseguito lo sketch
lo stato del pin pir al passaggio è alto. adesso provo un attimo lo sketch

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 25/11/2017 13:51:42

sto provando a banco e sembra andar tutto ok oggi monto a soffitto e vi dirò nei prossimi giorni...

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 26/11/2017 19:54:00

Il test a soffitto sta andando bene funziona tutto come dovrebbe.
Ecco la plaffoniera



Immagine Allegata: 20171125_152523_HDR-600x1067.jpg
 
ForumEA/S/20171125_152523_HDR-600x1067.jpg

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 26/11/2017 21:22:30

Bel lavoro, pulito ed ordinato. I sensori sono nascosti sotto il bottone centrale?



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

Luca450Mhz

Avatar
GigaWatt


Gruppo:Utente
Messaggi:3204

Stato:



Inviato il: 26/11/2017 21:48:37

Grazie calcola che hai corretto il codice. Io non ho avuto modo di provarlo e l'ho buttato giù in fretta e furia.
Sono contento che ora tutto stia funzionando a dovere!



---------------
Pannelli: 6975 Wp (poli e mono). Inverter UPS PSW7 6kW 48V toroidale con switch comandato dal mio sistema di domotica (RaspberryPi + vari Wemos D1 Mini - ESP8266). Regolatore di carica: Mpp Solar PCM8048.
Batterie: 24 elementi trazione pesante 315Ah C5 48V.

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 26/11/2017 23:03:03

Sabato mattina ho avuto un po' di tempo, Prima non ho potuto fare nulla, mi sono interessato ad un altro progetto, forse è meglio dire gioco per me pacioccare con queste cose è un bel gioco.



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 27/11/2017 14:30:56

il sensore di movimento è nascosto sotto la semisfera centrale mentre il sensore luce e messo sul laterale della plaffoniera

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 27/11/2017 14:34:27

Ecco dov'é posizionato il sensore luce



Immagine Allegata: 20171125_152600_HDR-747x1328.jpg
 
ForumEA/S/20171125_152600_HDR-747x1328.jpg

 

donato
MegaWatt


Gruppo:Utente
Messaggi:449

Stato:



Inviato il: 27/11/2017 15:09:24

dopo un paio di giorni di test va tutto bene e dato che l'appetito vien mangiando vorrei chiedervi un altro aiuto adesso arduino sta funzionando in questo modo arduino legge la fotoresistenza , e se il valore della fotoresistenza è minore di 400 leggi il sensore di movimento e al passaggio di persone mi chiude il relè per due minuti e si ripete lo sketch.Adesso vorrei modificare lo sketch in questo modo.arduino legge il sensore luce,quando il valore della fotoresistenza è minore di 400 leggi il sensore di movimento e al passaggio di persone inizia il conto alla rovescia di 2 minuti e mi chiude il relè,però se durante il conto alla rovescia il sensore di movimento vede un altro movimento ricomincia il conto alla rovescia fino a quando per 2 minuti consecutivi non c'è alcun movimento.

 
 InizioPagina
 

Pagine: (7)   1   2   3   4   5   [6]   7    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum