(2 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
- | + | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/mp4/mon_film.mp4|400|300</videoflash>}} | |
- | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/mp4/ | + | |
- | + | ||
==Présentation du projet Arduino== | ==Présentation du projet Arduino== | ||
Ligne 22 : | Ligne 21 : | ||
===Schéma Fritzing=== | ===Schéma Fritzing=== | ||
+ | |||
+ | [[Image:Fritzthermo.jpg|700px]] | ||
+ | |||
===Code=== | ===Code=== | ||
<pre> | <pre> |
Sommaire |
Le thermomètre Arduino permet de mesurer la température d'une pièce, par une série de LED.
Le capteur permettant de mesurer la température est une thermo-résistance, sa résistance électrique augmente avec la température, ainsi on peut transformer la température ambiante en un signal électrique. Celle que nous avons utilisé est un composant numérique, il utilise un bus délivrant des informations sur 8 bits, ce n'est pas simple à utiliser, c'est pourquoi un certain Paul Stoffregen propose une bibliothèque pour simplifier son utilisation : OneWire (si vous ne savez pas comment installer une biblithothèque Arduino rendez-vous ici)
#include <OneWire.h> // Inclusion de la librairie OneWire #define DS18B20 0x28 // Adresse 1-Wire du DS18B20 #define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds int led1=3; // LED Bleue int led2=4; int led3=5; int led4=6; int led5=7; int led6=8; int led7=9; int led8=10; int led9=11; int led10=12; int led11=13; // LED Rouge //fonction gérant l'affichage des leds, nb étant le nombre de leds à allumer (la led du bas ne comptant pas) void leds(int nb){ switch (nb){ case 0 : digitalWrite(led1,HIGH); digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led4,LOW); digitalWrite(led5,LOW); digitalWrite(led6,LOW); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 1 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,LOW); digitalWrite(led4,LOW); digitalWrite(led5,LOW); digitalWrite(led6,LOW); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 2 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,LOW); digitalWrite(led5,LOW); digitalWrite(led6,LOW); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 3 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,LOW); digitalWrite(led6,LOW); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 4 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,LOW); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 5 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,LOW); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 6 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,LOW); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 7 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,HIGH); digitalWrite(led9,LOW); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 8 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,HIGH); digitalWrite(led9,HIGH); digitalWrite(led10,LOW); digitalWrite(led11,LOW); break; case 9 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,HIGH); digitalWrite(led9,HIGH); digitalWrite(led10,HIGH); digitalWrite(led11,LOW); break; case 10 : digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,HIGH); digitalWrite(led9,HIGH); digitalWrite(led10,HIGH); digitalWrite(led11,HIGH); break; } } //fonction permettant d'analyser la température void analyseTemp(float temp, float mini, float interv){ if (temp <= mini) { leds(0); } if(temp >mini && temp <= mini+ interv ){ leds(1); } if(temp >mini+ interv && temp <= mini+ interv*2){ leds(2); } if(temp >mini+ interv*2 && temp <= mini+ interv*3){ leds(3); } if(temp >mini+ interv*3 && temp <= mini+ interv*4){ leds(4); } if(temp >mini+ interv*4 && temp <= mini+ interv*5){ leds(5); } if(temp >mini+ interv*5 && temp <= mini+ interv*6){ leds(6); } if(temp >mini+ interv*6 && temp <= mini+ interv*7){ leds(7); } if(temp >mini+ interv*7 && temp <= mini+ interv*8){ leds(8); } if(temp >mini+ interv*8 && temp <= mini+ interv*9){ leds(9); } if(temp >mini+ interv*9 ) { leds(10); } } // 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); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT); pinMode(led5,OUTPUT); pinMode(led6,OUTPUT); pinMode(led7,OUTPUT); pinMode(led8,OUTPUT); pinMode(led9,OUTPUT); pinMode(led10,OUTPUT); pinMode(led11,OUTPUT); } // loop() void loop() { float temp; if(getTemperature(&temp)) { analyseTemp(temp, 28, 0.1); // Affiche la température dans le terminal Serial.print("Temperature : "); Serial.print(temp); Serial.write(176); // caractère ° Serial.write('C'); Serial.println(); } }
chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino
Mesure de la température d'une pièce.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique