Camion Arduino
Scuola Veronesi - Rovereto TN anno 2014-2015 esercitazione di tecnica - far muovere il camion che non cada dal tavolo
Il laboratorio di tecnica sotto la guida di Renato Conotter ha lo scopo di mostrare ai ragazzi le nuove frontiere dell'elettronica in particolare utilizzando la scheda di prototipazione Arduino con il conseguente approccio alla programmazione in C.
Il controllo del camion (motore e servomotore) è stato creato ulizzando Arduino sul quale è stata montata una scheda di controllo motori (Motor-Shield) - dopo innumerevoli tentativi è stata trovata al sequenza di manovre corrette per fare in modo che il camion non cada dal tavolo.
Cosa serve:
- Arduino Uno
- Motor-shield
- Cavetti
- Camion rotto
Cosa sorgente:
/*Adafruit Motor shield library
copyright Adafruit Industries LLC, 2009
this code is public domain, enjoy!*/
/*
Scuola Paritaria G. Veronesi - Rovereto - 2014
Attivita didattica uso di Arduino
Controllo di un giocattolo
uso delle librerie motore e servocomando
*/
#include <AFMotor.h> //aggiungiamo la libreria motore
#include <Servo.h> //aggiungiamo la libreria servocomando
AF_DCMotor motor(3); //settiamo il motore principale
Servo servo1; //setting servocomando
//impostiamo una serie di variabili per rendere leggibile il codice
int tratto = 800; //tempo attesa tratto lungo
int corto =750; // come sopra corto
int manovra = 150; // come sopra per fare manovra
int passo = 1; // passo per accellerare
int Tpasso = 2;
int V = 255;
int v = 155;
int m = 13;
int p = 0;
int l = 1;
int centro = 55;
//int dx = 75;
//int sx = 35;
int dx = 35;
int sx = 75;
void setup() {
servo1.attach(9);
servo1.write(centro);
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("controllo giocattolo");
// turn on motor
motor.setSpeed(V);
motor.run(RELEASE);
}
void loop() {
//uint8_t i;
int i;
Serial.print("parte ");
int angle;
angle=centro;
Serial.print(angle);
accellera(V);
//angle= Serial.read();
servo1.write(angle);
delay(tratto);
motor.run(RELEASE);
Serial.print("fermo");
// da qua facciamo manovra
int n = 0;
while (n < m){
Serial.println(n);
angle = dx; //le prossime 3 righe dicono sterza a dx e va avanti piano
servo1.write(angle);
accellera (v);
Serial.print("avanti piano ");
delay(corto);
motor.run(RELEASE); //lascia l'accelleratore
angle = sx; //imposta l'angolo di sterzo
servo1.write(angle); //sterza
retro(v); //accellera in retro
delay(corto);
delay(manovra);
motor.run(RELEASE); //lascia l'accelleratore
n++;
}
//la manovra dura fino qua
servo1.write(centro);
retro(V);
delay(tratto);
if(p=!l){
delay(manovra);
delay(manovra);
p=l;
}
Serial.print(centro);
accellera(V);
n = 0;
}
void accellera(int vel){
motor.run(FORWARD);
int i;
for (i= 0; i<vel; i++) {
motor.setSpeed(i);
delay(Tpasso);
}
}
void rallenta(int vel){
motor.run(FORWARD);
int i;
for (i= vel; i<0; i - passo) {
motor.setSpeed(i);
delay(Tpasso);
}
}
void retro (int vel) {
motor.run(BACKWARD);
int i;
for (i=0; i<vel; i++) {
motor.setSpeed(i);
delay(Tpasso);
}
}
Renato - ZappocoJ - Matteo, novembre 2014