Je me lance dans un mini projet pour commencer :
un thermomètre qui affiche la température sur des afficheurs 7 segments
J'ai commencé la prise en main du capteur qui est un DS1820 (pas DS18B20 ni DS18S20 mais bien un DS1820 !).
J'ai récupéré sur le net un programme (j'ai encore un peu de mal à coder les arduino mais ça va venir !) que voici :
#include <OneWire.h> int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2 //Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 2 void setup(void) { Serial.begin(9600); } void loop(void) { float temperature = getTemp(); Serial.println(temperature); delay(100); //just here to slow down the output so it is easier to read } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; }
Vous l'aurez compris, le programme renvoie la température sur la liaison série en permanence.
La température lue devrait avoisiner les 20°C mais j'obtiens 2.75°C
En revanche, la valeur varie bien quand je chauffe ou refroidis le capteur.
J'utilise une résistance de pull-up de 4.8k environ formé à partir de deux résistances de 10k en parallèles.
Si quelqu'un a une idée, elle est la bienvenue !
Merci à vous et bon week end malgré le temps... Parfait pour faire de l'électronique
