در این پروژه که از سری پروژه های سایت 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 – 0 بار دانلود شده است – 68 KB