Module Arduino - Sn-Bretagne

publicité
PROJET 2013-2014
TSEN
TÉLÉMÉTRIE
Introduction :
La section Parcs & Jardins va participer prochainement à une course de tondeuses autoportées
qui va durer 24heures sans arrêt. 2 tondeuses vont être utilisées.
La section SEN a été sollicitée pour concevoir un système électronique embarqué permettant
de faire des mesures sur ces tondeuses durant la course. Les relevés seront envoyés sur un
PC à l’aide d’une liaison radio sans fil et seront stockés pour réaliser des analyses sur les
moteurs. Le système embarqué sera également capable d’afficher des données et de pouvoir
limiter le régime moteur pour éviter la casse.
D’autre part, il serait intéressant de suivre sur une carte le trajet des tondeuses, nécessitant
alors un dispositif GPS, ce qui permettrait également de comptabiliser le nombre de tours
réalisés par les différents pilotes.
Un site web sera développé à cette occasion afin de présenter le travail réalisé autour de cette
course et il serait intéressant de développer en direct, des news pendant la course (classement,
incidents, déroulement, informations diverses....).
Il serait question également de développer une application Android et de communiquer en
bluetooth avec le PC contenant l’application. Une personne pourrait alors se déplacer avec sa
tablette et visualiser en temps réel certaines données.
 Notre client est donc la section MPJ (maintenance des matériels parcs et jardins)
Bilan des tâches à réaliser
Site WEB (avec un CMS)
Application qui reçoit les données
Application qui affiche les données
Application qui stocke et analyse les données
Module embarqué et affichage
Envoi des données sans fil
Récupération des données GPS
Affichage sur tablette android
Application qui dialogue en bluetooth
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
Joomla, Drupal...
programme Python
programme Python
programme Python
Arduino
Zigbee
Module compatible Arduino
App Inventor (Bluetooth)
Programme Python
1
PROJET 2013-2014
TSEN
STAND
MODULE XBEE USB
APPLICATION PYTHON
ARDUINO + XBEE – MODULE GPS – MODULE AFFICHAGE EMBARQUÉS
SERVEUR WEB – LIAISON 3G
APPLICATION ANDROID
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
2
PROJET 2013-2014
TSEN
Les activités
Pour parvenir à réaliser tout ou partie du projet assez complexe, vous allez travailler en
essayant d ‘atteindre des mini-objectifs. Lorsque le fonctionnement global sera compris, il sera
alors possible d’aller vers l’objectif final.
Objectif N° 1 : faire communiquer 2 PC (hyperterminal) en mode sans fil en utilisant les modules
XBEE.
 Nécessite de configurer 2 modules.
Objectif N°2 : programmer un module Arduino, équipé d’un module XBEE et envoyer des
trames sur un PC (hyperterminal).
 Nécessite le module XBEE shield
Objectif N°3 : Réaliser un serveur web et y installer un CMS (Joomla , Drupal).
Objectif N°4 : Installer un afficheur 2x16 caractères sur Arduino et afficher des infos.
Objectif N°5 : Installer, utiliser App-Inventor et tester un programme préfabriqué.
Tests, compréhension et modification d’une application (thermomètre)  Application
télémétrie bluetooth (sauvegarder sous un autre nom et ne garder que l’affichage de la
température).
Objectif N°6 : Développement d’ un programme Python qui reçoit des données sur sa liaison
série RS232.
Objectif N°7 : Développement d’IHM en Python avec PyQt , en vue de réaliser l’application
Python (partie visuelle).
Objectif N°8 : Installer et configurer le module GPS sur Arduino et récupérer les données sur
Hyperterminal.
Des tests de télémétrie pourront être réalisés ensuite sur la tondeuse RL500 où sera installé un
Arduino : la vitesse de la tondeuse serait capturée par exemple, la tension batterie, le
soulèvement de la machine....
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
3
PROJET 2013-2014
TSEN
Activité 1 :
Utiliser App-Inventor avec une application Android déjà réalisée (termometre_vermell) qui
permet de se connecter en bluetooth à un capteur et d’indiquer des valeurs de température.
L’objectif est de modifier le présentation de l’application.
Application à modifier :
Application modifiée
L’utilisation de App-Inventor nécessite d’avoir un compte gmail. L’installation de java6 est
nécessaire (mais pas java7).
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
4
PROJET 2013-2014
TSEN
Activité 2 :
Réaliser un sketch Arduino qui permet d’acquérir une tension continue sur une des entrées
analogiques (AN0) et d’envoyer la valeur correspondante au PC (via USB du module Arduino).
Principe :
PC
(Hyperterminal
Ou console)
Module Arduino
USB
AN0
GND
Générateur simulant
un capteur
-
Pour la visualisation sur le PC de la tension provenant du capteur, on prendra le
moniteur série de l’application Arduino (onglet Outils).
-
Créer un sketch intitulé « telemetrie1 ».
-
Ouvrir le fichier « AnalogReadSerial » à partir de l’onglet Fichier, Exemples, Basics.
-
En vous basant sur cet exemple, écrivez les lignes de votre propre programme.
La liaison série est paramétrée en 9600 bauds.
Utilisez les noms suivants pour les constantes et les variables globales:
« entreeCapteur0 »  nom donné pour l’entrée AN0 (constante)
« tensionCapteur0 »  nom donné pour la tension issue du capteur (variable)
Placez le « delay à 500ms ».
-
Lorsque votre programme est prêt, testez-le.
-
Dans le moniteur série, des valeurs s’affichent en fonction de la tension appliquée sur
AN0. Il s’agit de valeurs décimales comprises entre 0 et 1023. Il faut modifier le
programme afin que la valeur affichée soit la même que celle du capteur : exemple, si le
capteur fournit 2.2V, il faut afficher 2.2.
Pour cela, il faut ajouter une variable et une expression :
Utilisez la variable globale « valeur » : float valeur = 0 au bon endroit.
Ajoutez la ligne suivante : valeur = (5*tensionCapteur0)/1024.
A la place de SerialPrintln(tensionCapteur0), écrire SerialPrintln(valeur).
-
-
Lorsque votre programme est prêt, testez-le.
-
Imprimez votre programme et commentez-le pour être capable de le réutiliser par la
suite.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
5
PROJET 2013-2014
TSEN
Activité 3 :
Le sketch précédent permet d’envoyer un nombre décimal image de la tension présente sur
l’entrée AN0. L’objectif de cette nouvelle activité est de réaliser un programme Python et une
toute petite interface graphique qui va afficher la valeur de cette tension (et d’une température)
avec PyQt Designer.
Principe :
PC Applicatin
Python et PyQt
Module Arduino
USB
AN0
GND
Générateur simulant
un capteur
1ère étape : création de la mini-interface graphique avec PyQt Designer.
- Vérifier que Python3.3 est installé.
Vérifier que PyQt Designer est installé. Sinon il faut télécharger depuis le serveur ftp, le fichier
suivant selon le PC:
PyQt5-5.1.1-gpl-Py3.3-Qt5.1.1-x32.exe
PyQt5-5.1.1-gpl-Py3.3-Qt5.1.1-x64.exe
-
Créer un répertoire ProjetPython sur le disque C. Vous enregistrerez les fichiers de l’application à
l‘intérieur.
Ouvrir QtDesigner.
Dans la fenêtre de dialogue, choisir Widget et cliquer sur créer. On obtient l’interface Qt avec un
widget Form vide.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
6
PROJET 2013-2014
-
TSEN
Modifier le titre de la fenêtre dans l’éditeur de propriétés sur la droite et trouvez la propriété
« WindowTitle » de la classe Qwidget. Mettre « Mesure de la température ». Faire « Entrer ».
Enregistrez votre fichier dans votre répertoire et nommez-le « MesureTemp ».
Remarque : L’extension du fichier est *.ui.
A ce stade, vous devez avoir ceci :
-
L’étape suivante consiste à placer des widgets de sorte que l’on se retrouve avec ce « mini
widget » Form :
-
Pour cela, il faut 3 labels (voir côté gauche et faire glisser les Widgets dans la fenêtre).
Il faut 1 LCD Number ,1 Spin Box et 1 Push Button.
Enregistrer votre travail et fermer QtDesigner.
-
Ce fichier doit maintenant être « converti » en langage Python. Nous allons créer un fichier
nommé « ui_MesureTemp.py » de la manière suivante :
Ouvrir la fenêtre de commande DOS (cmd).
Placez-vous dans le répertoire où se trouve votre fichier en tapant directement cd /ProjetPython.
Vérifiez avec la commande « DIR » que votre fichier « MesureTemp.ui » s’ y trouve.
Puis entrez la commande suivante : pyuic5 –o ui_MesureTemp.py –x MesureTemp.ui
Faire « entrer » ; il ne doit pas y avoir de message particulier. Fermer la fenêtre.
Ouvrir l’IDLE de Python3 (Démarrer- programmes) et ouvrir le fichier « ui_MesureTemp.py ».
Faire F5 pour exécuter le programme. La fenêtre précédente apparaît.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
7
PROJET 2013-2014
-
TSEN
L’étape suivante va consister à créer le programme principal indépendant de la partie
programme de l’interface graphique (ceci est alors plus simple lorsqu’il faut changer des
éléments de cette interface).
Pour cela, télécharger depuis le serveur ftp, le fichier « MesureTempMain.py » ; il est déjà
préparé pour être adapté à votre application. Il s’agit des lignes nécessaires au minimum pour
afficher la fenêtre graphique.
###########################################
# Date: novembre 2013
#
# Auteur: JM LETELLIER
#
# Projet: course de tondeuses 24h
#
# Co-auteur:
#
###########################################
# --- importation des modules utiles --from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os,sys
# classe principale:
class myApp(QWidget, Ui_Form): # la classe reçoit le Qwidget principal
# Note : ici self représente la classe
def __init__(self, parent=None):
QWidget.__init__(self) # initialise le Qwidget principal
self.setupUi(parent) # Obligatoire
# fonction principale exécutant l'application Qt
def main(args):
a=QApplication(args) # crée l'objet application
f=QWidget() # crée le QWidget racine
c=myApp(f) # appelle la classe contenant le code de l'application
f.show() # affiche la fenêtre QWidget
r=a.exec_() # lance l'exécution de l'application
return r
# pour rendre le fichier *.py exécutable
if __name__=="__main__": # pour rendre le code exécutable
main(sys.argv) # appelle la fonction main
-
Avec ce programme, vous ne pouvez pas encore ouvrir l’interface graphique ; vous devez
importer le programme précédent « ui_MesureTemp.py ».
Ajouter l’instruction : from ui_MesureTemp.py import * dans la partie importation des modules.
-
Lancer l’exécution de ce programme (F5) et vérifier que l’interface apparaît sans erreur.
Les actions sont pour l’instant inopérantes ; normal car le programme n’est pas terminé.
Fermer le programme.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
8
PROJET 2013-2014
TSEN
-
L’étape suivante va consister à insérer un « bout de programme » (un module), qui va s’occuper
de gérer la communication série.
C’est à partir du SpinBox que la communication va pouvoir s’établir en sélectionnant le bon
numéro de port.
-
Ajouter la ligne suivante dans le programme.
-
Ajouter ensuite la ligne suivante :
 Lorsque vous cliquerez sur le bouton « OUVRIR » (le spinBox), la procédure « ouvrirPort()
s’exécutera.
-
Ajouter la procédure ouvrirPort() :
 Cette partie va utiliser le module comRS232 que vous avez importé au début de ce programme.
Soit la communication s’établit, soit il y a un message d’erreur « impossible d’ouvrir le port de
communication ».
-
Les 3 lignes suivantes :
s’occupent d’exécuter un programme (ici « afficherDonneeTemp ») à chaque fois qu’une donnée
est reçue sur le port série. C’est comme si on faisait fonctionner un autre programme en parallèle
des autres. Il va permettre de modifier l’affichage de la valeur dans le LCD.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
9
PROJET 2013-2014
TSEN
-
Il faut donc ajouter la procédure afficherDonneeTemp(), à la suite :
-
Dernière partie à ajouter : il s’agit d’une classe qui s’occupe de la réception des données
provenant du port série, de la récupération de la valeur et de l’envoi de cette valeur à la
procédure afficherDonneeTemp().
-
Lorsque vous branchez l’Arduino avec son programme et que vous connaissez le numéro de port
de connexion, vous pouvez enregistrer et lancer l’application. Sélectionner le bon port et appuyer
sur le bouton « ouvrir » ; le programme ne doit pas donner de message d’erreur.
L’interface apparaît avec la valeur qui s’affiche ; modifier la tension de l’entrée AN0 de l’Arduino
et vérifier que la valeur du LCD change également.
-
Remarque : la valeur de la température est basée sur le capteur LM35 qui fournit une tension sur
l’entrée AN0 de l’Arduino de 10mV/°C.
Il faudra penser à ajouter une instruction dans le programme Arduino qui permettra d’afficher une
température et non une tension comme dans l’activité2.
Lycée des Métiers Jacques Prévert Combs – la – Ville
Section de BAC PRO Systèmes électroniques numériques
Electronique Industrielle Embarquée
10
Téléchargement