E così, sono riuscito a costruire il mio primo robot.

Con una arduino, una macchinina da 12 euro e due led IR che avevo nel cassetto.

Roba da pazzi.

Eccovi lo sketch:
#define irEmitter 12 // polo positivo emettitore
#define irReceiverN 7 // polo negativo ricevitore
#define irReceiverP 9 // polo positivo ricevitore
#define LEFT 8
#define RIGHT 10
#define FORWARD A3
#define BACKWARD A0
long distance = 0;
int interval = 15;
void setup() {
Serial.begin(57600); // inizializza seriale a 9600 baud
pinMode(irEmitter, OUTPUT); // il led emettitore è un output
pinMode(irReceiverP, OUTPUT); // il polo positivo del led ricevitore è un output
digitalWrite(irReceiverP, LOW); // e deve essere LOW
pinMode(LEFT,OUTPUT);
pinMode(RIGHT,OUTPUT);
pinMode(FORWARD,OUTPUT);
pinMode(BACKWARD,OUTPUT);
}
int focus() {
distance = readLight(true) - readLight(false);
if(distance < 0) distance = 0;
// processing
int data = int(Serial.read()); //ottieni seriale
if(data == '1') interval++; //se processing chiede di aumentare aumenta
if(interval > 0) if(data == '2') interval--; //se non sei a 0 diminuisci
Serial.print(interval); //spedisci a processing distanza
Serial.print(" "); //suddivisa da uno spazio
Serial.println(distance); //e l'intervallo
return distance;
}
double readLight(boolean lightOn) {
digitalWrite(irEmitter, lightOn ? HIGH : LOW);
pinMode(irReceiverN, OUTPUT);
digitalWrite(irReceiverN, HIGH); //carico ricevitore di induttanza
long reading = 0;
pinMode(irReceiverN, INPUT);
digitalWrite(irReceiverN, LOW);
long lightTime = millis();
while((millis() - lightTime) < interval)
if(digitalRead(irReceiverN) == 0)
reading++;
return reading;
}
void GoForward() {
digitalWrite(FORWARD,HIGH);
digitalWrite(BACKWARD,LOW);
}
void GoBackward() {
digitalWrite(FORWARD,LOW);
digitalWrite(BACKWARD,HIGH);
}
void StopEngine() {
digitalWrite(FORWARD,LOW);
digitalWrite(BACKWARD,LOW);
}
void loop() {
while (focus() < 200) {
GoForward();
}
GoBackward();
}
La macchinina va avanti finchè non vede un ostacolo, poi va indietro finche' non lo vede piu', poi rivà avanti....

'na cretinata.... ma lo decide da sola, quindi è un robot a tutti gli effetti!
Unico problema: una arduino standard e una batteria sono TROOOOOPPO pesanti per questa macchinina.... quindi le ruote girano solo se la tengo in mano!

Domani devo passare alla versione Ardweeny...
Probabilmente dovò aggiungere anche un'isteresi, perche' per quei due secondi che la macchinina riesce a camminare da sola prima che il peso "ciucci" tutte le batterie di bordo

, siccome va molto piano va "in stallo" quando arriva alla distanza critica dall'ostacolo.