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