Monday, June 15, 2009

Monter un garmin etrex sur un sonar humminbird

Je me suis acheter un petit GPS Garmin etrex. En plus de l'utiliser en vélo et en randonné, j'utilise le etrex en bateau pour connaître ma vitesse et pour marquer des points d'intérêts sur le lac (belle structure, bons spots à poisson, etc). J'ai déjà un sonar humminbird et j'ai décidé de monter le petit etrex sur le sonar. Ce qui est cool, c'est que j'ai seulement le sonar à installer et à détacher dans le bateau. J'ai accès à tout au même endroit. Pour réaliser le montage j'ai eu besoin de : Voici ce que ça donne :

Friday, March 20, 2009

Homemade - Humminbird PC connection Kit (AS PC2)

Sur le site Humminbird.com, il est possible d'enregistrer le numéro de série de notre sonar. Le site va nous afficher la dernière version du firmware qu'il est possible d'installer sur le sonar. À l'achat, mon sonar contenait la version 3.770 du firmware. Pour mon sonar (Humminbird 717), le site affiche une version 4.180 du firmware. C'est la 2e version du firmware disponnible depuis la version installé à l'achat. Les mises à jours de firmware corrige des problèmes et apportent des améliorations cosmétiques et fonctionnelles. Par exemple, il y a eu une amélioration pour l'algorithme de détection du poisson (Fishid). Pour installer les mises à jours, il faut un kit de connexion entre l'ordinateur et le sonar. Ce kit consiste en 2 cables, un cable d'alimentation qu'il faut brancher à 2 piles 9 volts. Bien-sur, il est possible d'utilier le cable d'alimentation qui vient avec le sonar et de le brancher sur une pile 12 volts. L'autre cable permet de faire le transfert de données. C'est un cable série DB-9 d'un côté qui l'on connecte sur l'ordinateur et de l'autre côté sur le sonar. Ensuite on utilise le logiciel HumminbirdPC disponnible sur le site Humminbird.com pour uploader le firmware sur notre sonar. Voici le kit sur le site lebaron.ca
Je trouve ça un peu poche de payer 30$ pour pouvoir installer les mises à jours sur mon appareil que j'ai payé plus de 200$. Il est possible d'acheter un cable série pour moins 1.50$ sur Monoprice.com. Ce kit de connexion vaut pas 2$ à produire selon moi. Donc, j'ai décidé de chercher un peu pour voir si je ne pouvais pas me faire un kit de connexion moi-même. J'ai trouvé cette page qui montre le wiring diagram pour le kit de connexion humminbird. Cool, c'est exactement ce que j'avais de besoin ! Voici les 2 photos importantes sur le site.
Cable d'alimentation
Cable de transmission

Alimentation

Le sonar peut fonctionner sur n'importe quel voltage entre 10 et 20 volts. Je n'ai pas de batterie marine à la maison, je n'ai pas non plus 2 piles 9 volts. Par contre, j'ai un vieux power supply d'ordinateur qui peut me fournir facilement du courant 12 volts. J'ai trouvé ce tutorial qui explique comment utiliser un power supply d'ordinateur comme un power supply de lab. J'ai fais le minimun pour que ça fonctionne. J'ai couper la grosse couette 24 pins sur le power supply. J'ai shorté le fil vert (dc on) sur un fil noir (ground) pour faire fonctionner le power supply. Ensuite, j'ai utilisé un fil jaune (+12 volt) et un fil noir (ground) pour alimenter mon sonar. J'ai aussi pris 2 petits bout de cable coaxial RG6 dégainé pour coincer mes cables dans les trous.
J'allume mon sonar. Tout fonctionne comme prévu.

Transmission des données

Pour faire mon cable de transmission de données, je vais utiliser un cable série DB-9 null modem que j'ai déjà.
Pour connecter le cable au sonar je vais utiliser 3 bouts de cable RG6 dégainé de 1.5 pouces de long. Le cable RG6 à pas mal le même diamètre que les pins du cable serie. Si j'avais utilisé un cable série straight, j'aurais fait ma connexion exactement comme sur ce diagramme. Comme j'ai un cable null modem, je sais que les pins 2 et 3 utilisés pour transmettre les données s'inversent dans le cable. Donc, voici la connexion que j'ai dû faire :
J'ai mis du ruban électrique sur un cable pour éviter de faire un contact avec l'autre cable. Finalement, j'ouvre le logiciel HumminbirdPC. Le logiciel détecte que le sonar est connecté. Je peux uploader le binaire du firmware vers mon sonar. Tout a fonctionné à merveille !
Je garde mes 3 petits bouts de cable RG6 pour la transmission de données et mes 2 autres petits bouts de cables pour coincer mes cables d'alimentation pour faire ma prochaine mise à jour.

Références

Comment transformer un power supply d'ordinateur en power supply de lab : http://www.wikihow.com/Convert-a-Computer-ATX-Power-Supply-to-a-Lab-Power-Supply

Wiring diagram pour le kit de connexion Humminbird : http://en.wikibooks.org/wiki/Transwiki:Humminbird_PC_connection_cable_wiring_diagramm._(AS_PC2)

Wiring diagram pour un cable null modem DB-9 : http://pinouts.ru/SerialPortsCables/Nullmodem9to9_pinout.shtml


Tuesday, February 22, 2005

Developpement avec Eclipse

Voici mon config pour faire du developpement web en Java. Sur le site d'eclipse wtp, il y a une serie de tutoriaux pour se faire la main avec WTP. Si en plus vous êtes sur Minislack, tout est nickel !

Thursday, February 10, 2005

Programmation par Contrat avec Spring

Voici une solution simple pour faire de la programmation par contrat (design by contract) avec Spring. Le contrat représente les préconditions, postconditions associés aux méthodes.

Voici ce que permet cette solution :

* possibilité de définir des préconditions, postconditions et autres tests.

* possibilité d'ajouter ou de retirer le contrat en éditant le fichier de configuration xml.

* le contrat est défini par programmation java (pas de grammaire spéciale à apprendre ou de recompilation du code pour ajouter le contrat).


Dans votre configuration xml au lieu de retourner directement la classe d'implémentation. Il faut retourner le contrat associé à l'interface. La classe d'implémentation est appelé par le contrat. Lorsque le développement du système est terminé, si vous voulez retirer les tests de préconditions et postconditions, il suffit de changer la configuration xml pour retourner directement la classe d'implémentation sans contrat.

Avec cette méthode le contrat est indépendant de la classe d'implémentation. Il est seulement associé à l'interface du service. Le contrat peut donc être appliqué sur un autre classe d'implémentation sans nouveaux codes à produire. Les assertions, qui n'ajoutent rien de fonctionnel, n'alourdiront plus le code inutilement.

<bean id="UtilisateurDao" class="org.nadeau.dao.ContratUtilisateurDao">
    <property name="implementation">
        <value>ca.nadeau.dao.UtilisateurDaoImpl</value>
    </property>
</bean>


Voici l'interface d'un service pour lequel nous produirons le contrat.

package org.nadeau.dao;

public interface UtilisateurDao {
    Utilisateur getUtilisateur(int numero);
    void setUtilisateur(Utilisateur utilisateur);
}


Voici le contrat associé à l'interface UtilisateurDao.

package org.nadeau.dao;

import org.springframework.util.Assert;

public class ContratUtilisateurDao extends ContratSupport implements UtilisateurDao{
    public Utilisateur getUtilisateur(int numero){
        //preconditions
        Assert.state(numero >= 0, "Le parametre numero de l'utilisateur doit etre plus grand que 0.");

        Utilisateur utilisateur = ((UtilisateurDao)implementation).getUtilisateur(numero);

        //postconditions
        Assert.notNull(utilisateur, "L'objet en retour ne doit pas etre null");

        return utilisateur;
    }

    public void setUtilisateur(Utilisateur utilisateur){
        //preconditions
        Assert.notNull(utilisateur, "Le parametre utilisateur ne doit pas être null");

        ((UtilisateurDao)implementation).setUtilisateur(utilisateur);
    }
}


Voici la classe utilitaire de base pour tous les contrats. Cette classe sert à instancier la classe d'implémentation.

package org.nadeau.contrat;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;

public class ContratSupport implements Contrat, InitializingBean {
    protected Object implementation;

    public void setImplementation(String implementation){
        try {
            Class classe = Class.forName(implementation);
            this.implementation = BeanUtils.instantiateClass(classe);
        } catch(ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    public void afterPropertiesSet() throws Exception {
        Assert.notNull(implementation, "Il faut donner une classe d'implementation dans l'application context");
    }
}


L'interface qu'un contrat doit respecter.

package org.nadeau.contrat;

public interface Contrat {
    void setImplementation(String implementation);
}


L'exemple présenté utilise Spring mais il est très simple d'utiliser la même approche avec un autre type de factory pour obtenir le service. Il faut simplement que la factory retourne le contrat et la classe d'implémentation au lieu de retourner seulement la classe d'implémentation.

Avant de trouver cette solution, j'ai essayé de définir mes contrats à l'aide d'intercepteurs avec Spring Aop. Ça fonctionne aussi très bien. Mais le code à produire est beaucoup plus important et la configuration xml plus importante et difficile à maintenir.

Je suis ouvert aux commentaires et suggestions.

This page is powered by Blogger. Isn't yours?