pilotare relè mediante uln2803

Scusa, potresti postare un piccolo schema elettrico del circuito che non ti funziona?

Il jp1 è un jumper che è ininfluente per l'utilizzo dell'uln, ed effettivamente mi sono dimenticato la massa dell'alimentazione a 12 volt, che comunque va collegata a quella di arduino e uln.

è come quello postato da bigjohnson alla risposta #12 ma con queste modifiche:

  • nessun led per lo stato dei relè e dell'alimentazione
  • negativo alimentazione arduino/bobina collegato con GND uln e GND arduino
  • manca condensatore da 1000uF tra +12V e GND

con il multimetro ho già ribattuto tutti i collegamenti.
l'errore può essere o nello schema elettrico o nell'uln stesso.
che verifiche posso fare sull'uln per vedere se lavora?
da come è fatto lo schema dovrei avere continuità tra la massa ed il pin 18 dell'uln quando questo "commuta"...

Prova a cambiare la porta di arduino e il pin dell'uln, magari si è guastato qualcosa, poi si deve passare al prova a usare un altro arduino e un altro uln.

anche l'uln funziona perchè effettivamente quando commuta ai capi della bobina del relè vedo i 12V....
che non ce la faccia a commutare il relè??
ha una R interna di 263Ohm quindi gli servono circa 45mA....
possibile che non va??

il relè è questo: http://www.farnell.com/datasheets/40308.pdf

Qual'è la sigla dei tuoi relè? JW2aSN-DC12V, JW2SN-DC12V o JW1FSN-DC12V?
L'ULN lo comandi con 2mA.

JW1FSN-DC12V

Non è che hai collegato il carico tra i pin normalmente aperto e normalmente chiuso del relè?

no, per evitare problemi con le connessioni ho staccato tutto dalla breadboard ed ho verificato i contatti a mano, senza carico.

il relè funziona perchè se lo collego direttamente all'alimentazione 12V commuta, ed anche l'uln funziona perchè al verificarsi della condizione dà 12V ai capi della bobina.
Il problema è che i 12V "erogati" dall'uln non riescono a commutare la bobina.
evidentemente deve esserci qualche problema di ampere da qualche parte ed io sinceramente non so che pesci pigliare...

sempre per scongiurare qualsiasi problema, dall'altra parte del circuito ho un sensore di temperatura digitale collegato all'uscita 5V di arduino ed un led, ma questa parte funziona perfettamente.

il circuito dell'uln è il seguente:

  • +12V: COM uln // Vin arduino // bobina relè
  • negativo (12V): GND uln // GND arduino
  • pin 7 arduino: pin 1 uln
  • pin 18 uln: bobina relè

Allora, PRIMA DI TUTTO, controlla che i tuoi rele non siano di quelli che hanno gia il diodo di protezione all'interno ... se e' si, allora devi rispettarne la polarita', se no non funzionano, se e' no, li puoi collegare come vuoi ... per provare prendi una batteria o alimentatore ed un paio di pezzi di filo e colleghi velocemente il rele', con entrambe le polarita' (test veloce, perche' se il diodo c'e' gia, quando lo colleghi nel senso opposto ti cortocircuita la batteria o alimentatore) ... se scatta in un senso solo, il diodo c'e' gia, segnati la polarita' giusta e rispettala ... se scatta in entrambi i sensi non c'e' il diodo e lo puoi montare come vuoi, tanto il diodo lo metti tu, se non scatta in nessuna delle due condizioni, o la batteria e' scarica, o l'alimentatore e' morto, oppure e' morto il rele ...

Poi se ne trovi uno che va, connettilo correttamente all'ULN e prova ... positivo 12V ad un capo del rele' ed al pin COM dell'ULN (serve solo se non metti il diodo di protezione, il COM e' la linea comune dei diodi che gia sono presenti all'interno dell'ULN, per carichi piccoli vanno piu che bene) - l'altro capo del rele al pin di uscita (diciamo 18) - GND dell'arduino, dell'alimentazione dei rele e dell'ULN tutte insieme - pin di ingresso dell'ULN (diciamo 1) all'uscita dell'arduino (puoi metterci in serie una resistenza da 100 ohm, giusto per protezione, ma non e' indispensabile dato che l'ULN2803 richiede solo 1mA per commutare) ... per vedere se il circuito dal lato ULN funziona, e' sufficente che mandi un positivo, basta anche il +12 attraverso una resistenza da 10K , sull'ingresso (pin 1) per sentire se il rele sul 18 scatta ...

staccando il collegamento negativo alimentazione 12V e GND arduino il relè commuta ma arduino non fa il classico blink di avvio ed inoltre non risponde ai cambi della temperatura misurata, temendo di bruciare tutto l'ho scollegato ma allora deve esserci per forza qualcosa che non va con lo schema.

sotto un paio di foto del mio circuito, se ci si capisce qualcosa...
la parte a dx è relativa al sensore di temperatura.

Nell'ULN il cavetto rosso che viene dai 12V va sul comune, insieme al cavetto arancione che torna dal relè.
Dalla foto sembra che l'arancione sia giustamente sul comune, ma il rosso sul pin a fianco.

Dove c'è il led e il sensore di temperatura non si capisce un @@ :grin:

PaoloP:
Nell'ULN il cavetto rosso che viene dai 12V va sul comune, insieme al cavetto arancione che torna dal relè.
Dalla foto sembra che l'arancione sia giustamente sul comune, ma il rosso sul pin a fianco.

Dove c'è il led e il sensore di temperatura non si capisce un @@ :grin:

ho verificato, il cavo rosso si trova sul com, insieme a quello arancione.
mi sta venendo voglia di buttare via tutto ed ordinare un termostato digitale on line!!!!!

ragazzi mi fareste un disegnino dello schema elettrico così smonto tutto e faccio l'ultimo tentativo prima di buttare tutto nella spazzatura??

dove c'è il sensore di temperatura c'è un classico ds18b20, collegato con alimentazione attiva sul 5V ed un led di stato; le resistenze che si vedono sono in serie e limitano la corrente sul led, quell'accrocchio di cavetti arancione serve per poter usare l'altro lato della breadboard e sono solo dei ponticelli. Il sensore di temperatura è collegato nella morsettiera perchè successivamente sarebbe (ormai parlo al passato) dovuto essere montato su un cavo schermato apposito a circa un mt di distanza.

questo lo schema disegnato a partire dagli effettivi collegamenti realizzati sulla breadboard.

Sono giusti.
Pubblica lo sketch. L'errore potrebbe essere lì.

#include <OneWire.h>
#include <DallasTemperature.h>

int LED=13;	                //Pin7 = LED
int setPoint=20;                 //setpoint
int rele_1 = 7;              //uscita relè 1 sul pin 7 di arduino
 
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
 
// Setup a oneWire instance to communicate with any OneWire devices 
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}
 
 
void loop(void)
{
  if (sensors.getTempCByIndex(0) >= setPoint)                        //temperatura maggiore o uguale a 20 led acceso
  {
    digitalWrite (LED, LOW);	        //led spento
    digitalWrite(rele_1, LOW);       // relè spento
  }
  else                                                              //temperatura minore o uguale a 20 led spento
  {
    digitalWrite (LED, HIGH);      //led acceso
    digitalWrite(rele_1, HIGH);       // relè acceso
  }
  
 
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? 
    // You can have more than one IC on the same bus. 
    // 0 refers to the first IC on the wire
   delay (3000);            //aspetta 3secondi
   
}

erpomata:
ma esiste qualcosa di più piccolo per soli 3 relè?

up!

Il primo sensors.getTempCByIndex(0) non credo funzioni senza il request che fai dopo.
Poi l'IF fa un confronto tra un float e un int. Forse fa il cast in automatico, forse no.

PaoloP:
Il primo sensors.getTempCByIndex(0) non credo funzioni senza il request che fai dopo.
Poi l'IF fa un confronto tra un float e un int. Forse fa il cast in automatico, forse no.

paolo come correggeresti lo sketch?
ho rismontato e rimontato tutto il circuito escludendo quindi problemi di natura hardware.
tieni presente che la logica "gira" nel senso che monitorando il tutto con il serialmonitor, quando la temperatura è inferiore a quella di soglia il led si accende e l'uln mi eroga i 12V ai capi della bobina viceversa quando la temperatura è superiore il led si spegne ed ai capi della bobina ho 0V.
Ho fatto caso al fatto che la lucina del led è molto flebile nonostante la resistenza sottodimensionata e questo potrebbe significare in qualche modo che non ho un uscita "vera" cioè tale da alimentare correttamente il led e quindi anche darmi i circa 45mA necessari all'eccitazione della bobina.
ma queste sono solo considerazioni di un nubbio che ormai le ha già provate tutte ed inizia a dubitare di tutto...