Orchiblog

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 5 août 2011

Incubateur version 2 : stand-alone

Dans l'esprit du bilan du 1er prototype d'incubateur et des billets qui ont suivi, le pilotage et donc le logiciel, sont également abordés sous un nouvel angle.

Avec la version 2 de l'incubateur, le pilotage se fera uniquement avec la carte Arduino, sans PC. L'incubateur fonctionnera en stand-alone : il sera autonome dès la mise sous tension des circuits.

La contrainte de la programmation de la carte Arduino, contrairement à Python, c'est la concision : donc simplicité du code pour un résultat efficace. Ca servira plus tard à reprendre le code Python pour la gestion de l'incubateur par ordinateur.

Interface de programmation Arduino

dimanche 8 mai 2011

Incubateur : Acquisition et traitement des données

Acquisition de données avec la librairie Python Matplotlib

C'est bien de connaître l'état des entrées-sorties (E/S) à un instant donné, c'est mieux de pouvoir suivre les changements d'état. En particulier dans le cas de données analogiques.

En ce qui concerne l'incubateur, la première donnée à suivre est la température.
Pour la présentation des données sous forme de graphe, c'est la librairie Matplotlib qui a été retenue. C'est tout simplement celle présentée sur le site Arduino à la rubrique Python.
Voici un exemple de code très parlant.

Les logiciels employés :
- Python 2.7
- matplotlib-1.0.1.win32-py2.7
- numpy-1.6.0b2-win32-superpack-python2.7
- scipy-0.9.0-win32-superpack-python2.7

Mesures de température

Les premières mesures ci-dessous m'ont permis de constater que le circuit du Peltier doit être amélioré.

Sur le graphe :
- De 0 à 30 minutes : Peltier éteint (22°C)
- De 30 à 220 minutes : Peltier refroidissant l'incubateur (20°C : une baisse de 2°C ce n'est pas assez !)
- De 220 à 270 minutes : arrêt du Peltier
- De 270 à : Peltier chauffant l'incubateur (30°C : c'est très bien)


NB le 08/05/2011 : le point sur le pilotage du Peltier

Voir les annotations billet du 12/12/2010 pour les explications

mardi 26 avril 2011

Incubateur : premier pilotage par ordinateur !!!

Ca y est : ça marche !!!

Enfin j'arrive à allumer un néon de l'incubateur avec l'ordinateur !!

Ca aura pris du temps depuis le 26 août 2009, mais la perspective de fabrication d'une serre USB (comme je l'appelais à l'époque) se concrétise !

Ce qui est piloté

Plus concrètement, l'image ci-dessous montre la console de pilotage de toutes les E/S (entrées/sorties) analogiques et numériques de la carte Arduino Duemilanove.

Pour chaque E/S, 3 boutons et une indication de lecture :
 - Boutons Marche et Arrêt : Actifs si l'E/S est configurée en sortie (par exemple : commande des néons)
- Bouton Test : Actif si l'E/S est configurée en entrée (par exemple : capteur de température)
 - L'indication de lecture :
> Si les boutons Marche/Arrêt sont actionnées, l'état de l'E/S est contrôlé juste après la commande et le résultat est affiché
> Si le bouton Test est actionné, l'état du capteur est affiché

Le dialogue entre Python et Arduino

Dans le dernier billet sur le sujet j'évoquais un protocole de communication maison qui avec le recul ... ne marche pas vraiment !
Le gros inconvénient était que la connexion plantait toutes les 10 minutes. Le seul moyen était de fermer et ré-ouvrir la connexion pour ré-initialiser la carte.
Problème majeur : à la fermeture de la connexion, toutes les commandes en cours sont elles aussi ré-initialisées !
Donc les néons s'éteignent. Le problème venait d'une saturation du buffer de communication série.

Il a fallu partir sur un autre solution : une librairie très bien réalisée par une équipe du MIT (voir le paragraphe : Python Arduino Prototyping API). Il suffit de charger le programme dans l'Arduino, d'intégrer la librairie Python au code de l'IHM, et le tour est joué !



samedi 26 mars 2011

IHM Incubateur thermostaté : protocole de communication avec la carte Arduino

Pour commander les éléments de l'incubateur (néons, etc) et collecter les données des capteurs (photorésistances par exemple), il faut qu'interface du PC et carte Arduino se comprennent.

En d'autres termes, il faut établir un protocole de communication.
Seulement 3 étapes sont utiles :

A- Demande de connexion
- Le programme Python demande à la carte Arduino si elle est prête à communiquer
- La carte Arduino répond "prête"

B- Envoi de données
- Python envoie des données
- Arduino accuse réception

C- Réception de données
- Python se déclare prêt à recevoir des données
- Arduino envoie les informations

Le code décimal a été choisi pour le codage (voir la table ASCII : American Standard Code for Information Interchange).
Par exemple :
- Python envoie "49" (= caractère "1") à Arduino pour initier le dialogue
- Quand Arduino reçoit ce "49" (décimal), il répond par un "50", qui est interprété comme "prêt" par Python

Ca semble simple comme ça, mais il y a eu quelques difficultés.
Comme le besoin pour Python de trouver en permanence des "retours chariots" sur la liaison série sous peine de blocage de l'IHM.
Ou bien la vitesse de rafraîchissement entrée-sortie : 200 ms côté Arduino, 100 ms côté Python.
Et autres détails de ce genre !!

Ci-dessous une petite illustration.
Petite remarque : les données envoyées par Python apparaissent en tant que caractère et non en tant que donnée décimale dans l'IHM.


vendredi 28 janvier 2011

IHM Incubateur thermostaté : connexion automatique de la carte Arduino

Avant de rentrer dans le vif du sujet du pilotage de l'incubateur, un point de détail.

Il s'agit de la mise en place de la recherche automatique du port série (Com) sur lequel la carte Arduino est connectée.

Le "plug-and-play" est tout de même plus élégant que la recherche à la main du port série attribué à Arduino :
> Pour Windows, il faut tout de même aller fouiller dans le gestionnaire de périphérique pour connaître le port Com
> Pour Linux c'est beaucoup plus simple. Sans rentrer dans les détails, la fonction servira surtout si plusieurs cartes sont connectées au même ordinateur

Le résultat semble évident, mais ça demande un peu de travail !



lundi 5 juillet 2010

Interface graphique pour serre USB (7) : prise en main à distance d'un ordinateur - installation de VNC -

Afin de prendre la main à distance d'un PC sur un autre par internet, la solution retenue est l'utilisation du logiciel VNC sur les 2 postes.

Explication.


1/ Installation de RealVNC sur Windows (PC qui prend la main à distance)

Lancer l'installation de RealVNC et n'installer que le viewer (et donc pas le serveur).

Pour se connecter il suffit de lancer le viewer et de saisir l'adresse IP suivie de 2 ":" et du numéro de port.

Le mot de passe configuré sur le PC distant sera demandé.



2/ Utilisation de VNC sur Linux-Ubuntu (PC qui prend la main à distance)

C'est encore plus simple qu'avec Windows.

Il suffit de lancer :
Menus : Applications > Internet > visionneur de bureaux distants

Puis cliquer sur "Se connecter", sélectionner le protocole VNC et saisir l'adresse IP suivie de 2 ":" et du numéro de port.

De nouveau le PC distant demandera de s'authentifier.



3/ Installation de VNC sur Linux-Ubuntu (PC à contrôler)

- Installer le paquet :x11vnc

- Créer le mot de passe en tapant la commande :
x11vnc -storepasswd


- Saisir la commande :
x11vnc -usepw


- Saisir le mot de passe que le PC distant devra renseigner en modifiant le paramétrage de Linux
Menus : Système > préférences > Bureau à distance > Sécurité : configurer

- Mise en service du serveur : saisir la commande
x11vnc -forever -shared -q -bg

- Déconnexion du serveur : saisir la ligne de commande
x11vnc -R disconnect:all


- Lancement de l'application au démarrage :
Menus : Système/Préférences/Applications au démarrage/Ajouter



 
4/ Explication du principe de connexion entre 2 PC reliés à internet

Maintenant que chaque PC est configuré correctement, voyons comment les faire communiquer via leur connexion internet respective.

Prenons une comparaison.

Imaginons que le PC à contrôler est un appartement dans lequel on souhaite rentrer.

Pour se rendre à l'immeuble dans lequel se trouve l'appartement, il faut se rendre à une adresse donnée.
Ici l'immeuble est le modem qui donne accès à internet (une Freebox par exemple). L'adresse en question est l'adresse IP du modem (c'est facile de la connaître en allant sur le site mon-ip.com par exemple)

Une fois devant les interphones de l'immeuble, il faut trouver le numéro de l'appartement. Pour notre connexion à distance, il s'agit du numéro de port du modem.

Dans cet immeuble la marque d'interphone est Seko mais ce pourrait être une autre marque qui utilise une autre technologie. Dans la connexion à distance, le type d'interphone correspond au protocole VNC.

Les câbles reliant l'interphone de l'appartement et le haut-parleur de l'entrée d'immeuble passent par un tableau de brassage, et on a décidé que quand le numéro 5900 est composé, ça sonne au 3e étage, appartement 12. Mais en changeant les branchements, on peut faire en sorte que ça sonne au 5e, porte 13.
Dans le cas de notre modem, c'est un peu pareil : on paramètre le routeur pour que la requête adressée au port du modem (5900 dans l'exemple) soit transférée à l'ordinateurqui est derrière et qui a lui-même une adresse IP (locale) donnée (c'est l'étage de notre exemple) et un numéro de port spécifique (c'est la porte ou l'appartement de notre exemple).


jeudi 1 juillet 2010

Interface graphique pour serre USB (6) : prise en main à distance d'un ordinateur - généralités -

La problématique est la suivante : sachant que la serre d'orchidées va fonctionner jour et nuit, je souhaite pouvoir la surveiller n'importe quand et de n'importe où.

Il faut donc connecter à internet le PC qui pilote le dispositif et utiliser un mode de connexion sécurisé à cet ordinateur à partir de n'importe quel PC ayant accès au web.


Différents systèmes permettent de réaliser ces connexions à distance.
Entre autre :
- Connexion directe d'un PC à un autre via un logiciel (par exemple RealVNC)
- Mise en relation de 2 PC via un 3ème PC faisant office de serveur (comme TeamViewer ou SparkAngels)
- Connexion de 2 PC à un même réseau (VPN)

> La dernière solution a d'emblée été écartée car le PC de la serre n'est pas sur un réseau local.

> La deuxième solution a le mérite d'être simple et efficace. Hélas les développeurs de ces solutions n'ont pas toujours pensé à les adapter aux plateformes Linux (cas de SparkAngels). Quand il y ont pensé (TeamViewer), ça ne marche pas toujours très bien ... en parcourant les forums à ce sujet, j'ai pu me rendre compte que je ne suis pas le seul à m'être heurté à des problèmes d'affichage ayant pour conséquence des lenteurs extrêmes de connexion.

> Finalement c'est la 1ère solution qui a été retenue. Ce n'est pas la plus rapide, mais c'est celle qui fonctionne le mieux pour les connexions Linux-Linux et Windows-Linux.

Le prochain post décrira l'installation et la configuration de VNC et des PC.

dimanche 2 mai 2010

Interface graphique pour serre USB (5) : passage de WindowsXP à Linux

Contexte.
La future serre USB sera composée de 3 éléments :
- Des périphériques pour réguler les paramètres vitaux des plantes (lumière, etc)
- De l'électronique pour faire communiquer l'ordinateur avec le monde extérieur
- Et l'ordinateur qui fera tourner le programme dont je vous présente régulièrement l'évolution

Actuellement j'utilise Windows XP pour les divers tests. Mais à terme c'est Linux, système d'exploitation gratuit et libre d'utilisation, que j'utiliserai.

Mais un logiciel qui fonctionne avec Windows n'est pas sûr de marcher avec Linux.

Voici donc la petite histoire du transfert de mes programmes sous Linux.

1- La première étape consistait à choisir un Linux.
Là je m'en suis remis aux conseil d'expert, et c'est Ubuntu qui a été sélectionné. La version 10.04 sortant ces jours-ci, j'ai préféré tester la version 9.10 qui est débuggée.

2- Une fois Ubuntu installé, le premier test de mon application Python n'a pas été concluant ...
Après avoir pas mal bataillé, on a trouvé les différents problèmes qui empêchaient l'application de tourner (grand merci à Guillaume !) :
- Problèmes d'encoding : Linux ne sait pas lire un "é" ou un "à" écrit par Windows
- Problème de définition du chemin informatique d'un fichier : chez Windows on dit "\toto.doc" et chez Linux on dit "/toto.doc" !

3- Etape suivante : faire communiquer le logiciel avec le périphérique USB.
D'emblée ça ne fonctionne pas car on n'a pas les droits d'écriture sur le périphérique.
Il faut donc créer une règle qui donne ces droits en créant le fichier : /etc/udev/rules.d/10-local.rules contenant la ligne :
BUS=="USB", ATTR{idVendor}=="0c70", ATTR{idProduct}=="f0a1", MODE:="0666"


Les idVendor et idProduct étant bien sûr spécifique de mon périphérique.

Par ici le tuto
. Attention : la commande "udevinfo" est remplacée par "udevadm info" avec Ubuntu 9.10.


4- Et voici le résultat : ça marche !


mardi 27 avril 2010

Interface graphique pour serre USB (4) : configuration des périphériques

L'application de pilotage de la serre progresse ...

Ci-dessous l'impression d'écran du panneau de configuration des périphériques connectés.

Il s'agit donc de dire au logiciel quelle carte électronique est branchée et où, afin que le programme sache comment envoyer et recevoir les informations.



La suite des hostilités :
- Aménager mon nouvel atelier d'électronique / culture in vitro / R&D !
- Tester la compatibilité du programme sur Linux versus Windows
- Faire migrer et relooker ce blog sur ... orchiblog.fr !!!
- Poursuivre la conception du logiciel

A bientôt !!

samedi 13 mars 2010

Interface graphique pour serre USB (3) : suivi des connexions

Afin d'évaluer la qualité des connexions, il a fallu ajouter quelques indicateurs.
Ci-dessous l'impression d'écran.

A dans quelques temps !!
Pour l'heure, c'est le départ en vacance avec dans les valises un petit bouquin sur les pics basics ... tout un programme !


samedi 6 février 2010

Interface graphique pour serre USB (2) : gestion des logs

Depuis la présentation de fin janvier, l'application a fait des progrès.
En particulier la gestion des logs de connexion et communication du PC avec le module USB.

Avec cette nouvelle fonction, il va être possible de tester le bon fonctionnement à vide de la serre USB (sans périphériques).
Car il faut bien sûr valider que pendant 24h, le système fonctionne régulièrement sans panne.


samedi 23 janvier 2010

Interface graphique pour serre USB (1) : module de test

Ce post pour vous présenter une nouvelle application qui va permettre de tester et piloter la serre USB.

L'ébauche du mois d'août a entièrement été revue et corrigée.
Les nombreux plantages de connexion ont été supprimés. De nouvelles fonctions ont été ajoutées.

Dans l'onglet "Configuration" ci-dessous, 2 fonctions :
- Réglage de la fréquence de lecture / écriture du module USB
- Possibilité de basculer en mode déconnecté pour tester l'application



L'onglet "Tests" permet des opérations basiques de lecture / écriture :
- Visualisation en temps réel de l'état de la connexion PC/serre USB
- Visualisation en temps réel de l'octet de données envoyé par la serre USB
- Pilotage des 3 sorties en mode marche / arrêt tous les cycles d'horloge ou en manuel



Le mode de Tests par cycles marche/arrêt a permis de faire fonctionner le module présenté il y a 2 semaines.
Une petite vidéo montre ce qui se passe à l'écran et au niveau des circuits :
- On voit le circuit d'horloge qui fait défiler les LED vertes (= les sorties vers les périphériques qui deviennent passantes tour à tour)
- Les 3 LED rouges (dont 2 qui clignotent) sont les 3 sorties USB

La suite des opérations va s'orienter vers la culture in vitro :
> Une expérience concernant les conditions de stérilisation est en cours
> Le plan de travail est à réaliser pour travailler confortablement en milieu stérile

Merci à Guillaume pour la vidéo !



jeudi 13 août 2009

Serre USB (6) : Programmation de logiciel pour carte IO

Un grand pas a été franchi avec la programmation de ce logiciel de pilotage de la carte IO USB en langage Python.

Voici le résultat. Simple mais efficace.



A gauche : les sorties
> En cliquant sur un bouton on modifie l'état d'une des 3 sorties
> C'est avec ces 3 sorties que la serre va être commandée

A droite : les 8 entrées
> Toutes les secondes le logiciel teste l'état des entrées
> C'est avec ces 8 entrées que la serre pourra être surveillée

Le prochain cap est la commande de relais pour allumer / éteindre les néons de la serre. Ca va se dérouler en 3 étapes :
> Réalisation de l'alimentation électrique des relais
> Recherche d'une solution pour commander séparément 10 néons avec les 3 sorties USB (si si, c'est possible !!)
> Développement logiciel pour automatiser les cycles jour / nuit

On rentre enfin dans le vif du sujet !

mercredi 12 août 2009

Serre USB (5) : Interface graphique

Petit rappel : le prochain objectif à atteindre pour la serre USB est la réalisation d'un programme de pilotage des 3 sorties / lecture des 8 entrées de la carte électronique Entrées/Sortie.

Pour ce faire, il faut réaliser une IHM (Interface Homme Machine).
En langage Python il y a de base un module Tkinter qui permet de faire des fenêtres avec des boutons, etc. mais le résultat n'est pas terrible. En plus ça demande des heures pour placer 3 éléments graphiques.

C'est pour cette raison que je me suis tourné vers wxPython.
Avant de commencer à être à l'aise avec ce module, il faut un peu de pratique. Donc rien de tel qu'un tutoriel.

La prochaine étape reste la réalisation de l'IHM pour la carte USB entrées / Sorties.


Fenêtre obtenue avec Tkinter



Fenêtre obtenue avec wxPython

lundi 22 juin 2009

Serre USB (2) : Premiers essais de programmation

L'étape qui suit les premiers essais de communication PC / circuit électronique par l'USB c'est de la maîtrise complète de cette communication en utilisant le langage de programmation Python.

Finalement à force de persévérance, j'y suis enfin arrivé.

Ce post a pour but de retracer brièvement le cheminement pour y parvenir.

Après quelques essais, j'ai laissé tomber la librairie PyUSB de Bleyer qui je n'ai jamais réussi à faire fonctionner.

Par contre c'est impeccable avec la librairie PyUSB (même nom !!) de Berlios.

Mode d'emploi :
1- Utiliser Python 2.5 (pour l'instant je n'utilise plus Python 3.0, suite à quelques déconvenues ...)
2- Installer la librairie dll LibUSB-win32
3- InstallerPyUSB 0.4.2 4- Se référer au très bon exemple PyMissile qui est limpide.


Programme écrit en Visual Basic par l'auteur du livre l'USB pour tous (Ed. ETSF)


Petit programme écrit en Python !