Mon premier cours en ligne avec LearnDash sur WordPress

Mon premier cours en ligne avec LearnDash sur WordPress

Je décris ici les premiers pas pour un formateur qui voudrait créer son cours en ligne. Dans les deux premiers articles de cette série , j’ai validé que LearnDash est adapté pour ce que je veux faire (heureusement puisque j’ai déjà acheté cette extension…). Maintenant je me concentre sur l’utilisation par le formateur. Dans d’autres articles, je retournerai côté web designer pour faire les ajustements nécessaires (styles au moins).

Je précise que LearnDash est une extension payante. Je l’ai achetée voici au moins deux ans, à une époque où l’on payait une fois et on disposait de l’utilisation à vie. Ma licence expire « December 8, 2114 ». C’est même plus qu’à vie !

Installer l’extension LearnDash pour WordPress

J’ai une licence, j’ai donc un accès au site de support technique. Je peux y télécharger la dernière version de LearnDash (indiqué par la flèche orange dans la copie d’écran ci-dessous).

learndash, telecharger la dernière version

Dans le site cible, choisir ajouter une extension puis choisir « mettre en ligne une extension au format .zip » (flèche orange ci-dessous) :

mettre en ligne une extension au format .zip

Choisir le fichier zip puis installer. Activer l’extension.

Faire quelques réglages

Si learndash n’a jamais été installé, il faut aller dans Réglages (settings) et entrer le numéro de licence et l’adresse mail associée.

Dans réglages, choisir l’onglet « custom labels » et donner un nom

label Mon texte
Course Cours
Courses Cours
Lesson Module
Lessons Modules
Topic Séquence
Topics Séquences
Quiz Quiz
Quizzes Quiz
Take this Course (Button) Suivez ce cours
Mark Complete (Button) J’ai fini
Click Here to Continue (Button) Cliquez ici pour continuer

Maintenant mes cours contiennent des modules, eux-mêmes subdivisés en séquences.

Créer un nouveau cours

Dans le tableau de bord WordPress, cliquer sur « add new » cours.

On donne un titre et un contenu comme avec un article WordPress classique. Voici les spécificités :

Choix du type de cours

  1. Ouvert : le cours est gratuit et en plus il est ouvert à tous, sans inscription préalable.
  2. Fermé : personne ne peut s’inscrire à ce cours.
  3. Gratuit : le cours est gratuit mais il n’est accessible qu’aux personnes qui s’y sont inscrites.
  4. Achat unique : l’accès au cours se paie en une fois.
  5. Récurrent : l’accès au cours se paie en plusieurs fois.

Pour un premier essai de cours gratuit en ligne accessible aux personnes qui se sont inscrites, je choisis « gratuit ».

Le résumé du cours

Il n’y a pas de champs « extrait » pour les cours. Mais on peut placer du contenu entre [[visitor]] et [[/visitor]] pour qu’il soit visible de tous. On peut ainsi mettre un texte de vente à destination des visiteurs, avec une vidéo par exemple. Si le visiteur s’inscrit, il verra le reste du contenu.

Si on veut un texte spécifique aux personnes inscrites, on le met entre [[student]] et [[/student]].

Où voir la liste des cours

Dans n’importe quelle page, on peut insérer un shortcode [[ld_course_list]] qui affichera la liste des cours.

Ajouter des modules

Dans le support LearnDash, ce sont des « lessons ».

Dans l’onglet « module options » définir dans quel ordre seront présentées les leçons : par date de création, par titre (ordre alphabétique) ou par ordre de menu. Dans ce dernier cas, l’ordre est défini dans le champs « attributs » / « ordre » dans la colonne de droite à côté d’un module en cours d’édition. On met 1 à la première leçon, etc…

Les réglages des modules

  • Cours associé : le cours dans lequel s’inscrit ce module
  • Sample module : si la case est cochée, ce module est visible de tous, comme un « échantillon » pour des gens qui voudraient essayer avant d’acheter.
  • Make module visible X days after sign-up : utile si l’on veut imposer un délai entre deux modules.
  • Make module visible on specific date : intéressant pour des formations mélant du présentiel et de la formation à distance.

Ajouter des séquences

On n’est pas obligé de créer des séquences. C’est cependant une bonne idée pour que l’apprenant ait l’impression d’avancer et pour bien structurer chaque module en « capsule » facile à intégrer dans son planning et dans son cerveau.

Créer des quiz

On peut créer des quiz pour des modules ou des séquences. En principe tant que l’apprenant n’a pas atteint le niveau minimum requis il ne peut pas passer à l’étape suivante.

Liens utiles (en anglais…)

Sur les shortcodes de LearnDash : http://support.learndash.com/articles/course-shortcodes/

Note : La traduction en français doit être revue…

Lire un flux vidéo d’une webcam avec un Raspberry Pi

Lire un flux vidéo d’une webcam avec un Raspberry Pi

Je veux qu’un Raspberry Pi lise et serve un flux vidéo issu d’une caméra IP (en wifi ou ethernet). J’ai choisi d’installer motion car il me permettra de détecter les mouvements puis de déclencher des alertes. Dans cet article, j’explique seulement comment installer motion puis visualiser le flux vidéo sur une page web, en streaming.

Ce qu’il faut

  • un Raspberry Pi (un B+, avec une carte sd qui contient tout ce qui a été créé dans l’article Mise en service d’un Raspberry Pi – ie pour moi avec l’image radio-pi-2016-06-10-8h.img et Raspbian Jessie)
  • une caméra web, pour moi connectée par cable ethernet, une Foscam FI8905W, avec une IP fixe).

Changer le nom du Pi et vérifier

regarder l’adresse IP du pi sur le routeur local (pour moi 192.168.1.16)

se connecter au pi en ssh et changer son nom (hostname)

ssh root@192.168.1.16
raspi-config

puis dans 9- advanced options, aller dans A2 hostname et renommer le Pi (pour moi, « nautilus »). Finir et accepter le Reboot

Maintenant je peux me connecter à ce pi avec ssh root@nautilus .

Noter que je me connecte en root, ce qui n’est pas conseillé. Mais ça m’évite de taper « sudo  » devant chaque commande !

Installer motion

on installe des utilitaires nécessaires puis motion.

apt-get install -y libjpeg62-turbo libjpeg62-turbo-dev  libavformat-dev  libavcodec-dev  libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5
apt-get install motion

apt-get update
apt-get upgrade

Ca prend pas mal de temps (plusieurs minutes).

Pendant ce temps, préparer la page html qui servira à débugger et vérifier.

Préparer une page html de débogage et vérification

Créer un fichier page-test.html sur un PC, qui contient le code suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>premier test d'affichage caméra</title>
<link href="A-style.css" rel="stylesheet" media="all" type="text/css"> 
</head>
<body>
<H1>Tableau de bord maison</h1>

<section class="streaming">
<h3>streaming caméra IP Foscam FI8905W</h3>
<p>en continu - directement de la caméra (IP fixe 192.168.1.201)</p>
<img name="FoscamCamera" src="https://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD" width="600" height="450" alt="Live Feed" style="background-color: #009999" />
</section>

<section class="streaming">
<h3>streaming caméra IP Foscam FI8905W via pi nautilus</h3>
<p>en continu - directement à la caméra</p>
<img src= "http://nautilus:8081/?action=stream" width="640" height="480" title="Camera devant maison"/>
</section>

</body>
</html>

Evidemment, il faut remplacer USER et PWD par les bons codes de la caméra utilisée.

Dans le même répertoire, placer un fichier A-style.css

html, body {
 background-color: #d8da3d ;
 margin: 0;
 padding: 0;
 }
body {
  padding-left: 11em;
  font-family: Georgia, "Times New Roman",
        Times, serif;
  color: purple;
  background-color: #d8da3d 
}
 
h1 {
	font-family: Helvetica, Geneva, Arial,
        SunSans-Regular, sans-serif }

a:link {
	color: blue 
}

a:visited {
	color: purple 
}

Et maintenant, dans l’explorateur de fichiers, cliquer à droite sur page-test.html et choisir ouvrir avec votre navigateur favori (chrome pour moi).

On voit le flux vidéo de la caméra en direct mais évidemment pas celui qui passe par le pi puisqu’on n’a pas encore fini d’installer et de configurer motion.

page web de test et deboguage de motion sur Raspberry Pi

page web de test et deboguage de motion sur Raspberry Pi

Evidemment, si la première partie de la page n’affiche pas le flux vidéo de la caméra, chercher comment régler la caméra. Pour moi ça fonctionne avec une caméra Foscam FI8905W réglée comme suit :

  • adresse IP fixe 192.168.1.201
  • un administrateur (il faudrait sans doute que ce soit seulement un visiteur pour limiter les risques) nommé USER avec mot de passe PWD
  • firmware version 11.35.2.63
  • Device Embeded Web UI Version 2.4.20.11

Il est impératif de vérifier que http://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD permet bien la visualisation du flux vidéo provenant de la caméra. Sinon la configuration de motion ne fonctionnera pas !

installer motion comme un « service »

Redémarrer le pi avec init 6  ou reboot .

On veut que motion démarre en même temps que le Pi . Pour cela motion doit être installé comme un service.

Dans /etc/default/motion  (attention si vous n’utilisez pas Raspbian Jessie, je crois que c’est un autre répertoire), modifier la ligne suivante (no devient yes) :

start_motion_daemon=yes

Pour donner les bons droits d’accès aux fichiers et répertoires nécessaires à motion (les fichiers et répertoires sont ceux qui sont définis dans motion.conf) :

# /etc/motion/motion.conf et thread_.conf en 775 et propriétaire root/motion
chown -R root:motion /etc/motion/
chmod -R 775 /etc/motion/   #664 will not work when motion runs as a service

# /usr/bin/motion : 755
chmod 755 /usr/bin/motion

#var/run/motion (pour motion.pid)
mkdir /var/run/motion
touch /var/run/motion/motion.pid
chmod 755 /var/run/motion/motion.pid

#/home/al/motion/ en niveau 777 et propriétaire root / motion 
# dans /home/al/motion/ créer le fichier motion.log en niveau 777 
# thread0.conf (foscam) : /home/jf/motion/log/foscam 
# thread1.conf (tablette) : /home/jf/motion/log/galaxy 
mkdir /home/jf/motion 
mkdir /home/jf/motion/log 
mkdir /home/jf/motion/log/galaxy 
mkdir /home/jf/motion/log/foscam 
touch /home/jf/motion/log/motion-log.log 
chown -R root:motion /home/jf/motion/ 
chmod -R 755 /home/jf/motion/ 
chmod 777 /home/jf/motion/log/motion-log.log

Redémarrer le pi avec init 6  ou reboot .

Maintenant, on doit voir motion parmi tous les services en cours de fonctionnement, avec un « + » devant :

service --status-all

Une liste de services s’affiche, en ordre alphabétique. Lorsqu’il y a [+] devant le service est démarré, sinon il y a [-] devant.

Raspberry Pi (jessie) avec Motion comme un service

On voit dans cette copie d’écran que motion est démarré.

et si on veut voir le statut de motion

service motion status –l

Logiquement il y a des lignes en rouge, en particulier [ALR] [VID] vid_v4lx_start: Failed to open video device /dev/video0: . C’est normal puisqu’on n’a pas configuré motion.

Dans ce qui suit, on utilisera les commandes suivantes pour arrêter, démarrer ou redémarrer le service motion :

service motion stop
service motion start
service motion restart

Maintenant, il nous reste à configurer motion.

configurer motion

Nous voulons que motion lise le flux vidéo de la caméra à l’adresse IP 192.168.1.201 et qu’il autorise l’accès par un appareil sur le réseau.

Note si on a plus d’une caméra, il faut régler motion.conf et ajouter autant de fichier thread.conf qu’il y a de caméra : voir les précisions (en anglais) de l’auteur de motion ici. Tout à la fin de motion.conf, il y a des instructions aussi.

J’ai installé de cette façon une deuxième caméra à partir d’une vieille tablette android : une caméra IP avec une vieille tablette android ?

Avant de modifier /etc/motion/motion.conf, en faire une copie qu’on appellera par exemple motion.conf.OLD. motion.conf doit avoir des droits d’accès en 664.

Editer motion.conf et régler les lignes comme suit, dans l’ordre du contenu du fichier (pour moi This config file was generated by motion 3.2.12+git20140228 , ça m’indique la version de motion pour lesquelles cette configuration fonctionne).

Pour mieux comprendre les options de réglages que l’on a, voir le wiki de l’auteur de motion, ici.

daemon on

logfile /home/jf/motion/log/motion-log.log
log_level 6 # on le laisse à ce niveau par défaut pour l'instant

v4l2_palette 8    # 17 ne marche pas correctement

width 640 #320 # lié à la caméra pour moi 640
height 480 # lié à la caméra
framerate 2 #2 image par seconde

# pour netcam_url, remarquer le ';' devant et le supprimer ! 
netcam_url http://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD

; netcam_userpass value # laisser en commentaire avec ; devant
netcam_keepalive on
ffmpeg_output_movies on

; si on ne commente pas, erreur [0] [ALR] [ALL] conf_cmdparse: Unknown config option "sdl_threadnr"
; erreur pas grave mais remplit le fichier log
# sdl_threadnr 0 

target_dir /home/jf/motion/log  # Target base directory for pictures and films

# on utilise la commande http qui fonctionne en direct dans notre page web de déboguage
stream_port 8081

stream_localhost off   # permet l'accès en local

webcontrol_port 8085

webcontrol_localhost off   # on bloque l'accès

Ensuite on redémarre motion avec service motion restart . Puis Puis service motion status -l  nous indique si tout va bien.

Motion bien configuré sur Raspberry Pi

Tout va bien mais erreur Unknown config option « sdl_threadnr ». Je n’ai pas trouvé comment la résoudre et ça ne paraît pas géner le fonctionnement de motion.

Tester le bon fonctionnement

Si le flux de la caméra ne s’affiche pas correctement dans la deuxième partie de notre page de test page-test.html , ouvrir /home/al/tmp/motion.log et identifier l’erreur qui bloque motion.

on peut aussi arrêter le service motion (service motion stop ) et taper seulement motion , qui affiche des indications d’erreurs éventuelles.

affichage (embed) du flux motion

Et maintenant ?

Dans l’article suivant de cette série , nous verrons comment configurer motion pour qu’il détecte les mouvements et alerte.

Un serveur Web sur mon Raspberry Pi

Un serveur Web sur mon Raspberry Pi

Je veux transformer mon Pi en serveur web qui mettra à ma disposition des informations issues de divers capteurs dans ma maison. La première étape (après l’installation du Pi décrite dans Mise en service d’un Raspberry Pi ) est d’installer Apache.

Installer Apache

Apache est un serveur de page web sous le protocope http. Pour l’installer, j’ai suivi les instructions ici sur le site officiel du raspberry Pi.

C’est rapide. Ensuite je tape http://nautilus/ (c’est le « hostname » de ce Pi) et je vois la page par défaut d’apache, servie par mon Pi localement.

installer PHP

Selon les mêmes instructions que pour l’installation d’Apache.

J’ai ensuite supprimé /var/www/html/index.html et je l’ai remplacé par /var/www/html/index.php , dans lequel j’avais ajouté le code suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
 <meta charset="utf-8">
 <title>premier test d'affichage caméra</title>
 <link href="A-style.css" rel="stylesheet" media="all" type="text/css"> 
</head>
<body>
<H1>test Raspberry Pi Web server</h1>

<p>Bonjour ! </p>

</body>
</html>

Et ça fonctionne !

Un clavier dans un projet arduino

Un clavier dans un projet arduino

J’ai un clavier à 12 touches qui ressemble beaucoup à celui ci, sur amazon.fr. Je fais un essai pour voir si j’arrive à en lire les touches lorsque je le connecte à un arduino Uno.

Identification des broches

keypad pour arduino le clavier présente 10 connecteurs mais il suffit de souder les 8 du milieu.

Ensuite, avec un multimètre réglé sur 2KΩ, on regarde quels fils se connectent lorsqu’on appuie sur une touche.

Numéroter les broches de 1 à 8 : de droite à gauche lorsqu’on voit le clavier.

Le clavier est matriciel : chaque touche correspond à une colonne et une ligne que j’ai numéroté arbitrairement comme dans ce schéma :

clavier matriciel arduino

Pour savoir quelle broche est connectée à quelle colonne ou ligne, il faut déterminer quels sont les associations de broches qui entrent en contact lorsqu’on appuie sur une touche. Ainsi si j’appuie sur 1, en voyant quelles broches entrent en contact, je déterminerai que l’une des deux est « row 1 » et l’autre est « col 1 ».

J’ai déterminé que la broche 7 et la broche 4 sont connectées lorsque j’appuie sur la touche 2. J’ai continué jusqu’à ce que j’ai assez d’informations pour identifier le rôle de chaque broche.

broche broche touche
7 4 2
7 3 5
7 2 8
7 1 0
8 1 *
6 1 #
1 1 D

J’en ai donc déduit que les broches correspondent à :

broche broche
1 Row 4
2 Row 3
3 Row  2
4 Row 1
5 Col 4
6 Col 3
7 Col 2
8 Col 1

Connexion à l’Arduino

test arduino et keypad

broche broche arduino
1 Row 4 8
2 Row 3 9
3 Row  2 10
4 Row 1 11
5 Col 4 4
6 Col 3 5
7 Col 2 6
8 Col 1 7

Sketch

La bibliothèque keypad.h permet de gérer facilement un tel clavier matriciel. Voir cet article sur Arduino Playground.

Ce sketch lit correctement chaque touche appuyée et l’affiche dans la console série :

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //rows 1 to 4
byte colPins[COLS] = {7, 6, 5, 4}; //columns 4 to 1

//initialize an instance of class NewKeypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
  Serial.println("Setup done");
}

Si j’appuie sur les touches 1, 2, 3, A, 4, 5, 6, B, 7, 8, 9, C, *, 0, # puis D, j’obtiens l’affichage suivant dans la console série.

Setup done
key : 1
key : 2
key : 3
key : A
key : 4
key : 5
key : 6
key : B
key : 7
key : 8
key : 9
key : C
key : *
key : 0
key : #
key : D

Tout fonctionne donc parfaitement.

Et maintenant ?

Si j’ai besoin d’utiliser un tel clavier sur un arduino, je sais maintenant comment faire !

essai de trois afficheurs LCD sur arduino Uno

essai de trois afficheurs LCD sur arduino Uno

Un collègue du FabLab de Quimper m’a prêté deux afficheurs LCD jamais utilisés. Ils devraient en principe fonctionner avec un arduino. J’essaie donc !

Les trois afficheurs

Deux afficheurs prêtés :

L’un comporte les indications suivantes : CLCD sur le contrôleur et GDM1604B sur l’afficheur. Il ressemble à ce produit de Lextronic (35.15 €), avec une fiche technique (pdf) et un manuel utilisateur chez ComFile.

L’autre : ALCD sur le contrôleur et PMC 2004E-SBLW ou PC-2004E6-2 Rev 1 sur l’afficheur. Il paraît correspondre à cet afficheur 2 x 16 caractères de Lextronic (27.5 €).

Les deux produits semblent conçus par Comfile pour les microcontrôleurs PicBasic. Je ne parviens pas à trouver d’information intéressante sur la façon de les connecter à un arduino et surtout de les commander via les contrôleurs.

Je décide donc d’utiliser un des afficheurs sans son contrôleur pour voir ce que l’on peut en faire.

Afficheurs achetés

J’ai également acheté un jeu de 5 afficheurs LCD très économiques : Ecrans LCD 16×2 HD44780 Controleur Retro-eclairage Bleu, sur amazon.fr, à 7.24 € les 5 (oui, les 5…)

Description d’un afficheur LCD

J’ai déconnecté le contrôleur ALCD de l’afficheur PMC 2004E-SBLW. Je me retrouve avec un afficheur pourvu de 16 broches males, numérotées de 1 à 16.

La page « Arduino – Hello World » indique que de nombreux afficheurs LCD à 16 broches sont compatibles avec le driver Hitachi HD44780 (ce qui est annoncé pour l’afficheur acheté, pas pour les deux prêtés). Un autre article sur codingcolor.com montre en photo les connecteurs.

Et l’afficheur acheté séparément contient aussi 16 broches.

Connexion des 16 broches de l’afficheur LCD

Pendant un bout de temps, les trois afficheurs affichent des carrés foncés mais pas le texte prévu… J’ai fini par me rendre compte que j’avais connecté DB11 à DB14 de l’afficheur sur les broches 4 à 1 de l’arduino et non 5 à 2….

Note : on peut remplacer le potentiomètre par un fil entre GND et la broche 3 de l’afficheur avec une résistance de 1 à 1.5 kΩ. Avec mon afficheur j’ai mis une résistance de 1 KΩ et l’affichage est très bien. 

Connexions à l’arduino

afficheur fonction arduino
1 VSS GND
2 VDD 5V
3 contraste potentiomètre
4 RS (register select) D12
5 R/W Read / Write GND
6 H/L enable D11
7 DB0 (data 0)
8 DB1 (data 1)
9 DB2 (data 2)
10 DB3 (data 3)
11 DB4 (data 4) 5
12 DB5 (data 5) 4
13 DB6 (data 6) 3
14 DB7 (data 7) 2
15 LED + (5V) rétro-éclairage 220 Ω puis 5V
16 LED – (GND) Résistance 220 ohm

schéma (frietzing)

Cablage Arduino Afficheur LCD

Sketch arduino (issu d’un exemple) : test-lcd-display-yves.ino

Et le résultat, pour les 3 afficheurs, avec le même sketch. La seule chose qu’il faut régler c’est le contraste avec le potentiomètre.

Mon afficheur LCD pas cher afficheur lcd prêté n°1 afficheur lcd prêté n°2

Et on voit que les deux derniers afficheurs sont faits pour 4 lignes, il faudrait modifier le sketch pour en tirer partie.

Affichage 7 segments pas cher sur arduino

Affichage 7 segments pas cher sur arduino

Après l’essai d’un afficheur 7 segments prêté par un collègue du FabLab de Quimper, j’ai acheté un afficheur vraiment pas cher (2.64€ livraison comprise) et je l’essaie.

L’afficheur 7 segments essayé

Il s’agit d’un afficheur de marque Toogoo, à 8 chiffres, avec un circuit intégré MAX7219 , disponible ici sur Amazon.fr pour 2.64 €.  

Mon objectif

Il s’agit simplement de vérifier que je sais le connecter à un arduino Uno puis vérifier que je parviens à afficher quelque chose avec. Je n’en ai pas encore l’utilité.

Connexion à l’arduino

Après lecture de quelques pages web, dont celle-ci (en anglais, tronixstuff), j’ai compris à quoi servaient les deux jeux de 5 connecteurs présents sur l’afficheur :

Description de l'afficheur 8 chiffres 7 segments avec circuit max 7219

Du côté gauche, on trouve les connecteurs qui seront reliés à l’arduino. Du côté droit, on trouve les broches qui permettent de relier d’autres afficheurs identiques en série.

Le circuit MAX 7219 gère jusqu’à 64 leds (soit 8 chiffres de 8 leds chacun avec le point). On peut chainer les afficheurs pour en mettre deux ou trois à la suite.

Pour cet essai, je ne connecte qu’un afficheur de 8 chiffres. J’utilise donc la sortie 5V de l’arduino pour l’alimenter. Mais attention, il est possible que ça ne soit pas faisable s’il y avait plus d’un afficheur, chaque led consommant environ 15 mA (pour du rouge).

Voici les connexions que je réalise :

afficheur arduino
VCC 5V
GND GND
D IN 2
CS 3
CLK 4

Programmation de l’afficheur

On utilisera la librairie ledcontrol, téléchargeable sur GitHub, pour les MAX 7219 ou 7221. Pour installer une librairie dans un arduino, voir cet article.

Utilisation de la librairie : cf cette page du site arduino.

Puis j’utilise un sketch exemple de cette librairie (LCDemo7segment). Je modifie simplement les broches utilisées (2, 4 et 3 au lieu de 12, 11 et 10) et ça fonctionne.

Le sketch utilisé : Max7219-7Segment.ino

Le résultat

led-7-segments-max-7219-resultat

Et maintenant ?

Je vais utiliser cet afficheur sur le NoRobo prochainement !

librairies arduino : comment les installer ?

librairies arduino : comment les installer ?

Les librairies (bibliothèques en bon français) sont du code qui simplifie l’utilisation d’un capteur, d’une fonctionnalité. Elles sont chargées dans l’arduino si nécessaire. Nous allons voir ici comment faire concrètement pour les charger.

Quand charger une librairie ?

erreur lorsqu'une librairie est manquanteDès qu’un sketch arduino contient une ligne ressemblant à #include « LedControl.h » , il appelle une librairie (ici la bibliothèque LedControl). Lors de la compilation préalable à la programmation de l’arduino, l’interface arduino vérifie que la librairie est bien disponible. Si ce n’est pas le cas, un message d’erreur s’affiche et l’arduino ne peut pas recevoir le sketch.

Il est donc nécessaire de mettre la librairie à disposition de l’IDE avant de lancer la compilation.

Comment faire ?

utilisation du gestionnaire de librairies

Le gestionnaire de librairies permet d’afficher la liste des librairies prêtes à l’emploi ou prêtes à installer. Gérer les bibliothèques dans l'interface arduino

Pour plus de précisions, voir ce document arduino.

Importation d’un fichier zip

Si je veux par exemple ajouter la librairie LedControl disponible ici sur GitHub, je clique sur le bouton vert « Clone or download » (1) puis sur « Download ZIP » (2) :

github : download a zip file

J’obtiens un fichier nommé « LedControl-master.zip ». J’ai deux possibilités : par l’interface arduino ou par l’ajout manuel d’un répertoire.

méthode par l’interface arduino

La plus simple est d’utiliser la fonctionnalité ‘ajouter la bibliothèque zip » de l’interface arduino.

Ajouter une librairie ZIP dans l'interface arduino

Je clique sur « ajouter la bibliothèque ZIP » puis je choisis le fichier LedControl-master.zip que j’ai téléchargé précédemment. La bibliothèque s’installe et devient visible dans le gestionnaire de bibliothèques.

méthode manuelle

Dans certains cas la bibliothèque contient de nombreuses versions et je ne veux pas toutes les installer. Par exemple, si je n’ai pas d’arduino Yun, je peux éviter d’encombrer mon ordinateur en l’installant.

Dans ce cas,

  1. fermer l’interface arduino ;
  2. dezipper le fichier téléchargé et y sélectionner le ou les répertoires que je veux réellement installer (Copier).
  3. coller ces répertoires dans le répertoire « user/ Documents\Arduino\libraries »
  4. redémarrer l’interface arduino, la ou les librairies sont maintenant disponibles.

commander des relais 220V avec arduino Nano et bluetooth

commander des relais 220V avec arduino Nano et bluetooth

Commander deux relais 220 V à partir d’un arduino Nano, avec un téléphone android connecté en bluetooth : c’est possible pour moins de 10 €. Voici le tutoriel complet.

Cet article est l’aboutissement d’un travail d’essais et recherches relatés dans des articles précédents :

Maintenant je fais la synthèse pour une réutilisation dans d’autres configurations.

Avant toute chose, RAPPEL : on travaille avec du 220V et les risques sont réels !

Attention Danger électrique

Commander deux relais 220V avec un arduino Nano

Le schéma de connexions :

relais arduino 5V - 220V lampes

Les photos du montage :

J’ai enfermé toutes les connexions 220 V dans une boîte en plastique. L’arduino (puis le module bluetooth) sont à l’extérieur de la boîte.

Le montage sécurisé dans une boîte

Photo du premier essai :

J’ai préféré brancher l’arduino sur une alimentation USB spécifique (pas mon ordinateur) et je me suis installée sur la terrasse. Noter que la boîte en plastique sécurise bien l’installation 220V.

Relais 220V Essai sécurisé

Le sketch arduino :

test-fanch-relais-new.ino, un sketch qui allume une lampe lorsque le signal envoyé par l’arduino est LOW.

Commander par bluetooth et smartphone Android

Le schéma de montage (côté faible tension – le cablage haute tension n’est pas modifié) est le suivant :

Schéma arduino Nano - relais 220V et bluetooth HC-05

Quant au sketch, c’est celui que j’ai utilisé précédemment avec deux relais plus gros, mais il y a une différence essentielle : l’allumage est réalisé lorsque l’arduino envoie un signal LOW et non pas HIGH comme avec les autres relais.

Notre nouvel algorithme est donc légèrement différent :

bool up = true;          // pas d'ordre de montée
bool down = true;        // pas d'ordre de descente

Si up est false ou down est false (il faut bouger le store)

   si up est false ET down est false 
     on a un big problème, le moteur va devenir fou
   sinon
     allumer ou éteindre selon la valeur de up ou de down

Le sketch qui fonctionne est celui ci : Relais-BT-V1-2016-06-05.ino

Le résultat :

Lorsque j’appuie sur le bouton « UP » de mon smartphone,

Le bouton "HAUT" est appuyé

la lampe « UP » s’allume !

La lampe "UP" est allumée

Et si j’allume les deux boutons à la fois, il ne se passe rien, tout comme s’ils sont tous deux éteints. Tout fonctionne donc correctement.

Et maintenant ?

En cas d’utilisation d’un autre modèle de relais, bien vérifier si c’est un signal LOW ou HIGH qui génère l’allumage.

Pour une utilisation définitive, il faudra réaliser un boîtier plus compact et plus sécurisé. On pourra s’inspirer des plans suivants :

On en profitera pour admirer cette belle boîte qui permet de transporter un arduino Uno et un breadboard sur 3dhubs.

Tout est prêt maintenant pour que Fanch puisse mettre son store chez lui en tant que prototype !

relais 5V / 220 V pas cher pour arduino

relais 5V / 220 V pas cher pour arduino

J’ai acheté quelques relais 220 V pa chers (2.11 €, livraison comprise) pour arduino. Une commande 5V en provenance de l’arduino déclenche l’ouverture ou la fermeture d’un contact 220V.

Description des relais achetés

Je les ai achetés à la boutique « Universal Color » sur Amazon.fr, au prix de 2.11 € l’unité (voir le produit ici). Le seul inconvénient est que le délai de livraison est de l’ordre de 3 semaines. J’ai vu ensuite qu’on trouve également ce relais double chez TiptopBoard ici pour un prix plus élevé, mais une livraison très rapide. L’avantage de TipTopBoards est qu’il y a un tutoriel d’utilisation, en général bien fait, pour la plupart des produits vendus. Malheureusement dans ce cas, le tutoriel n’est pas précis du tout…

Les relais sont des songle (R) srd 05VDC-SL-C. J’ai trouvé différentes sources d’information, mais aucune qui paraisse complète et fiable… :

How to Set Up a 5V Relay on the Arduino

Et aussi :

  • en espagnol, avec un schéma bien fait, pour les raspberry Pi ou arduino, ici
  • en français, mais pour alimenter des leds 5V, dans ce tutoriel.
  • Voir aussi cet article en anglais, qui semble suggérer que l’isolation n’est correcte qu’en enlevant le cavalier qui relie JD-VCC et VCC
  • La description sur ce site de vente en ligne est bien faite et claire. Un site à garder en mémoire car il parait bien documenté, avec des tarifs raisonnables.Un exemple avec des leds dans cet article en espagnol aussi.
  • et enfin, cet article qui paraît bien fait, en anglais, qui explique comment brancher une ampoule et la commander par un arduino.

Premiers essais pour comprendre

Comme je veux utiliser ces relais pour des applications 220V, il faut absolument que je comprennes comment fonctionnent ces relais et surtout comment on assure l’isolation totale entre les parties 220V et les parties basses tension.

Pour comprendre le principe général, je teste d’abord avec deux leds alimentée en 5V à partir de l’arduino Nano selon le schéma de connexion suivant (résistance 330 à 1000 ohm) :

relais vers deux led 5V

Le sketch utilisé est une variante du sketch utilisé dans un autre article sur des relais 220V plus chers (arduino et relais pour commander du 220 V).

/*
 * test moteur fanch 4/6/2016 
 * 
 * !!! NE PAS UTILISER AVEC UN MOTEUR
 * --- les deux relais peuvent être sur 1 simultanément dans cette version
 * !!!
 * 
 * Nouveaux relais pas chers
 * Le relais met sur ON lorsqu'il ne reçoit pas d'impulsion....
 * arduino Nano R3
 * 
 */
const int montee = 3;    // broche 3 pour le relais "montée" K1 / led Rouge
const int descente = 4 ;  // broche 4 pour le relais "descente" K2 / led verte

bool up = false;          // pas d'ordre de montée
bool down = false;        // pas d'ordre de descente

char etat = 'S'; // single quote, it's not a constant...



void setup() {
  // initialize digital pin 13 as an output.
  pinMode(montee, OUTPUT);
  pinMode(descente,OUTPUT);

  // démarrer le port série
  Serial.begin(57600);
  Serial.println("Setup fait" );  

  // vider le buffer RX
  // while (Serial.available())  Serial.read();  
}

// the loop function runs over and over again forever
void loop() {

    Serial.println("------------------" );
    Serial.print("UP " );
    action_store(true, false);   // single quote for string

    Serial.print("DOWN " );
    action_store(false, true); // single quote for string
    
    Serial.print("BIG PROBLEME " );
    action_store(true, true);    // single quote for string

    Serial.print("Stand By " );
    action_store(false, false); // single quote for string  
 
}


void action_store(bool sens1, bool sens2) {

  bool red = sens1 ;
  bool green = sens2 ;
  Serial.print(" | RED : ");
  Serial.print(red);
  Serial.print(" | GREEN : ");   
  Serial.println(green);
   
  motor_go(montee, sens1) ; 
  motor_go(descente, sens2) ;
  
  delay(3000) ;   
}

void motor_go(int sens, bool action ) {
    
    digitalWrite(sens, action);     // actionne le moteur "sens"
    etat = sens ;
}


Ce sketch m’a permis de comprendre comment brancher la sortie des relais :

relais-sorties

C = Common, c’est l’arrivée de courant pour l’équipement à allumer ou éteindre. Dans ce schéma en 5V, mais peut aller jusqu’à 220V et 10A.

NC = « normally closed ». Le contact NO est OUVERT lorsqu’on envoie un signal HIGH de l’arduino, fermé lorsque le signal est à LOW

NO = « normally open ». Le contact NC est FERME lorsqu’on envoie un signal HIGH de l’arduino, ouvert lorsque le signal est à LOW

J’ai donc connecté les leds à NO pour qu’elles soient actionnées lorsque l’arduino Nano envoie un signal.

ATTENTION : lorsque l’arduino est éteint, les deux leds ne sont pas alimentées avec ce schéma, mais un test au multimètre montre que le contact est établi entre C et NO, que je laisse le jumper ou non, alors que le contact entre C et NC est bien ouvert. Si je branche les moteurs comme ça, ils vont se retrouver en marche lorsque l’arduino sera éteint…

Le rôle du jumper….

J’ai lu dans plusieurs articles que le jumper JD-VCC vers VCC doit être enlevé lorsqu’on veut isoler parfaitement les deux réseaux, l’un haute tension et l’autre basse tension.

Je crois comprendre à quoi il sert : on peut alimenter le relais avec 5V indépendants de l’arduino si on le souhaite. Dans ce cas, on enlève le jumper et on connecte JD-VCC à du 5V indépendant et GND juste à côté au neutre de l’alimentation indépendante.

Mais avant de tester en 220V, il faut que j’en sois certaine… Je dois vérifier qu’il n’y a pas de contact entre les deux côtés du relais

Essai avec des leds alimentées en 12V

Visiblement le jumper a une fonction lorsqu’on utilise une alimentation indépendante pour les équipements relayés. Je fais donc des essais avec une alimentation 5V.

Je vais alimenter le côté des leds par une alimentation spécifique 12V, en mettant les bonnes résistances, je ne devrais pas les casser.

De l’autre côté l’arduino sera en 5V via USB.

Et je testerai d’enlever le cavalier et d’alimenter le relais avec du 5V indépendant.

relais et led alimentées en 12V

Ce montage me sert à faire des tests. L’alimentation 12V étant toujours en route, que se passe-t-il quand :

  • j’enlève le cavalier entre JST-VCC et VCC
  • Je débranche l’alimentation de l’arduino

Lorsque l’arduino est éteint : les led sont toutes deux allumées

Lorsque le cavalier est enlevé : le relais fonctionne (on voit les led de K1 et K2 s’allumer et s’éteindre selon la séquence) mais les leds restent allumées en permanence…

Lorsque le cavalier est enlevé, si je place le +5V de l’arduino sur le JST-VCC ou le VCC de cette zone, avec le GND de l’arduino sur le GND de cette zone, c’est comme si j’avais placé le cavalier.

Conclusion sur un branchement correct en 12V

Le schéma correct de fonctionnement est le suivant (noter que les alimentations des leds sont maintenant connectées à NC et pas NO :

relais et alimentation 12V correctement branchée

Quant au sketch, il fonctionne correctement avec le contenu suivant :

/*
 * test moteur fanch 4/6/2016 
 * 
 * !!! NE PAS UTILISER AVEC UN MOTEUR
 * --- les deux relais peuvent être sur 1 simultanément dans cette version
 * !!!
 * 
 * Nouveaux relais pas chers
 * Le relais met sur ON lorsqu'il ne reçoit pas d'impulsion....
 * arduino Nano R3
 * 
 */
const int montee = 3;    // broche 3 pour le relais "montée" K1 / led Rouge
const int descente = 4 ;  // broche 4 pour le relais "descente" K2 / led verte

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(montee, OUTPUT);
  pinMode(descente,OUTPUT);

  // démarrer le port série
  Serial.begin(57600);
  Serial.println("Setup fait" );  

  // vider le buffer RX
  // while (Serial.available())  Serial.read();  
}

// the loop function runs over and over again forever
void loop() {

    Serial.println("------------------" );
    Serial.print("DOWN - VERT ON " );
    action_store(true, false);   // single quote for string

    Serial.print("UP - ROUGE ON " );
    action_store(false, true); // single quote for string
    
    Serial.print("Stand By - Rouge et vert OFF " );
    action_store(true, true);    // single quote for string

    Serial.print("BIG PROBLEME - Rouge et vert ON " );
    
    // action_store(false, false); // Do not run this if le moteur du store est connecté !  
  Serial.println(" DO NOTHING !");
}


void action_store(bool red, bool green) {

  Serial.print(" | RED : ");
  Serial.print(red);
  Serial.print(" | GREEN : ");   
  Serial.println(green);
   
  motor_go(montee, red) ; 
  motor_go(descente, green) ;
  
  delay(3000) ;   
}

void motor_go(int sens, bool action ) {
    
    digitalWrite(sens, action);     // actionne le relais "sens"

}


Noter que la led rouge s’allume lorsqu’on lui envoie (FALSE / 0) et s’éteint lorsqu’on lui envoie (TRUE / 1).

Noter aussi que j’ai fait en sorte que le cas « big problem » n’allume pas les led pour qu’on ne risque pas de bousiller le moteur des stores si on essaie avec ce sketch.

Dans la console série – réglée à 57600 bauds – on lit en boucle le texte suivant :

——————
DOWN – VERT ON | RED : 1 | GREEN : 0
UP – ROUGE ON | RED : 0 | GREEN : 1
Stand By – Rouge et vert OFF | RED : 1 | GREEN : 1
BIG PROBLEME – Rouge et vert ON DO NOTHING !

Et la led verte s’allume bien lorsque red est à 1 et green à 0

Essais avec du 220V

Attention Danger électrique

Maintenant j’essaie avec deux ampoules branchées sur du 220 V !

Mesures de sécurité

Dessiner le schéma de fonctionnement général, en mettant toutes les hautes tensions d’un côté, bien séparées des basses tensions.

relais arduino 5V - 220V lampes

Dessiner un schéma utilisant des connecteurs type domino pour simplifier le changement d’éléments commandés.

relais arduino 5V - 220V lampes

Mettre tous ces composants dans une boîte. Fermer la boîte avant de brancher la prise et l’arduino.

Bilan :

Ca fonctionne correctement, je ne me suis pas électrocutée et je n’ai pas fait sauter les fusibles de la maison !

Pour voir les photos du montage tel que schématisé ici et pour aller plus loin (commande bluetooth), c’est dans un prochain article.

utiliser un arduino nano

utiliser un arduino nano

J’ai acheté un arduino nano V3, un tout petit arduino qui ne coûte que 3.66 €, livraison comprise (sur amazon ici) ! Pour ce prix, il est livré avec un cable USB et des connecteurs femelles sont soudés sur la carte, c’est incroyable !

Voici un descriptif de son fonctionnement, très simple.

Fiche descriptive

Voir sur le site arduino, en anglais.

 

Programmation

L’arduino nano se programme comme un arduino uno classique : on connecte le cable usb fourni à l’ordinateur et à l’arduino puis on ouvre l’interface IDE arduino.

Il suffit de définir le type de carte (dans outils) comme arduino nano. On peut ensuite téléverser un programme dans l’arduino nano. J’ai utilisé l’exemple blink et j’ai bien une led qui clignote sur l’arduino nano (en rouge). Facile !

Connexions

Les connexions sont semblables sur le nano et sur le uno, mais moins accessibles sur le nano.

Voici la vue générale :

arduino nano - vue générale

Et le détail des différents connecteurs :

arduino nano : les 30 broches

Et maintenant

Je peux utiliser un arduino nano comme j’aurais utilisé un arduino Uno !