LEZIONE 10

Le porte di uscita della scheda Arduino che andranno a collegarsi con i sensori sono i seguenti:

Sensore ultrasuoni destra PIN 13
Sensore ultrasuoni centro PIN 12
Sensore ultrasuoni sinistra PIN 11

Mentre il piedino per il trigger di tutti e tre i sensori è:

Trigger ultrasuoni PIN 3
Non è necessario usare 3 piedini per generare gli impulsi sul trigger perchè questi vengono inviati uno per volta, quindi è sufficiente unire i 3 trigger ad un unico cavo.
Una soluzione potrebbe essere quella in foto.

L'istruzione che genera l'impulso sul trigger è la seguente:


digitalWrite(UltrasTr, HIGH );    //Alzo il livello a uno
delayMicroseconds( 10 );          //Attendo 10 microsecondi
digitalWrite(UltrasTr, LOW );     //Azzero l'uscita 

Mentre l'istruzione che preleva il tempo in cui il piedino è a livello alto è la seguente:


TempoechoSx = pulseIn( UltrasSx, HIGH,38000 );

Il codice test completo è il seguente:


  //***************************************************************************
  //Programma test per il robot Poor versione 2
  //Setto le porte di uscita per le funzioni:
  //Integrato trovato sulla macchinetta SM6135W oppure RX2-C
  //Avanti    PIN 10  ---- Integrato 10
  //Indietro  PIN 9   ---- Integrato 11
  //Destra    PIN 5   ---- Integrato 6
  //Sinistra  PIN 6   ---- Integrato 7
  //Sensore ultrasuoni destra           PIN 13
  //Sensore ultrasuoni centro           PIN 12
  //Sensore ultrasuoni sinistra         PIN 11
  //Trigger ultrasuoni                  PIN 3
  //
  //Realizzato da: Daniele Loddo alias Ivotek
  //Data: 07/12/2015
  //Web: www.mignololab.org     www.ivotek.it
  //Email: info@mignololab.org      ivotek@gmail.com
  //***************************************************************************

  //Dichiaro le variabili per utilizzare i nomi al posto dei numeri
  //Spreco memoria ma il codice risulta leggibile al principiante
  int Destra = 5;
  int Sinistra = 6;
  int Avanti = 10;
  int Indietro = 9;
  int UltrasDx = 13;
  int UltrasSx = 11;
  int UltrasCx = 12;
  int UltrasTr = 3;
  
  //Variabili per contenere i valori dei sensori
  int vUltrasDx; 
  int vUltrasSx; 
  int vUltrasCx;

  //Variabili per contenere il tempo dell'eco
  long TempoechoDx;
  long TempoechoSx;
  long TempoechoCx;


  //Variabili per la conversione in centimetri
  long centimetriD;
  long centimetriS;
  long centimetriC;
  
void setup() {

  //Setto i PIN come out o in per pilotare i motori e i sensori di linea del robot.
  pinMode(Avanti,OUTPUT);        //Setto la porta Avanti come uscita
  pinMode(Indietro,OUTPUT);      //Setto la porta Indietro come uscita
  pinMode(Destra,OUTPUT);        //Setto la porta Destra come uscita
  pinMode(Sinistra,OUTPUT);      //Setto la porta Sinistra come uscita
  pinMode(UltrasDx, INPUT);      //Setto la porta UltrasDx come ingresso
  pinMode(UltrasSx, INPUT);      //Setto la porta UltrasSx come ingresso
  pinMode(UltrasCx, INPUT);      //Setto la porta UltrasCx come ingresso
  pinMode(UltrasTr, OUTPUT);      //Setto la porta UltrasT come uscita

}

void loop() {
  
  //Genero un impulso di 10 micro secondi per il trigger
  digitalWrite(UltrasTr, LOW );     //Azzero l'uscita
  delayMicroseconds(3);		    //Attendo 3 microsecondi
  digitalWrite(UltrasTr, HIGH );    //Alzo il livello a uno
  delayMicroseconds( 10 );          //Attendo 10 microsecondi
  digitalWrite(UltrasTr, LOW );     //Azzero l'uscita
  //Prelevo il tempo dai sensori
  TempoechoDx = pulseIn( UltrasDx, HIGH,38000 );
  delay(10);  

  
  //Genero un impulso di 10 micro secondi per il trigger
  digitalWrite(UltrasTr, HIGH );    //Alzo il livello a uno
  delayMicroseconds( 10 );          //Attendo 10 microsecondi
  digitalWrite(UltrasTr, LOW );     //Azzero l'uscita
  TempoechoSx = pulseIn( UltrasSx, HIGH,38000 );
  delay(10);

   
  //Genero un impulso di 10 micro secondi per il trigger
  digitalWrite(UltrasTr, HIGH );    //Alzo il livello a uno
  delayMicroseconds( 10 );          //Attendo 10 microsecondi
  digitalWrite(UltrasTr, LOW );     //Azzero l'uscita
  TempoechoCx =  pulseIn( UltrasCx, HIGH,38000 );
  //delay(100);


  
  //Converto il tempo in  centimetri
  centimetriD = 0.034 * TempoechoDx / 2;
  centimetriS = 0.034 * TempoechoSx / 2;
  centimetriC = 0.034 * TempoechoCx / 2;

    
  
  //I sensori sono tutte e tre senza ostacoli
  if (centimetriD > 15 and centimetriS > 15 and centimetriC > 15 ) 
  {
    //Il robot va avanti, cambiare il numero 255 per variare la velocità
    analogWrite(Avanti, 255);   // Il robot cammina alla massima velocità 
    analogWrite(Indietro, 0);   // Il robot cammina alla massima velocità  
    //Lo sterzo è dritto
    digitalWrite(Destra, LOW);    
    digitalWrite(Sinistra, LOW);   
    
  }
  else if (centimetriD < 15 and centimetriD > 0) // C'è un ostacolo a destra
    {
      //Il robot gira a sinistra andando sempre avanti
        digitalWrite(Destra, LOW);   
        digitalWrite(Sinistra, HIGH);   // Il robot gira tutto a sinistra  
        //Il robot va avanti, cambiare il numero 255 per variare la velocità
        analogWrite(Avanti, 255);   // Il robot cammina alla massima velocità 
        analogWrite(Indietro, 0);   // Il robot cammina alla massima velocità   
    }
  else if (centimetriS < 15 and centimetriS > 0) // C'è un ostacolo a sinistra
    {
      //Il robot gira a destra andando sempre avanti
        digitalWrite(Sinistra, LOW);   
        digitalWrite(Destra, HIGH);   // Il robot gira tutto a destra
        //Il robot va avanti, cambiare il numero 255 per variare la velocità
        analogWrite(Avanti, 255);   // Il robot cammina alla massima velocità 
        analogWrite(Indietro, 0);   // Il robot cammina alla massima velocità
    }
  else if (centimetriC < 15 and  centimetriC > 0) // C'è un ostacolo al centro
    {
      //Il robot si ferma
        digitalWrite(Destra, LOW);   // Il robot ha lo sterzo diritto 
        digitalWrite(Sinistra, LOW);     
        //Il robot si ferma
        analogWrite(Avanti, 0);   
        analogWrite(Indietro, 0);   
    } 

    
}

LEZIONE11
LEZIONE9

News

Aggiunto il link sul corso per la programmazione di microcontrollori Arduino Uno.

Aggiunta il link al corso Linux Uno su Udemy.
Aggiunto il tutorial per la realizzazionedi un Arcade con materiale di riciclo.
Aggiunta la sezione corsi.
Aggiunto il programma sulla telemetria (in fase di sviluppo).