Go Down

Topic: gestione luci con relè (Read 24800 times) previous topic - next topic

zuzzurro

non mi funziona, mi da sempre MOTION DECETCION... dove sbaglio???



const unsigned int PIR_INPUT_PIN = 4;  //pin PIR
const unsigned int BAUD_RATE = 9600;
const unsigned int outPin = 7; // pin relè

unsigned long previousMillis = 0;
long timer = 60000; //60 sec

class PassiveInfraredSensor{
  int _input_pin;

public:

  PassiveInfraredSensor(const int input_pin){
    _input_pin = input_pin;
    pinMode(_input_pin, INPUT);
  }

  const bool motion_detected() const{
    return digitalRead(_input_pin) == HIGH;
  }
};

PassiveInfraredSensor pir(PIR_INPUT_PIN);

void setup(){
  Serial.begin(BAUD_RATE);
  pinMode(outPin, OUTPUT); // out pin relè
  digitalWrite(outPin,HIGH); //accendo di default la luce con il relè

}

void loop(){
  unsigned long currentMillis = millis();

  if (pir.motion_detected()){
  previousMillis =  currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
  if(currentMillis - previousMillis >= timer)
{
    digitalWrite(outPin, LOW); //spengo 
    Serial.println("No Motion detected");

  }
  else
  {
    Serial.println("MOTION DETECTED");
  }
  delay(200);
}


pablos71

intanto devi togliere l'else e il delay 2000
poi non c'era niente che l'accendeva



const unsigned int PIR_INPUT_PIN = 4;  //pin PIR
const unsigned int BAUD_RATE = 9600;
const unsigned int outPin = 7; // pin relè

unsigned long previousMillis = 0;
long timer = 60000; //60 sec

class PassiveInfraredSensor{
  int _input_pin;

public:

  PassiveInfraredSensor(const int input_pin){
    _input_pin = input_pin;
    pinMode(_input_pin, INPUT);
  }

  const bool motion_detected() const{
    return digitalRead(_input_pin) == HIGH;
  }
};

PassiveInfraredSensor pir(PIR_INPUT_PIN);

void setup(){
  Serial.begin(BAUD_RATE);
  pinMode(outPin, OUTPUT); // out pin relè
  digitalWrite(outPin,HIGH); //accendo di default la luce con il relè

}

void loop(){
  unsigned long currentMillis = millis();

  if (pir.motion_detected())
{
   digitalWrite(outPin, HIGH); //accendo
   previousMillis =  currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
  if(currentMillis - previousMillis >= timer)
{
    digitalWrite(outPin, LOW); //spengo
    Serial.println("No Motion detected");

  }
 
}
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

pablos71

#17
Jan 16, 2012, 12:03 am Last Edit: Jan 16, 2012, 12:07 am by pablos Reason: 1
non mi resta facile capire così al volo la classe che hai fatto, ma questo funziona di certo facciamo prima :)

Code: [Select]

const int led = 7;
const int in = 4;

unsigned long previousMillis = 0;
extern unsigned long timer0_millis;
long timer = 60000;

void setup()
{
pinMode(led, OUTPUT);
pinMode(in, INPUT);
Serial.begin(9600);
}

void loop()
{
unsigned long currentMillis = millis();

if (digitalRead(in) == HIGH)
  {
   digitalWrite(led, 1);
   previousMillis =  currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
  }
 
if(currentMillis - previousMillis >= timer)
  {
    digitalWrite(led, 0);
    timer0_millis = 0;    
  }  
}
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

zuzzurro

mi rimane sempre accesa la lampada... non si spegne mai nemmeno dopo i 60 sec di inattivitià...

pablos71

OMG, ma quando fai upload dello sketch la lampada si spegne? resta spenta?
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

zuzzurro

funziona se metto if (digitalRead(in) == LOW)...  però al mimino movimento il PIR riaccende la lampadina

Io vorrei che funzionasse in modo tale che l'accensione dell lampadina rimanga manuale attraverso il pulsante classico (ecco perché avevo impostato di default  digitalWrite(outPin,HIGH);)
mentre l'Arduino provveda solo a spegnerla automaticamente dopo 60 sec di inattività nella stanza.

pablos71

ahhhhhhh .....scusa, avevo capito male, pensavo che il pir dovesse accenderla come servizio di cortesia e spegnerla dopo un po' di inattività
capito, mmm ci devo pensare un attimo
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

pablos71

#22
Jan 16, 2012, 12:31 am Last Edit: Jan 16, 2012, 12:33 am by pablos Reason: 1
ma il pulsante diciamo manuale entra in arduino? perchè se non ci entra la vedo dura la realizzazione pratica

hai un relè sempre chiuso che si apre dopo 60 sec ok e poi chi la riaccende? se il contatto del rele si trova in serie alla lampada una volta aperto ... chi lo richiude che è comandato da arduino?
il tuo interruttore manuale non l'accenderà più perchè il relè lo tiene spento
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

zuzzurro

nella pratica io vorrei utilizzare i normali pulsanti Vimar da muro per accendere le luci di una stanza, poi siccome mia moglie non spegne mai una luce in qualsiasi stanza in cui entra... vorrei che Arduino le spegnesse al posto mio dopo x secondi di inattività nella stanza.

è fattibile?

pablos71

si usando 2 deviatori uno quello a muro e uno il tuo relè
nel cassetto a parete devi avere un interruttore a 3 fili (deviatore) se ne hai 2, devi aggiungere 1 filo e cambiare il frutto vimar, ma poi lo schema elettrico lo sai fare?
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

zuzzurro

Al momento no... sto utilizzando Arduino da una settima ed ho poche conoscenze di programmazione e elettronica/impianti elettrici
Gli esperimenti che sto facendo, da neofita e con molti aiuti, sarebbero orientati ad acquisire più conoscenze possibili per poter realizzare con l'aiuto di una amico che lavora nel settore un mini impianto di domotica per la nuova casa che devono ancora iniziare a costruire e siamo ancora allo stadio iniziale di progettazione, quindi è il momento giusto.
Ovviamente non faccio io gli impianti ma una ditta che si occuperà dell'intero impianto elettrico, io devo capire solo come funziona fare un po' di esperimenti, studiare la fattibilità di alcune soluzioni e far predisporre l'impianto in base al mio progetto di domotica.

Mi piacerebbe fare:
- controllo luci
- controllo caldaia
- allarme fughe gas
- allarme acqua
- controllo irrigazione
- poco altro....


zuzzurro

domani compro una scatola con placca a tre frutti della Vimar (serie Idea), uno o due deviatori (a tre fili) e due coperture finte, in una delle quali cercherò fare un buco circolare per fare entrare dentro il PIR SE-10... così faccio qualche esperimento più vicino alla realtà

Intanto ti ringrazio per la pazienza e la disponibilità e ti faccio i miei complimenti perché sei veramente molto bravo!

Grazie di tutto... a  domani.

pablos71

#27
Jan 16, 2012, 01:02 am Last Edit: Jan 16, 2012, 01:23 am by pablos Reason: 1
qui nella seconda pagina http://www.bbaba.altervista.org/electronic/schemi.php

trovi punto luce INTERROTTO e punto luce DEVIATO
il sistema deviato, è quello che dovresti avere tu:
un comando dev1 è il manuale e il dev2 sarebbe il relè

Vantaggio: se arduino si sfascia, l'impianto continuerà a funzionare regolarmente col solo interr manuale
Svantaggio: in alcuni casi per tenere la luce spenta il relè sarà perennemente eccitato, in altri sarà diseccitato
Svantaggio: come fa arduino a sapere che la luce è accesa e la deve spegnere? ti serve un sensore o un relè a bobina 220 il cui contatto ausiliario inserito in una porta input di arduino

A questo punto secondo me le opzioni sono:
- usare il pir come servizio di cortesia, appena entri si accende e si spegnerà dopo un periodo di inattività

- fare entrare in arduino un pulsante di comando (il tuo comando a muro senza 220 ovviamente), fare entrare il contatto pir e uscita un relè, quando premi il pulsante (a muro) arduino comincerà a contare il pir farà da controllore di presenza, il relè sarà attivo solo quando è necessario.

- l'altro sistema descritto prima che secondo me è uno spreco di risorse e un po' una porcata :)

ciao    
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

zuzzurro

Quote
- fare entrare in arduino un pulsante di comando (il tuo comando a muro senza 220 ovviamente), fare entrare il contatto pir e uscita un relè, quando premi il pulsante (a muro) arduino comincerà a contare il pir farà da controllore di presenza, il relè sarà attivo solo quando è necessario.

- l'altro sistema descritto prima che secondo me è uno spreco di risorse e un po' una porcata


Hai ragione questo mi sembra il sistema più ragionevole.
Ma... è possibile portare il segnale di un pulsante Vimar (tipo questo http://www.elettrico.info/shop/product_info.php?cPath=1_82_75&products_id=VI.16004 ) in ingresso su Arduino per l'accensione luci?

Mi sorge un dubbio... visto che mi sembra piuttosto problematico, quello che chiedo è una cosa normale?
a me sembra di si, perché accendere le luci in automatico, il primo giorno è una figata... alla lunga diventa antipatico perché inevitabilmente devi stabilire un ritardo in ingresso, altrimenti si accenderebbe ogni volta che passi vicino anche se non vorresti entrare in quella stanza, e poi non hai più l'indipendenza da Arduino.
Se qualcosa va in tilt rimani senza luci finché non scopri e ripari il tutto... non mi semra una grande idea.


pablos71

#29
Jan 16, 2012, 09:54 am Last Edit: Jan 16, 2012, 01:45 pm by pablos Reason: 1
Quote
Ma... è possibile portare il segnale di un pulsante Vimar

Si puoi usare un pulsante normale della Idea che non sarà collegato all'impianto di casa, ma direttamente su arduino
http://www.stimolo.it/index.php?route=product/product&product_id=148 anche se dice che è luminoso, in realtà non lo è, dovresti comprare una lampadina a parte, quindi puoi chiedere anche quello senza indicatore luminoso, come ti pare, vanno bene entrambi.

Quote
quello che chiedo è una cosa normale?

Quello che chiedi è un sistema semiautomatico che devi valutare tu , io posso dirti che lo faccio in alcuni casi, nei corridoi, negli ingressi, nei parcheggi aperti, nei garage, abbinati ove è necessario di un sensore luce che "vede" se è necessario accendere o meno. Nelle stanze dove una persona può sedersi e leggere un libro no (il perchè non funzionerebbe lo puoi benissimo immaginare)
Un sensore pir passivo rileva un corpo caldo in movimento all'interno del suo spettro visivo, non una fonte di calore immobile, altrimenti anche solo un calorifero che è 60° lo terrebbe sempre in allarme.

Quote
Se qualcosa va in tilt rimani senza luci finché non scopri e ripari il tutto... non mi semra una grande idea.

Anche questa è una valutazione personale.
Certo dando tutti i compiti al microcontroller se arduino va in tilt resti al buio, quindi le cose sono 3, o tu sei un elettricista e appena c'e' un guasto sai cosa fare e ripristini anche temporaneamente un guasto, o tieni  una copia programmata di arduino nel cassetto pronta ad essere sostituita, o ti chiami un tecnico che appena vede schede elettroniche nelle cassette di derivazione, si mette le mani nei capelli e dice "O Signur!!! e ora che faccio? mai vista una roba del genere" :)

Ci sarebbe un'altra opzione, trasformare tutti i comandi accensioni in impulsivi, relè passo-passo a tutti i punti luce, sarà sufficiente un impulso di 400-500 ms umano o macchina in qualsiasi punto per accendere o spegnere, in questo caso il tilt di un processore non farebbe nessuna differenza, anche qui il programma deve sapere se la luce è on oppure off.

In tutti i sistemi industriali controllati da un computer (parliamo di on/off, MCC motor control center, valvole motorizzate, interruttori di media e alta tensione ecc non robot o bracci meccanici) esiste sempre il commutatore AUTO e MAN il crash di un computer è la prima cosa che si deve prevedere, valutare quale sia il danno o il disagio di un guasto simile e quindi attrezzarsi di conseguenza, dipende tutto da una disponibilità economica, nel tuo caso spendere qualcosina in più prima significa spendere molto meno dopo.


ciao
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

Go Up