Interruttore a contatto x striscia LED

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:

Il programma utilizzato è:

[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]

Peccato che utilizzando i 12V NON funziona.

Qualcuno sa dirmi dove sbaglio?

Saluti + grazie

Enrico

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:

void setup() {
    Serial.begin(9600);
    pinMode(9, INPUT);
    pinMode(7, OUTPUT);
}

E il pezzo del tuo programma che dice:

if (digitalRead(9)) {
        digitalWrite(9, LOW);
      } else {
        digitalWrite(9, HIGH);
      }

Deve essere modificato da:

if (digitalRead(9)) {
        digitalWrite(7, LOW);
      } else {
        digitalWrite(7, HIGH);
      }

Saluti.

Grazie.

Solo dopo mi sono accorto dell'errore nel circuito.

Enrico

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.

Enrico

Devi mettere un diodo in parallelo alla bobina del relè. Inoltre per non bruciare arduino sarebbe meglio comandare il relè con un transistor.

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.

Saluti

Enrico

Il primo circuito che hai inserito era ambiguo e mi ha portato a sbagliare nella mia risposta.
Lo schema elettrico dovrebbe essere questo:

E il codice che lo gestisce è completamente corretto quello che hai messo all'inizio
Saluti.

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?

ATTENZIONE: non ho mai usato transistor nei miei circuiti (molto elementari) per cui non ho idea se i collegamenti sono esatti.
Saluti
Enrico

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

Grazie, in settimana provo.

Rinuncio ... per ora.

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.

Enrico