Ardouino #4 Je voudrais moins de fils – Le Shield LCD

Bonsoir,

 

Le montage du LCD et du capteur de T° en test :

 

IMG_3831

 

Cela nous en fait des fils.

 

Il existe une solution assez simple : l’utilisation d’un shield LCD.

 

Le même montage avec le shield LCD  :

 

IMG_3833

 

Avouez que c’est quand même plus simple 🙂

 

Ce shield se pose directement sur la carte Ardouino, seul petit souci, il n’utilise pas les même ports digitaux que mon premier projet. Nous devons donc modifier le code .

Sur le Shield :

RS  en 8

E en  9

D4 en 4

D5 en 5

D6 en 6

D7 en 7.

 

Nous avions

// initialize the library with the numbers of the interface pins

 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 

Nous devons modifier en

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

 

Autre problème nous avions placé le Bus Onewire sur le port 7 qui est pris maintenant, je vais le placer sur le port 2. Nous devrons donc modifier aussi le code en remplaçant

#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire

 

Par #define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire

 

Voici le code complet du programme :

 

/*
LiquidCrystal Library – Hello World

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
#include <OneWire.h> // Inclusion de la librairie OneWire
#include <LiquidCrystal.h>

#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

OneWire ds(BROCHE_ONEWIRE); // Création de l’objet OneWire ds

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d’erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté

if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}

if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l’adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur

if (addr[0] != DS18B20) // Vérifie qu’il s’agit bien d’un DS18B20
return false; // Si ce n’est pas le cas on retourne une erreur

ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20

ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure

ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad

for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus

// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;

// Pas d’erreur
return true;
}

// setup()
void setup() {
Serial.begin(9600); // Initialisation du port série
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
}

// loop()
void loop() {
float temp;

// Lit la température ambiante à ~1Hz
if(getTemperature(&temp)) {

// Affiche la température
Serial.print(« Temperature : « );
Serial.print(temp);
Serial.write(176); // caractère °
Serial.write(‘C’);
Serial.println();

lcd.setCursor(2, 0);
// Place le curseur du LCD sur le 3ème caractère de la ligne 0 (la première)
lcd.print(« JPC Project »);
// Ecrir sur le LCD « JPC Project car cela fait joli :=) »

lcd.setCursor(2, 1);
//
lcd.print(« T : »);

lcd.setCursor(7, 1);
// print the number of seconds since reset:
lcd.print(temp); // Ecrire sur le LCD la T° mesurée
}
}

Arduino #3.3 Régler le contraste sur l’écran LCD

Bonsoir suite et fin des articles sur le LCD.

 

Si nous envoyons le code du précédent article sur l’arduino avec l’écran LCD connecté, nous aurons un bel écran bleu (ou d’une autre couleur) uniforme. Ne croyons pas que aucune donnée n’est envoyé à l’écran, mais il y a un problème de contraste.

 

Nous allons commencer par la méthode indiquée sur tous les sites internet. Soit utiliser un potentiomètre avec une valeur variant de 0 à  5 KOhm – Perso j’ai utilisé avec succès ce que j’avais sous la main soit un 50 KOhm (résistance variable) que nous relierons entre la masse et la borne VO.

 

Nous aurons donc ce schéma :

cc dd

Je trouve que je suis de plus en plus doué avec le logiciel Fritzing pour faire des schémas.

Vous pouvez le télécharger ici : http://fritzing.org/download/

 

Revenons au potentiomètre, si nous tournons le bouton, sur  0 Ohm nous aurons de beau rectangles lumineux sur l’écran, ensuite en le tournant doucement nous avons un affichage qui va apparaître – Si vous avez chargé l’exemple  HelloWorld la première ligne affichera Hello,World

La deuxième un décompte de seconde (la ligne avec millis dans le code ).

 

Cool nous avons un affichage d’un truc qui ne sert à rien, mais libre à nous de modifier le code pour par exemple afficher la T° .

 

Je trouve que sur mon tableau d’essai, ce potentiomètre prend beaucoup de place et est fort coûteux. J’ai donc  pris mon multimètre et mesuré la résistance. J’ai obtenu 2.5 KOhm. En remplaçant le potentiomètre par une résistance de  2.7 KOhm cela fonctionne très bien.

 

Je vous propose cette suite logique à mes yeux demain.

 

 

 

Arduino #3.2 Le câblage serie sur 4 sorties du LCD

Sur le site du Zero, vous trouverez certainement des références. J’ai un peu simplifié.

Ouvrons hello world dans la bibliothèque d’exemple lcd.

 

Ouvrir biblio lcd

 

Et voyons ce que cela raconte.

/*
LiquidCrystal Library – Hello World

Demonstrates the use a 16×2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints « Hello World! » to the LCD
and shows the time.

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(« hello, world! »);
}

void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}

 

Nous avons :

 

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

 

Cela nous donne les infos de connection.

 

(Je viens de mettre des couleurs et supprimé les masse inutiles des broches D0 – D1 – D2 – et D3 J’espère que ce sera plus clair.)

Noir : Masse

Rouge : +5 V

Jaune : Les fils du bus de données

Vert : les fils de selection du bus

 

Faisons les câblages.


aa bb

 

 

 

Nous retiendrons que nous devons faire une masse GND en dehors de la carte Il y a trop de fils cela nous aidera à avoir une circuit clair.

 

Nous avons donc en plus des 2 fils de la led de rétro- éclairage

4  fils de données sur les e/s digitales 2-3-4-5

 

2 fils de donnée sur les e/s 11-12 cela ressemble au code cité ci avant.

 

Arduino #3.1 Le rétro-éclairage du LCD

Bonsoir,

Comme promis nous continuons avec un écran LCD

J’ai choisi un écran de 2 lignes de 16 caractères car c’est pas cher, facile à trouver et que dans le logiciel arduino, il y a des exemples pour comprendre. Puis pour afficher une t° c’est bien assez.

Je vous propose de décomposer en trois articles, je crois que ce sera plus facile surtout pour les schémas de raccordement, il y a bien des fils à connecter.

Nous allons commencer par l’alimentation de la Led de rétroéclairage. Pas que ce soit difficile mais une mauvaise soudure m’a un peu cassé la tête. Voici le branchement.

Led-lcd cablage Led-lcd shema

Notez que vous pouvez la brancher en + 3,3v ou en 5 volts. Je pense utiliser un bouton et un port digital de l’arduino pour l’allumer ou l’éteindre nous verrons pour la suite du projet comment ou voir le site du Zero. L’idée est d économiser les piles.

Arduino #2 La sonde de T° DS18B20

Bonsoir,

 

Comme promis, je vais vous présenter un capteur de t° assez facile à et très simple à connecter sur la carte Arduino. Il peut mesurer des t° entre – 35°c et +125°c ce qui nous convient tant pour mesurer la t° dans une ruche que pour faire un termostat.

 

Il s’agit du DS18B20. Fabriqué par la firme Dallas qui fournit une bibliothèque Arduino pour exploiter ses capteurs. Vous trouvez cette bibliothèque ici :

http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip

 

Il vous reste juste à la dézipper et de l’inclure dans le code du programme. #include <OneWire.h>

 

(Attention de relancer le programme après l’installation de la bibliothèque)

 

Si vous désirez tout savoir sur ce capteur voyez la datasheet : http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

 

Maintenant ce qu’il faut :

 

Une arduino

Un DS18B20

Une résistance de 4,7 Kohm (Lors de mes tests j’ai utilisé sans problème une résistance de 10Kohm)

 

Quelques fils

 

Je suis fort paresseux donc je invite à visiter ce lien ou il y a des photos du montage et un code simple de lecture et d’affichage de la t° via la liaison série entre l’Arduino et l’ordinateur. Pourquoi refaire ce qu’un autre a déjà fait ?

 

http://skyduino.wordpress.com/2012/04/26/arduino-capteur-de-temperature-ds18b20/

 

L’étape suivante sera pour demain. Connecter un écran LCD et lui faire afficher la t°.

 

En attendant voici quelques photos IMG_3648 IMG_3649 IMG_3651 IMG_3652 IMG_3655 IMG_3657 IMG_3658

Le code du programme :

#include <OneWire.h> // Inclusion de la librairie OneWire

#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire

OneWire ds(BROCHE_ONEWIRE); // Création de l’objet OneWire ds

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d’erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté

if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}

if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l’adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur

if (addr[0] != DS18B20) // Vérifie qu’il s’agit bien d’un DS18B20
return false; // Si ce n’est pas le cas on retourne une erreur

ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20

ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure

ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad

for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus

// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;

// Pas d’erreur
return true;
}

// setup()
void setup() {
Serial.begin(9600); // Initialisation du port série
}

// loop()
void loop() {
float temp;

// Lit la température ambiante à ~1Hz
if(getTemperature(&temp)) {

// Affiche la température
Serial.print(« Temperature : « );
Serial.print(temp);
Serial.write(176); // caractère °
Serial.write(‘C’);
Serial.println();
}

 

}

 

 

Arduino #1 ou comment j’ai découvert ce bijou

Bonsoir à tous,

 

Après biens des semaines d’inactivité sur ce blog, je vous propose une série d’articles sur l’utilisation de l’Arduino dans nos ruches.

 

Vous allez me dire c’est sympa ton truc, cela n’est pas de la photo, et puis l’arduino c’est quoi et comment en es tu arrivé là ?

 

C’est assez simple et pour ceux qui me connaissent je suis un peu « piqué » d’abeilles. Je suis donc sur plusieurs forum et sur l’un d’eux je tombe sur un sujet sur la pesée de ruche. On y parle entre autre de la carte Arduino. Curieux, je fais une recherche sur le net, je découvre que sur Ebay on en trouve des pas très cher (entre 10 et 15 €) , que c’est assez simple à programmer, qu’il faut juste quelques idées et des recherches sur le net pour trouver des sources et des exemples facilement. Faut dire que cette petite merveille peut presque tout faire. Quelques recherches de plus et je découvre qu’il est possible de mesurer d’autres valeurs que le poids, mais aussi la t°, l’humidité et cela grâce à des capteurs assez facile à trouver.

 

C’est là que tout commence.

 

Je reviens à mes ruches. J’en possède 5 et l’une d’elle début avril semble plus faible que les autres. Je me dis que si je pouvais mesurer la t° sur le haut des cadres, ce serait vraiment utile pour déterminer l’activité par mauvais temps ou il est impossible d’ouvrir pour évaluer la colonie. Je recherche donc un capteur de T° facile d’emploi, compacte, n’utilisant pas trop de port sur la carte et surtout pas trop cher. Il faut dire que je ne suis pas riche. Je trouve donc un capteur qui me plaît et le commande sur internet. – Je vous en parlerai plus demain.

 

Si vous désirez un peu vous familiariser avec cette carte voici un lien : http://www.siteduzero.com/sciences/tutoriels/arduino-pour-bien-commencer-en-electronique-et-en-programmation/presentation-11

 

Rassurez vous vous ne devez pas faire tous les exercices. Mais une lecture attentive pour la suite peut être utile.