Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

Elektrooniline termomeeter jamab külmaga

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Elektrooniline termomeeter jamab külmaga

    Spark Core mikrokontrollieri baasil on ehitatud üks termomeeter mis saadab info netti, kuid seal -13 juurest hakkab asi jamama ning viimane temp mis ta näiteb on -15,8c.
    Andurina on seal kasutuses http://cdn.sparkfun.com/datasheets/S...mp/DS18B20.pdf (kunagi sai vist hiinast Ebay kaudu tellitud). mikrokontroller ise garaazis mis ei ole köetud.
    endale jääb justkui mulje, et temp andur jamab? Datasheet annab küll -50 selle töötemperatuuriks, kuid vbl on tegu mingi hiina vuffliga?
    Andmede saadetakse muidu siia: https://thingspeak.com/channels/24877
    On kellelgi sarnaseid kogemusi?

    #2
    Vs: Elektrooniline termomeeter jamab külmaga

    Proovi originaalanduriga, s.t Dallase/Maximi omaga. Hiinakas ei pea paljuks üllatada.
    Erilahendused.
    PS või mail.

    Comment


      #3
      Vs: Elektrooniline termomeeter jamab külmaga

      Kas andurid on ühendatud kahe või kolmejuhtmega, ning milline on toitepinge?
      3,6 V ja kahe juhtmega pidid mingid anomaaliad tekkima.
      Minul 3,6 V kolm juhet ja dallase andurid töötavad juba üle kuue aasta probleemideta, kui aega saan proovin hiinakaid -20 kraadiga.
      MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
      KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

      Comment


        #4
        Vs: Elektrooniline termomeeter jamab külmaga

        3 juhet 3,3V. Proovisin üht teist andurit (kunagi sai 5tk ostetud) ning täpselt sama. Kui langeb alla -15.8c on tulemseks -127c.
        Eelneva anduriga hakkas kohati paar kraadi enne kalama.
        Tellisin ka Maximi anduri, kuid sellega läheb 2 nädalat aega.

        Comment


          #5
          Vs: Elektrooniline termomeeter jamab külmaga

          Esmalt postitatud qwerty poolt Vaata postitust
          Kui langeb alla -15.8c on tulemseks -127c.
          Kena, aga mis seal muutub? Takistus, pinge, vool?
          Ilmselt tuleb muutumise kõverale mingi järsk piir ette.
          Praegused ilmad soodustavad testimist.

          Comment


            #6
            Vs: Elektrooniline termomeeter jamab külmaga

            Vaatasin üle - sul on DS18B20, aga mina kasutan DS18S20 andureid.
            Väga paljudes kohtades väidetakse, et DS18S20 on 9 bitine ja temperatuuri loetakse 0,5 kraadi kaupa, tegelikult kui ka teist registrit lugeda saab samuti 12 bitti ehk 1/16 kraadi sammu kätte.
            Sai see DS18S20 1/16 kraadi kood isegi Arduinole selgeks õpetatud.
            MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
            KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

            Comment


              #7
              Vs: Elektrooniline termomeeter jamab külmaga

              Esmalt postitatud klm poolt Vaata postitust
              Vaatasin üle - sul on DS18B20,
              See võiks olla selle kivi kirjeldus.

              aga
              Sealne näitude-temperatuuride tabel on VIST natuke vigane.
              Siis võib ka oodata et teisendamises ühtteist on natuke segi läinud.
              Kas selle termomeetri "näitamine" on programmi järgi ja on ka selle lähtetekst olemas?
              See, mis "külma" näitab.

              Comment


                #8
                Vs: Elektrooniline termomeeter jamab külmaga

                Library's võib teoreetiliselt viga olla küll, kuid ise ma seda sealt leida ei oska.

                Comment


                  #9
                  Vs: Elektrooniline termomeeter jamab külmaga

                  Okei, aga kuidas on lugu positiivsete temperatuuridega ? Kas seal ka hakkab asbsoluutväärtuselt umbes samas kohas metsa jooksma ? Kui oletada et manipuleeritakse vaid kaheksa bitiga ja iga biti väärtus on 0,0625 kraadi, siis 8 biti korral maksimumväärtus on 256x0,0625=16 kraadi. Mis on üpris lähedal sellele jamamispiirile. Ehk et kui ka positiivse temperatuuri korral jama tekib, siis tuleks softile otsa vaadata.....

                  Comment


                    #10
                    Vs: Elektrooniline termomeeter jamab külmaga

                    Pos temp on OK.

                    Comment


                      #11
                      Vs: Elektrooniline termomeeter jamab külmaga

                      Esmalt postitatud qwerty poolt Vaata postitust
                      Library's võib teoreetiliselt viga olla küll, kuid ise ma seda sealt leida ei oska.
                      https://github.com/tomdeboer/SparkCoreDallasTemperature
                      Kas seal on viga veel ei ütle aga tolles PDF failis on küll FF6Fh vale ja peaks olema FE6Fh.
                      Kirjutasin selle temperatuuri arvutamise koha välja. Muu klappis ja see koht ka kui oleks seal E.
                      Vaatame mis homme saab.
                      Kas Sa ise transleerisid programmi?
                      Ja siis suudad ka natuke muuta?

                      Comment


                        #12
                        Vs: Elektrooniline termomeeter jamab külmaga

                        FF6Fh vs FE6Fh - ilmselt on datasheedis lihtsalt typo. Kui ka reaalses elus selline viga sees oleks, oleks see ammu leitud ja parandatud.
                        Aga kas mitte -127 ei tähendanud "device disconnected" olekut ? Siis on ilmselt asi ikkagi jubinas endas. Hiinakatega võib kõik võimalik olla. Peaks vist enda omasid ka testima. Väljas enam nii palju miinust pole, aga sügavkülmas ikka on.....

                        Comment


                          #13
                          Vs: Elektrooniline termomeeter jamab külmaga

                          Esmalt postitatud Arvi poolt Vaata postitust
                          FF6Fh vs FE6Fh - ilmselt on datasheedis lihtsalt typo.
                          Jah. Aga see näitab nende tegemiste lohakust.
                          Selle väikese programmiga saab kontrollida millised peavad olema näidud.
                          seal -15 C kandis.
                          Ja seal on veel mitu parameetrit mis tuleb paika saada.
                          Huvitav et DS18B20 B-d seal programmis eraldi ei mainita. Teistele otsitakse konstante.

                          Comment


                            #14
                            Vs: Elektrooniline termomeeter jamab külmaga

                            Minul arduinol käib temperatuuri näidu lugemine nii:

                            Kasutan OneWire.h librarit.

                            Kood:
                            void dumpTemps(){
                            
                              termString = "";
                              if(!numFound)
                                return;
                              ds.reset();
                                
                              ds.write(0xCC);             // Skip ROM
                              ds.write(0x44, 0);          // start conversion, with parasite power off at the end
                              
                              delay(750);     // maybe 750ms is enough, maybe not
                              
                              for(addrSub = 0; addrSub < numFound; addrSub++) {
                            
                                // the first ROM byte indicates which chip
                            
                                switch (addr[addrSub][0]) {
                                  case 0x10:
                            //     Chip = DS18S20 or old DS1820
                                    type_s = 1;
                                    break;
                            
                                  case 0x28:
                            //   Chip = DS18B20
                                    type_s = 0;
                                    break;
                            
                                  case 0x22:
                            //   Chip = DS1822
                                    type_s = 0;
                                    break;
                            
                                  default:
                                    Serial.println("Device is not a DS18x20 family device.");
                                    return;
                                } 
                                
                               // we might do a ds.depower() here, but the reset will take care of it.
                              
                                present = ds.reset();          // Reset the bus
                                ds.select(addr[addrSub]);      // do a match ROM
                                 ds.write(0xBE);                // Read Scratchpad
                                for ( i = 0; i < 9; i++) {           // we need 9 bytes
                                  data[i] = ds.read();
                                }
                                // convert the data to actual temperature
                                unsigned int raw = (data[1] << 8) | data[0];
                                if (type_s) {
                                  raw = raw << 3; // 9 bit resolution default
                                  if (data[7] == 0x10) {
                                    // count remain gives full 12 bit resolution
                                    raw = (raw & 0xFFF0) + 12 - data[6];
                                  }
                                } else {
                                  byte cfg = (data[4] & 0x60);
                                  if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
                                  else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
                                  else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
                                  // default is 12 bit resolution, 750 ms conversion time
                                }
                            
                                termString += "\t";
                                celsius = (float)raw / 16.0;
                            
                            // Kuna floati ei saa stringi saata, tuleb teha mõned teisendused: 
                              int kraad = int(celsius);  
                            //  int kymnendikud = int((celsius - kraad)*100);    // kaks kohta peale koma .00 -> ,0  .68 -> .69
                              int kymnendikud = int(((celsius - kraad)+0.05)*10);    // üks koht peale koma ja sajaliste ümardamine
                                termString += String(kraad,DEC);   // Stringi ei saa saata floati  
                                termString += ".";                 // Eesti keeles on täisosa ja murdosa eraldajaks koma, mitte punkt.
                                termString += String(kymnendikud,DEC);        
                              }
                            
                            }
                            MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                            KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                            Comment


                              #15
                              Vs: Elektrooniline termomeeter jamab külmaga

                              Kood iseenesest selline vbl hakkab kuskil kellelgi kala silma:

                              Kood:
                              // This #include statement was automatically added by the Spark IDE.
                              #include "TimeAlarms/TimeAlarms.h"
                              
                              // This #include statement was automatically added by the Spark IDE.
                              #include "OneWire/OneWire.h"
                              
                              // This #include statement was automatically added by the Spark IDE.
                              #include "spark-dallas-temperature/spark-dallas-temperature.h"
                              //#define EVENTNAME "temperatuur"
                              
                              DallasTemperature dallas(new OneWire(D6));
                              
                              String writeAPIKey = "GOKBGDF6";
                              String channelID = "24877";
                               
                              TCPClient client;
                              double celsius = 1;
                              unsigned int now = 0;
                              //UDP UDPClient;
                              
                              String timeStr;
                              
                              void setup()
                              {
                                  Serial.begin(9600);
                                  dallas.begin();
                                  Time.zone(+2);
                                  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
                                  Alarm.timerRepeat(60, Repeats);   
                                  Alarm.timerOnce(10, OnceOnly);   
                              }
                              
                              void loop()
                              {
                                  dallas.requestTemperatures();
                                  celsius = dallas.getTempCByIndex( 0 );
                              
                               
                              
                               
                                //  Spark.publish(EVENTNAME, String(celsius, 1), 60, PRIVATE);  // <-- observe STRING
                                  Serial.print("Temp (andurplaadi serial): "); Serial.println(celsius) ;
                              
                                   Alarm.delay(1000); 
                              
                              }
                              
                              void ThingSpeakUpdate(String tsData)
                              {
                                  Serial.println("Date string: " + tsData);
                                   
                                  Serial.println("...Connecting to Thingspeak");
                                   
                                  // Connecting and sending data to Thingspeak
                                  if(client.connect("api.thingspeak.com", 80))
                                  {
                                      Serial.println("...Connection succesful, updating datastreams");
                                       
                                      client.print("POST /update HTTP/1.1\n");
                                      client.print("Host: api.thingspeak.com\n");
                                      client.print("Connection: close\n");
                                      client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
                                      client.print("Content-Type: application/x-www-form-urlencoded\n");
                                      client.print("Content-Length: ");
                                      client.print(tsData.length());
                                      client.print("\n\n");
                                       
                                      client.println(tsData); //the ""ln" is important here.
                                   
                                      // This delay is pivitol without it the TCP client will often close before the data is fully sent
                                      delay(250);
                                       
                                      Serial.println("Thingspeak update sent.");
                                  }
                                  else{
                                      Serial.println("Unable to connect to Thingspeak.");
                                  }
                                   
                                  if(!client.connected()){
                                      client.stop();
                                  }
                                  client.flush();
                                  client.stop();
                              }
                              
                              void MorningAlarm(){
                                  Spark.syncTime();
                              }
                              
                              
                              
                              void Repeats(){
                                  if(Spark.connected())
                                  {
                                      ThingSpeakUpdate("field1="+String(celsius, 1));
                                  }
                              }
                              
                              void OnceOnly(){
                                  Spark.syncTime();
                              }

                              Comment

                              Working...
                              X