2102

  • Panneaux solaires : Les panneaux solaires sont constitués de plusieurs cellules photovoltaïques polycristallins disposées en série sur une plaque en polystyrène extrudé recouverte d'une couche de fibre de Lin enduite de résine Epoxy .Chaque cellule apporte 0,5 Voltes et une fois regroupées donneront un total de 9 Voltes car nous en avons 18 . Elles devront alimentés notre moteur ci-dessous expliqué .
  • Moteur : Comme expliqué précédemment, nous avons choisi un moteur Graupner speed 400. Au début de la synchronisation avec la télécommande, nous avons rencontré quelques problèmes car le variateur n'était pas adapté à notre voiture, car il était conçu pour un hélicoptère,  donc nous avons été obligé de racheter un nouveau variateur. Après cette petite erreure, la programmation s'est déroulée sans incidents.
  • Télécommande : Nous avons choisis une télécommande Reely GT2 EVO type pistolet . Cette dernière est destinée à conduire notre véhicule solaire . Nous avions quelques problèmes au niveau de la marche avant/arrière car elles étaient inversées, cause du variateur expliqué ci dessus, mais nous avons réussis à identifier et résoudre le problème . Elle dispose d'un tableau de bord sur son haut permettant de faire quelques réglages ou de l'allumer/éteindre .
  • Le capteur à ultrasons et son code :
Les capteurs à ultrasons

Pour améliorer et faire de Joséphine 1.0 une voiture « intelligente », nous avons opté pour les capteurs à ultrasons. Ce capteur est capable de mesurer la distance du premier obstacle présent devant lui, puis envoie l’information au microcontrôleur ARDUINO UNO. Ce dernier traite l’information pour ensuite l’envoyer au servomoteur qui change la direction de la voiture.

Le fonctionnement :

Ce capteur fonctionne en envoyant, comme son nom l’indique, des ultrasons (son dont la fréquence est supérieure à 20.000 Hz, imperceptible par les humains). Les ultrasons rebondissent contre un obstacle et reviennent vers le capteur.

En fonction du temps mit par les ultrasons pour revenir, le capteur en déduit la distance.

Le traitement :

Ensuite, l’information est envoyé vers la carte Arduino qui traite l’information pour la présenter a l’utilisateur de façon lisible. Elle effectue ensuite une suite de calcul pour en déduire la vitesse, si l’obstacle est a droite ou a gauche…

Enfin, toutes ces données sont envoyées vers le Servomoteur qui dirige la voiture en fonction, ou elles sont envoyées vers le moteur pour savoir si la voiture doit ralentir ou accélérer. C'est ainsi que notre voiture solaire va paraître « intelligente » . 

Codes de notre informaticien (écrit en C) :

#include <Servo.h>
#include « Ultrasonic.h »// bibliothèque des capteurs à ultrasons
int Capture1;
int Capture2;
int Capture3;//variables pour prises de distances
int space1 = 0;
// variables pour les espaces entre les variables Capture
int vitesse = 0;
Servo myServo;
Ultrasonic ultrasonic(2);
Ultrasonic ultrasonic2(4);
void setup()
{
Serial.begin(9600);
myServo.attach(9);
myServo.write(90);
}
void loop()
{
space1 = 0;
long RangeInCentimeters;
long RangeInCentimeters2;//variables pour stocker les mesures de distances

RangeInCentimeters = ultrasonic.MeasureInCentimeters(); //Capture de la mesure
Serial.print(« distance n°1 : « );
Serial.print(RangeInCentimeters);//Affichage de la mesure
Serial.print( » cm « );//Affichage de l'unité
RangeInCentimeters2 = ultrasonic2.MeasureInCentimeters(); //Capture de la mesure
Serial.print(« distance n°2 : « );
Serial.print(RangeInCentimeters2);//Affichage de la mesure
Serial.println( » cm »);//Affichage de l'unité
delay(500);
//Bloc de capture de 3 mesures séparées de 0,2 secondes
Capture1 = RangeInCentimeters;//Memorisation dans Capture1
delay(20);//Attente 0,2 sec
RangeInCentimeters = ultrasonic.MeasureInCentimeters();// Nouveau calcul de distance
Capture2 = RangeInCentimeters;//Memorisation dans capture2
delay(20);//Attente 0,2 sec
RangeInCentimeters = ultrasonic.MeasureInCentimeters();// Nouveau calcul de distance
Capture3 = RangeInCentimeters;//Memorisation dans capture3
delay(20);//Attente 0,2 sec

//Bloc de calcul des espaces entre les variables Capture
space1 = Capture1 – Capture2;
/*Serial.print(« D0 : « );
Serial.print(Capture1);
Serial.print( » – D1 : « );
Serial.println(Capture2);
Serial.print( » = « );
Serial.println(space1);*/

if (space1>0){
Serial.print(« L'obstacle se rapproche — « );
//myServo.write(0);
}
else if (space1<-5){
Serial.print(« L'obstacle s'éloigne — « );
//myServo.write(180);
}
else {
Serial.print(« L'obstacle est a la même vitesse que nous — « );
//myServo.write(90);
}
if (RangeInCentimeters > 515 && RangeInCentimeters2 < 515){
myServo.write(0);
Serial.println(« Obstacle à droite »);
}
else if (RangeInCentimeters < 515 && RangeInCentimeters2 > 515){
myServo.write(180);
Serial.println(« Obstacle à gauche »);
}
else if (RangeInCentimeters < 515 && RangeInCentimeters2 < 515){
if (RangeInCentimeters – RangeInCentimeters2 > 10){
Serial.println(« Obstacle plutot à droite »);
myServo.write(0);
}
else if (RangeInCentimeters2 – RangeInCentimeters > 10){
Serial.println(« Obstacle plutot à gauche »);
myServo.write(180);
}
else {
Serial.println(« Obstacle devant »);
myServo.write(90);
}

}
else if (RangeInCentimeters > 515 && RangeInCentimeters2 > 515){
Serial.println(« Pas d'obstacle »);
myServo.write(90);
}

/*myServo.write(0);
Serial.println(« Servo.position: 0 »);
if (RangeInCentimeters < 518){
myServo.write(180);
Serial.println(« Servo.position: 180 »);
if (RangeInCentimeters2 < 518){
Serial.println(« DANGER »);
}
}*/

vitesse = RangeInCentimeters;
}