marco_182:
Grazie uwe, farò come dici tu
Spero solo di trovare dei relè a 5Vc.c. o mi tocca usare un alimentazione a 12 per quelli che ho io.
Un'altra domanda, mi tocca per forza usare un transistor per i relè o posso usare sempre i miei amati moc3021?
Non puoi usare i MOC perché l' uscita Triac che hanno non si spegne piú se piloti della corrente continua.
Prendi 2 transistori per esempio il BC337/40.
Ciao Uwe
Strano, perché con un optoisolatore siglato MOC3021 si sgancia da solo solo se metto un diodo in antiparallelo con la bobina del relè, sennò se lo tolgo hai ragione tu, rimane attivo.
Comunque ok, fortunatamente avevo comprato 2/3 BC337 per un progetto abbandonato, ora mi tornano utili.
Per tutta la durata della pressione del pulsante sento provenire dalle casse del computer una specie di "click" con una frequenza di circa 1Hz ad occhio.
Siccome non conosco il raggio d' azione di tale disturbo preferisco non cimentarmi nella costruzione di un dispositivo che andrà montato in una sala cinema..
l'optocoupler funziona come mi aspetto solo grazie al diodo al silicio posto contrario all'alimentazione della bobina del relè che funziona in continua.
In teoria non penso di aver futuri problemi al ciruito utilizzando l' optocoupler poiché è su breadboard da quasi una settimana il circuito e non ho trovato nessun tipo di problema..
penso comunque che mi studierò il motivo perché la bobina si diseccita con il diodo per rilevare dei dati tecnici a scopo didattico.
Ho cambiato di nuovo idea
Ho fatto alcune prove con l'optocoupler e un carico a 230VAC (una lampada a risparmio energetico), risultato:
Appena premo il pulsante del telecomando il relè come giustamente deve fare scatta, il problema è che se tengo premuto per più di 300/400 ms noto che il relè prima di rimanere attivo scatta 3/4 volte consecutivamente.
La cosa non mi piace perché se scatta 3/4 volte significa che se metto un relè bistabile in uscita le lampade mi si accendono e spengono.
La cosa non accade se rilascio in brevissimo tempo il pulsante, ma non mi va bene una cosa simile.
Fra qualche minuto riprovo lo stesso identico circuito ma usando come mi ha consigliato uwe un bc337.
@uwe: i disturbi di non so quale natura spariscono se interpongo (nel circuito che mi hai consigliato tu con il bc337) un diodo opposto all' alimentazione della bobina, di per giunta senza diodo il relè scatta 2/3 volte prima di stabilizzarsi in posizione, buono a sapersi.
Vado a testare questo circuito..
EDIT: posso già dire che anche con il transistor il circuito ha lo stesso problema.. appena premo il pulsante il relè scatta 4/5 volte prima di fermarsi...
Come dicevo prima utilizzo una lampada a risparmio energetico per simulare il relè bistabile...ma che cazz succede???
Una lampadina a risparmio enegetico é l'utenza piú sbagliata possibile per fare queste prove. Ha un alimentatore elettronico con tanta potenza reattiva. Se ti serve un utenza prova usa un saldatore o una stufetta senza ventilazione; sono utenze resistive.
Il diodo antiparalello alla bobbina del relé serve per cortocircuitare l' impulso di tensione inverso quando il relá viene disattivato. Questo impulso se non cortocircuitato dal diodo distrugge il transistore di pilotaggio. Pensavo che lo sapevi.
Si infatti lo sapevo, è solo che avendo su breadboard 2 relè me ne sono accorto tardi che mi mancava un diodo.
Ho anche immaginato che la lampada a risparmio energetico fosse un carico sbagliato per questi test, ma avendo il relè in scatola di derivazione non l'ho smontato, e senza altri relè....
Quindi, riprovo con un altro carico di tipo resistivo? magari lampadina a filamento o alogena?
O posso dire che il circuito funziona?
Anche se il secondo relè è un carico induttivo...
Ciao, ho finalmente provato con un relè bistabile finder 26.01
I problemi sono gli stessi, cioè se tengo premuto il relè rimbalza avanti e indietro una decina di volte prima di fermarsi, però questo non credo sia colpa del carico (il relè) ma della libreria, dovrei scrivere un codice che dica ad arduino di prendere in considerazione solo una pressione e non gli infiniti dati che invia il telecomando tenendolo premuto..
ma come? ho preso un codice di esempio su internet ma il relè monostabile che comanda il bistabile, si fissa solo in una posizione invece io devo fare in modo che venga ricevuto un solo segnale e che il relè possa andare avanti e indietro
Un rimedio appena testato è quello di portare a low il pin del relè dopo 1 secondo, così che nell'arco di una pressione che non sarà mai più lunga di 1 secondo, il relè non possa impazzire avanti e indietro.
Come da te richiesto uwe, ecco lo schema elettrico e il codice:
#include <IRremote.h> // Includo la libreria.
#define P0 0x91D //rinomina codice per pulsante 0
#define P1 0x1D //rinomina codice per pulsante 1
#define P2 0x81D //rinomina codice per pulsante 2
#define P3 0x41D //rinomina codice per pulsante 3
#define P4 0xC1D //rinomina codice per pulsante 4
#define P5 0x21D //rinomina codice per pulsante 5
#define P6 0xA1D //rinomina codice per pulsante 6
#define P7 0x61D //rinomina codice per pulsante 7
#define P8 0xE1D //rinomina codice per pulsante 8
#define P9 0x11D //rinomina codice per pulsante 9
#define PSX 0xAFD //rinomina codice per pulsante SINISTRA
#define PDX 0x2FD //rinomina codice per pulsante DESTRA
#define PUP 0x4FD //rinomina codice per pulsante SU
#define PDOWN 0xCFD //rinomina codice per pulsante GIU
#define POK 0x6FD //rinomina codice per pulsante OK
#define PONOFF 0xA9D //rinomina codice per pulsante ON/OFF
#define EXIT 0xC7D //rinomina codice per EXIT
#define PADD 0x9D //rinomina codice per PROGRAMMA+
#define PSUBTRACT 0x89D //rinomina codice per PROGRAMMA-
#define VADD 0x9FA96F //rinomina codice VOLUME+(1)
#define VADDTWO 0x9912B99A //rinomina codice VOLUME+(2)
#define VSUBTRACT 0xBE15326E //rinomina codice VOLUME-(1)
#define VSUBTRACTTWO 0xDB9D3097 //rinomina codice VOLUME-(2)
int RECV_PIN = 11; // Pin ricevitore Ir
IRrecv irrecv(RECV_PIN);
decode_results results; // Inizializza ricevitore Ir
void setup() {
pinMode(8, OUTPUT);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); //Risultato in esadecimale
irrecv.resume();
}
if(results.value == PONOFF) {
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
results.value = 0xA2D;
}
}
Non confrontare i pin del codice con quelli dello schema, perchè potrebbero essere differenti..
Dopo pranzo posto un video per farti capire meglio, nel frattempo auguro un buon pranzo e un buon nuovo anno a tutto il forum
Riguardante lo schema:
Il T1 ha bisogno di una resistenza sulla base di 470 - 1kOhm senó fai un corto sul uscita del ATmega.
Metti il T1 tra relé e massa. Cosí elimini quei scatti del relé.
Metti anche 1 condensatore da 0,1µF tra +5V e massa vicino ai piedini di alimentazione del ATmega e uno da 0,1 tra Aref e massa. (servono per eliminare disturbi e danno piú stabilitá all riferimento).
Spero che hai collegato giusto il TSOP perché sullo schema é sbagliato (hai messo i 5V a massa, l' uscita a 5V e la massa come uscita).
cioè se tengo premuto il relè rimbalza avanti e indietro una decina di volte prima di fermarsi, però questo non credo sia colpa del carico (il relè) ma della libreria, dovrei scrivere un codice che dica ad arduino di prendere in considerazione solo una pressione e non gli infiniti dati che invia il telecomando tenendolo premuto..
Non é colpa della libreria ma del Tuo codice.
Controlli se é premuto il pulsante di accensione e chiudi per un secondo il relé. poi a relé aperto ricontrolli se il pulsante di accensione é chiuso e riciudi per un secondo il relé ecc. Quello rimbalza finche hai premuto il pulsante oppure finche il buffer dei codici ricevuti é vuoto.
Togli quel delay(1000) e controlla di continuo se riceve un segnale di on. Con millis() controlli se l' impulso per il relé é abbastanza lungo percui comuti il relé passo passo in modo affidabile.
Ciao Uwe