Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Arduino merenje temperature

[es] :: Elektronika :: Arduino merenje temperature

Strane: < .. 1 2 3

[ Pregleda: 10812 | Odgovora: 51 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Arduino merenje temperature21.01.2017. u 15:15 - pre 87 meseci
Pogledajte ovu brosuru i AN za RS485, to je jedan od standarda za digitalnu zicanu komunukaciju do 1200m.
http://www.ti.com/lit/sg/slyt484a/slyt484a.pdf
http://www.ti.com/lit/an/slla070d/slla070d.pdf


Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
Prikačeni fajlovi
 
Odgovor na temu

mbm

Član broj: 66632
Poruke: 93



+10 Profil

icon Re: Arduino merenje temperature21.01.2017. u 21:56 - pre 87 meseci
Unutar procedure za čitanje sadržaja registara DS18B20 ili DS18S20 obaviti uvek proveru CRC pa uzeti u obzir rezultat merenja temperature samo ako je CRC ispravan. Ako je CRC ispravan a ipak se pojavljuju čudni rezultati bacite senzore i kupite orginalne MAXIM od pouzdanog dobavljača a ne kineske lažnjake za pola evra komad.

MB


PS- tajming mora mora biti 100% ispravan pošto metoda uzaludnih pokušaja nije dovoljno dobra.

[Ovu poruku je menjao mbm dana 21.01.2017. u 23:20 GMT+1]
 
Odgovor na temu

bobahruma
Slobodan Hornjak
ruma

Član broj: 76452
Poruke: 73
185.102.238.*



Profil

icon Re: Arduino merenje temperature31.01.2017. u 01:38 - pre 87 meseci
Znam da je ovo otislo malo van teme, izvinjavam se ali,

odustao sam od dugackih kablova za DS18B20.
Prelazim na serijsku komunikaciju izmedju dva arduina.
Dve blize sonde ostaju kod prvog arduina, a ove dve dalje idu na drugi arduino (nano, ili micro)

risiver:
Code:


// Example 5 - Receive with start- and end-markers combined with parsing

const byte numChars = 32;
char receivedChars[numChars];
char tempChars[numChars];        // temporary array for use when parsing

      // variables to hold the parsed data
char Informacija[numChars] = {0};
float SpavacaTemp = 0.0;
float DecijaTemp = 0.0;
//float HodnikTemp = 0.0;

boolean newData = false;

int led = A1;
int temperatura = 5;

//============

void setup() {
    Serial.begin(9600);
    Serial.println("This demo expects 3 pieces of data - text, an integer and a floating point value");
    Serial.println("Enter data in this style <HelloWorld, 12, 24.7>  ");
    pinMode (led, OUTPUT);
    Serial.println();
    
    pinMode (12, OUTPUT);
    digitalWrite(12, LOW);
}

//============

void loop() {
    recvWithStartEndMarkers();
    if (newData == true)
    {
        strcpy(tempChars, receivedChars);
            // this temporary copy is necessary to protect the original data
            //   because strtok() used in parseData() replaces the commas with \0
        parseData();
        showParsedData();
        newData = false;
    }
}

//============

void recvWithStartEndMarkers() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    char startMarker = '<';
    char endMarker = '>';
    char rc;

    while (Serial.available() > 0 && newData == false) {
        rc = Serial.read();

        if (recvInProgress == true) {
            if (rc != endMarker) {
                receivedChars[ndx] = rc;
                ndx++;
                if (ndx >= numChars) {
                    ndx = numChars - 1;
                }
            }
            else {
                receivedChars[ndx] = '\0'; // terminate the string
                recvInProgress = false;
                ndx = 0;
                newData = true;
            }
        }

        else if (rc == startMarker) {
            recvInProgress = true;
        }
    }
}
//============
void parseData() {      // split the data into its parts

    char * strtokIndx; // this is used by strtok() as an index

    strtokIndx = strtok(tempChars,",");      // get the first part - the string
    strcpy(Informacija, strtokIndx); // copy it to Informacija

    strtokIndx = strtok(NULL, ",");
    SpavacaTemp = atof(strtokIndx);     // convert this part to a float
 
    strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
    DecijaTemp = atof(strtokIndx);     // convert this part to an integer

   // strtokIndx = strtok(NULL, ",");
   // HodnikTemp = atof(strtokIndx);     // convert this part to a float
}
//============
void showParsedData() {
  
  {if ((SpavacaTemp <temperatura) || (SpavacaTemp <temperatura))
  {digitalWrite(led,HIGH);}
                   //else{digitalWrite(led,LOW);}
                 }                
   
  /*
    Serial.println("");
    Serial.println("INFORMACIJE SA SERIAL PORTA");
    Serial.print("Informacija ");
    Serial.println(Informacija);  
    Serial.print("Spavaca ");
    Serial.println(SpavacaTemp);
    Serial.print("Decija  ");
    Serial.println(DecijaTemp);
    //Serial.print("Hodnik  ");
   // Serial.println(HodnikTemp);
    Serial.println("");
    Serial.println("");
    */
}


sender:
Code:


/*
korisceni pinovi:
pin 13 - 
pin 12 -  
pin 11 - 
pin 10 - 
pin 9 - OneWire DS18b20 sonda  siva
pin 8 - 
pin 7 - 
pin 6 - 
pin 5 - 
pin 4 - 
pin 3 -    
pin 2 - 

pin A5 - SCL LiquidCrystal_I2C zuta
pin A4 - SDA LiquidCrystal_I2C plava
pin A3 - 
pin A2 - 
pin A1 - 
pin A0 - 
 */
 //koriscene biblioteke
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// pin na koji ulaze senzori
#define ONE_WIRE_BUS 9
OneWire oneWire(ONE_WIRE_BUS);
// koriscenje dallas-a i oneWire 
DallasTemperature sensors(&oneWire);

//podesavanje LCD-a 16 slova x2 reda
LiquidCrystal_I2C lcd(0x27,16,2); 

//---------------------------------------------------------------

void setup() {
  //startuj serial port
  Serial.begin(9600);
   // startuj onewire biblioteku
  sensors.begin();

lcd.init();    // analiziraj LCD 
 
  // Stampaj na LCD-u
  lcd.backlight();
  lcd.setCursor (3,0);
  lcd.print("by bobahru");
  lcd.setCursor (1,1);
  lcd.print("064/412-68-66");
   delay(10000);  //zadrzavanje poruke pri paljenju
   lcd.clear();  //ocisti LCD
}
//citanje temperature sa senzora i pretvaranje u vrednost  
float sensorValue (byte deviceAddress[])
{
float tempC = sensors.getTempC (deviceAddress);
float temp = (DallasTemperature::toFahrenheit(tempC));
return temp;

delay(10000);
}


void loop() {
  //sve vrednosti senzora
  sensors.requestTemperatures();
  //0,1,2,3 je broj senzora, pretvoriti u ime 
  float SpavacaSoba = (sensors.getTempCByIndex(0));
  float DecijaSoba = (sensors.getTempCByIndex(1));
  //float Hodnik = (sensors.getTempCByIndex(2));
  
 // Serial.print("0123456789");
  Serial.print ("<");
  Serial.print ("s");
  Serial.print (",");
  Serial.print (SpavacaSoba);
  Serial.print (",");
  Serial.print (DecijaSoba);
  //Serial.print (",");
  //Serial.print (Hodnik);
  Serial.print (">");

  lcd.setCursor (0,0);  //prvi red
  lcd.print(" Spavaca:");
  lcd.setCursor (10,0);
  lcd.print (SpavacaSoba);
    lcd.setCursor (0,1); //drugi red
    lcd.print("  Decija:");  
    lcd.setCursor (10,1);
    lcd.print (DecijaSoba);

delay(500);
}

Sve ce to moj prijatelj Milan da ti objasni on je kolektor.
Lektor Ziko,lektor.
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Arduino merenje temperature31.01.2017. u 11:25 - pre 87 meseci
Citat:
bobahruma: Znam da je ovo otislo malo van teme, izvinjavam se ali,

odustao sam od dugackih kablova za DS18B20.
Prelazim na serijsku komunikaciju izmedju dva arduina.
Dve blize sonde ostaju kod prvog arduina, a ove dve dalje idu na drugi arduino (nano, ili micro)



Oko programiranja najbolje da otvoris novu temu u podforumu mikroelektronika.

Sto se tice seriske veze (RS232), tu ima mali problem sto ti fali jos jedan seriski port na MASTER Arduinu (MCU koji skuplja podatke sa svih senzora).
RS232 radi samo 1:1 full-duplex, ne moze u mrezi da radi vise uredjaja, samo jedan uredjaj na jedan port.

Za mrezu seriskih uredjaja se koristi RS485 protokol i za to trebaju odgovarajuci tranciver (RX/TX) interface moduli, postavio sam gore na vrhu ove stranice par brosura oko toga.

I logiku moras malo izmeniti, ne da ti senzor stalno salje podatke nego da se on odazove kada ga MASTER pita za temperaturu (trebace ti ta logika zbog adresiranja uredjaja na mrezi).




[Ovu poruku je menjao mikikg dana 31.01.2017. u 14:10 GMT+1]
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
Prikačeni fajlovi
 
Odgovor na temu

tuxserbia
Oleg Vučković
urandom
/dev/null
Niš

Član broj: 4094
Poruke: 867

Jabber: tuxserbia@elitesecurity.org
ICQ: 65355850
Sajt: 127.0.0.1


+112 Profil

icon Re: Arduino merenje temperature31.01.2017. u 13:10 - pre 87 meseci
A I2C? Nisam doduše probao sa dužim kablovima.
Kako se dele racunarski programi?
Na bagovite (sa greskama) i ispravne (bez gresaka). Ovi drugi su hipoteticki.
***GPL-ovano by @Shadowed

"Ja za email koristim outlook express u virtualnoj mašini, tako da s te strane nijedan linux nije
dorastao XP-u." - pisac
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5059
*.dynamic.sbb.rs.

Sajt: yu3ma.net


+505 Profil

icon Re: Arduino merenje temperature31.01.2017. u 13:41 - pre 87 meseci
I2C kao sto mu samo ime kaze "Inter-Integrated Circuit" je predvidjen za komunikuciju izmedju cipova ali u okviru jedne PCB ili uredjaja i nije predvidjen da "napusta" granice/okvire uredjaja, nije predvidjen za to i nema mehanizme za potiskivanje smetnji kao sto imaju spomenuti RS protokoli koji imaju mnoooogooo dB za potiskivanje CM smetnji za razliku od ostalih protokola koji imaju 0!
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

tuxserbia
Oleg Vučković
urandom
/dev/null
Niš

Član broj: 4094
Poruke: 867

Jabber: tuxserbia@elitesecurity.org
ICQ: 65355850
Sajt: 127.0.0.1


+112 Profil

icon Re: Arduino merenje temperature31.01.2017. u 14:03 - pre 87 meseci
Naravno, mada radi i komunikacija između arduino pločica normalno. Tek sad sam video kod i da ga već upotrebljava za LCD. Tako da je upoznat i sa njim.

Čisto razmišljam naglas, i uglas, "brainstorming" po staroserbski.
Kako se dele racunarski programi?
Na bagovite (sa greskama) i ispravne (bez gresaka). Ovi drugi su hipoteticki.
***GPL-ovano by @Shadowed

"Ja za email koristim outlook express u virtualnoj mašini, tako da s te strane nijedan linux nije
dorastao XP-u." - pisac
 
Odgovor na temu

scoolptor

Član broj: 305514
Poruke: 1620



+585 Profil

icon Re: Arduino merenje temperature31.01.2017. u 14:08 - pre 87 meseci
Ako je promena temperature tela koje meris spora, mozes komotno koristiti DS18B20 senzore. Trik je u odbacivanju rezultata merenja koji odskacu od ocekivanog, i/ili imaju CRC gresku.
 
Odgovor na temu

bobahruma
Slobodan Hornjak
ruma

Član broj: 76452
Poruke: 73
185.102.238.*



Profil

icon Re: Arduino merenje temperature31.01.2017. u 15:51 - pre 87 meseci
Sta je konkretno CRC greska?
Lose rezultate sam vec odbacio, ali kada se desi da preskoci ocitavanje sonde izbrkaju se temperature. Moze se to resiti sa mac adresom sondi, ali onda je zamena sonde komplikovana nekom ko se slabije razume.
Sve ce to moj prijatelj Milan da ti objasni on je kolektor.
Lektor Ziko,lektor.
 
Odgovor na temu

scoolptor

Član broj: 305514
Poruke: 1620



+585 Profil

icon Re: Arduino merenje temperature31.01.2017. u 17:27 - pre 87 meseci
Procitas svih 9 bajtova internog SRAM-a senzora.
Izracunas CRC vrednost prvih 8 bajtova.
Ukoliko se rezultat koji dobijes ne slaze sa devetim procitanim bajtom, doslo je do greske u komunikaciji.

Takodje, kada master zeli da selektuje zeljeni senzor, slanjem komande MATCH i 64-bitne adrese,
dolazi do hardverske CRC provere od strane senzora, koji na osnovu 56 bita izracunava preostalih 8,
koji moraju da se poklope sa onim sto im salje master. Ovo pisem napamet. Moguce je da drugacije funkcionise.

Nisam koristio DS18B20 od 2005, ali planiram uskoro da upotrebim gomilu (nadzor temperatura spojeva el. instalacija i LED izvora),
posto su jeftini, pristupacni, dovoljno precizni, i laki za upotrebu.
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: Arduino merenje temperature01.02.2017. u 05:19 - pre 87 meseci
DS18B20 koristio sa Arduinom na 40 metara, ali sa kvalitetnim bakarnim kablom sa silikonskom izolacijom. Desavalo mi se da i sa njim, kao i UZ senzorom dobijam u odredjenom vremenskom periodu "laznu vrednost" i mislim da je to skroz ok. Moje resenje se nije svelo na ignorisanje vrednosti (u slucaju nekog pozara?) vec na cuvanje poslednjih par merenja i poredjenjem sa sledecim. Ukoliko par puta za redom dobijam slicne vrednosti merenje se uzima u obzir, ukoliko je temperatura drasticno drugacija merenje se odbacuje i uzima sledeca bliska onoj poslednjoj sa vise slicnih merenja, isto tako ako se dobiju abnormalno drugacije vrednosti (100C razlike?)u odredjenom vremenskom intervalu za redom, one postaju merodavne. Ipak DS ima neko ogranicenje koliko moze da se "zagreje" ili "ohladi" u sekundi. Ipak su to po mom misljenju amaterski senzori a na nama je da ih kalibrisemo i dobijemo najbolje od njih.

One-wire senzori su prilicno lose resenje za vece daljine nazalost, pogotovu DS18B20, i trebalo bi da se koristi sa dobrim 5V napajanjem (na vecoj daljini nazalost mozda i sopstvenim, resenim sa nekim DCDC step-up-om i solarnim punjenjem AA/2AA baterije?) jer se gubi dosta napona na otporu, naravno nikako "parazitno" koriscenje ne dolazi u obzir. Mozda cak i neki filteri/zavojnice? ali to ce iskusnije drustvo da posavetuje bolje nego ja. Ja u elektronici vise koristim Atmel i softversko resavanje nego hardversko zbog manjka znanja, ali mogu da posavetujem oko softverskog peglanja.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

scoolptor

Član broj: 305514
Poruke: 1620



+585 Profil

icon Re: Arduino merenje temperature01.02.2017. u 15:15 - pre 87 meseci

 
Odgovor na temu

[es] :: Elektronika :: Arduino merenje temperature

Strane: < .. 1 2 3

[ Pregleda: 10812 | Odgovora: 51 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.