Notre robot Nono dispose de plusieurs systèmes, il est donc important de pouvoir tous les tester régulièrement.
Tests sur Arduino
Les contacts par micro-switch
Le cou est équipé de deux contacts. Voici un premier code pour tester facilement un des contacts, connecté sur l’entrée numérique n°2.
Le contact est fermé au repos (NC sur le micro-switch) et se coupe lorsqu’il y a contact. L’entrée doit donc être câblée avec une résistance de pull-down (ou push-down) soit un signal bas (la masse). On peut utiliser la résistance interne mais personnellement ça n’a jamais marché : j’utilise une résistance de 10k.
void setup()
Serial.begin(9600) ;
Serial.println("Nono test contacts") ;
pinMode(2,INPUT) ;
digitalWrite(2,LOW) ;
Serial.println("Pret...") ;
void loop()
Serial.println(digitalRead(2)) ;
delay(200) ;
Ce qui affiche des 1 en répétition, sauf lorsque le contact est appuyé sur le microrupteur.
Voici le même test avec une interruption :
void setup()
Serial.begin(9600) ;
Serial.println("Nono test contacts") ;
pinMode(2,INPUT) ;
digitalWrite(2,LOW) ;
attachInterrupt(0,contactGauche,CHANGE) ;
Serial.println("Pret...") ;
void contactGauche()
if (digitalRead(2) == HIGH)
Serial.println("ouvert") ;
else
Serial.println("ferme") ;
delay(200) ;
void loop()
Le moteur du cou est le moteur 2. Il utilise deux pattes logiques : 7 pour la direction et 6 pour la vitesse (sachant qu’on l’utilisera en tout ou rien).
Voici le code qui met en mouvement la tête dans le sens horaire (de gauche à droite), change le sens quand le contact gauche (tête visant à droite) est déclenché, et change le sens quand le contact droit (tête visant à gauche) est déclenché.
void setup()
Serial.begin(9600) ;
Serial.println("Nono test contacts") ;
// les contacts
pinMode(2,INPUT) ;
digitalWrite(2,LOW) ;
pinMode(3,INPUT) ;
digitalWrite(3,LOW) ;
attachInterrupt(0,contactGauche,CHANGE) ;
attachInterrupt(1,contactDroite,CHANGE) ;
// le moteur du cou
pinMode(7,OUTPUT) ; // la direction
pinMode(6,OUTPUT) ; // la vitesse
digitalWrite(6,HIGH) ;
digitalWrite(7,HIGH) ; // on débute dans le sens horaire
Serial.println("Pret...") ;
void contactDroite()
if (digitalRead(3) == HIGH)
Serial.println("ouvert") ;
else
Serial.println("ferme") ;
// change la direction —> horaire
digitalWrite(7,HIGH) ;
delay(200) ;
void contactGauche()
if (digitalRead(2) == HIGH)
Serial.println("ouvert") ;
else
Serial.println("ferme") ;
// change la direction —> antihoraire
digitalWrite(7,LOW) ;
delay(200) ;
void loop()
PoBot
Programmes de tests de Nono