Se presente 12V dai tensione per tot secondi

Ciao a tutti,

sono al primo progetto, quindi diciamo che so molto poco a riguardo.

con un Arduino Nano avrei la necessità di sviluppare il seguente progetto:

un sistema già esistente mi fornisce 2 uscite di tensione +12v Uscita A e uscita B

Arduino dovrebbe verificare la presenza di tensione +12v su entrambe le uscite A e B (i due cavi che ho già)

se presente +12V su uscita A deve accendere un led per circa 1 secondo se presente +12V su uscita B deve accendere un altro led sempre per circa 1 secondo

se presente tensione su uscita A o uscita B deve far lampeggiare un terzo led 2 volte poi lo spegne fino al prossimo evento

E' possibile realizzare qualcosa del genere ? se si, potreste darmi una mano ?

Grazie mille in anticipo

Buongiorno, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Ciao Guglielmo,

fatto grazie, spero qualcuno riesca ad aiutarmi.

Buon proseguimento :)

Quello che vuoi fare è sicuramente possibile, dovrai solo costruire due partitori di tensione per abbassare i 12V ad un valore accettabile dagli ingressi Arduino (+5V).

Dato che NON ti interessa misurare quanti Volt sono presenti, ma solo SE presenti, potrai tranquillamente usare due ingressi digitali che terrai a LOW con un paio di resistenze di pull-down e che verranno tirati ad HIGH nel momento in cui sarà presente la tensione.

Il resto ... è un po' di codice ;)

Guglielmo

proverà appena mi arriva il Nano Grazie!

Ti basta mettere una resistenza di un 10 KOhm tra i 12V e l' ingresso che vuoi monitorare. Meglio se fai un partitore con una resistenza da 6,8 KOhm sui 12 V e 4,7 KOhm a massa.

ExperimentUno: Ti basta mettere una resistenza di un 10 KOhm tra i 12V e l' ingresso che vuoi monitorare.

Ma assolutamnete NO ... in questo modo comunque porti i 12V sui pin di Arduino !!!

DEVE fare un [u]partitore di tensione/u e portare il valore sui 5V.

Guglielmo

Grazie ancora per i consigli

non so se può essere utile ma il tutto va collegato all'impianto elettrico dell'auto

S0nic: non so se può essere utile ma il tutto va collegato all'impianto elettrico dell'auto

[u]Ancora peggio[/u] e quindi d'obbligo soppressori di transienti e zener a tagliare tutto ciò che supera i 5V !

Guglielmo

Grazie :)

appena mi arriva l'Arduino Nano probo il tutto e vi faccio sapere :)

gpb01: Ma assolutamnete NO ... in questo modo comunque porti i 12V sui pin di Arduino !!!

Tu dici di no, ma credo che dovresti vedere i FD (Atmel-42735A-ATmega328/P_Datasheet_Complete-06/2016) a pagina 97. Noteresti che ci sono 2 diodi di clamp sia per il positivo che per il negativo. ;) Chiaramente non ci si può sparare tutta la corrente che passa per i 12 Volts, quindi, come dicevo, la precauzione di limitare con una resistenza da 10 KOhm, porterebbe ad un carico ai diodi di 1,2 mA. Per altro, micro della Microchip (che ha acquisito Atmel :P) , una AN riporta il passaggio per lo zero della tensione di rete con una sola resistenza.

Conosco a memoria il datasheet del ATmega328P :smiling_imp: e ripeto che i 12V NON vanno dati, resistenza o meno, diodi di clamp o no.

Proprio il datasheet, a pagina 365, paragrafo 32.1, “Absolute Maximum Ratings” riporta i valori MASSIMI di tensione accettabili sui pin ed è chiaramente indicato:

Voltage on any Pin except RESET with respect to Ground: -0.5V to VCC+0.5V
Voltage on RESET with respect to Ground: -0.5V to +13.0V (per la programmazione HV)

Note: Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device. This is a stress rating only and functional operation of the device at these or other conditions beyond those indicated in the operational sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability.

… quindi, evitiamo di dare fuorvianti indicazioni ed atteniamoci ai valori massimi indicati da Atmel !

Guglielmo

ExperimentUno:
Tu dici di no, ma credo che dovresti vedere i FD (Atmel-42735A-ATmega328/P_Datasheet_Complete-06/2016) a pagina 97. Noteresti che ci sono 2 diodi di clamp sia per il positivo che per il negativo. :wink:

Mi sa tanto che hai le idee molto confuse su cosa servono i diodi di clamp, sono l’ultima difesa del pin e non devono mai andare in conduzione, se succede vuol dire che c’è un problema.
Usare i diodi di clamp al posto di un partitore è un gravissimo errore, per giunta totalmente fuori da qualsiasi norma di progettazione e sufficiente a non permettere la certificazione/omologazione di una scheda dove viene usato questo sistema.
I pin non si distruggono solo per eccesso di corrente, anche l’eccesso di tensione è condizione sufficiente per danneggiare i semiconduttori che costituiscono il pin, non ultimo il fatto che i diodi di clamping sono lenti e prima che entrano in conduzione i 12V hanno tutto il tempo per fare danni, danni che possono essere sia immediati che con un effetto cumulativo nel tempo.

p.s.
La vecchissima A.N. di Microchip dove si rileva lo zero crossing della AC, 120Vac e non 240Vac, con un PIC 12C508 oltre a presentare una soluzione che è contro tutte le attuali normative è basata su un vecchio modello di PIC, fuori produzione da oltre 15 anni, che aveva gli ingressi certificati per lavorare in quelle condizioni, un caso particolare e non la norma.

Bene, ho imparato qualche nozione, che ho sottovalutato. Per il caso del topico, potrebbe porsi 2 opzioni, come avevo citato con il partitore o anche con un foto-accoppiatore che sarebbe anche migliore protezione agli ingressi dell' Arduino.

Buongiorno Ragazzi,

adesso ho l’Arduino NANO

come prima cosa vorrei sviluppare il tutto in area test quindi escludendo il partitore di tensione in quanto i 12V in fase di test li faccio diventare 5V

quindi dovrei scegliere 2 ingressi digitali, esempio D2 e D3 corretto ?

nell’ide dovrei specificare pinMode(D2,LOW); e pinMode(D3,LOW) ?

è la prima volta che sviluppo con arduino e non so come iniziare

potreste darmi una mano ?

Grazie mille

allora ho fatto una bozza

ho perà una domanda, come resistenza di pull-down cosa devo usare ?

PinEnable è il PIN dove arriva la 12V (x il momento fase di test 5V) rileva la tensione e attiva il PIN 4 il quale dopo 300ms viene disattivato dopo un secondo viene attivato e disattivato nuovamente

il tutto è corretto ?

int PinEnable = 2;
int PinDisable = 3;

int PinBlink = 4;

void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);

pinMode(PinEnable,INPUT);
pinMode(PinDisable,INPUT);
pinMode(PinBlink,OUTPUT);

digitalWrite(PinEnable,LOW);
digitalWrite(PinDisable,LOW);
digitalWrite(PinBlink,LOW);


}

void loop() {
  // put your main code here, to run repeatedly:
  monitorInserimento();
}

void monitorInserimento (void)
{

  if (PinEnable == HIGH)
  {
    Serial.println(" Pin 2 in HIGH"); 
    //PRIMO CICLO, ATTIVA LE 4 FRECCE
    Serial.println(" 1 - ATTIVO E DISATTIVO PIN 4"); 
    digitalWrite(PinBlink,HIGH);
    delay(300);
    digitalWrite(PinBlink,LOW);

    //SECONDO CICLO DISATTIVA LE 4 FRECCE
    delay(1000);
    Serial.println(" 2 - ATTIVO E DISATTIVO PIN 4"); 
    digitalWrite(PinBlink,HIGH);
    delay(300);
    digitalWrite(PinBlink,LOW);
        
  }


}

Ciao Sonic, per maggior sicurezza, visto che arduino funzionerebbe con tensione derivante da impianto eletrtico dell'auto (e quindi potrebbero essere anche più di 12V e "sporcizia" varia, valuta anche la strada dei fotoaccoppiatori (ad esempio 4N35 o similari). Quel che farai è alimentare il led del fotoaccoppiatore direttamente a 12V CON RELATIVA RESISTENZA, l'uscita sarà collegata al pin di arduino. In questo modo isoli impianto elettrico dell'auto con arduino. IL partitore di tensione è la soluzione più semplice ed immediata, l'utilizzo di fotoaccoppiatori rende un po più sicuro il tutto. Qua per capire di cosa si tratta: http://www.lucadentella.it/2013/10/14/ingressi-optoisolati-per-arduino/

Ciao

Cris

grazie mille, adesso gli do una lettura!

intanto ho rivisto il codice da me scritto prima in quanto errato :)

con il seguente codice ho fatto dei test usando un tester tra il GND e il Pin 4 del Nano e fornendo al Pin2 alimentazione presa dal pin +5V del nano stesso

sembrerebbe funzionare.

altri consigli / pareri ?

int PinEnable = 2;
int PinDisable = 3;
int PinBlink = 4;

int StatusPinEnable = 0;
int StatusPinDisable = 0;

boolean PinEnableMarker = false; // viene impostato a TRUE quando la void monitorInserimento viene eseguita in modo da far eseguire il codice solo una volta fino a quando il pin va nuovamente in LOW
boolean PinDisableMarker = false; // viene impostato a TRUE quando la void monitorInserimento viene eseguita in modo da far eseguire il codice solo una volta fino a quando il pin va nuovamente in LOW

void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);

pinMode(PinEnable,INPUT);
pinMode(PinDisable,INPUT);
pinMode(PinBlink,OUTPUT);

digitalWrite(PinEnable,LOW);
digitalWrite(PinDisable,LOW);
digitalWrite(PinBlink,LOW);

Serial.println("Avvio Del Programma");

}

void loop() {
  // put your main code here, to run repeatedly:
  monitorInserimento();

  delay(1000);
}

void monitorInserimento (void)
{

  StatusPinEnable = digitalRead(PinEnable);
  
  if (StatusPinEnable == 1)
  {
    Serial.println(" Pin 2 in HIGH"); 
    if (PinEnableMarker == false)
    {
            
      //PRIMO CICLO, ATTIVA LE 4 FRECCE
      Serial.println(" Step 1 - ATTIVO E DISATTIVO PIN 4"); 
      digitalWrite(PinBlink,HIGH);
      delay(500);
      digitalWrite(PinBlink,LOW);

      //SECONDO CICLO DISATTIVA LE 4 FRECCE
      delay(1000);
      Serial.println(" Step 2 - ATTIVO E DISATTIVO PIN 4"); 
      digitalWrite(PinBlink,HIGH);
      delay(500);
      digitalWrite(PinBlink,LOW);

      PinEnableMarker = true;
     }
    
  }

  if (StatusPinEnable == 0)
  {
    Serial.println(" Pin 2 in LOW"); 
    PinEnableMarker = false;
  }


}

void monitorDisinserimento (void)
{

// Codice ancora da scrivere
  
}

Perché attaccarsi ai topici degli altri. Cosa centra con quello che s'è scritto sopra ?

olre ad un parere di quanto scritto su

volevo capire, nel caso di un fotoaccoppiatore, presumendo che dovessi sfruttare più PIN del Nano per l'ingresso 12v, dovrei usare più fotoaccoppiatori ? o è possibile sviluppare un circuito con un fotoaccoppiatore che gestisca più ingressi / uscite (separati) ?

in tal caso, avete uno schema di esempio ?

Grazie ancora per le vostre risposte!