Ciao a tutti, sono Giovanni, laureando NABA (nuova accademia di belle arti di Milano). Mi complimento con Massimo e tutti quelli che hanno collaborato al progetto di questo magico microcontrollore.
Sto lavorando a questo piccolo robot come abstract per la tesi di laurea (che si baserà su un'analisi dell'evoluzione della robotica nell'arte contemporanea e i possibili futuri sviluppi).
Componenti utilizzati:
-microprocessore arduino duemilanove
-breadboard sperimentale
-cablaggi vari
-due servi parallax a rotazione continua
-due sensori di contatto + le due resistenze da 10 ko necessarie
-un led a 3 pin (bicolore verde-rosso) + resistenza da 220 o necessaria
-Balsa e parte del kit SERB dei canadesi di oomlout (è
precipitato giu dalle scale e si è in parte sbriciolato :'()
Il codice che ho scritto è questo:
#include <Servo.h>
#define LEFT 0
#define RIGHT 1
int inPinsx = 2;
int inPindx = 3;
int speed = 0;
int ledPin1 = 13;
int ledPin2 = 7;
Servo left;
Servo right;
void setup() {
pinMode(inPinsx, INPUT);
pinMode(inPindx, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
left.attach(9);
right.attach(10);
}
int checkContact() {
int side = 0;
if(digitalRead(inPinsx) == LOW)
side += 1;
if(digitalRead(inPindx) == LOW)
side += 2;
return side;
}
void servoSpeed(int side, int speed) {
speed = speed * 90 / 100;
switch(side) {
case LEFT:
left.write(90 - speed);
break;
case RIGHT:
right.write(90 + speed);
break;
}
}
void loop() {
int contact = checkContact();
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
if(contact == 0) {
if(speed < 100)
speed += 1;
servoSpeed(LEFT, speed);
servoSpeed(RIGHT, speed);
delay(20);
} else {
speed = 0;
digitalWrite(ledPin1, HIGH);
servoSpeed(LEFT, -100);
servoSpeed(RIGHT, -100);
delay(700);
switch(contact) {
case 1:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
servoSpeed(LEFT, 0);
servoSpeed(RIGHT, 40);
delay(800);
break;
case 2:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
servoSpeed(LEFT, 40);
servoSpeed(RIGHT, 0);
delay(800);
break;
case 3:
if(round((float)rand() / RAND_MAX) == 0) {
servoSpeed(LEFT, 40);
servoSpeed(RIGHT, -40);
} else {
servoSpeed(LEFT, -40);
servoSpeed(RIGHT, 40);
}
delay(400);
break;
}
}
}
Cosi' gira a caso evitando gli ostacoli percepiti con i sensori di contatto e accende il led verde se colpisce solo con uno dei due, oppure luce di colore rossa con entrambi.
Non so se il codice è ridondante oppure malscritto perchè non me ne intendo.(ringrazio Vanni e Tino per il supporto C)
A questo punto vorrei continuare la sperimentazione aggiungendo
-sensore ir per rilevamento precipizi
-sensore ir montato su servo a rotazione continua per identificazione oggetti
-sensore piezoelettrico per rilevamento suoni
-piccola cassa piezoelettrica
Mi chiedevo, è possibile, montando un sensore piezoelettrico su ogni lato del robot, che arduino possa capire da dove arriva un suono e di conseguenza seguirlo?
Quello che vorrei realizzare è una sorta di robot da compagnia capace di ricaricare le proprie batterie (stilo nikel-cadmio) con 4 pannelli solari da 6.8v 180ma in parallelo. Quindi avere la possibilità di essere sempre acceso e capace di rispondere a stimoli esterni. Molti lo definiscono un progetto Philip -D-i-c-k- oriented ;D
(cosa ci vuole tra i pannelli e le batterie?)
Grazie a tutti e spero possa essere utile a qualcuno questo tipo di sperimentazione.
Gio.