Monthly Archives: December 2012

Connecter un LCD HD44780 sur un Arduino avec seulement 3 pins

Aujourd’hui j’ai reçu mon Arduino Uno et du coup j’ai voulu connecter mon écran LCD Hitachi HD44780 dessus.

Après avoir regarder sur le site de tutoriaux Arduino, j’ai vu qu’il fallait 6 pins pour pouvoir utiliser mon écran LCD 16×2 sur le Arduino Uno.

Du coup je me suis dis mais pourquoi ne pas utiliser un Shift Register 74HC595 pour ne plus avoir qu’à utiliser 3 pins au lieu des 6 nécessaires.

Et ça a fonctionné ! Voici le schéma de connexion:

arduino lcd shift register 3wire

Je tiens à préciser que la résistance de 470 ohms permet de régler le contraste de l’écran LCD HD44780. Un potentiomètre peut également être utilisé.

Pour l’utiliser, j’ai utilisé la librairie ShiftLCD que j’ai modifié afin qu’elle fonctionne avec les nouvelles version de l’IDE d’Arduino.

Il ne vous reste plus qu’à utiliser le sketch suivant pour tester si votre connectique fonctionne:

/*
 * 3-pin Arduino interface for HD44780 LCDs via 74HC595 Shift Register
 */
 
#include <ShiftLCD.h>
ShiftLCD lcd(2, 4, 3);
 
void setup() {
  lcd.begin(16, 2);
  lcd.print("Hello, World");
}
 
void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

Installer un serveur VPN sur Ubuntu (Serveur Kimsufi)

PETITE NOTE: Je vends des accès à mon serveur VPN pour 5€ par mois, sans aucune restrictions. Postez un commentaire si vous êtes intéressés.

La sécurité sur Internet est quelque chose de primordiale, c’est pourquoi j’ai décidé d’installer un serveur VPN sur mon serveur dédié Kimsufi.

Je pensai faire çà en 5 minutes mais j’ai rencontré plusieurs soucis. Je vais donc tenter de vous expliquer comment faire pour installer un serveur OpenVpn sur une machine Debian ou Ubuntu.

Mais commençons par voir ce qu’est un VPN.

Présentation et utilité d’un serveur VPN

Un VPN, ou Virtual Private Network (pour réseau privé virtuel) vous permet de créer une connexion sécurisée entre votre ordinateur et le serveur VPN. Cette connexion étant cryptée, vous allez pouvoir naviguer sur Internet par exemple en utilisant le serveur VPN comme relai.

Cette sécurité, ce cryptage est valable pour une connexion filaire ou Wifi et empêche toute malveillance ou surveillance.

Un des gros avantages d’utiliser un serveur VPN est que toutes les données qui passent par ce serveur VPN, aussi bien des données entrantes que des données sortantes, sont cryptées. Il vous sera donc possible de naviguer sur Internet de manière totalement anonyme puisque c’est le serveur VPN qui fera le relai entre votre machine et les différents hôtes distants.

Le schéma suivant illustre le fonctionnement d’un serveur VPN:

fonctionnement vpn

 

Pourquoi utiliser un serveur VPN ?

Comme je vous le disai plus haut, l’utilisation d’une connexion sécurisée grâce à l’utilisation d’un serveur VPN va vous assurez un minimum de sécurité:

  • données cryptées
  • adresse ip camouflée par celle du serveur VPN
  • anonymat sur Internet
  • navigation plus rapide qu’au travers d’un proxy
  • téléchargements sécurisés (pour éviter de se faire piquer avec Hadopi si on télécharge des torrents par exemple :p)
  • contourner les restrictions de certains réseaux (universités, certains pays, etc…)

Il existe de nombreuses offres sur Internet vous proposant d’utiliser des serveur VPN payants maix ceux-ci coûtent chers si l’on souhaite un VPN de qualité avec un minimum de peering et de bande passante. Evidemment on trouve également des VPN pour quelques euros par mois, voir gratuit mais vous serez vite déçu.

Pour ceux qui souhaitent utiliser un VPN pour télécharger des torrents, sachez que les offres du net ne sont vraiment pas concluantes.

Dans mon cas je souhaite utiliser un serveur VPN pour pouvoir faire du téléchargement, du torrent, du surf anonyme et de l’analyse de flux. Aucune offre en ligne de location de VPN ne convient à mes besoins car j’ai environ 3To de données entrantes par mois.

J’ai donc décidé de faire moi même un VPN low cost en installant OpenVPN sur un serveur dédié Kimsufi.

Installer OpenVPN sur Ubuntu ou Debian

Il existe plusieurs solutions gratuites pour installer un serveur VPN sur Linux mais la plus répandue et probablement la plus stable est OpenVPN.

Comme son nom l’indique, OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel. OpenVPN est un VPN SSL qui va créer un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL.

OpenVPN est relativement intéressant car il est possible de l’utiliser sur des réseaux NAT sans avoir à le configurer. De plus, il fournit divers clients VPN pour Windows, Mac, Linux ou bien Android.

Nous allons donc voir comment l’installer sur un serveur dédié Kimsufi tournant sous Ubuntu ou Debian, l’objectif étant par la suite de sécuriser mes ordinateurs sous Windows.

Pour la suite du tutoriel sur l’installation d’un serveur OpenVPN, vous devez disposez des droits d’administrateur (root).

Installation d’un serveur OpenVPN

L’installation du serveur OpenVPN peut se faire à partir des dépôts officiels:

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
chown -R $USER /etc/openvpn/easy-rsa/

 

Les scripts installés sont désormais disponibles ici:

/etc/openvpn/easy-rsa/

Configuration du serveur OpenVPN

Nous allons éditer le fichier /etc/openvpn/easy-rsa/vars:

export KEY_COUNTRY="FR"
export KEY_PROVINCE="44"
export KEY_CITY="Nantes"
export KEY_ORG="zem.fr"
export KEY_EMAIL="an@nyme.fr"

Puis on génère les différentes clés et certificats nécessaires pour le cryptage des données:

cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
openvpn --genkey --secret keys/ta.key

Une fois les clés et les certificats générés, on va les rendre disponibles pour le serveur en les copiant dans le répertoire /etc/openvpn/

cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/

Ensuite on crée les répertoires /etc/openvpn/jail (pour chrooter le processus d’OpenVPN) et /etc/openvpn/clientconf (qui contiendra les configurations des clients):

mkdir /etc/openvpn/jail
mkdir /etc/openvpn/clientconf

Il ne reste plus qu’à créer le fichier de configuration /etc/openvpn/server.conf:

# Serveur TCP/443
mode server
proto tcp
port 443
dev tun
# Cles et certificats
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
tls-auth ta.key 0
cipher AES-256-CBC
# Reseau
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 4.4.4.4"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
# Securite
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
# Log
verb 3
mute 20
status openvpn-status.log
; log-append /var/log/openvpn.log

Dans ce fichier de configuration, on voit clairement que l’on va créer un serveur VPN SSL basé sur le port 443 et sur le protocol TCP. Le port 443 étant généralement utilisé par le protocole HTTPS, cela vous permettra de passer aux travers de la plupart des firewalls et autres sécurités.

On note également que l’ensemble des clients qui se connecteront au serveur VPN utiliseront obtiendront une ip dans le range 10.8.0.0/24.

Désormais, on peut tester si l’installation et la configuration ont fonctionné:

cd /etc/openvpn
sudo openvpn server.conf

Si le message “Initialization Sequence Completed” apparait c’est que la configuration s’est correctement déroulée.

Il se peut que vous ayez le problème suivant:

Note: Cannot open TUN/TAP dev /dev/net/tun: Permission denied (errno=13)
Note: Attempting fallback to kernel 2.2 TUN/TAP interface
Cannot open TUN/TAP dev /dev/tun0: No such file or directory (errno=2)

 

Pour le résoudre, il faut rentrer les commandes suivantes:

mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun

 

Pour vérifier que le problème est corrigé, entrez la commande suivante:

cat /dev/net/tun

 

Elle devrait retourner le message “File descriptor in bad state”. Il ne vous reste plus relancer le serveur OpenVPN.

Une fois la configuration effectuée et testée, on édite le fichier /etc/openvpn/server.conf pour décommenter la ligne suivante:

log-append /var/log/openvpn.log

Vous pouvez alors relancer le serveur OpenVPN:

/etc/init.d/openvpn start

Configuration du routage

Un fois le serveur OpenVPN démarré, il faut configurer le routage afin que les clients puissent se connecter et obtenir une adresse ip. Pour cela, entrez cette commande:

sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Vous pouvez rendre ce paramétrage permanent (même après un redémarrage de votre serveur) en éditant le fichier /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Ensuite on configure la gestion des adresses ip NAT, car votre serveur OpenVPN fonctionnera comme un routeur:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Pour rendre persistante cette règle de routage NAT, il faut entrer cette commande:

sh -c "iptables-save > /etc/iptables.rules"

Puis vous devrez éditer le fichier /etc/network/interfaces en y ajoutant la ligne suivante après la définition de votre interface réseau principale (“iface eth0 inet…”):

pre-up iptables-restore < /etc/iptables.rules

Création d’un compte client sur le serveur OpenVPN

Maintenant le serveur OpenVPN est correctement configuré et que le routage est fonctionnel, nous allons créer un compte client pour pouvoir nous connecter dessus et l’utiliser. L’exemple suivant va créer un compte pour l’utilisateur “jhd”.

cd /etc/openvpn/easy-rsa
source vars
./build-key jhd

3 fichiers ont été générés dans le répertoire /etc/openvpn/easy-rsa/keys:

  • jhd.crt: Certificat pour le client
  • jhd.csr: Certificat à garder sur le serveur
  • jhd.key: Clés pour le client

Nous allons copier ces fichiers dans un sous répertoire du dossier /etc/openvpn/clientconf/ puis on se place dans ce dossier:

mkdir /etc/openvpn/clientconf/jhd/
sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/jhd.crt keys/jhd.key /etc/openvpn/clientconf/jhd/
cd /etc/openvpn/clientconf/jhd/

On créé le fichier client.conf en remplaçant A.B.C.D par l’adresse publique de votre serveur dédié:

# Client
client
dev tun
proto tcp-client
remote A.B.C.D 443
resolv-retry infinite
cipher AES-256-CBC
# Cles
ca ca.crt
cert jhd.crt
key jhd.key
tls-auth ta.key 1
# Securite
nobind
persist-key
persist-tun
comp-lzo
verb 3

Le client Windows d’OpenVPN a besoin d’un fichier ayant l’extension .ovpn. On va donc copier le fichier de configuration client.conf vers client.ovpn:

cp client.conf client.ovpn

Il ne nous reste plus qu’à zipper le répertoire du client afin de pouvoir le récupérer sur notre ordinateur client:

zip jhd.zip *.*

 Configuration du client OpenVPN pour Windows

Pour pouvoir vous connecter à votre serveur OpenVPN sous votre ordinateur Windows, vous devez télécharger le client OpenVPN disponible ici.

Procédez à son installation puis récupérer le fichier jhd.zip que l’on a généré précédemment sur le serveur dédié.

Dézippez le contenu du fichier dans le répertoire “config” du dossier d’installation de votre client OpenVPN (chez moi c’est “C:\Program Files (x86)\OpenVPN\config”).

Il ne vous reste plus qu’à lancer le client “OpenVPN GUI” puis à vous connecter.

Monitorer les connections sur votre serveur OpenVPN

Si comme moi vous avez plusieurs ordinateurs, il peut être intéressant de savoir qui est connecté et avec quelle adresse ip.

Pour surveiller votre serveur OpenVPN, vous pouvez exécuter la commande suivante:

tail /etc/openvpn/openvpn-status.log

 

Ce qui vous retournera la liste des clients connectés au serveur OpenVPN:

Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
jhd,88.185.245.66:63459,3599574,15267172,Sat Dec 29 15:18:31 2012
jhdserver,85.182.248.56:61435,679353858,15417087657,Sat Dec 29 11:54:59 2012
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,jhd,88.185.245.66:63459,Sat Dec 29 16:31:22 2012
10.8.0.10,jhdserver,85.182.248.56:61435,Sat Dec 29 16:31:26 2012
GLOBAL STATS
Max bcast/mcast queue length,0
END

Dans l’exemple ci-dessus, on voit que 2 clients sont connectés:

  • jhd avec l’adresse ip 88.185.245.66 qui a pour adresse privée 10.8.0.6
  • jhdserver avec l’adresse ip 85.182.248.56 qui a pour adresse privée 10.8.0.10

Voilà j’espère que cela vous aidera 🙂

PETITE NOTE: Je vends des accès à mon serveur VPN pour 5€ par mois, sans aucune restrictions. Postez un commentaire si vous êtes intéressés.

[DIY] Imprimante 3D pas cher: ma Reprap Prusa Mendel

Celà fait 4 mois, on parlait de tout et de rien avec des collègues de boulot lorsqu’on est tombé sur un article et sa vidéo concernant les imprimantes 3D. Alors pour ceux qui ne savent pas ce qu’est une imprimante 3D, il s’agit d’une machine capable d’imprimer des objets en 3 dimensions.

On a donc recherché sur le net des informations concernant ces fameuses imprimantes 3D et on s’est vite rendu compte que les modèles disponibles sur le marché sont relativement chers (plusieurs milliers d’euros).

Intrigué par ces nouveaux périphériques capables de créer des objets en plastiques, j’ai continué de chercher sur Internet et c’est la que j’ai trouvé des informations sur une imprimante 3D DIY (Do It Yourself). Cette imprimante a monté soi même se nomme RepRap.

Le principe de la RepRap est simple: capable de réaliser une imprimante à partir d’une imprimante. C’est ce que l’on appelle de la réplication et évidemment cette notion n’est que pure utopie, même s’il est vrai que les imprimantes RepRap sont bluffantes et géniales.

Pour ceux qui souhaiteraient plus d’informations sur les différentes imprimantes 3D DIY inspirées de la RepRap, je vous invite à aller sur le site de RepRap, leur wiki étant une mine d’informations.

Notez également qu’il existe un salon IRC francophone sur la RepRap (Serveur: Freenode, Salon: #Reprap.fr) sur lequel une dizaine de passionnés se feront un plaisir de vous aider et de vous guider. J’en profite d’ailleurs pour remercier arthur et hexamail qui m’ont énormément aidé pour le montage et le paramétrage de mon imprimante 3D Reprap Prusa Mendel.

Dans la suite de ce billet, je vais essayer de mettre les différentes étapes et problèmes que j’ai rencontré, en espérant que mon retour d’expérience vous aidera ou vous donnera envie de monter vous même votre propre imprimante 3D RepRap.

Quelle imprimante 3D choisir ?

N’ayant pas énormément d’argent, j’ai directement oublié l’idée d’acheter une imprimante 3D professionnelle et j’ai donc décidé de fabriquer moi même mon imprimante 3D. Je parcours donc les forums de RepRap et leur Wiki et là je m’aperçois qu’il existe plusieurs modèles d’imprimantes 3D DIY.

En effet, il existe un dizaine de modèles dont les plus connus sont: la Wallace, la Prusa Mendel et le Huxley.

Et là, première erreur à éviter: se précipiter! En effet, une des difficultés dans la réalisation d’une imprimante 3D basée sur une RepRap est de trouver un certain nombre de pièces qui permettra de la fabriquer. Je lis donc des centaines de pages sur les forums et du coup il m’a semblé évident que je devais partir sur une RepRap Prusa Mendel v2.

Le choix s’est porté sur une RepRap Prusa Mendel v2 car c’est un modèle bien documenté pour lequel on trouve facilement les différentes pièces assurant sa fabrication.

Voilà à quoi ressemble une
 assemblée issue d’un kit “tout fait” que l’on peut se procurer pour environ 900€:

RepRap Prusa Mendel V2

 

Plutôt sympa non 🙂 par contre 900€ ce n’est pas mon budget.

Une RepRap Prusa Mendel v2 pour 500€

Pour ceux qui ont un peu d’argent et qui n’ont pas envie de s’embêter à trouver le matériel nécessaire, il existe des kits complets pour lesquels il ne reste que l’assemblage à faire. Ces kits sont de bonne qualité mais reste onéreux. Compter environ 900€ pour un kit tel que celui de la photo précédente.

Ne disposant pas d’une telle somme, j’ai donc décidé d’essayer de faire ma propre imprimante 3D pour un budget de 500€, ce qui ne sera pas chose facile vous verrez.

J’ai donc listé tout le matériel dont j’allais avoir besoin, puis j’ai essayé de trouver les prix les plus bas du net, frais de port inclus. Pour trouver tout le matériel nécessaire pour une Prusa Mendel v2, j’ai dû passer de nombreuses heures sur Ebay et Google, mais j’y suis parvenu.

Une Reprap Prusa Mendel se compose de plusieurs éléments dont voici les principaux:

  • de la quincaillerie et de la visserie (qu’on trouve chez Castorama ou Bricovis)
  • d’un kit de pièces plastiques spécifiques (trouvé sur Ebay)
  • de 5 moteurs Nema17 (trouvé sur Ebay)
  • d’un lit chauffant (trouvé sur Ebay)
  • d’une buse chauffante (trouvé sur Ebay)

Comme je suis sympa, je vous donne la liste complète du matériel acheté, ainsi que les liens vers les différents vendeurs:

Désignation Prix
Kit pièces metriques Prusa V2 70
12 LM8UU 8mm Linear Ball Bearing Bush Bushing 10
8 roulements 608ZZ Abec 5 8
2 inch Threaded and 20mm Smooth Rod 6
PCB Heatbed MK2 Deluxe Kit 56
T2.5 Timing Belt + 2 Pulleys + grubscrews 29
5 NEW HYBRID NEMA 17 STEPPER MOTORS REPRAP 51
3 Tubes Rond acier étiré verni Ø 8 mm, 1 m 13
Visserie + Tiges fileté 38
MK4 MKIV J-Head Hot End 0.4mm nozzle 3mm filamnet 53
New Nice 1PCS ATmega2560-16AU Board with USB Cable 14
10 PCS AC 125V 1A 1NO 1NC Mini Micro Switch w Lever 2
RAMPS 1.4 electronics + SD RAMPS and cables 52
4 x A4988 stepper driver 42
PLA filament 3mm, 0,5kg 18
10mm 1.0cm X 33m 100ft Kapton Tape High Temperature 2
5 led 0805 2
100x SMD/SMT 0805 Resistor 0-1k Ohm 3
WD40 lubrifiant 5
Alimentation
Black Heat Shrink Tubing Set Pack (0.8/1.5/2.5/3.5/4.5mm) 3
Gold Tone Aluminum Case Resistors 25W Power 10 Ohm 3
5x 5 Color Binding Post Speaker Cable 4mm Banana Plug 4
DIGITAL HANDHELD LCD DVM VOM MULTIMETER VOLTMETER 4
Polyolefin Heat Shrink Heatshrink Tubing Tube Sleeve 2
TOTAL   490

Pour ceux que celà intéresse, le fichier Excel est téléchargeable ici et il intègre les liens vers tous les vendeurs.

Comme on peut le voir dans le tableau ci-dessus, le budget pour monter mon imprimante 3D s’élève à 490€. Mais autant vous le dire tout de suite, je suis plus proche des 600€ car j’ai une carte Arduino qui a cramé, ma buse qui a fondu et j’ai dû acheté quelques bricoles à coté. Cela dit, cela reste relativement correct et je suis plutôt satisfait de moi sur ce coup là.

Mon imprimante 3D

Je vous passe les différentes étapes de montage car je me suis inspiré de ce guide d’instructions qui est super bien fait avec de nombreux schémas.

Notez tout de même que suivant votre Kit plastique de pièces pour Prusa Mendel, vous serez sûrement amené à faire quelques modifications.

Voici à quoi ressemble mon imprimante 3D assemblée:

reprap prusa mendel low cost

 

reprap prusa mendel v2

Vous noterez que je n’ai pas branché le plateau chauffant car pour imprimer avec du plastique PLA ce n’est pas obligatoire (et car je n’ai plus de fil électrique sécurisé :p).

Et voici une vidéo de ma première impression (désolé pour la qualité je n’ai qu’un téléphone pourri):

Et voilà le résultat de ma première pièce 3D imprimée:

RepRap First Print

Pas vraiment réussi n’est-ce pas? Je me conforte en me disant que j’ai un souci de buse, que l’imprimante 3D n’est pas étalonnée ni paramétrer.

Je vous donne rendez vous dans un prochain sujet pour de nouvelles aventures avec ma RepRap.

 

Une nouvelle version de NetSysInfo en préparation

Bientôt une année après la sortie de la première version de NetSysInfo, nous avons le plaisir de vous annoncer la préparation d’une seconde version de ce logiciel de monitoring et supervision d’ordinateurs.

De très nombreuses nouveautés vont faire leur apparition dont l’intégration d’un nouveau service nommé Cloud.

NetSysInfo va ainsi vous permettre d’envoyer vos données et statistiques de monitoring directement sur nos serveurs, ce qui vous permettra:

  • de voir vos statistiques via Internet via un portail totalement sécurisé
  • de gérer plusieurs machines
  • d’avoir un historique de plusieurs années

Évidemment les nouvelles fonctionnalités de NetSysInfo seront totalement gratuites.

Nous vous tiendrons informés dans les prochaines semaines.

Utiliser le composant 74HC595 8 Bit Shift Register avec un Arduino

Introduction

Aujourd’hui j’ai fait des recherches sur les matrices de LED afin de pouvoir faire un LED cube 3D de 512 leds (8x8x8) en me basant sur un Arduino.

Tout de suite je me suis aperçu d’un probème: comment controler 512 Leds individuellement lorsqu’un arduino ne possède que 54 pins au maximum (pour la version Mega2560 par exemple) ?

La première astuce consiste à lier les différentes anodes entre elles par couche. Par contre on est toujours bloqué concernant les cathodes qui sont au nombre de 64 (8×8).

C’est là que j’ai découvert qu’il existe des composants Bit Shift Register et plus particulièrement le composant 74HC595 8-bit Shift Register qui a la particularité d’être pas cher et assez simple à utiliser.

Crédits: je tiens à préciser que l’ensemble des informations ont été trouvée sur le site anglais bildr (dont certains exemples) donc merci à eux.

Qu’est ce que le Shift Register ?

Avant même d’essayer d’utiliser des 74HC595 pour multiplexer des leds, il faut comprendre ce qu’est le Shift Register et comment il fonctionne.

Et ben c’est simple: un composant Shift Register permet tout simplement d’étendre le nombre de sortie digitales d’un microcontrôleur tel qu’un RaspberryPi ou un Arduino.

Ainsi un composant comme les 74HC595 vont permettre de contrôler 8 sorties digitales avec en plus la possibilité de lier plusieurs composants 74HC595 les uns aux autres.

Pour mon cube led 3d de 8x8x8, je vais ainsi pouvoir lier 8 composants 74HC595 entre eux afin de disposer de 64 sorties digitales.

Comment fonctionne le Shift Register ?

Pour comprendre le fonctionnement d’un Shift Register (et notamment le 74HC595), le plus simple est d’imaginer que l’on a une ligne de 8 chaises.

Ces 8 chaises sont soit vides (valeur 0), soit occupées (valeur 1).

Maintenant considérons que toutes les 5 secondes une sonnerie retentit et les personnes assises doivent se déplacer d’une chaise sur leur droite.

Si la chaise la plus à droite était occupée, alors on considère que la personne s’en va. Pour la chaise la plus à gauche, elle peut soit rester vide soit quelqu’un vient y prendre place.

Prenons un cas concret, celui de notre Shift Register 74HC595.

Shift Register

Le composant 74HC595 dispose de 8 pins de sortie (Qa, Qb, Qc, Qd, Qe, Qf, Qg, Qh) qui peuvent soit avoir la valeur 0 (Low) soit la valeur 1 (High).

Lorsque l’on met le pin SRCLK (Serial Clock) en valeur 1 (High, qui est l’équivalent du retentissement d’une sonnerie), alors les 8 pins de sorties se décalent vers la droite.

Alors le dernier Pin (Qh) est supprimé et une nouvelle valeur est définie dans le pin Qa lorsque le pin SER (Serial) a une valeur de 1 (High). Si SER a une valeur de 0 (Low) alors Qa reste à 0.

Exemple de fonctionnement du Shift Register 74HC595

Essayons d’appliquer l’utilisation d’un Shift Register sur 8 Leds.
Imaginons que l’on souhaite allumer les leds 1, 3 et 8.

Tout d’abord, nous allons éteindre toutes les leds (Clear, via le pin SRCLR) en passons tous les registres à 0.

Ensuite, on passe la première valeur en High puis on décale de 4.  Ensuite on passe de nouveau la première valeur en High puis on décale de 1. Enfin on passe de nouveau la première valeur en High.

L’image ci-dessous illustre parfaitement cet exemple

74HC595 Shift Register

Un des avantages des Shift Registers est qu’ils disposent d’un pin appelé RCLK (Register Clock) qui permet de n’effectuer aucune modification tant qu’il est maintenu en LOW.

Ainsi tant que RCLK sera a LOW vous pourrez affecter les valeurs que vous souhaitez aux 8 pins de sortie sans que l’affichage ne change.
Une fois que vous avez mis les bonnes valeurs pour vos pins de sortie, il ne vous reste plus qu’à passer RCLK en High et le Shift Register 74HC595 affichera les modifications.

On peut ainsi modifier nos différents registres plusieurs fois (en 8 étapes par exemple), mais l’on ne verra qu’une seule modification, ce qui laissera penser que tout s’est fait en une seule étape.

Comment connecter le Shift Register 74HC595 ?

Après avoir regardé la documentation technique du 74HC595 disponible ici, il s’avère que le composant 74HC595 est relativement simple à connecter.

Voici le détail de connections des pins:

  • Vcc : alimentation jusqu’à 6V qui doit être la même que celle du microcontroleur.
  • QA à QH: sorties Shift Register.
  • SER (Serial): entrée pour le prochain pin qui sera déplacé.
  • SRCLK (Serial Clock): déplace le registre lorsqu’il est mis à 1 (High).
  • RCLK (Register Clock): doit être mis en High pour valider les nouveaux shifts register.
  • SRCLR (Serial Clear): vide complètement le Shift Register sil est mis en Low. Doit être passé en High pour être activé.
  • OE (Output Enable): ce pin permet d’activer la sortie lorsqu’il est sur la masse (GND) et la désactive lorsqu’il est en High.

Utiliser les Shift Register 74HC595 avec un Arduino

Le schéma suivant vous montre comment connecter un Shift Register 74HC595 à un Arduino Uno.

Connecting 74HC595 Arduino

Quand le signal sur le pin SERCLK devient High, toutes les valeurs sont déplacées vers la droite et les nouvelles valeurs sont settées (si le pin SER est activé).

Après avoir affecté les nouvelles valeurs, il faut passer le pin RCLK en High pour que la mise à jour soit affichée sur les sorties.

Cascade de Shift Register 74HC595 avec un Arduino

Un des points forts des Shift Register 74HC595 est qu’ils peuvent se monter en cascade.

Ainsi l’on peut chainer autant de Shift Register 74HC595 que l’on souhaite.

Comme on l’on vu, le Shift Register 74HC595 supprime la dernière valeur (Qh) lorsque l’on déplace les registres vers la droite. Pour chainer un second Shift Register, il suffirait donc d’utiliser cette valeur dans le registre suivant qui serait le premier registre d’un second composant 74HC595.

On aurait alors 2 composants 74HC595 chainés.

Pour faire cela, on va relier les pins SERCLK entre eux, les pins RCLK entre eux et le pins Qh’ du premier 74HC595 au pins Qa du second 74HC595. Simple non ?

Le schéma suivant illustre parfaitement cela:

Cascading 74HC595 Arduino

Code Arduino pour utiliser les Shift Register 74HC595

Maintenant que la connectique est faite, voici un exemple de code pour utiliser les Shift Register 74HC595 avec votre Arduino Uno :

int SER_Pin = 8;   //pin 14 on the 75HC595
int RCLK_Pin = 9;  //pin 12 on the 75HC595
int SRCLK_Pin = 10; //pin 11 on the 75HC595
 
//How many of the shift registers - change this
#define number_of_74hc595s 1 
 
//do not touch
#define numOfRegisterPins number_of_74hc595s * 8
 
boolean registers[numOfRegisterPins];
 
void setup(){
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);
 
  //reset all register pins
  clearRegisters();
  writeRegisters();
}               
 
//set all register pins to LOW
void clearRegisters(){
  for(int i = numOfRegisterPins - 1; i >=  0; i--){
     registers[i] = LOW;
  }
} 
 
//Set and display registers
//Only call AFTER all values are set how you would like (slow otherwise)
void writeRegisters(){
 
  digitalWrite(RCLK_Pin, LOW);
 
  for(int i = numOfRegisterPins - 1; i >=  0; i--){
    digitalWrite(SRCLK_Pin, LOW);
 
    int val = registers[i];
 
    digitalWrite(SER_Pin, val);
    digitalWrite(SRCLK_Pin, HIGH);
 
  }
  digitalWrite(RCLK_Pin, HIGH);
 
}
 
//set an individual pin HIGH or LOW
void setRegisterPin(int index, int value){
  registers[index] = value;
}
 
void loop(){
 
  setRegisterPin(2, HIGH);
  setRegisterPin(3, HIGH);
  setRegisterPin(4, LOW);
  setRegisterPin(5, HIGH);
  setRegisterPin(7, HIGH);
 
  writeRegisters();  //MUST BE CALLED TO DISPLAY CHANGES
  //Only call once after the values are set how you need.
}

Vous noterez que cet exemple gère le cascading (le chainage des 74HC595). Il vous suffit d’éditer la ligne:

#define number_of_74hc595s 1

J’espère que cet article vous aura aidé. Rendez-vous dans un prochain poste pour la construction du cube 3D.

 

[PHP / .Net] Créer un WebService en PHP et l’utiliser en DotNet

Aujourd’hui j’ai voulu créer un webservice en php afin de pouvoir l’utiliser dans une application en Vb.Net.

Après plusieurs recherches j’ai trouvé comment faire.

Créer un WebService en PHP

Pour créer mon WebService en PHP, j’ai tout simplement utilisé la librairie NuSoap.

NuSoap va nous permettre de créer rapidement et facilement un WebService qui contiendra plusieurs méthodes qui seront par la suite utilisable directement en .Net via Visual Studio.

Si vous souhaitez plus de détails concernant NuSoap, n’hésitez pas à vous rendre sur leur site.

Voici le sample de code que j’utilise:

<?php
//Adresse à utiliser dans Visual Studio http://127.0.0.1/ws/index.php?wsdl
 
/**********************************
*           INCLUDES              *
**********************************/
require_once('nusoap/nusoap.php');
 
/**********************************
*            NUSOAP               *
**********************************/
$namespace = "127.0.0.1/ws/";
$server = new soap_server(); 						//creation du serveur SOAP
$server->configureWSDL("SimpleService"); 			//Configuration du WSDL
$server->wsdl->schemaTargetNamespace = $namespace;	//Configuration du namespace
 
/**********************************
*    NUSOAP FONCTION SIMPLE       *
**********************************/
//On définit la fonction simple
function FonctionSimple($who) {
	return "Hello $who";
}
 
//On enregistre la méthode simple sur le serveur SOAP
$server->register(
	// method name:
	'FonctionSimple', 		 
	// parameter list:
	array('name'=>'xsd:string'), 
	// return value(s):
	array('return'=>'xsd:string'),
	// namespace:
	$namespace,
	// soapaction: (use default)
	false,
	// style: rpc or document
	'rpc',
	// use: encoded or literal
	'encoded',
	// description: documentation for the method
	'A simple Hello World web method');
 
/**********************************
*    NUSOAP FONCTION COMPLEXE     *
**********************************/
//on definit le schema d'une méthode complexe				
$server->wsdl->addComplexType(
    'ObjetComplexe',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'Nom' => array('name'=>'Nom','type'=>'xsd:string'),
        'Prenom' => array('name'=>'Prenom','type'=>'xsd:string'),
        'Age' => array('name'=>'Age','type'=>'xsd:int')
    )
);
$server->wsdl->addComplexType(
    'ObjetComplexeArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:ObjetComplexe[]')),
    'tns:ObjetComplexe'
);
 
/* FONCTION COMPLEXE 1 */
//On définit la fonction complexe (modifie le nom du troisieme element du tableau passé en argument)
function FonctionComplexe($mySoapObjects) {
	$mso = $mySoapObjects[3];
	$mso['Nom'] = "Robert";
	return $mso;
}
 
//on enregistre la méthode complexe sur le serveur SOAP
$server->register(
    'FonctionComplexe',
    array('soapObjects'=>'tns:ObjetComplexeArray'),
    array('return'=>'tns:ObjetComplexe'),
    $namespace,
    false,
    'rpc',
    false,
    'Traite un array d object et retourne un seul object');
 
/* FONCTION COMPLEXE 2 */
//On définit la fonction complexe (retourne le tableau passé en argument)
function FonctionComplexeBis($mySoapObjects) {
	return $mySoapObjects;
}	
$server->register(
    'FonctionComplexeBis',
    array('soapObjects'=>'tns:ObjetComplexeArray'),
    array('return'=>'tns:ObjetComplexeArray'),
    $namespace,
    false,
    'rpc',
    false,
    'Retourne le tableau passé en argument');
 
// Get our posted data if the service is being consumed
// otherwise leave this data blank.                
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
                ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
 
// pass our posted data (or nothing) to the soap service                    
$server->service($POST_DATA);                
exit();
 
?>

Vous pouvez également télécharger tout le sample ici: WebService Php NuSoap. Celui-ci intègre la bibliothèque NuSoap.

Utiliser le WebService PHP en DotNet

Voici les différentes étapes nécessaires pour pouvoir utiliser votre WebService PHP.

  • Tout d’abord il faut ajouter une “Service Référence” à votre projet:

php web service and dotnet 1

  • Puis cliquez sur le bouton “Advanced…”

php web service and dotnet 2

  • Puis cliquez sur “Add Web Reference”

 

php web service and dotnet 3

  • Maintenant vous pouvez spécifier l’adresse de disponibilité de votre Web Service php. N’oubliez pas d’ajouter le paramètre “?wsdl” afin de récupérer les définitions de vos méthodes

php web service and dotnet 4

  • Et voilà c’est fini. Si tout s’est bien déroulé vous devriez voir votre Web Service dans Web References de votre projet.

php web service and dotnet 5

Il ne vous reste plus qu’ utiliser votre Web Service dans votre projet:

Sub Main()
 
        'on se connecte au WebService
        Dim service As New MonService.SimpleService
 
        'on exécute la méthode simple du WebService
        Dim res As String = service.FonctionSimple("jhd")
        Console.WriteLine(res)
 
        'on exécute la méthode complexe 1 du WebService
        Dim ms(10) As MonService.ObjetComplexe
        For i As Integer = 0 To ms.Length - 1
            ms(i) = New MonService.ObjetComplexe
            With ms(i)
                .Nom = "jhd" & i
                .Prenom = "ZeM" & i
                .Age = 30 + i
            End With
        Next
        Dim ret1 As MonService.ObjetComplexe = service.FonctionComplexe(ms)
 
        'on exécute la méthode complexe 2 du WebService
        Dim ret2() As MonService.ObjetComplexe = service.FonctionComplexeBis(ms)
 
    End Sub

Si vous souhaitez vous pouvez télécharger mon projet DotNet.

[DIY] Recycler votre vieille alimentation ATX en alimentation de laboratoire

Tout geek a forcément une vieille alimentation ATX (ou autre format) qui traîne dans le fond de sa chambre.

Souvent très poussiéreuse, cette alimentation ATX ne vous sert plus mais ce n’est pas pour autant que vous êtes résigné à la jeter.

Aujourd’hui je vous propose donc de recycler cette alimentation ATX pour en faire une alimentation de laboratoire, en dépensant une quinzaine d’euros.

Qu’est ce qu’une alimentation de laboratoire ?

Une alimentation de laboratoire est une alimentation qui peut délivrer toute sorte de courant (continu, alternatif) de différentes puissantes. Ces alimentations coûtent relativement cher (plusieurs centaines d’euros) et ressemble à celà:

Evidemment, nous n’aurons pas une alimentation de laboratoire avec toutes les options présentes dans les modèles commerciaux, mais notre alimentation de laboratoire low cost permettra d’utiliser du courant 3.3V, 5V, -5V, -12V ou bien encore 12V en sortie et cela pour 15€ seulement.

Le matériel pour réaliser une alimentation de laboratoire

Pour convertir notre alimentation ATX en alimentation de laboratoire, il faut acheter du petit matériel. Personnellement j’ai tout commandé sur Ebay:

  • une résistance de 25W puissance de 10 ohms (3€)
  • des tubes à chauffer (5€)
  • 5 fiches bananes (4€)
  • 1 LED + 1 résistance (1€)

On arrive donc avec les frais de ports à environ 15€ de matériel.

A celà, vous devrez ajouter de l’étain, un fer à souder, une perceuse, un voltmètre (pas nécessaire).

 Réalisation de votre alimentation de laboratoire

  • Tout d’abord décarennez votre alimentation.
  • Percez 5 trous et fixez y les fiches bananes
  • Coupez les fils puis regroupez les par couleur.
  • Soudez un fil vert à un noir, puis un noir et un rouge à la résistance 25 Watts 10 ohms.
  • Ensuite souder par groupe de couleur sur chaque fiche banane.
  • Mettez du chatterton sur les fils restants (violet, gris).
Il ne vous reste plus qu’à recaréner votre alimentation et votre alimentation de laboratoire sera opérationnelle et prête à fonctionner.