Analisi impulsi contatto a tapparella per antifurti

salve, sto provando Arduino per la prima volta e vorrei capire come fare per attivare un output a seguito dell'analisi di un'input, che mi legge il contatto NC che si apre e si chiude in tempi che si misurano col millesimo di secondo, insomma, di un contatto a fune per tapparelle.. per l'esattezza questo

si può fare?

Ma in due parole più semplici vuoi realizzare un contatore di impulsi, per fare in modo da annullare eventuali falsi allarmi dovuti al vento o a piccoli spostamenti della tapparella?

[quote author=Michele Menniti link=topic=143419.msg1077074#msg1077074 date=1358505567] Ma in due parole più semplici vuoi realizzare un contatore di impulsi, per fare in modo da annullare eventuali falsi allarmi dovuti al vento o a piccoli spostamenti della tapparella? [/quote]

bravo!

Alcuni modelli ce l'hanno già di serie la scheda analisi, sei sicuro che il tuo non rientri tra quelli? Mi pare tanto il sensore tapparelle della bramhs ...

niki77: Alcuni modelli ce l'hanno già di serie la scheda analisi, sei sicuro che il tuo non rientri tra quelli? Mi pare tanto il sensore tapparelle della bramhs ...

no questo sensore è della CSA, non ha scheda di analisi incorporata, è passivo, va cablato fino in centrale, o fino alla sua scheda di analisi, ci sono anche i piezo, ma questo non lo è.. semplimente un NC da analizzare col contaimpulsi.. so benissimo che esistono già delle schede di analisi, faccio impianti da 15 anni.. voglio semplicemente smanettare con Arduino, così per spasso.. perciò mi interessa sapere come si fà un contaimpulsi con Arduino..

Tranquillo non volevo ne scoraggiarti ne rimproverarti, ci mancherebbe altro. Questo forum è frequentato anche da molti appassionati smanettoni senza molta esperienza nel campo, quindi magari poteva anche essere soltanto un informazione che ad un utente meno attento poteva essere sfuggita.

Puoi fare tranquillamente la scheda analisi con arduino, così te la imposti come meglio credi, o addirittura farla super configurabile. Usi un pin digitale come ingresso per contare gli impulsi, e un altro digitale che pilota un transistor, o ancor meglio un fotoaccoppiatore per mandare poi il segnale di allarme alla centrale. Non vedo grossi problemi :)

tranquillo, sono io che scrivo male, non avevo intenzione di mostrarmi stizzito o rimproverato, questioni di punteggiatura.. :sweat_smile: comunque ti ringrazio, ma la mia esperienza inizia con gli antifurti e finisce con gli antifurti, e automatismi.. ma riguarda pur sempre centraline già predisposte dove non devi fare altro che collegare i fili come manuale e programmare come manuale..

per arduino sono inesperto anche io come tanti altri, perciò scusami se ti chiedo di approfondirmi ciò che mi hai detto, perchè io pensavo di poter collegare i miei due fili uno al pin mentre l'altro al +5v oppure al GND, con qualche resistenza per non generare corticircuiti nella scheda e poi fare una programmazione.. se così non si può fare e ci vuole altro, ti pregherei di mostrarmi come si fanno i collegamenti e come si programma..

al momento ho solo una bredboard, dei filetti rigidi ricavati dal cavo UTP e qualche LED.. e qualche altro spicciolo in tasca, casomai dovessi fare un salto all'elettrodroghiere.. :blush:

...sensori di vario genere per antifurto invece ne ho a iosa!

Ci sono i discriminatori di impulsi, sono piccole schedine fatte per i roller switch dove selezioni con i dip quanti impulsi vuoi prima di dare l’allarme, alla fine è un serial 8 bit Sn74xxxx non mi ricordo il numero, stesso utilizzo per i sensori volumetrici, ma una centrale seria ha già nel software un opzione per farlo.

ciao

Si, puoi farlo non è niente di molto diverso di quello che hai detto. Sostanzialmente la prima cosa da fare è capire il tipo di uscita del tuo sensore, se è un contatto fisico (rele ,contatto o reed) o se è una open collector. Se è passivo, quindi non alimentato ne con batterie a bordo, è al 100% un contatto , quindi è semplice.

Io ti consiglio di fare cosi tanto per cominciare:

Prendi una resistrenza da 10k e vai a comporre lo schema come illustrato nella foto sotto:

Sostituisci i 2 contatti utilizzati dello switch e metti le 2 terminazioni del tuo sensore. Per le prove serve qualcosa che ti indichi lo stato dell'uscita verso la centrale( che per ora per semplicita ometteremo). Utilizzi il led a bordo scheda collegato al pin 13. Acceso contatto chiuso, spento contatto aperto(per le prove va più che bene)

A livello hardware sei già pronto a fare prove!

Ora serve uno straccio di sketch:

// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  // check to see if you just pressed the button 
  // (i.e. the input went from LOW to HIGH),  and you've waited 
  // long enough since the last press to ignore any noise:  

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:
    buttonState = reading;
  }
  
  // set the LED using the state of the button:
  digitalWrite(ledPin, buttonState);

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;
}

Tratto dal playground descrimina la chiusura del contatto con debounce.

Con questo sketch avrai l'accensione del led ad ogni chiusura del contatto. Modificando lo sketch puoi ottenere il condizionamento del segnale che desideri, ovviamente le politiche da adottare e la logica di analisi da applicare devi deciderle tu! Buon divertimento

pablos: Ci sono i discriminatori di impulsi, sono piccole schedine fatte per i roller switch dove selezioni con i dip quanti impulsi vuoi prima di dare l'allarme, alla fine è un serial 8 bit Sn74xxxx non mi ricordo il numero, stesso utilizzo per i sensori volumetrici, ma una centrale seria ha già nel software un opzione per farlo.

ciao

grazie, ma ripeto, voglio capire come si fà per scopo di studio, non perchè sul mercato non ci siano prodotti che lo fanno già.. i prodotti di antifurto che io tratto a momenti fanno anche il caffè, ma non mi interessa, voglio usare sta scheda e fare esperienza..

niki77: Ora serve uno straccio di sketch:

const int buttonPin = 2;     
const int ledPin =  13;   

int ledState = HIGH;       
int buttonState;           
int lastButtonState = LOW; 

long lastDebounceTime = 0;  long debounceDelay = 50; 

void setup() {   pinMode(buttonPin, INPUT);   pinMode(ledPin, OUTPUT); }

void loop() {     int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {   lastDebounceTime = millis();   }     if ((millis() - lastDebounceTime) > debounceDelay) {       buttonState = reading;   }     digitalWrite(ledPin, buttonState);

  lastButtonState = reading; }

if (reading != lastButtonState) { lastDebounceTime = millis(); } questa non l'ho capita, ma in pratica che fa?

Non sarebbe meglio usare un interrupt per contare gli impulsi ?

Tipo:

// quando conteggio 5 impulsi dò allarme
const byte MAX_IMPULSI = 5;

volatile byte cnt = 0;


void isr() {
    cnt++;
}


void setup() {
    attachInterrupt(0, isr, FALLING);
    Serial.begin(115200);
}


void loop() {
    // questo controllo forse andrebbe eseguito ogni 10..50ms
    if (cnt >= MAX_IMPULSI) {
        cnt = 0;
        
        Serial.println("Allarme");
    }
}

:~

e qui già comincio a non capirci più un tubo!

Era il passo seguente tuxduino, ma tu mi hai rovinato la sorpresa! :grin:

Poi comunque non userei ne RISING ne FALLING, ma CHANGE , in maniera tale da rendere utilizzabile senza modifiche sia contatti NO che NC 8)

if (reading != lastButtonState) {
lastDebounceTime = millis();
}
questa non l’ho capita, ma in pratica che fa?

Fine a se stessa quella parte di codice non fa altro che vedere se lo stato del pin digitale in ingresso è di valore diverso rispetto all’ultima lettura.

Nel globale quella serie di istruzioni non fa altro che monitorare senza interruzione lo stato in ingresso del tuo sensore e si accorge della chiusura del contatto, con la funzionalità di debounce, che detta in parole povere ti consente di discriminare chiusure di contatto inferiori ad un determinato lasso di tempo. (viene utilizzata per filtrare il rumore e rendere più ‘pulito’ il segnale proveniente da contatti meccanici)

ma in questo modo, se mi discrimina chiusure di contatto inferiori ad un lasso di tempo (anche se il mio contatto è sempre chiuso e mi serve analizzare l'apertura) in pratica non mi fà l'esatto opposto di quello che mi serve?

in realtà a me serve appunto analizzare aperture di un contatto NC inferiori ad un lasso di tempo, talmente breve che neanche il mio tester se ne accorge, sono io ad accorgermene perchè mi varia qualcosa sul mio display..

quindi la funzionalità di debounce mi fà tutto l'opposto no?

Poi comunque non userei ne RISING ne FALLING, ma CHANGE , in maniera tale da rendere utilizzabile senza modifiche sia contatti NO che NC

Giusto, tanto basta adeguare il numero di impulsi oltre il quale scatta lo stato di allarme...

comunque mi stavo complicando la vita quando in realtà non dovevo fare altro che caricare lo sketch "button" contenuto tra gli esempi di Arduino, senza il debounce, e poi invertire lo stato degli ingressi in modo che il led mi risultasse spento qualora fosse presente la 5v sul pin 2, e si accendesse qualora venisse a mancare la tensione..

con stupore mi accorgo che Arduino già di suo non perde neanche un impulso..

clicca qui

poi è stato sufficiente aggiungere un delay di 3 secondi per fare in modo che ci fosse un'uscita ben presente, anche al minimo impulso, per eventuali futuri relè..

clicca qui

pertanto abbiamo completato il [u]primo step[/u], cioè quello di leggere gli impulsi.. perchè nel caso avessi una centralina di antifurto vecchia, che non li legge, posso utilizzare Arduino in questo modo, e con l'uscita attiva per 3s posso star sicuro di poter attivare un relè che mi chiude un contatto a bordo centrale..

ringrazio niki77 per i consigli sullo sketch "button"..

ora passiamo al "secondo step", provocare l'accensione del led per 3s soltanto dopo il terzo impulso.. quindi la strada dell'INTERRUPT con il CHANGE è quella giusta?

i prodotti di antifurto che io tratto a momenti fanno anche il caffè,

che prodotti usi? lavazzasecurity :smiley:

no… SEGALARM! XD

Dai un po curioso sono , che antifurti installi e/o preferisci installare? Io mi sono montato un bramhs, che ne pensi? Per la tua applicazione ci devi dire che tipo di analisi vuoi applicare al segnale poi possiamo aiutasti a pensarla. Quelli commerciali fanno un analisi tipo impulsi/tempo, ovvero vanno in allarme se rilevano tot impulsi in un determinato tempo. Vuoi applicare questo metodo anche tu?

niki77: Dai un po curioso sono , che antifurti installi e/o preferisci installare? Io mi sono montato un bramhs, che ne pensi? Per la tua applicazione ci devi dire che tipo di analisi vuoi applicare al segnale poi possiamo aiutasti a pensarla. Quelli commerciali fanno un analisi tipo impulsi/tempo, ovvero vanno in allarme se rilevano tot impulsi in un determinato tempo. Vuoi applicare questo metodo anche tu?

non conosco bene la bramhs, non so chi dei miei fornitori ce l'abbia, ma penso nessuno perchè altrimenti sarebbero già passati a proporla e di sicuro qualche brochure o qualche centrale in conto visione ma l'avrebbero lasciata.. comunque a seconda della zona in Italia puoi trovare alcuni marchi altri no..

noi della ditta di famiglia abbiamo installato Bentel per tanti anni, poi però col passare degli anni abbiamo cominciato ad abbandonarla, sia perchè il numero di guasti cresceva sia perchè in fatto di innovazione il marchio è rimasto parecchio indietro rispetto agli altri, e per stare in mercato e proporre roba alla pari abbiamo fanno le nostre selezioni..

Attualmente di marchi ne installiamo più di uno, a seconda dell'esigenza: - Per gli impianti cablati semplici da negozietto, tipo un paio di rivelatori e qualche inerziale installiamo centrali AMC C24 con combinatore GSM incorporato, che vanno molto bene e costano una sciocchezza.. - Per gli impianti cablati un pò più complessi su abitazioni montiamo Combivox, molto più completa. - Per il via radio montiamo Jablotron, che vanta una portata dei sensori fuori dal comune e una durata della batteria molto lunga, anche se gli ultimi 2 impianti ci ha dato dei problemi di sabotaggio sui sensori radio abbinati ai contatti a fune che non si capisce la natura, neanche gli ingegneri che ci lavorano sopra sanno che pesci pigliare, perciò in questo periodo stiamo visionando alternative. Proprio ieri un fornitore mi ha portato una centrale Aritech (General Electrics) ibrida che sto visionando.. Un pò complessa nella programmazione, ma mi da l'impressione di solidità. - Per conto di una ditta di vigilanza della mia zona installiamo RISCO mod. Light SYS, e queste restano le mie preferite anche se più costose, ma sono dei veri carri armati.

Comunque, ora che ci penso, mi pare che Brahms viaggi su di un mercato differente, cioè quello degli elettricisti, in quanto facente parte della catena BPT, come bticino o vimar. E' un prodotto che non conosco perciò non ti so dire perchè i fornitori del ramo sicurezza non lo trattano.

Tornando agli esperimenti Arduino, appurato che la scheda non si lascia sfuggire un impulso, mi piacerebbe che il led si accendesse al 3 impulso, quindi nella programmazione dovremmo aggiungere un contatore che quando raggiunge l'== 3 mi attiva il led.