Buona sera a tutti, vorrei sostituire un banale interruttore di una striscia Led a 12 V inserita in una barra di AL con un interruttore a contatto. Le prove fatte facendo accendere un singolo LED hanno funzionato, per cui ho provveduto a costruire il circuito applicando le tensioni corrette. Il relè è questo
Il circuito è stato così costruito:
[code]
#include <CapacitiveSensor.h>
CapacitiveSensor cs_7_8 = CapacitiveSensor(7,8); //10M Resistor between pins 7 and 8, you may also connect an antenna on pin 8
unsigned long csSum;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
}
void loop() {
CSread();
delay(500);
}
void CSread() {
long cs = cs_7_8.capacitiveSensor(50); //a: Sensor resolution is set to 80
Serial.println(cs);
if (cs > 500) { //b: Arbitrary number
csSum += cs;
Serial.println(cs);
if (csSum >= 1000) //c: This value is the threshold, a High value means it takes longer to trigger
{
Serial.print("Trigger: ");
Serial.println(csSum);
if (digitalRead(9)) {
digitalWrite(9, LOW);
} else {
digitalWrite(9, HIGH);
}
delay(500);
if (csSum > 0) { csSum = 0; } //Reset
cs_7_8.reset_CS_AutoCal(); //Stops readings
}
} else {
csSum = 0; //Timeout caused by bad readings
}
}
[/code]
Meno male che hai sbagliato codice, perché con quell'assemblaggio avresti potuto bruciare il pro-mini.
Un ingresso/uscita dell'arduino, (si usa 8), non può essere utilizzato come GND di un dispositivo ad alta potenza, quindi il negativo della barra AL va collegato al negativo del 12V.
Se hai intenzione di utilizzare l'uscita 7 per accendere la striscia, quella resistenza è inutile per te (non posso spiegare come ha funzionato il led per te nel test). Devi collegare correttamente un transistor di potenza, ci sono molti tutorial in rete.
Per quanto riguarda il codice, una volta corretti i collegamenti.
La setup sarebbe simile a questa:
Per la costruzione del programma mi sono basato su questo video; una fonte che ho sempre ritenuto attendibile.
Ho inoltre collegato il GND direttamente ai 12V per usare un'unica fonte di energia (quella che alimenta la striscia di LED) evitando di inserire un riduttore per alimentare Arduino a 5V.
Devi mettere un diodo in parallelo alla bobina del relè.
Più che altro pensavo di mettere un LED, ha lo stesso effetto.
sarebbe meglio comandare il relè con un transistor.
Ho deciso d'inserire un riduttore ed utilizzare un AT85, visto le tensioni/correnti pensavo non fosse necessario anche se come amperaggio dovremmo essere al limite.
Il relè che ho a disposizione èquesto
e funziona a 5V dovrò quindi collegarlo direttamente al GND di arduino ed al PIN 9. Pienamente d'accordo sul diodo, ho invece dei dubbi sul transistor (tra l'altro non dispongo del 2N2222 -NPN-) ma solo di transistor PNP (tipo 2N3906).
Tra l'altro il resistore da 2KOhm tra transistor e PIN 9 non è eccessivo?
Ciao, non capovolgere il diodo relè perché da come lo metti crei un cortocircuito accendendo il transistor. Hai il transistor posizionato all'indietro. Per il transistor che indichi il circuito sarebbe simile a questo:
Quando si utilizza un transistor PNP il segnale di controllo è invertito, nel codice di gestione dove si mette HIGH si deve mettere LOW e dove LOW, HIGH
Saluti
ho provato di tutto (penso) sulla base dei circuiti presentati: con diodo, senza, con transistor, senza, con resistori diversi (da 2 M Ω a 370 M Ω), con nano, con minipro, attiny 85 ma con risultati minimi e poco ripetibili, spesso passando ad un contatto con una barra di AL o non funzionava o "impazziva" attivando e disattivando il passaggio di corrente sul relè.
Mi manca ancora da provare un Mosfet, ma mi prendo una pausa.
Un grazie a chi mi ha aiutato.
Saluti
Enrico
PS: Il commento inviato non rispetta pienamente quanto da me effettivamente scritto, rendendo in alcuni punti il messaggio poco comprensibile. Il "problema" è già stato segnalato?
Ciao, ovviamente un mosfet ti farà più male del relè, ma aspetta un po'.
-1 cos'è un AL bqrra, potresti mettere un link a quello che hai?
-2 Ti ho detto che il codice iniziale andava bene ma ora non lo so.
L'unico esempio, quello della libreria, che ottengo è il seguente:
#include <CapacitiveSensor.h>
/*
* CapitiveSense Library Demo Sketch
* Paul Badger 2008
* Uses a high value resistor e.g. 10M between send pin and receive pin
* Resistor effects sensitivity, experiment with values, 50K - 50M. Larger resistor values yield larger sensor values.
* Receive pin is the sensor pin - try different amounts of foil/metal on this pin
*/
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired
CapacitiveSensor cs_4_6 = CapacitiveSensor(4,6); // 10M resistor between pins 4 & 6, pin 6 is sensor pin, add a wire and or foil
CapacitiveSensor cs_4_8 = CapacitiveSensor(4,8); // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
void setup()
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
long total2 = cs_4_6.capacitiveSensor(30);
long total3 = cs_4_8.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t"); // tab character for debug windown spacing
Serial.print(total1); // print sensor output 1
Serial.print("\t");
Serial.print(total2); // print sensor output 2
Serial.print("\t");
Serial.println(total3); // print sensor output 3
delay(10); // arbitrary delay to limit data to serial port
]
e vedo che setup ti mancherebbe una riga come:
cs_7_8.set_CS_AutocaL_Millis(0xFFFFFFFF);
Non ho mai usato questa libreria e non so come funziona ma sembra facile, adattaci il tuo codice. Saluti.
Ho inserito una normale striscia di Led autoadesiva in un profilato di alluminio a U, questa l'ho incollata sotto i pensili della cucina per ottenere una luce orientata.
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serve a bloccare la ricalibrazione de sistema.
Ho preferito ricalibrare il sistema dopo ogni lettura positiva (tocco) con
cs_7_8.reset_CS_AutoCal()
Risettando il tutto.