Arduino segnalatore UPS?

Ciao ragazzi, me la cavicchio con arduino, ma non troppo, non sono esperto ecco!

quello che vorrei creare io è:

Possiedo un UPS, che collego alla presa di corrente (Questo UPS ha un usb che può inviare dati, per monitoraggio e spegnimento automatico)
A questo UPS collego, arduino tramite presa DC e un paio di casse da 6W.
Le casse sono collegate tramite cablaggio ad arduino che invia il segnale audio tramite scheda SD.

La mia idea: Quando salta la corrente, automaticamente l'UPS accende le sue batterie, e vorrei che lo segnalasse ad arduino cosi che esso posso far partire una riproduzione audio. Inoltre far accendere vari LED che segnalano l'interruzione.

Il concetto nasce dal fatto che necessito di un avviso quando salta la corrente di notte. Per intervenire su diversi dispositivi che non possono essere spenti in modo brusco.

Per l'invio del segnale audio alle casse, no problem, posso usare e adattare un mio vecchio progetto.
Per l'accensione dei led, altrettanto nessun problema.

L'unico problema deriva dal fatto di far capire ad arduino quando manca la corrente e quindi attivare i sistemi di emergenza, e inoltre quando la corrente torna disattivarli automaticamente.

per comodità aggiungerei anche un pulsante, che se l'allarme parte per mancanza di corrente, se azionato fa spegnere il suono. (cosi da lavorare senza chiasso)

L'UPS Che possiedo è questo: https://www.amazon.it/gp/product/B0133F1C2S/ref=oh_aui_detailpage_o09_s00?ie=UTF8&psc=1

funziona alla grande! Aiutatemi a trovare una soluzione a come far capire ad arduino l'ìnterruzzione di corrente!

Saluti a tutti!

miticobeppe:
... Aiutatemi a trovare una soluzione a come far capire ad arduino l'ìnterruzzione di corrente!

... ovviamente solo soluzioni che NON implichino il collegamento alla tensione di rete 220V (REGOLAMENTO, punto 15). :wink:

Guglielmo

ciao

Arduino lo alimenti in uscita all'ups (così funziona anche senza corrente); prendi un qualsiasi alimentatore da 5 volts (uno a caso), lo colleghi a una presa senza UPS , metti i 5 volts su un ingresso digitale di arduino (magari con un fotoaccoppiatore) e con questo controlli se c'è o meno la tensione di rete.

Dovremmo esserci a livello di regolamento :wink:

ciao
pippo72

Arduino non ha un USB HOST e percui non puó dialogare col UPS via USB.
Ciao Uwe

Quindi usb la dobbiamo escludere a prescindere!

pippo72:
ciao

Arduino lo alimenti in uscita all'ups (così funziona anche senza corrente); prendi un qualsiasi alimentatore da 5 volts (uno a caso), lo colleghi a una presa senza UPS , metti i 5 volts su un ingresso digitale di arduino (magari con un fotoaccoppiatore) e con questo controlli se c'è o meno la tensione di rete.

Dovremmo esserci a livello di regolamento :wink:

ciao
pippo72

Quindi usb la dobbiamo escludere a prescindere! perche arduino non ha l'entrata quindi non ce possibilità di scambio dati....L'unica sarebbe come hai detto tu, creare una condizione che se legge che la corrente non ce su pin 5V, fa partire la riproduzione audio.
Ma non so utilizzare e ne tantomeno so il funzionamento di un fotoaccoppiatore! A cosa mi serve?

Se ci sono altre idee dite pure

Grazie intanto

Ragazzi aggiungo una domanda, come faccio a far leggere ad un pin digitale l'entrata di corrente?

Entro in questo thread perché 2 anni fa avevo una esigenza simile, ossia un "qualcosa" (es. Arduino) doveva monitorare lo stato di un UPS dotato di uscita di monitoraggio USB (e che con Windows funziona) per prendere determinate decisioni in base allo stato ossia monitorare la presenza o meno di tensione di rete (yes/no) e il livello attuale delle batterie (%), e comunicarle ad un server centrale via TCP/IP in base a determinate regole.
Purtroppo all'epoca non "masticavo" molto Arduino per cui sono stato costretto a restare con la proposta originaria ossia un piccolo PC embedded con Windows7 (si, lo so, non ditemi niente, non l'ho scelto io...).

uwefed:
Arduino non ha un USB HOST e percui non puó dialogare col UPS via USB.

Beh non c'è standard ma si può aggiungere con un USB Host shield come questo.
Aggiungendo anche un Ethernet shield (ed un modulo RTC per tracciare un log, più scheda SD per bufferizzare le comunicazioni in caso di mancanza di connessione di rete) il tutto sarebbe possibile, almeno per la mia esigenza.

Il problema in pratica diventa software, ossia dando per scontato il link USB con l'UPS, è possibile (magari usando una qualche libreria esistente, che però non ho trovato) implementare il monitoraggio delle segnalazioni provenienti dall'UPS?

Si però forse mi conviene fare come mi hanno consigliato sopra...è un metodo anche piu semplice, qualche volonteroso ha voglia di aiutarmi in questa creazione?

ragazzi una volta collegato l'alimentatore al pin, come posso far rilevare tramite codice la corrente ad arduino?

miticobeppe:
ragazzi una volta collegato l'alimentatore al pin, come posso far rilevare tramite codice la corrente ad arduino?

Due possibiltà ...

  1. Usare un pin "digitale" su cui metti una resistenza da 10KΩ verso massa. Quando sono presenti i 5V dell'alimentatore leggi HIGH, quando non sono presenti leggi LOW.

  2. Usare un pin "analogico" e "leggere" il valore della tensione in arrivo dall'alimentatore.

Mi sembra più che sufficiente la possibilità 1. ... magari metti anche una resistenza in serie da un 100Ω ed un diodo Zener da 4.7V ... così proteggi l'ingresso da eventuali innalzamenti della tensione in uscita dall'alimentatore :wink:

Guglielmo

miticobeppe:
Si però forse mi conviene fare come mi hanno consigliato sopra...

Se la tua esigenza è solo rilevare l'assenza di tensione di rete, si. Nel mio caso è più completo, dovevo monitorare lo stato delle batterie (ad esempio attivando uno shutdown prima dello spegnimento dell'UPS).

gpb01:

  1. Usare un pin "digitale" su cui metti una resistenza da 10KΩ verso massa. Quando sono presenti i 5V dell'alimentatore leggi HIGH, quando non sono presenti leggi LOW.

Ciao ho tutto il materiale, tranne il diodo zener . Posso farne a meno? Non ne ho mai usato uno e mi manca!

Detto questo mi preparo a collegare il tutto, ma la mi domanda è, tramite codice, come setto la lettura di arduino in HIGH se c’è corrente e in LOW se non ce?
Sinceramente tramite codice non so da dove iniziare.

Mi viene da pensare:
Void loop
If pin5 read....e mi blocco ahah

Grazie per la futura risposta

Questo codice potrebbe funzionare? L’ho buttato giù poco fa, ma non l’ho provato

pinMode(2, INPUT); // pin entrata corrente 5v da leggere

int corrente; // dichiaro la variabile della corrente

void setup()
{
corrente= digitalRead(2)
}

void loop()
{

If (corrente > HIGH) {// leggo se il segnale di corrente c’è
// si seguito faccio qualcosa
}

If (corrente > LOW) {//leggo se il segnale di corrente MANCA
// di seguito faccio qualcosa

}

Allora, prima di tutto, ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Poi ... perdona, senza alcuna offesa, ma ... da quanto scrivi è evidente che a te mancano proprio le BASI ...
... perché non dedichi un po' di tempo a studiare? ... magari puoi cominciare con QUESTO proseguire con QUESTO ed acquistare qualche buon libro (es. QUESTO). Vedrai che ti si chiariranno parecchie cose e che poi ti avvicinerai molto più produttivo al tuo programma ... ::slight_smile:

Guglielmo

Ok va bene leggero quanto mi hai consigliato.
Ma quindi il codice scritto manca in tutto? Cioè é completamente sbagliato?

miticobeppe:
Ma quindi il codice scritto manca in tutto? Cioè é completamente sbagliato?

... diciamo che è sbagliato ... per il 90% ... :confused:

Guglielmo

Ok questo codice che ho scritto sembra funzionare, dopo aver letto e provato ciò che mi avevi consigliato:

E' una prova scarna per provare solamente il sistema di mancata corrente.
Ho solo un problemino!

int corrente = 22;
int ledPinVerde = 51;


void setup() {
 
  Serial.begin(9600);
  
  pinMode(corrente, INPUT);


pinMode(ledPinVerde, OUTPUT);

  
}

// il loop continua per sempre
void loop() {
  // leggi lo stato del pin
  int StatoCorrente = digitalRead(corrente);
  // scrive lo stato
  Serial.println(StatoCorrente);
  delay(1);        // ritardo della lettura







if (StatoCorrente == HIGH)
{
  digitalWrite(ledPinVerde, LOW);
  
}
else if (StatoCorrente == LOW)
{
  digitalWrite(ledPinVerde, HIGH);
 
}
}

Quando attacco alla corrente l'alimentatore HIGH viene rilevato subito.
Mentre invece quando lo stacco, Arduino ci mette circa 3/4 secondi a rilevare l'interruzione di corrente, quindi LOW.
Anche sul serial il passaggio da 1 a 0 è in ritardo.

Quindi è un po lento, come posso eliminare questo "ritardo"?...Sinceramente non so neanche a cosa sia dovuto....Potreste darmi una mano?

Saluti

Spero di non sparare una tavanata pazzesca ma credo che il ritardo sia dovuto al fatto che sull'alimentatore non c'è nessun carico quindi quando manca la corrente sono necessari alcuni secondi affinché i condensatori dell'alimentatore si scarichino e ti permettano di legegre lo stato di assenza tensione.
Per il codice un pin digitale ha solo due valori HIGH e LOW quindi

else if (StatoCorrente == LOW)

non serve basta l'else

Concordo con fabpolli, sicuramente i condensatori nell'alimentatore, usato a vuoto, impiegano un certo tempo a scaricarsi e il pin continua a leggere la condizione di HIGH ...

Prova a fare come ti ha già suggerito, metti un carico sull'alimentatore che scarichi rapidamente i condensatori e vedrai che quel ritrado dovrebbe scomparire.

Guglielmo

Ok grazie per la risposta . Ma come posso mettere un carico sull’alimenratore? Sinceramente mi serve solo per rilevare l’interruzione.

Avete consigli a riguardo?