Pilotage d'afficheurs 8 segments avec le MAX7219 avec Arduino

1407906-1360x768-[DesktopNexus.com]_thumb[32]
Le MAX7219 est un contrôleur série d'afficheur 8 segments. Il permet de contrôler jusqu’à 8 afficheurs de 8 segments, donc 64 LEDs. On peu également les coupler pour contrôler un nombre infini de LED.
Il est très facilement utilisable avec les cartes Arduino grâce à la bibliothèque
LedControl.
Ce contrôleur fonctionne uniquement avec les afficheurs à cathode (borne -) commune.
Cette puce est trouvable à presque 10€ mais il existe des copie fonctionnant parfaitement qui se vendent environs 2€ sur internet (c'est ce que j'ai choisi).

La puce est de type traversante, donc parfait pour une breadboard et possède 24 pins. Voici le schéma :


Elle peut donc s'utiliser facilement avec une résistance de 10Kohms et un condensateur de 0,1µF.
Notez que la résistance détermine le courant traversant l'ensemble des LEDs, il peut donc être utile de légèrement la modifier, mais 10Kohms est une bonne valeur pour commencer.
Sachez que lorsque que vous tenez un afficheur 8 segment à l'endroit, la borne 1 est celle en bas à gauche et la dernière borne est celle en haut a gauche.

Je me suis donc fabriqué une petite carte regroupant tout ces composants et des connecteurs bien pratiques.



Pour l'utiliser avec Arduino, il vous faut :
  • un Arduino (évidement)
  • l'IDE d'Arduino installé sur votre ordinateur
  • un ou plusieurs afficheur 8 segments à cathode commune (ou une matrice de LED)
  • la bibliothèque LedControl installé: playground.arduino.cc/Main/LedControl

Voyons un peu le code :
#include "LedControl.h"   //on ajoute la bibliotheque LedControl

//LedControl afficheur1=LedControl(DataIn,CLK,LOAD,nombre de MAX7219);
LedControl afficheur1=LedControl(12,11,10,1);           


// prises de l'arduino sur lesquelles est branche le contrôleur.

void setup() {
  afficheur1.shutdown(0, false);  // allumer l'afficheur
  afficheur1.setIntensity(0, 15);  // regler la luminosite au maximum
  afficheur1.clearDisplay(0);   //vider l'afficheur

}

void loop() { 
  //afficheur1.setDigit(puce max7219, afficheur, nombre, point);
  afficheur1.setDigit(0,0,8,false);   


//on affiche un 8 sur le premier afficheur du premier MAX7219 avec le point décimal éteins
  afficheur1.setDigit(0,1,1,true);   


//on affiche un 1 sur le deuxième afficheur du premier MAX7219 avec le point décimal allume

}



Voici le résultat, on a bien le 8, puis le 1 et enfin le point décimal :








Quelques liens :



Une horloge sur bus I2C avec Arduino

1407906-1360x768-[DesktopNexus.com]_thumb[32]
Si votre arduino a besoin de se souvenir de l'heure qu'il est, et ce même après l'avoir débranché, vous avez besoin d'une RTC (real time clock ou horloge temps réel).
Le circuit RTC le plus répandus est le DS1307 et ce n'est pas pour rien; il est très simple, se branche sur bus I²C et ne coute que 1€ chez la plupart des vendeurs.

Le circuit DS1307 possède 8 pattes, mais une n'est pas utile, il s'utilise avec deux résistances de pull-up de 10kohms, un cristal à 32 768 kHZ et en option une pile de +3v de type CR2032.

Le SDA est la borne A4 de l'arduino et le SCL la borne A5.
Vous pouvez bien évidement acheter des modules tout fait mais je ne trouve pas ça marrant donc je me suis soudé moi-même le petit circuit en rajoutant un condensateur de 0.1µF entre le +5v et le GND.

Ensuite pour contrôler ça avec Arduino, j'utilise une librairie RTC classique : rtc-library.rar
Voici un exemple de code Arduino :

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
  Serial.begin(9600);

  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("Le RTC ne marche pas");
    // mise à l'heure :
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }


}

void loop () {
  DateTime now = RTC.now();

  Serial.print(now.year(), DEC);   //on affiche la date et l'heure sur le port série
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  Serial.print(" depuis 1970 = ");
  Serial.print(now.unixtime());
  Serial.print("sec = ");
  Serial.print(now.unixtime() / 86400L);
  Serial.println("jours");


  Serial.println();
  delay(1000);
}



Une petite horloge que j'ai monté :










Quelques liens :







Ngrok - Ouvrir facilement des ports vers Internet

1407906-1360x768-[DesktopNexus.com]
Si vous avez des logiciels disposant d’une interface web comme un contrôleur de téléchargement bittorrent par exemple ou même un simple serveur http et que vous voulez y accéder n’importe où dans le monde sans pour autant avoir à les installer sur un serveur avec un nom de domaine, alors testez ngrok.
overview
ngrok permet d'exposer un serveur local à internet, il suffit que lui indiquer sur quel port le serveur fonctionne. Mais ce n’est pas tous car le logiciel fonctionne avec un service web qui vous permet d’attribuer une url du type xxx.ngrok.com à vos services web et même de placer un mot de passe d’accès à ces pages.
Le logiciel est disponible sur Windows, Linux et MacOS et il fonctionne en ligne de commande, je vais un peu vous expliquer comment l’utiliser sous windows.
Commencez par télécharger ngrok : https://ngrok.com/download puis extrayez l’archive dans un dossier comme C:\Program Files\Ngrok
Ensuite enregistrer vous sur le site, ce n’est pas obligatoire mais permet de nombreuses choses intéressante comme de réserver un nom de domaine du type xxx.ngrok.com : https://ngrok.com/signup
Comme je vous l’ais dit ce logiciel fonctionne en ligne de commande donc n’essayez pas de lancer le .exe comme ça, cela ne donnera rien.
En effet pour l’utiliser vous devez créer un fichier de commande .bat, cela se fait simplement avec le bloc note ou mieux notepad++
Un fois ouvert il faut commencer par ce placer dans le dossier où nous avons extrait ngrok tout à l’heure, sur la première ligne on entre donc : cd C:\Program Files\Ngrok
Votre fichier .bat sait donc où se trouve le logiciel ngrok, maintenant lançons le pour ouvrir le port 80 par exemple, on note donc sur la deuxième ligne : ngrok 80
2013-09-26_193713
Et voila, si vous enregistrer ces deux lignes dans un fichier .bat et le lancez, vous verrez une fenêtre de console avec votre url du type “3a4bfceb.ngrok.com” affiché. Maintenant voyons comment personnalisez un peu cette url.
Rendez-vous sur https://ngrok.com/dashboard puis copier votre “token”, cette liste de caractères permet de réserver des nombre de domaine.
token
Voici notre exemple avec cette modification :
cd C:\Program Files\Ngrok
ngrok -authtoken votretoken -subdomain votreUrl 80
Remplacez évidement “votretoken” par votre token et “votreUrl” par la valeur voulue, exemple : pour pouet.ngrok.com, mettez pouet.
Comme vous l’aurez peut être compris il suffit d’ajouter des arguments entre ngrok et le port. En voici un autre pour mettre un mot de passe à la page : -httpauth "utilisateur:mot de passe"
2013-09-26_193835
Et voilà, personnellement j’utilise ce logiciel sur mon serveur pour plusieurs tunnel :

La photorésistance

3-6b

Qu'est-ce qu'une photorésistance ?
Les photorésistances sont des senseurs qui permettent de détecter la lumière.
Fondamentalement, les photorésistances sont des résistances dont la valeur résistive (en ohms Ω) change en fonction de la quantité de lumière qui atteint le capteur (la partie en serpentin sur le dessus).

  • Lorsqu'il fait sombre, le senseur ressemble à une grande résistance (jusqu'à 10MΩ)
  • Lorsque le niveau lumineux augmente, la résistance diminue.
Montage avec une carte Arduino
La façon la plus facile de mesurer un senseur résistif est de connecter une borne sur l'alimentation et l'autre sur une résistance Pull-Down (elle-même raccordée à la masse).
On raccorde ensuite le point de connexion entre "la résistance et la photorésistance" sur une entrée analogique d'un microcontrôleur comme Arduino (voir ci-dessous).

461138photores


Exemple de code Arduino
Le programme permet d'allumer une LED uniquement lorsque l'ensoleillement est suffisant.

const int led = 7; //led sur la prise 7
int photocellPin = 0; // La photorésistance raccordée sur la PIN A0
int photocellReading; // Contient la valeur du senseur
int ensoleillement; // valeur de l'ensoleillement sur 100


void setup() {
pinMode(led, OUTPUT); //la led est une sortie
digitalWrite(led, LOW); //on éteint la led
}

void loop() {

photocellReading = analogRead(photocellPin); //lecture du capteur de lumière qui nous donne une valeur entre 0 et 1023
ensoleillement = map(photocellReading, 0, 1023, 0, 100); //nous transformons les valeurs de 0-1023 vers 0-100

if(ensoleillement > 75)
{
digitalWrite(led, HIGH); //on allume la led
delay(5000);
}
else
{
digitalWrite(led, LOW); //on éteint la led
delay(5000);

}


}

Automatiser votre vie sur internet

Slide
ifttt est un service web qui permet de faire le lien entre deux autres services et d'automatiser le tout. ifttt veut dire "If This Then That" ce que l'on pourrait traduire par : S'il se produit cela, alors fait cela.
Ce service propose par exemple de sauvegarder toute photo facebook sur laquelle vous êtes taggué dans votre dropbox ou encore d’envoyer dans Instapaper tout les post de Google reader que vous avez mis en favoris.
2013-02-09_211652
Il intègre en effet tout un tas de services web comme Gmail, Dropbox, Instapaper, Facebook, Twitter, Instagram, Evernote, Foursquare, Google reader, Youtube et bien d’autres…
2013-02-09_211854
Cela fonctionne sur un systèmes de “Task” que vous pouvez programmer comme bon vous semble.

Comment créer une Task ?

Il faut savoir que tout les services ont leurs spécificités. Pour créer une Task  il faut assigner une action au “this” (le déclencheur).
this
Vous sélectionnez donc un service parmi les “Trigger channel”, les déclencheurs.
fb_01
Dans notre exemple le service sera Facebook et le déclencheur sera lorsque quelqu’un vous tague sur une photo. J’ai choisi celui mais il y a bien sur d’autres option comme le fait que vous mettez en ligne une nouvelle photo ou le faite que vous ayez des notifications.
Une popup apparaîtra ensuite vous demandant d’autoriser ifttt à utiliser votre Facebook pour regarder toutes les 15 minutes si l’on vous à tagué.
Ensuite il s’agit de choisir un service cible (le “that” qui est l’action à réaliser).
trigger
Je choisi donc ici dropbox par exemple. Il faut donc configurer l’automatisation que nous venons de créer. Avec dropbox il faut régler le dossier dans lequel sera enregistrer la photo dans notre exemple.
action-fields
Je viens donc de créer une Task qui va télécharger dans mon dossier dropbox toute les photos sur lesquelles on va me taguer (cela ne marche pas pour les anciennes). Sachez qu'une Task s'exécute toute les 15 minutes.
Si vous le désirer vous pouvez partager vos Task, cela ce fait en les transformant en Recipe (recette).
recipeize

Quelques exemples de Task :

Je vous partage quelques recettes que j’ai trouvé sur le net :
1) Celle que nous venons de créer avec facebook et dropbox : http://ifttt.com/recipes/15
2) Automatiquement envoyer un message à vos nouveaux followers sur twitter : http://ifttt.com/recipes/32
3) Envoyez sur Instapaper les posts Google Reader que vous avez marqué comme favoris : http://ifttt.com/recipes/178
4) Envoyer toutes vos photos Instagram sur un album Facebook : http://ifttt.com/recipes/56
Vous pouvez donc automatiser tout un tas de chose ce qui en fait un site vraiment intéressant pour le peu que vous compreniez l’anglais.

Lien : ifttt