Communication serial en Java (RXTX)

Dans le cadre du serveur Java qui remplacera bientôt l’interface graphique python contrôlée par ssh, nous avons dû résoudre le problème de la communication entre l’Arduino et le Raspberry. Puisque ils sont connectés par usb, nous nous sommes intéressés à la librairie RXTX pour java.

Vous pourrez trouver toutes sortes d’informations sur l’installation et l’utilisation de cette librairie ici.

Il est possible que vous ayez déjà cette librairie si vous utilisez l’IDE Arduino.

Nous aimerions partager avec vous la classe « SerialCommunication » basée sur les classes de la librairie RXTX (gnu.io.*). Nous n’avons probablement rien inventé de nouveau et nous nous sommes largement inspirés des exemples proposés par le wiki. Nous trouvons juste que cette classe englobe tous nos besoins et est pratique à utiliser.

Créez un objet SerialCommunication:

SerialCommunication serialCom = new SerialCommunication();

Etablissez une connection sur le port(p.ex.) »/dev/ttyS33″ à la vitesse de 9600 bauds:

SerialCom.connect("/dev/ttyS33", 9600);

Remarque: java RXTX ne cherche que des ports dans « /dev/ttySxx » or l’Arduino se trouvera probablement sur « /dev/ttyACM0 ». Pour résoudre ce problème, créez un symlink entre « /dev/ttyACM0 » et un port inexistant dans les « /dev/ttySxx » (p.ex. /dev/ttyS33):

#sudo ln -s /dev/ttyACM0 /dev/ttyS33

Ce lien disparait chaque fois que vous éteignez l’ordinateur, donc pensez à le recréer ou écrivez un bash script =).

Faire un backup

Bonjour à tous,

Pour continuer ce tuto, je vais vous expliquer comment fair une sauvegarde (ou backup) de la carte SD. En effet, cela prend un certain temps pour installer tous les logiciels sur la carte, sans compter le temps de mettre l’image de base sur la carte. C’est pourquoi je vous conseille de régulièrement faire une sauvegarde de votre carte. Pour ce faire, vous aurez besoin d’une machine fonctionnant sur Linux (quoiqu’avec MacOS, cela devrait aussi marcher, mais je n’ai pas testé).

Tout d’abord, insérez votre carte dans votre ordinateur (ou dans un lecteur de carte SD), ensuite taper

sudo fdisk -l

(si vous n’êtes pas sous Debian, tapez df)

et là, vous devriez être capable didentifier votre carte SD grâce à la taille de celle-ci. Notez son emplacement (c’est moi, c’est /dev/mmcblk).

Ensuite, c’est très simple, il ne vous reste plus qu’à lancer la commande suivante:

sudo dd if=/dev/sdb | gzip -9 > ./raspberry-20130705-sdb.img.gz

et vous attendez tranquillement, ça va prendre un bon moment. Il vous restera alors une image compressée de votre carte SD.

Ou alors, il y a une solution plus rapide, c’est qu’à la place d’e copier bit après bit l’image, on peu y copier des megaBit. c’est pourquoi je lance toujours la commande suivante:

sudo dd  if=/dev/sdb | gzip -9 ./raspberry-20130705-sdb.img.gz bs=1024

Petite information

Bonjour à tous,

Ces dernières semaines ont été riches en développements, problèmes , solutions et même en nouvelles piste. Tout d’abord, jusqu’à présent, nous utilisions VNC pour la connexion distante. Malheureusement, à cause cde cela, il y a un conflit de manager de fenêtres X (celle que nous utilisons pour controller le véhicule entre autres. Sachant que notre programme en python qui permet de faire fonctionner le véhicule ayant une interface graphique contenue dans une fenêtre X est lui-même dans une fenêtre X (celle de VNC-Viewer. Le problème est que les données sont biaisées lors du transfert de packet. En effet, notre code est à l’écoute du clavier et l’orsque une touche est enfoncéee, le code envoie une lettre qui sera interprété par le Raspberry Pi et l’Arduino, et lorsque nous la relachons, le code envoie une autre lettre. Lorsque nous utilisons ce code via VNC-Client, nous ne parvenons pas à bloquer la répétitions de touches, ce qui fait que le véhicule avance par saccade. Pour remédier à ce problème, nous avons fait en sorte de ne plus passer par VNC-Viewer, mais par SSH (avec un tunnel X), ce qui marche parfaitement. Après avoir discuté avec plusieurs personne de ce problèmes, nous avons décidé de terminer tout d’abord le drone avec le code python, puis, au vu du temps restant, de recommencer à coder, mais cette fois-ci, en Java. Cette fois-ci, il y aura plus de difficultés dans le sens où nous allons devoir inclure dans notre code la communication entre le serveur et le client. Nous allons commencer par le faire en UDP-IP avant de peut-être le faire en TCP-IP. Nous nous imposons comme délais (pour le python), mercredi prochain.

Guvcview

Bonjour à tous,

Pour vous remercier d’être venu 1000 fois sur notre blog, nous avons décidé de poster une petite vidéo sur l’utilisation de Guvcview.

Comme vous pouvez le voir, l’image n’est pas très grande, mais grâce à cette petite taille nous arrivons à avoir un bon rafraîchissement d’image.

Conception d’un PCB

pour notre projet, nous aimerions que toute notre électronique soit fixée sur un « PCB » ou « circuit imprimé ». Il y a plusieurs façon de procéder. Dans ce post, nous allons documenter le processus que nous avons suivi pour obtenir un PCB.

Prototypage

Avant de commencer à dessiner la plaque, il est généralement plus judicieux de savoir si les composants choisis fonctionnent correctement comme on les a disposés. Il s’agit ici de créer le circuit sur une plaque de prototypage (breadboard) et le tester.

Design du PCB

Une fois que le prototype est au point, il faut dessiner le circuit à l’ordinateur pour qu’une machine puisse finalement l’imprimer.

Nous proposons deux logiciels qui pourront satisfaire tous les besoins:

  • Eagle CAD, par cadsoft, est un programme professionnel et complet. Il demande un certain apprentissage pour le maitriser, mais vous permettra de réaliser des circuits très satisfaisants. Les seules limitations de la version gratuite sont la taille du PCB et le nombre de couches limitées à 2. Mais, cela ne vous empêchera pas  de créer des shields Arduino p.ex.
    Download: http://www.cadsoftusa.com/download-eagle/
  • Fritzing est un projet qui vise à améliorer la créativité et le partage de l’information dans le domaine Arduino et Processing. Grâce à leur programme intuitif, il est possible de créer des plaques électroniques professionelles. Ils proposent même un service pour les imprimer à des prix assez intéressants. Même si nous avons plutôt opté pour le premier programme, nous vous conseillons vivement d’envisager ce logiciel pour des plaques simples.
    Download: http://fritzing.org/download/

Puisque nous avons utilisé Eagle, les explications qui suivront se concentreront sur ce programme. Par contre, le but n’est pas de donner un tuto exhaustif sur les bases de ce logiciel, car d’autres l’ont très bien fait avant nous. Il est conseillé de lire ces pages avant de continuer avec l’utilisation de Eagle.

Exemple de notre plaque:

Board

Board

Schéma

Schéma

H-Bridge

Faire tourner l’axe d’un moteur électrique pose peu de problème. Il suffit de connecter l’un des pôles à la tension positive et l’autre à la négative. Ceci fera tourner l’axe du moteur dans un sens. Si vous souhaitez le faire tourner dans le sens inverse, il suffit d’échanger les fils électriques aux pôles du moteur.

Le problème suivant se pose alors : comment inverser le sens de marche du moteur sans intervention manuelle ?

La réponse est donnée par un circuit composé de transistors. Il permet, au moyen de deux signaux actionnant les transistors, de contrôler le sens du courant passant dans le moteur.

Le schéma suivant pourra d’avantage éclairer le lecteur :

 H-bridge

Ce tableau de vérité montre les différence de tensions (OUTPUT) pour des INPUT différents:

INPUT1 INPUT2 Tension
H L OUTPUT1 = OUTPUT2
L H OUTPUT1 = OUTPUT2
H H OUTPUT2 > OUTPUT1
L L OUTPUT1 > OUTPUT2

H: HIGH   L: LOW

La webcam

Bonjour à tous,

Dans ce tuto, je vais vous expliquer comment installer la webcam afin que vous puissiez avoir une image à distance. Vous avez donc besoin d’une caméra (compatible avec le Raspberry Pi voici le lien de vérification. Si vous prenez un modèle non inscrit dans la liste, je ne garanti pas que cela fonctionne). Pour l’exemple, je vais utiliser une webcam Logitech C270 à 39 CHF. Pour utiliser la webcam, il nous faut un petit logiciel, j’ai choisi guvcview car il est très léger et fonctionne très bien. Pour installer ce logiciel, il faut aller dans le Terminal et taper ceci:

sudo apt-get install guvcview

Une fois installé, vous branchez la webcam sur un port USB (ou sur le hub USB, il se peut que certaines webcam requièrent plus de puissance). Et vous lancez le software avec la commande suivante:

guvcview

Vous pouvez rajouter les arguments que vous souhaitez. Vous les trouverez en tapant

guvcview --help

mais ils ne sont pas vraiment nécessaire puisque une interface graphique est proposée dans l’application. Le démarrage du logiciel peut prendre quelques secondes. Il devrait ensuite y avoir deux fenêtres, une avec l’image de la webcam, et une deuxième avec des réglages. Voilà, vous avez maintenant un système autonome qui envoie une image.
Voici le lien de la suite du tuto: [à venir]