JDS – Junior Digital School

 

Riferimenti Generali

Rassegna Stampa


Slides

 

Montaggio Robot

Meccanica

Fissare le schede elettroniche, le batterie e il sensore con fascette e/o elastici.

 

Collegamento elettrico

NON realizzare il collegamento rappresentato con i fili BLU e VERDE mantenedo i ponticelli (jumpers) presenti sulla scheda.

 

 

Ambiente di programmazione per Arduino (IDE)

Scaricare l’IDE da https://www.arduino.cc/en/Main/Software  e installare sul PC.
Collegare Arduino al PC con il cavo USB, selezionare dal menu la porta USB corretta.
Copiare lo sketch e premere il tasto upload.

 

Programmi (Sketch)

 

// JDS - Esercizio 1 - Movimento fisso (avanti, indietro, destra, sinistra)

// Motore A
#define PIN_MOT_A_POT 5 // Potenza 
#define PIN_MOT_A_DR1 7 // Direzione 1
#define PIN_MOT_A_DR2 8 // Direzione 2

// Motore B
#define PIN_MOT_B_POT 6 // Potenza 
#define PIN_MOT_B_DR1 9 // Direzione 1
#define PIN_MOT_B_DR2 10 // Direzione 2


void setup() {

   pinMode(PIN_MOT_A_POT, OUTPUT); 
   pinMode(PIN_MOT_A_DR1, OUTPUT); 
   pinMode(PIN_MOT_A_DR2, OUTPUT); 
   pinMode(PIN_MOT_B_DR1, OUTPUT);
   pinMode(PIN_MOT_B_DR2, OUTPUT); 
   pinMode(PIN_MOT_B_POT, OUTPUT);

}


void loop() {

   // Velocita' motori (0-255)
   analogWrite(PIN_MOT_A_POT,180);
   analogWrite(PIN_MOT_B_POT,180);


   // Avanti
   digitalWrite(PIN_MOT_A_DR1, HIGH);
   digitalWrite(PIN_MOT_A_DR2, LOW);
   digitalWrite(PIN_MOT_B_DR1, HIGH);
   digitalWrite(PIN_MOT_B_DR2, LOW);

   // Continua per 1000 millsecondi (1 secondo)
   delay(1000);


   // Indietro
   digitalWrite(PIN_MOT_A_DR1, LOW);
   digitalWrite(PIN_MOT_A_DR2, HIGH);
   digitalWrite(PIN_MOT_B_DR1, LOW);
   digitalWrite(PIN_MOT_B_DR2, HIGH);

   // Continua per 1000 millsecondi (1 secondo)
   delay(1000);


   // Gira a sinistra
   digitalWrite(PIN_MOT_A_DR1, HIGH);
   digitalWrite(PIN_MOT_A_DR2, LOW);
   digitalWrite(PIN_MOT_B_DR1, LOW);
   digitalWrite(PIN_MOT_B_DR2, HIGH);

   // Continua per 1000 millsecondi (1 secondo)
   delay(1000);


   // Gira a destra
   digitalWrite(PIN_MOT_A_DR1, LOW);
   digitalWrite(PIN_MOT_A_DR2, HIGH);
   digitalWrite(PIN_MOT_B_DR1, HIGH);
   digitalWrite(PIN_MOT_B_DR2, LOW);

   // Continua per 1000 millsecondi (1 secondo)
   delay(1000);

   // Stai fermo
   digitalWrite(PIN_MOT_A_DR1, LOW);
   digitalWrite(PIN_MOT_A_DR2, LOW);
   digitalWrite(PIN_MOT_B_DR1, LOW);
   digitalWrite(PIN_MOT_B_DR2, LOW);

   // Aspetta 10000 millsecondi (10 secondi)
   delay(10000);

}

 

// JDS - Esercizio 2 - Movimento con sensore di prossimità

// Motore A
#define PIN_MOT_A_POT 5 // Potenza 
#define PIN_MOT_A_DR1 7 // Direzione 1
#define PIN_MOT_A_DR2 8 // Direzione 2

// Motore B
#define PIN_MOT_B_POT 6 // Potenza 
#define PIN_MOT_B_DR1 9 // Direzione 1
#define PIN_MOT_B_DR2 10 // Direzione 2

// Sensore Prossimita'
#define PIN_PROX_TRIG 2 // Trigger 
#define PIN_PROX_ECHO 3 // Echo

#define DISTANZA_MAX 25


void setup() {

   pinMode(PIN_MOT_A_POT, OUTPUT); 
   pinMode(PIN_MOT_A_DR1, OUTPUT); 
   pinMode(PIN_MOT_A_DR2, OUTPUT); 
   pinMode(PIN_MOT_B_DR1, OUTPUT);
   pinMode(PIN_MOT_B_DR2, OUTPUT); 
   pinMode(PIN_MOT_B_POT, OUTPUT);
   pinMode(PIN_PROX_TRIG, OUTPUT);
   pinMode(PIN_PROX_ECHO, INPUT);
}


void loop() {

   // Velocita' motori (0-255)
   analogWrite(PIN_MOT_A_POT,140);
   analogWrite(PIN_MOT_B_POT,140);

   // Determina distanza
   digitalWrite(PIN_PROX_TRIG, LOW); 
   delayMicroseconds(2); 
   digitalWrite(PIN_PROX_TRIG, HIGH);
   delayMicroseconds(10); 
   digitalWrite(PIN_PROX_TRIG, LOW);
   long durata = pulseIn(PIN_PROX_ECHO, HIGH);

   // Calcola la distanza (in cm) basandosi sulla velocità del suono
   long distanza = durata/58.2;

   if (distanza > 25) {

       // Avanti
      digitalWrite(PIN_MOT_A_DR1, LOW);
      digitalWrite(PIN_MOT_A_DR2, HIGH);
      digitalWrite(PIN_MOT_B_DR1, LOW);
      digitalWrite(PIN_MOT_B_DR2, HIGH);

 } else {

      // Indietro
      digitalWrite(PIN_MOT_A_DR1, LOW);
      digitalWrite(PIN_MOT_A_DR2, HIGH);
      digitalWrite(PIN_MOT_B_DR1, LOW);
      digitalWrite(PIN_MOT_B_DR2, HIGH);

      delay(200);

      // Gira a sinistra
      digitalWrite(PIN_MOT_A_DR1, HIGH);
      digitalWrite(PIN_MOT_A_DR2, LOW);
      digitalWrite(PIN_MOT_B_DR1, LOW);
      digitalWrite(PIN_MOT_B_DR2, HIGH);

      delay(300);
   }

   // Aspetta 50 ms
   delay(50);

}

 

Problemi e soluzioni

Sia sulla scheda Arduino che sulla scheda controllo motori (Driver) all’inserimento delle batterie devono accendersi i rispettivi led rossi; in caso ciò non avvenga verificare tutte le connessioni e la carica delle batterie (ed eventualmente sostituirle).

In caso tutti i led siano accesi ma il veicolo non si muova verificare la carica delle batterie (ed eventualmente sostituirle).

In caso all’accensione il veicolo si muova all’indietro è necessario invertire la connessione di entrambi i motori ai morsetti della scheda Driver.
In caso all’accensione il veicolo ruoti su se stesso  è necessario invertire la connessione di uno dei motori ai morsetti della scheda Driver.

Per qualsiasi problema, informazione o chiarimento potete scrivermi a:  andrea.rocchini.67@gmail.com