Usare un interruttore (slide) per controllare un sensore ultrasuoni jsn sr04t

Salve a tutti,

come ho detto nella mia presentazione, ho appena scoperto Arduino e non so molto di elettronica.
L'idea che ho è quella di connettere un Arduino Mega 2560 ad un interruttore slide switch e ad un sensore ultrasuoni che misura la distanza di tipo jsn sr04t (ossia quello impermeabile che ha un limite inferiore di 20 cm).
L'obiettivo è di controllare l'invio di ultrasuoni dal sensore tramite il cambio di stato dello switch.

Non ho fatto alcun test perchè ho paura di fondere qualcosa.

Potete dirmi se l'idea è realizzabile o se dovrei cambiarla?

Grazie

Ecco il codice:

#define TRIG 11 //questo è il pin che invia gli ultrasuoni.
#define ECHO 12 // questo è il pin che riceve il segnale di ritorno.

int distance = 0;

int switchPin = 13; // pin dello slide switch
/**********************************/
int
switchState = 0;         // legge lo stato dello slide switch


void setup() { 
 
 Serial.begin(9600); // Serial monitoring 
 pinMode(switchPin, INPUT); //initialize the slide switch as input
 pinMode(TRIG, OUTPUT); // Initializing Trigger Output and Echo Input 
 pinMode(ECHO, INPUT_PULLUP);
 } 
 
 void loop() { 

   switchState = digitalRead(switchPin);

 if (switchState == HIGH ) //

 {
   digitalWrite(TRIG, LOW); // 
   delayMicroseconds(2); 
   
   digitalWrite(TRIG, HIGH); // invia ultrasuoni
   delayMicroseconds(20); 
   
   digitalWrite(TRIG, LOW); // 
   distance = pulseIn(ECHO, HIGH)/ 58.0; //
   if (distance<20)
   {
    Serial.print("Distance: ");
   Serial.print("sotto i 20 ");
   Serial.println("cm"); 
   delay(10);
   }
  
   else 
   {                    
   Serial.print("Distance: ");
   Serial.print(distance);
   Serial.println("cm");
   delay(10);
   }
   
}

else
{
 digitalWrite(TRIG, LOW); // 
   delayMicroseconds(2); 
}
}

>Thiago92: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

gpb01 : grazie dell'informazione.

Il codice va bene, ma lo switch come disegnato nello schema mette in corto l'alimentazione quando spostato verso sinistra.

Per evitare guai, configura l'ingresso 13 come INPUT_PULLUP, e semplicemente collegalo a GND (lettura LOW) o lascialo scollegato (lettura HIGH).

Il divisore 58 va bene per l'aria (a me i conti danno 58.14), mentre in acqua bisogna scendere a 13.3

Claudio_FF
grazie per l'info sul divisore, non lo sapevo. Però lo utilizzerò all'aria, mi serviva impermeabile per la pioggia, quindi 58 penso che va bene no?

OK per l'INPUT_PULLUP ma non capisco cosa intendi per collegarlo a GND:
lo lascio sull'uscita GND di arduino e invece di collegarlo al pin dello switch lo collego alla linea di alimentazione blu della breadboard?

Lo switch deve aprire o chiudere il collegamento tra il pin 13 e GND / massa / negativo / striscia blu come preferisci chiamarla.

Claudio_FF
ho modificato lo schema e funziona! grazie mille!

#define TRIG 11 //questo è il pin che invia gli ultrasuoni.
#define ECHO 12 // questo è il pin che riceve il segnale di ritorno.

int distance = 0;

int switchPin = 13; // pin dello slide switch
/**********************************/
int
switchState = 0;         // legge lo stato dello slide switch


void setup() { 
  
  Serial.begin(9600); // Serial monitoring 
  pinMode(switchPin, INPUT_PULLUP); //initialize the slide switch as input
  pinMode(TRIG, OUTPUT); // Initializing Trigger Output and Echo Input 
  pinMode(ECHO, INPUT_PULLUP);
  } 
  
  void loop() { 

    switchState = digitalRead(switchPin);

  if (switchState == HIGH ) //

  {
    digitalWrite(TRIG, LOW); // 
    delayMicroseconds(2); 
    
    digitalWrite(TRIG, HIGH); // invia ultrasuoni
    delayMicroseconds(20); 
    
    digitalWrite(TRIG, LOW); // 
    distance = pulseIn(ECHO, HIGH)/ 58.0; //
    if (distance<20)
    {
     Serial.print("Distance: ");
    Serial.print("sotto i 20 ");
    Serial.println("cm"); 
    delay(10);
    }
   
    else 
    {                    
    Serial.print("Distance: ");
    Serial.print(distance);
    Serial.println("cm");
    delay(10);
    }
    
}

else
{
  digitalWrite(TRIG, LOW); // 
    delayMicroseconds(2); 
    Serial.println();
}
}