CR18_lez06 Robot Base
LEZIONE n° 6
– ROBOT BASE –
Con questa lezione cominciamo a gestire tutto il robot. 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 potremmo cominciare ad organizzare la gestione del robot.
Dovremo porre particolare attenzione alla programmazione di Arduino e quindi:
RICORDIAMO I PRINCIPI DELLA PROGRAMMAZIONE DI ARDUINO:
per ulteriori informazioni: http://www.iduesarchiaponi.com/cominciamo-ad-usare-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
- Assegnazione
-
-
- Count = count +1
-
-
- IN/OUT
- Istruzioni per immettere o prelevare dei dati
- IN/OUT
-
-
- digitalWrite(pin1,LOW)
-
-
- Test
- Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
- Test
-
-
- If (count <= soglia)
- Istruzione1
- istruzione2
- If (count <= soglia)
- Cicli
- Vengono eseguite ripetutamente un gruppo di istruzioni
- For (x=0;x==9;x++)
- istruzione1
-
Per il robot che vogliamo realizzare (explorer junior) avremo almeno bisogno di:
MOTORI (2 + ball caster) = permettono, se opportunamente comandati, di dirigere il robot in ogni direzione ottenendo la NAVIGAZIONE all’interno del labirinto. La ball caster serve a rendere nonostante il movimento il robot stabile.
SENSORI DI URTO (2 + baffi) = con due sensori e con i baffi incrociati possiamo facilmente gestire tre tipi di urto (sinistra, destra e centro). Si possono usare anche dei sensori di distanza agli ultrasuoni ma la loro affidabilità non è molto elevata.
SENSORI DI LUCE (2 o più) = il numero dei sensori di luce dipende molto dal numero dei piedini di Arduino rimasti liberi dopo che sono stati montati gli urti ed i motori. Per gli explorer junior è più semplice poiché avremo un solo tipo di sensori analogici.
DISPOSITIVI DI SEGNALAZIONE = il più semplice è sicuramente il LED, si potrebbe usare anche un display ma richiede un numero elevato di piedini per la sua gestione
Il programma (in ordine) del Robot deve:
MANDARLO AVANTI
GESTIRE GLI URTI
GESTIRE LE LUCI
per iniziare consideriamo un Robot base è formato da:
2 |
MOTORI |
![]() |
2 |
SENSORI DI URTO DIGITALI |
![]() |
1 |
SENSORE DI LUCE |
![]() |
1 |
LED |
![]() |
![]() |
![]() |
MOTORI: OPERAZIONI da FARE:
1) i motori vanno montati uno al contrario dell’altro
2) Trovare la giusta combinazione tra hardware e software
3) Trovare la velocità di spunto
SUGGERIMENTI:
Provare una direzione alla volta
Trovare la velocità adatta
MOTORI: Provare i cambiamenti
URTI: OPERAZIONI da FARE:
1) Trovare la giusta combinazione tra hardware e software
2) gestire l’urto centrale
3) TROVARE i TEMPI per le singole operazioni
SUGGERIMENTI:
Provare una variazione (tempo) alla volta
Provare la navigazione in una “trappola”
URTI: Provare i cambiamenti
LUCI: OPERAZIONI da FARE:
1) Trovare la giusta combinazione tra hardware e software
2) Taratura hardware del sensore
SUGGERIMENTI:
Eseguire la taratura (hardware) una volta e non modificarla più
Adattare la soglia (software) alla luce ambiente
LUCI: Provare i cambiamenti
LISTATO DI UN ROBOT – Per provare a fare le modifiche proposte copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]
/////////////////////////////////////////////////////////////////////
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 6 — ESERCIZIO n° 15
int TIME_BACK = 1000;
int TIME_SIDE = 1000;
int TIME_SIDE_LUX = 1000;
int TIME_FORWARD_LUX = 1000;
int TEMPO_MIN = 6;
int TEMPO_LUX = 3000;
int tempo = 500;
int THRESHOLD_POT_HIGH = 250;
int PotA_value = 0;
int potentiometerA = A3;
int PotB_value = 0;
int potentiometerB = A5;
int PotB_value_m = 0;
int speed_motor = 75;
int urto_DX = 9;
int urto_SX = 8;
int value_urto_DX = 0;
int value_urto_SX = 0;
int sensorPinLux = A0;
int value_sensorPinLux = 0;
int sogliaLux = 150;
magic=1;
// vado AVANTI SE NON CI SONO OSTACOLI
avanti(); // direzione AVANTI
Serial.print(” SPEED = ” );
Serial.print(speed_motor);
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
value_urto_DX = digitalRead(urto_DX);
delay(TEMPO_MIN);
value_urto_SX = digitalRead(urto_SX);
delay(TEMPO_MIN);
Serial.print(” URTO DX = ” );
Serial.print(value_urto_DX );
Serial.print(” URTO SX = ” );
Serial.print(value_urto_SX );
// URTO CENTRALE
if ((value_urto_DX == LOW) && (value_urto_SX == LOW))
{
Serial.print(” URTO CENTRO ” );
stop_Motori();
dietro();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_BACK);
destra();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_SIDE);
avanti();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
magic = 0;
}
// URTO SINISTRA
if ((value_urto_SX == LOW) && (magic==1))
{
Serial.print(” URTO SINISTRA ” );
stop_Motori();
dietro();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_BACK);
destra();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_SIDE);
avanti();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
}
// URTO DESTRA
if ((value_urto_DX == LOW)&&(magic==1))
{
Serial.print(” URTO DESTRA ” );
stop_Motori();
dietro();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_BACK);
sinistra();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_SIDE);
avanti();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
}
/****************************************************
* GESTIONE LUCE
****************************************************/
value_sensorPinLux = analogRead(sensorPinLux);
delay(TEMPO_MIN);
Serial.print(” sensor LUCE = ” );
Serial.print(value_sensorPinLux);
Serial.print(“\n “);
// LUCE SENSORE
if (value_sensorPinLux >= sogliaLux)
{
stop_robot();
digitalWrite(led_RGB_G,HIGH);
Serial.print(” TROVATA LUCE SENSORE UNICO \n ” );
delay(TEMPO_LUX);
digitalWrite(led_RGB_G,LOW);
destra();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_SIDE_LUX);
avanti();
analogWrite(pwm_a, speed_motor);
analogWrite(pwm_b, speed_motor);
delay(TIME_FORWARD_LUX);
}
/////////////////////////////////////////////////////////////////////
/*************************************************************
END PROGRAM
*************************************************************/
di seguito le slide della lezione
(6)
Articolo in Evidenza
Le categorie
- .Dicono di NOI
- Album fotografici Francesco
- Album Fotografici Iduesarchiaponi
- Album Fotografici Paolo
- Alta Fotografia
- Altro
- Antichi eserciti ed armi
- Archeologia
- Archeologia1
- Archeologia2
- Archivio Robotica
- Circuiti per Robotica
- Città Fantasma
- Collaboratori
- Corso Robotica 19-20
- Didattica
- Didattica a distanza
- Esempi di Robotica
- Eventi
- Fotografia
- Francesco
- Francesco e Paolo
- Gallerie Fotografiche Francesco
- Gare di Robotica
- Gli Svaghi nel mondo Antico
- I Cibi Romani
- Il blog
- L'Italia che non ti aspetti
- Laboratorio Robotica
- Le sette Meraviglie del mondo
- Le Sette meraviglie del Mondo moderne
- Lezioni On-line
- Link Utili
- Miti e Leggende
- Mitologia Norena
- Notizie
- Paolo
- Per non dimenticare
- Popoli e Civiltà
- Robotica
- Roma Nascosta
- Scrittori e Poeti Antichi
- Scuola
- Si dice… Perchè
- Soluzioni didattica a distanza
- Storie e Personaggi Romani
- Teatro
- Viaggiando …..
- Viaggiare
- Video