چهارشنبه , ۴ مهر ۱۳۹۷
سرخط خبرها
خانه » آردوینو » Temperature IoT دماسنج IOT
حمایت مالی از یزد کیت

Temperature IoT دماسنج IOT

در این پروژه که از سری پروژه های سایت ic2cloud هست دما توسط سنسور DS18B20  اندازه گیری شده و به سرور ارسال شده و توسط اپ اندروید قابل ملاحظه است ، پیشنیاز انجام این پروژه مطالعه این لینک و این لینک هست که قبلا در آترین الکترونیک ارسال شده است.

سخت افزار های استفاده شده در این پروژه Arduino Unoو Arduino Ethernet Shield و Temperature Sensor (DS18B20) هست و  نحوه اتصال سنسور دما به برد آردوینو به صورت زیر خواهد بود.

Temperature Sensor
Pin Description
Gnd Ground
Data Communication Channel (One Wire)
۵V ۵V

از اونجایی که خروجی سنسور به صورت one-wire  هست شما در اردینو به  Arduino development environment  و کتابخانه One Wire  نیاز دارید  و در نهایت میتونید از سورس زیر استفاده کنید

#include <OneWire.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xED, 0xBE, 0xEF, 0xFE, 0xD1 };        // mac address for ethernet board
EthernetClient eth;                                         // the Ethernet client

char server[]  = "www.ic2pro.com";                          // Wiring Cloud host name
int port       = 80;
String devId   = "111-222-333";                             // Device ID. CREATE YOUR OWN GUID; Use this http://www.guidgenerator.com/
String auth    = "dXNlcjpwYXNzd29yZA==";                    // Authentication credentials Create a string from <email_address>:<API_Password> and encode it base64
                                                            // The sample here "dXNlcjpwYXNzd29yZA==" is the encoding for "user:password"

OneWire  ds(8);                                             // Temperature sensor is connected to pin 8 (Signal(DS18B20) -> D8)


// Update TEMPERATURE signal on the Wiring Cloud
void sendTemperature(String temperature)
{
  Serial.println("Temperature = " + temperature);
  Serial.println("Send Temperature...");
  if (eth.connect(server, port)) {                                                          // initialize HTTP connection on port 80
    eth.println("GET http://" + String(server) + ":" + String(port) + "/Wire/connector/set?id=" + devId + "&TEMPERATURE=" + temperature+ " HTTP/1.1");   // submit HTTP request
    eth.println("Authorization: Basic " + auth);
    eth.println("Connection: close");
    eth.println();
    Serial.println("Temperature sent to server.");
  }
  else {
    Serial.println("Connection Error");
  }
  eth.stop();
}


// retrieve temperature from DS18B20 sensor
String getTemperature()
{
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  char scelsius[10];

  if ( !ds.search(addr)) {                                            // find chip
    if ( !ds.search(addr)) {
      ds.reset_search();
      delay(250);
      return "ERR1";
    }
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {                            // check CRC
    return "ERR2";
  }

  switch (addr[0]) {                                                  // test if it's a proper chip
    case 0x10: type_s = 1; break;
    case 0x28: type_s = 0; break;
    case 0x22: type_s = 0; break;
    default:
      Serial.println("Device is not a DS18x20 family device.");       // Not a proper chip 
      return "ERR3";
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);                                                  // initiate conversion

  delay(1000); // maybe 750ms is enough, maybe not

  ds.reset();
  ds.select(addr);
  ds.write(0xBE);

  for (byte i = 0; i < 9; i++) {                                     // read data
    data[i] = ds.read();
  }

  
  int16_t raw = (data[1] << ۸) | data[0];                            // Convert the data to temperature
  if (type_s) {
    raw = raw << ۳;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + ۱۲ - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;                                // based on the resolution make the conversion 
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;
  dtostrf(celsius, ۵, ۲, scelsius);
  return scelsius;                                                   // return value in Celsius
}

void setup() {
  Serial.begin(9600);
  Serial.println("Start...");

  Ethernet.begin(mac);                                           // start the Ethernet connection:
  delay(1000);                                                   // give the Ethernet shield a second to initialize:
}

void loop() {
    sendTemperature(getTemperature());
    delay(5000);                                                  // send temperature only every 2 seconds
}

در نهایت در صورتی که نیاز به اطلاعات جامع تر در مورد نحوه راه اندازی مدار دارید میتونید به این لینک مراجعه کنید.همچنین فایل های مورد نیاز پروژه رو میتونید از لینک زیر دانلود کنید.

Download “Temperature-IoT.zip” Temperature-IoT.zip – 6 بار دانلود شده است – 68 KB

منبع : آترین ، فروشگاه قطعات صنعتی و الکترونیک

حمایت مالی از یزد کیت

همچنین ببینید

ساخت وب سرور در esp8266

ماژول وای فای esp8266  ، یکی از پرکاربردترین ، قوی ترین و در عین حال …

دیدگاهتان را بنویسید