Récifaliste, Forum aquariophilie récifaliste, SPS, LPS, FishOnly,recifal,marin |
| | Technologie One Wire sur arduino | |
| | Auteur | Message |
---|
Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Technologie One Wire sur arduino Jeu 21 Juin 2012, 21:48 | |
| Je suis entrain de me replonger dans la programmation arduino et je me demandais si quelqu'un pouvait m'expliquer la Technologie One-Wire dans mon montage, je compte utiliser plusieurs capteurs de température (genre 6 ou 8) placés à différents endroit afin d'obtenir des informations de températures plus détaillés et prévenir de chauffes anormales de certains éléments... Or, 6 ou 8 capteurs de température DS18B20 cela ferait quand même 6 ou 8 entrées bloquées à cela... et je suis tombé sur le One-wire qui semble pouvoir faire coexister sur une même entrée plusieurs capteurs similaires : [Vous devez être inscrit et connecté pour voir cette image]Donc, je me disais que dans mon cas cela me libèrerait plusieurs entrées.... et que même dans le cas du Sebduino, cela lui libèrerait une entrée (puisque deux entrées du sebduino sont là pour mesurer la température bac et température maison)... Quelqu'un peut m'en dire plus Source : [Vous devez être inscrit et connecté pour voir ce lien] | |
| | | Sébastien Modérateur
Messages : 1410
Photos photos:
| Sujet: Re: Technologie One Wire sur arduino Jeu 21 Juin 2012, 23:48 | |
| Salut Gnome , j'ai pas trop le temps , mais je regarde ça rapidement pour t'expliquer . | |
| | | Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 00:35 | |
| Merci
quand tu auras le temps, c'est pas pressé, mais je trouve cela intéressant Et, si j'ai bien compris le principe, cela te libérerait une entrée (et moi bien plus) | |
| | | OverCool Admin
Messages : 1360 Localisation : Dagneux 01
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 00:48 | |
| Chaque capteur a un adressage unique, c'est ce qui permet a la librairie de différencier les capteurs en serie.
Mais en faite ça à l'air plutôt bien expliqué sur ta page. C'est quoi qui te gène ? | |
| | | Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 01:03 | |
| oups rien, juste que j'avais pas vu la vidéo et l'image au dessus qui explique bien ce que j'étais pas sur de comprendre... donc les capteurs ont une sorte d'adresse MAC. ok
je trouvais que l'article se finissait en queue de poisson, mais non, la fin est tout en haut..
Merci | |
| | | Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 01:09 | |
| Je comprends bien comment il détecte les capteurs, mais comment peut il lire les valeurs de ces capteurs (ce sont des capteurs de température) ? et savoir de quel capteur cette info vient ? | |
| | | Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 03:24 | |
| - lekastor38 a écrit:
- Bonjour Gnome,
bon comme j'ai toujours pas le droit de poster des messages dans la rubrique arduino, je te donne ici ma façon de faire, et qui marche tres bien, avec le one wire, j'ai du me faire mon propre soft pour l'aquarium.
comme les autres te l'on expliqué, tu peux mettre sur une meme patte arduino (la 49 dans mon cas), plusieurs capteur de temperature dessus. en fait chaque capteur a sa propre adresse.
voici la façon de coder l'initialisation et la récupération:
#include #include
// Declaration of the DS18B20 Temperature sensors plugged into pin 52 (Water, Air, ...) // Resolution : 9 bits (94ms/0,5°c) 10 bits (188ms/0,25°c) 11 bits (375ms/0,125°c) 12 bits(750ms/0,0625°c) #define TEMPERATURE_ONE_WIRE_BUS 49 #define TEMPERATURE_PRECISION 9 OneWire oneWireBus(TEMPERATURE_ONE_WIRE_BUS); DallasTemperature temperatureSensors(&oneWireBus); DeviceAddress waterThermometer = { 0x28, 0xA8, 0x3D, 0x9A, 0x03, 0x00, 0x00, 0x95 }; DeviceAddress airThermometer = { 0x28, 0x05, 0x29, 0x9A, 0x03, 0x00, 0x00, 0xE0 }; float waterTemperatureC = 0.0; float waterTemperatureF = 0.0; float airTemperatureC = 0.0; float airTemperatureF = 0.0;
void checkTemperatures() { // call sensors.requestTemperatures() to issue a global // temperature request to all devices on the bus temperatureSensors.requestTemperatures(); // read water temperature waterTemperatureC = (temperatureSensors.getTempC(waterThermometer)); waterTemperatureF = DallasTemperature::toFahrenheit(waterTemperatureC); // read air temperature airTemperatureC = (temperatureSensors.getTempC(airThermometer)); airTemperatureF = DallasTemperature::toFahrenheit(airTemperatureC); }
dans setup() { ...
// Activating Temperature Sensors temperatureSensors.begin(); temperatureSensors.setResolution(waterThermometer, TEMPERATURE_PRECISION); temperatureSensors.setResolution(airThermometer, TEMPERATURE_PRECISION); checkTemperatures();
... }
dans loop() { ...
// Get Current Temperatures checkTemperatures(); ... }
et après tu gère l'affichage comme tu veux.
pour trouver les adresses des capteurs, tu peux utiliser le programme suivant:
///////////////
#include #include
// Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 52 #define TEMPERATURE_PRECISION 9
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire);
int numberOfDevices; // Number of temperature devices found
DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address
void setup(void) { // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo");
// Start up the library sensors.begin(); // Grab a count of devices on the wire numberOfDevices = sensors.getDeviceCount(); // locate devices on the bus Serial.print("Locating devices..."); Serial.print("Found "); Serial.print(numberOfDevices, DEC); Serial.println(" devices.");
// report parasite power requirements Serial.print("Parasite power is: "); if (sensors.isParasitePowerMode()) Serial.println("ON"); else Serial.println("OFF"); // Loop through each device, print out address for(int i=0;i { // Search the wire for address if(sensors.getAddress(tempDeviceAddress, i)) { Serial.print("Found device "); Serial.print(i, DEC); Serial.print(" with address: "); printAddress(tempDeviceAddress); Serial.println(); Serial.print("Setting resolution to "); Serial.println(TEMPERATURE_PRECISION, DEC); // set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions) sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION); Serial.print("Resolution actually set to: "); Serial.print(sensors.getResolution(tempDeviceAddress), DEC); Serial.println(); }else{ Serial.print("Found ghost device at "); Serial.print(i, DEC); Serial.print(" but could not detect address. Check power and cabling"); } }
}
// function to print the temperature for a device void printTemperature(DeviceAddress deviceAddress) { // method 1 - slower [Vous devez être inscrit et connecté pour voir ce lien] C: "); [Vous devez être inscrit et connecté pour voir ce lien] Temp F: "); [Vous devez être inscrit et connecté pour voir ce lien] // Makes a second call to getTempC and then converts to Fahrenheit
// method 2 - faster float tempC = sensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.print(tempC); Serial.print(" Temp F: "); Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit }
void loop(void) { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperatures Serial.println("DONE"); // Loop through each device, print out temperature data for(int i=0;i { // Search the wire for address if(sensors.getAddress(tempDeviceAddress, i)) { // Output the device ID Serial.print("Temperature for device: "); Serial.println(i,DEC); // It responds almost immediately. Let's print out the data printTemperature(tempDeviceAddress); // Use a simple function to print out the data } //else ghost device! Check your power requirements and cabling } delay(1000); }
// function to print a device address void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }
///////////////
voili voilou, si ca peut t'aider...
Denis.
| |
| | | Gnome Modérateur
Messages : 7602 Age : 43 Localisation : Moselle (57)
| Sujet: Re: Technologie One Wire sur arduino Ven 22 Juin 2012, 03:24 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Technologie One Wire sur arduino | |
| |
| | | | Technologie One Wire sur arduino | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| Derniers sujets | » le nouveau fofo par Cinema83 Dim 15 Juil 2012, 19:37
» rencontre recifaliste du forum de l ilot recif par Gnome Dim 15 Juil 2012, 10:30
» PROJET OSAKA 260 RECIFAL par Gnome Sam 14 Juil 2012, 07:09
» Avis : Réacteur à Calcaire ou Pompe Doseuse par Hervé Sam 14 Juil 2012, 01:27
» petit nouveau par gael85 Sam 14 Juil 2012, 01:20
» Le 130L de Justyne03.11 par gael85 Sam 14 Juil 2012, 01:18
» LES EUNICES CES SALES BETES MALFAISANTES. par Ptichar Sam 14 Juil 2012, 00:52
» Ensemencer un refuge par Ptichar Sam 14 Juil 2012, 00:45
» Vu à mare nostrum .... Mais quoi que c'est ?! par Ptichar Sam 14 Juil 2012, 00:42
» Jeu sur le forum recifal ilot recif: devinez mon petit nom (poisson) par Ptichar Sam 14 Juil 2012, 00:38
» Avis Commande groupée de Sel sur le forum recifal de l ilot recif par Hawaiiensis38 Ven 13 Juil 2012, 23:24
» Gillot : Futur Projet 350 litres (version 2 : le retour de la vengeance, The next Generation !) par Gillot Ven 13 Juil 2012, 23:07
» quel équipement pour bac hippocampe par apisto & louloutte Ven 13 Juil 2012, 22:43
» phosban de sprung par gael85 Ven 13 Juil 2012, 21:59
» Que pensez vous de cette symbiose ? par Kactusficus Ven 13 Juil 2012, 21:10
» Changement des roulements d'une vortech par Benzon Ven 13 Juil 2012, 10:45
» vite par johngwen Ven 13 Juil 2012, 09:59
» FLORENT OSAKA 260 par jmz Ven 13 Juil 2012, 08:33
» bourse porte les valence par boubou26 Ven 13 Juil 2012, 07:52
» ponte de stomatella par spongebob 73 Ven 13 Juil 2012, 07:43
» Mon 380L par gael85 Ven 13 Juil 2012, 07:37
» Aquarium complet 380L cubique + matos par Benzon Ven 13 Juil 2012, 07:13
» refuge dériére le bac par wouadel Ven 13 Juil 2012, 07:04
» Rampe ATI Sun Power par gobi Ven 13 Juil 2012, 06:55
» Ou placer mes MP40? par guilhem Ven 13 Juil 2012, 05:54
|
|
|