Le but est de mettre en œuvre une communication entre la carte Arduino UNO et l'ordinateur, pour réaliser un objet connecté. C'est aussi l'occasion de tester la photorésistance, reliée à une des six entrées analogiques.
La liaison entre l'ordinateur et la carte, de type filaire, se fait via un câble USB.
Cette résistance varie de 200 Ω à 10 MΩ environ selon la lumière reçue. Elle se place en série avec une résistance de 10 kΩ, le tout étant alimenté en 5 V. Une entrée analogique de la carte récupère la tension entre les deux composants.
La carte Arduino UNO est programmée :
int compteur = 0; void setup() { Serial.begin(9600); // mise en route du port série } void loop() { Serial.print("Compteur : "); Serial.println(compteur); compteur++; delay(1000); }
L'ordinateur reçoit les données et les affiche avec le moniteur série de l'EDI.
Ouvrir le menu Outils/Moniteur série
,
régler la cas échéant la vitesse de connexion à 9600 bauds, pour obtenir :
La tension générée par le capteur est lue par la carte Arduino UNO, qui envoie à l'ordinateur un nombre proportionnel à cette tension. Le point de jonction entre la résistance et la photorésistance relie l'entrée analogique A0.
Le programme de base ci-dessous permet de tester le fonctionnement.
void setup() { Serial.begin(9600); } void loop() { int lu = analogRead(A0); Serial.println(lu); delay(1000); }
Selon la tension reçue, la fonction analogRead(0)
retourne un nombre compris
entre 0 et 1023 :
Ouvrir le menu Outils/Moniteur série
, comme précédemment,
pour afficher sur l'ordinateur le nombre reçu.
Placer votre doigt sur la photorésistance pour voir le nombre changer.
La photorésistance peut être laissée en place pour la suite des expériences.
Téléverser le programme ci-dessous.
void setup() { pinMode(3, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()>0) { // si la mémoire tampon de la carte Arduino reçoit des octets char caractere = Serial.read(); // lecture d'un caractère if (caractere == 'a' || caractere == 'A') { digitalWrite(3, HIGH); } if (caractere == 'e' || caractere == 'E') { digitalWrite(3, LOW); } Serial.print(caractere); } }
Ouvrir le menu Outils/Moniteur série
,
régler la cas échéant la vitesse de connexion à 9600 bauds, pour obtenir :
Pour allumer ou éteindre la DEL présente sur la carte Arduino UNO,
utiliser la première ligne du moniteur série, écrire les caractères a
ou e
.
Valider en appuyant sur la touche Entrée
du clavier ou en cliquant sur bouton Envoyer
.
Pour une pièce mal éclairée (main positionnée au-dessus de la photorésistance), le système :
Lumière allumée.
Dans le cas contraire, si la pièce est convenablement éclairée, le système :
Lumière éteinte.
Mettre en œuvre un chenillard :
Réaliser un programme pour qu'à chaque passage de la main au-dessus de la photorésistance :
S'aider de la fonction random().
Il s'agit de remplacer le moniteur série par un programme en Python, interprété (par exemple) avec l'EDI EduPython.
Le code à charger sur la carte Arduino UNO est le même que celui du paragraphe II.1.
Un exemple de code à faire tourner sur l'ordinateur est proposé ci-dessous. La ligne 2 est à adapter selon le nom de port série et la vitesse de transmission des données.
import serial portUSB=serial.Serial('COM3', 9600) while True: lu=portUSB.readline()[:-2] print('Texte retourné par la carte Arduino UNO : ', lu.decode('utf-8'))
Explications :
portUSB.readline()lit une série d'octets dont le dernier, de valeur 10 en notation décimale, correspond à un saut de ligne.
...[:-2]retire les deux derniers octets, de valeurs 13 et 10 en notation décimale, correspondant à un retour chariot et un saut de ligne.
Le code à charger sur la carte Arduino UNO est le même que celui du paragraphe II.3.
La ligne 2 du code ci-dessous est à adapter à votre cas.
import serial portUSB=serial.Serial('COM3', 9600) print ("Entrer a pour allumer la DEL, e pour l'éteindre, s pour stopper.") while True: car = input("Saisir votre commande : ") if (car=='s'): portUSB.close() break portUSB.write(car.encode('utf-8'))