Pages: 1 [2]   Go Down
Author Topic: [resolu] sht1x - humidité & temperature - nb de sonde possible sur mega  (Read 2307 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Faraday Member
**
Karma: 33
Posts: 4967
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci du coup de main!
Si j' utilisait des sonde sht20 http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity/Sensirion_Humidity_SHT20_Datasheet.pdf

celle ci me semble t'il on un adressage unique sur 7 bit . ( si j'ai tout compris...)

bonjour
ça ne change pas fondamentalement le probleme, les sht2x ayant une adresse I2C unique, par contre ça peu simplifier le coding pour faire du multiplex, puisque ce sont des vrais compo I2C , ça eviterait de jongler avec des protocoles differents en utilisant un MUX i2c.
Il y a un kit d'evaluation sur le site de sensirion le Evaluation Kit EK-H4 qui multiplex 4 compos.

attention aussi à une chose : le type de boitier : ce n'est evident à souder en DIY
sensirion produit une gamme avec un connecteur plus facile à interfacervoir par ex
http://www.sensirion.com/en/products/humidity-temperature/humidity-sensor-sht71/
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci
les sht 7x sont trop cher.

j'ai cru comprendre que l'on pouvait peut être faire en sorte de recréer des ic2 supplémentairement.
avec une librairie "soft i2c".
http://arduino.cc/forum/index.php?topic=99832.0
http://alxhou.wordpress.com/2012/07/01/multiple-sht21-softi2c/#more-4

Sinon , Je ne suis pas contre le mux mais je suis complétement larguer sur le type a utiliser et son utilisation .

Merci.
softi2c :http://rweather.github.com/arduinolibs/classSoftI2C.html
« Last Edit: January 24, 2013, 12:58:28 pm by ppzikos » Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjours, j'ai un petit projet en vue, dans un premier temps, capter le poucentage d'humidité dans un pot de fleur. J'ai donc un arduino uno et j'ai acheté un capteur d'humidité GHI-00727. Je n'ai jamais programée ce genre de capteur, si quelqu'un s'y connais mieux que moi, je ne refuserais aucune aide ^^ (désolé si je ne suis pas trop "dans" le thème mais je suis nouveau sur ce forum et m'interresse a l'electronique)
PS: Pour plus d'info me demander, merci beaucoup.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

un petit site, pour t'aider
http://bildr.org/
Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, je vais me débrouiller avec ça  smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hazerty565 merci beaucoup , sur le site que tu donne http://bildr.org/2012/11/sht15-arduino/ il précise que le sht15 n'utilise pas le protocole i2c est qu'il est possible d'utiliser n'importe quel pin ( digital ) de l'arduino pour la communication. de plus le code fourni sur le site permet de rajouter facilement plusieurs sht15 car il est bien détaillé.
que du bonheur , dommage je me suis tournée vers autre chose comme sonde!!! lool . enfin l'info est la .

Code:
//Based of the wiring code at http://wiring.org.co/learning/basics/humiditytemperaturesht15.html

int SHT_clockPin = 3;  // pin used for clock
int SHT_dataPin  = 2;  // pin used for data

void setup(){
  Serial.begin(9600); // open serial at 9600 bps
}

void loop(){
  //these can take a bit to get the values (100ms or so)
  float temperature = getTemperature();
  float humidity = getHumidity();

  Serial.print(temperature);
  Serial.print(" | ");
  Serial.println(humidity);

}






float getTemperature(){
  //Return Temperature in Celsius
  SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin);
  SHT_waitForResult(SHT_dataPin);

  int val = SHT_getData(SHT_dataPin, SHT_clockPin);
  SHT_skipCrc(SHT_dataPin, SHT_clockPin);
  return (float)val * 0.01 - 40; //convert to celsius
}

float getHumidity(){
  //Return  Relative Humidity
  SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin);
  SHT_waitForResult(SHT_dataPin);
  int val = SHT_getData(SHT_dataPin, SHT_clockPin);
  SHT_skipCrc(SHT_dataPin, SHT_clockPin);
  return -4.0 + 0.0405 * val + -0.0000028 * val * val;
}


void SHT_sendCommand(int command, int dataPin, int clockPin){
  // send a command to the SHTx sensor
  // transmission start
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  digitalWrite(dataPin, HIGH);
  digitalWrite(clockPin, HIGH);
  digitalWrite(dataPin, LOW);
  digitalWrite(clockPin, LOW);
  digitalWrite(clockPin, HIGH);
  digitalWrite(dataPin, HIGH);
  digitalWrite(clockPin, LOW);

  // shift out the command (the 3 MSB are address and must be 000, the last 5 bits are the command)
  shiftOut(dataPin, clockPin, MSBFIRST, command);

  // verify we get the right ACK
  digitalWrite(clockPin, HIGH);
  pinMode(dataPin, INPUT);

  if (digitalRead(dataPin)) Serial.println("ACK error 0");
  digitalWrite(clockPin, LOW);
  if (!digitalRead(dataPin)) Serial.println("ACK error 1");
}


void SHT_waitForResult(int dataPin){
  // wait for the SHTx answer
  pinMode(dataPin, INPUT);

  int ack; //acknowledgement

  //need to wait up to 2 seconds for the value
  for (int i = 0; i < 1000; ++i){
    delay(2);
    ack = digitalRead(dataPin);
    if (ack == LOW) break;
  }

  if (ack == HIGH) Serial.println("ACK error 2");
}

int SHT_getData(int dataPin, int clockPin){
  // get data from the SHTx sensor

  // get the MSB (most significant bits)
  pinMode(dataPin, INPUT);
  pinMode(clockPin, OUTPUT);
  byte MSB = shiftIn(dataPin, clockPin, MSBFIRST);

  // send the required ACK
  pinMode(dataPin, OUTPUT);
  digitalWrite(dataPin, HIGH);
  digitalWrite(dataPin, LOW);
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);

  // get the LSB (less significant bits)
  pinMode(dataPin, INPUT);
  byte LSB = shiftIn(dataPin, clockPin, MSBFIRST);
  return ((MSB << 8) | LSB); //combine bits
}

void SHT_skipCrc(int dataPin, int clockPin){
  // skip CRC data from the SHTx sensor
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  digitalWrite(dataPin, HIGH);
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);
}
Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je n'ai toujours pas réussi à m'y mettre, je trouve cela assez compliqué ^^
Logged

Pages: 1 [2]   Go Up
Jump to: