• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujniki DS18B20 oneWire przez www
#1
Witam wszystkich użytkowników forum. Na początku napiszę , że jestem elektronikiem, który próbuje sił w programowaniu . Moim może zbyt ambitnym celem jest zbudowanie układu sterującego czterema przekaźnikami włącz- wyłącz(bistabilne) , dwoma monostabilne ( brama, furtka) , oraz podgląd z czterech czujników DS18b20. 
Baza do tego projektu to arduino UNO R3 + Ethernet Shields , chcę mieć podgląd i sterowanie na tablecie.
Znalazłem fajną moim zdaniem apkę o nazwie Blynk .
http://www.blynk.cc/

W moim przypadku super sprawa bo nie trzeba serwera .
Samo sterowanie (przekaźniki ), jest banalnie proste i każdy może sobie to zrealizować .
Podgląd czujników podłączonych na jednym pinie cyfrowym ,widzianych na wirtualnych pinach w blynk , to dla mnie już wyzwanie Smile . Poniższy program umożliwia podgląd z jednego DS18b20 a jak go zmodyfikować do pracy z kilkoma?  Bardzo proszę o pomoc i raz jeszcze pozdrawiam Wszystkich

Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
#include <SimpleTimer.h>
#include <SPI.h>
//Data wire plugged to pin 2 (temp sensor)
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char auth[] = "xxxxxxxxxx"; // tu należy podać klucz do połaczenia z serwerem w chmurze

SimpleTimer timer;

void setup()
{
 Serial.begin(9600);
Blynk.begin(auth);
 sensors.begin();

 timer.setInterval(3000, readTemp);
}



void readTemp()
{
 sensors.requestTemperatures();
 float floatTempC = sensors.getTempCByIndex(0);
 char t_buffer[15];
 dtostrf(floatTempC, 8, 9, t_buffer);
 Blynk.virtualWrite(5, t_buffer);
}
void loop()
{
 Blynk.run();
 timer.run();
}
 
Odpowiedź
#2
Witam ja mam takie coś: używam płytki ESP8266 programowanej przez Arduino IDE i 4 czujniki Dallas DS18b20

i śmiga:

a o to kod;


#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
#define ONE_WIRE_BUS 0

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Thermometer1 = { 0x28, 0xFF, 0xF1, 0x59, 0x00, 0x16, 0x01, 0x70 }; // adres danego czujnika Dallas
DeviceAddress Thermometer2 = { 0x28, 0xFF, 0x54, 0x4A, 0x00, 0x16, 0x01, 0x21 };
DeviceAddress Thermometer3 = { 0x28, 0xFF, 0x27, 0x74, 0x33, 0x16, 0x03, 0xD9 };
DeviceAddress Thermometer4 = { 0x28, 0xFF, 0xD8, 0xAE, 0x33, 0x16, 0x04, 0x89 };


// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxx"; // token z aplikacji

SimpleTimer timer;


// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "xxxxxxxxxx";
char pass[] = "xxxxxxxxxx";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);

  sensors.begin();

  sensors.setResolution(12); // tu ustalamy rozdzielczość odczytu od 9 do 12 bitów

  timer.setInterval(5000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
}

void sendTemps()
{
  sensors.requestTemperatures(); // Polls the sensors
/*
  float temp1 = sensors.getTempCByIndex(0);
  float temp2 = sensors.getTempCByIndex(1);
  float temp3 = sensors.getTempCByIndex(2);
  float temp4 = sensors.getTempCByIndex(3);// odczyt temperatury według indeksu
 */ 
  
float temp1 = sensors.getTempC(Thermometer1); // odczyt temp według adresu ( osobiście wolę adres)
float temp2 = sensors.getTempC(Thermometer2);
float temp3 = sensors.getTempC(Thermometer3);
float temp4 = sensors.getTempC(Thermometer4);

  Blynk.virtualWrite(1, temp1);
  Blynk.virtualWrite(2, temp2);
  Blynk.virtualWrite(3, temp3);
  Blynk.virtualWrite(4, temp4);
}


void loop()
{
  Blynk.run();
  timer.run();
}
 
Odpowiedź
#3
(25-01-2017, 16:56)jams napisał(a): DeviceAddress Thermometer1 = { 0x28, 0xFF, 0xF1, 0x59, 0x00, 0x16, 0x01, 0x70 }; // adres danego czujnika Dallas
DeviceAddress Thermometer2 = { 0x28, 0xFF, 0x54, 0x4A, 0x00, 0x16, 0x01, 0x21 };
DeviceAddress Thermometer3 = { 0x28, 0xFF, 0x27, 0x74, 0x33, 0x16, 0x03, 0xD9 };
DeviceAddress Thermometer4 = { 0x28, 0xFF, 0xD8, 0xAE, 0x33, 0x16, 0x04, 0x89 };
Jest jakiś powód by wpisywać adresy czujników z ręki? Biblioteka Dallastemperature.h sama odnajduje adresy zainstalowanych czujników.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości