corso 2018 L8

by / sabato, 13 gennaio 2018 / Published in Archivio Robotica

 

LEZIONE n° 8 – PREPARAZIONE ROBOT

 

Con questa lezione cominciamo la preparazione del robot per la prossima gara (ROMECUP 2018). Per prima cosa dobbiamo organizzare l’hardware e seconda del tipo di robot (2 o 4 ruote) e dei sensori. Dovremo porre particolare attenzione al collegamento dei vari blocchi elettrici del robot.

Dopo aver collegato in modo adeguato tutti i blocchi possiamo cominciare ad organizzare la gestione del robot ed in particolare:

  • Operazioni preliminari
  • Impariamo a gestirlo
  • Messa a punto
  • Collaudo

 

Cominciamo con le operazioni preliminari:

    • Capitano squadra
    • Nome Robot
    • Organizzare il programma
    • Scelta strategie

Per ogni squadra si deve trovare il capitano che sarà il responsabile della squadra e, se necessario, dovrà parlare con l’arbitro della manifestazione. Nella scelta del nome si ha una scelta limitata solo dal buongusto. Fare il programma sarà sicuramente la parte più difficile e che vedremo in seguito.

 

Dovremo porre particolare attenzione alla programmazione di Arduino e quindi:

 

RICORDIAMO NUOVAMENTE I PRINCIPI DELLA PROGRAMMAZIONE DI ARDUINO:

 

  • Variabili:
    • Tipo (intero, reale, carattere, etc.)
    • Nome (caratteri alfanumerici)
    • Strutture (corso avanzato)

 

  • Principali comandi:
    • Assegnazione
      • Si calcola l’espressione a sinistra ed il risultato viene assegnato alla variabile a destra
      • Count = count +1
    • IN/OUT
      • Istruzioni per immettere o prelevare dei dati
      • digitalWrite(pin1,LOW)
    • Test
      • Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
      • If (count <= soglia)
        • Istruzione1
        • istruzione2
    • Cicli
      • Vengono eseguite ripetutamente un gruppo di istruzioni
      • For (x=0;x==9;x++)
        • istruzione1

di seguito le slide della lezione

riproponiamo per le modifiche:

LISTATO DI UN ROBOT – Per provare copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]

IL ROBOT HA:

  • DUE SENSORI DI URTO

  • UN LED PER SEGNALARE LA LUCE

  • DUE MOTORI IN CORRENTE CONTINUA

  • UN SENSORE DI LUCE

/*
LISTATO DI UN ROBOT

IL ROBOT HA:
DUE SENSORI DI URTO
UN LED PER SEGNALARE LA LUCE
DUE MOTORI IN CORRENTE CONTINUA
UN SENSORE DI LUCE
*/

int TEMPO = 500; //soglia

//********************** SOGLIA CON POCA LUCE
int sogliaLux = 400; //soglie luce
int speedMotori = 100; //speed

int sensorPin = A5;
int pwm_a = 3; //PWM control for motor outputs 1 and 2 is on digital pin 10
int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11
int dir_a = 12; //direction control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 13; //direction control for motor outputs 3 and 4 is on digital pin 13

const int led = 2; // the number of the LED pin
int urto_DX =6;
int urto_SX =5;

int value_urto_DX;
int value_urto_SX;

int sensorValue = 0; // variable to store the value coming from the sensor
int TEMPO_MIN = 3;
int TEMPO_LUX = 3000;

int magic;

void avanti() // direzione AVANTI
{
digitalWrite(dir_a, HIGH); //Set motor direction
digitalWrite(dir_b, LOW); //Set motor direction
}

void dietro() // direzione DIETRO
{
digitalWrite(dir_a, LOW); //Set motor direction
digitalWrite(dir_b, HIGH); //Set motor direction
}

void destra() // direzione DESTRA
{
digitalWrite(dir_a, LOW); //Set motor direction,
digitalWrite(dir_b, LOW); //Set motor direction,
}

void sinistra() // direzione SINISTRA
{
digitalWrite(dir_a, HIGH); //Set motor direction,
digitalWrite(dir_b, HIGH); //Set motor direction,
}

void stop_Motori() // FERMARE MOTORI DIETRO PER POCO
{
analogWrite(pwm_a, 0);
analogWrite(pwm_b, 0);
}

void stop_robot() // FERMARE MOTORI DIETRO PER POCO
{

digitalWrite(dir_a, LOW);
digitalWrite(dir_b, HIGH);
delay(100);
analogWrite(pwm_a, 0);
analogWrite(pwm_b, 0);
dietro();
delay(100);
}

void setup()
{
Serial.begin(9600);
pinMode(pwm_a, OUTPUT); //Set control pins to be outputs
pinMode(pwm_b, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(dir_b, OUTPUT);
// initialize the LED pin as an output:
pinMode(led, OUTPUT);
pinMode(urto_DX, INPUT);
pinMode(urto_SX, INPUT);
analogWrite(pwm_a, speedMotori); //set both motors to run
analogWrite(pwm_b, speedMotori);
}

void loop()
{
magic=1;
// vado AVANTI SE NON CI SONO ASTACOLI
avanti(); // direzione AVANTI

Serial.print(” velocità motori = ” );
Serial.print(speedMotori);
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);

value_urto_DX = digitalRead(urto_DX);
delay(TEMPO_MIN);
value_urto_SX = digitalRead(urto_SX);
delay(TEMPO_MIN);

// URTO CENTRALE
if ((value_urto_DX == HIGH) && (value_urto_SX == HIGH))
{
Serial.print(” valore sensore URTO CENTRO (DX più SX) ” );
Serial.print(value_urto_DX );
Serial.print(” URTO CENTRO \n ” );
stop_Motori();
dietro();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

destra();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

avanti();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
magic = 0;
}

// URTO SINISTRA
if ((value_urto_SX == HIGH) && (magic==1))
{
Serial.print(” valore sensore URTO SINISTRA ” );
Serial.print(value_urto_SX );
Serial.print(” URTO SINISTRA \n ” );
// delay(TEMPO_MIN);
stop_Motori();
dietro();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

destra();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

avanti();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
}

// URTO DESTRA
if ((value_urto_DX == HIGH)&&(magic==1))
{
Serial.print(” valore sensore URTO DESTRA ” );
Serial.print(value_urto_DX );
Serial.print(” URTO DESTRA \n ” );
// delay(TEMPO_MIN);
stop_Motori();

dietro();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

sinistra();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

avanti();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
}

/****************************************************
* GESTIONE LUCE
****************************************************/
sensorValue = analogRead(sensorPin);
delay(TEMPO_MIN);

Serial.print(” sensor LUCE = ” );
Serial.print(sensorValue);
Serial.print(“\n “);

// LUCE SENSORE
if (sensorValue <= sogliaLux)
{
stop_robot();
digitalWrite(led,HIGH);
Serial.print(” TROVATA LUCE SENSORE UNICO \n ” );
delay(TEMPO_LUX);
digitalWrite(led,LOW);

destra();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

avanti();
analogWrite(pwm_a, speedMotori);
analogWrite(pwm_b, speedMotori);
// delay(TEMPO);

}
}

(49)

Tagged under: , ,

Lascia un commento

TOP