Teade

Collapse

Foorumi reeglid.

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

Pingesalvesti

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

    Pingesalvesti

    Äkki oskate pakkuda mingit seadet, mis teeks ära järgneva töö.
    Ühendaks seadme 12 V alalispingega süsteemi külge ja seade salvestaks määratud aja tagant (hea kui saaks mingite variantidega ise määrata) pingeid. Pärast ühendaks USB kaudu arvutiga ja vaataks salvestatud pingeid ja need võiks olla sellisel kujul, millest oleks hea Exceliga graafikut joonistada.

    #2
    Vs: Pingesalvesti

    Arduino sisendisse pingejagur.
    Arduino külge SD shield.
    Andmed kirjutad SD kaardile faili, mille päises kirjeldad väljad,
    iga järgnev rida failis on tühikuga eraldatud näidud.
    Faili laiendiks paned .csv , tabelarvutus programmid oskavad seda ilusti lugeda.
    Vajadusel võid lisada ka kellamooduli.
    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

    Comment


      #3
      Vs: Pingesalvesti

      Ei tea Arduinost hetkel suurt midagi, aga kuuldu põhjal tundub huvitav süsteem olema. Kas saad linkida kõik vajalikud seadmed, mida vaja oleks?
      Tegelikult Arduino teatud eesmärgil kasutamise kohta on olnud plaanis ka natuke uurida, aga selle kohta pean teise teema tegema.

      Comment


        #4
        Vs: Pingesalvesti

        Kunagi sai selline temperatuuri loger valmis tehtud:

        Arduino küljes oli: SD card chield, kellamoodul ja hunnik 1-wire temperatuuriandureid,
        kood siin.
        Siia saab lisada analoog sisenditest pinge lugemise.

        Kood:
        #include <OneWire.h>
        #include "Wire.h"
        #define DS1307_ADDRESS 0x68    // DS1307 SDA ots arduino A4, SCK ots A5
        #include <SD.h>
        
        //  SD card attached to SPI bus as follows:
        // MOSI - pin 11
        // MISO - pin 12
        // CLK - pin 13
        // CS - pin 4
        
        // 1-wire stuff
        OneWire  ds(3);     // pin 3
        
        long previousMillis = 0;        // will store last time
        // the follow variables is a long because the time, measured in miliseconds,
        // will quickly become a bigger number than can be stored in an int.
        long interval = 30000;           // interval (milliseconds) 
        
        byte i;
        byte present = 0;
        byte type_s;
        byte data[12];
        byte addr[9][8];     // testitud 8 anduriga
        byte numFound;
        byte addrSub;
        float celsius;
        String dataString;
        String termString;
        String ajaString;
        const int chipSelect = 4;
        File logfile;
        char filename[] = "LOGGER00.CSV";
        
        
        void setup() {
            Wire.begin(); // DS1307 kellaaja lugemise käivitus
         Serial.begin(57600);    // Kui see rida välja kommida, siis läheb ilma com pordita käima.
          numFound = 0;
        
          Serial.print("Initializing SD card...");
          // make sure that the default chip select pin is set to
          // output, even if you don't use it:
          pinMode(10, OUTPUT);
          
          // see if the card is present and can be initialized:
          if (!SD.begin(chipSelect)) {
            Serial.println("Card failed, or not present");
            // don't do anything more:
            return;
          }
          Serial.println("card initialized.");
        
           String dataString = "Aeg\tkell"; 
              
        // Search for 1-wire devices     
          for(addrSub = 0; addrSub < 9; addrSub++){     // testitud 8 anduriga
            if ( ds.search(addr[addrSub])) {
              numFound++;
                dataString +=  "\t";    
              for( i = 0; i < 8; i++) {
                int arv = 0;
                arv = addr[addrSub][i];
                  if(arv < 16)
                   dataString += "0";
                 dataString += String(arv, HEX);  
                    if(i == 3)
                   dataString += " ";    // Tekitame anduri nime keskele tühiku.
              }
        
              if (OneWire::crc8(addr[addrSub], 7) != addr[addrSub][7]) {
                Serial.println("CRC is not valid!");
                return;
              }
         
            } else {
              printDate(); // käivitame DS1307 aja väljastamise
              dumpTemps();  // Loeme temperatuurid   
              break;
            }
          }
          
          // open the file. note that only one file can be open at a time,
          // so you have to close this one before opening another.
        
          // create a new file
          for (uint8_t i = 0; i < 100; i++) {
            filename[6] = i/10 + '0';
            filename[7] = i%10 + '0';
            if (! SD.exists(filename)) {
              // only open a new file if it doesn't exist
              logfile = SD.open(filename, FILE_WRITE); 
          
          Serial.print("Logging to: ");
          Serial.println(filename);
          
          // if the file is available, write to it:
            Serial.println(dataString);  // trükkime päise
            logfile.println(dataString);
            logfile.println(ajaString + termString);
            logfile.close();
            // print to the serial port too:
            Serial.println(ajaString + termString);
          
            break;  // leave the loop!
            }
          }
           
        }
        
        
        void loop() {
          
          // Mõõtmiste samm, laseb, prose vabaks, aga maksimum 50 päeva, siis läheb nulli
          // here is where you'd put code that needs to be running all the time.
          // check to see if it's time  that is, if the
          // difference between the current time and last time 
          // is bigger than the interval at which you want to
           unsigned long currentMillis = millis();
           if(currentMillis - previousMillis > interval) {
            // save the last time
            previousMillis = currentMillis; 
            
            printDate();   // Loeme kellaaja stringi
            dumpTemps();   // Loeme temperatuurid stringi
               
          // open the file. note that only one file can be open at a time,
          // so you have to close this one before opening another.
          
          logfile = SD.open(filename, FILE_WRITE);
        
          // if the file is available, write to it:
          if (logfile) {
        
            logfile.println(ajaString + termString);
            logfile.close();  // see rida kirjutab andmed faili.
            // print to the serial port too:
            Serial.println(ajaString + termString);
          }  
          // if the file isn't open, pop up an error:
          else {
            Serial.println("error opening logfile");
          }   
            
          }
        }
        
        void printDigits(byte digits){
          // utility function for digital clock display: prints colon and leading 0
          if(digits < 10) {
          ajaString +=  "0";
          }
            ajaString +=  String(digits,DEC); 
        }
        
        // välimine DS1307 kell
        byte bcdToDec(byte val)  {
        // Convert binary coded decimal to normal decimal numbers
          return ( (val/16*10) + (val%16) );
        }
        
        void printDate(){
        
          // Reset the register pointer
          Wire.beginTransmission(DS1307_ADDRESS);
        
          byte zero = 0x00;
          Wire.write(zero);
          Wire.endTransmission();
        
          Wire.requestFrom(DS1307_ADDRESS, 7);
        
          int second = bcdToDec(Wire.read());
          int minute = bcdToDec(Wire.read());
          int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
          int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
          int monthDay = bcdToDec(Wire.read());
          int month = bcdToDec(Wire.read());
          int year = bcdToDec(Wire.read());
        
         // digital clock display of current time
           ajaString =  ""; 
          printDigits(monthDay); 
           ajaString +=  "-";
          printDigits(month);
           ajaString +=  "-"; 
          printDigits(year); 
          ajaString +=  "\t"; 
          printDigits(hour); 
           ajaString +=  ":";
          printDigits(minute);
           ajaString +=  ":";
          printDigits(second);
        
        }
        
        
        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


          #5
          Vs: Pingesalvesti

          Praegu teen 1-wire temp logerit ESP-12F WiFi moodulile.
          (Sellel moodulil peaks olema ka üks analoogsisend.)
          Moodul ühendub minu kodu WiFi võrku.
          Moodul loeb 1-wire andurite temperatuurid ja saadab need koos teiste andmetega HTTP päringu kujul minu virtuaalserverisse planet.ee -s
          Virtuaalserveris olev php fail mille poole moodul pöördub, loeb päringust andmed ja salvestab need SQL andmebaasi.
          Andmebaasist saab juba üle Võrgu andmeid lugeda.
          Praeguseks on üle FTP andmeid planet.ee-sse saatnud juba kaheksa aastat minu ruuter. - http://lennuki.planet.ee/termomeeter/
          MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
          KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

          Comment


            #6
            Vs: Pingesalvesti

            Esmalt postitatud abp poolt Vaata postitust
            Ei tea Arduinost hetkel suurt midagi, aga kuuldu põhjal tundub huvitav süsteem olema. Kas saad linkida kõik vajalikud seadmed, mida vaja oleks?
            Tegelikult Arduino teatud eesmärgil kasutamise kohta on olnud plaanis ka natuke uurida, aga selle kohta pean teise teema tegema.
            Kui päris alustaja, siis võib ju ka lihtsalt lähimast oomipoest läbi minna, arduino Uno kaasa võtta, sisendisse paar takistit pingejaguriks panna.
            (Kui Oomipoe oma kallis tundub ja on aega oodata, võib hiinast Nano tellida https://www.banggood.com/ATmega328P-...r_warehouse=UK )
            Instaleerida Arduino koos ÕIGETE draiveritega, avada näidetest AnalogInOutSerial see arduinosse saata ja lihtsalt kopeerid analoogsisendite väärtused serialmonitori aknast üle tekstiredaktori exelisse.
            viimati muutis kasutaja klm; 16 m 2018, 21:05. Põhjus: lisatud hiina link
            MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
            KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

            Comment


              #7
              Vs: Pingesalvesti

              Päris soojalembene oled.
              Milliseid detaile siit vaja oleks: https://www.oomipood.ee/category/rob...ktorid/arduino

              Comment


                #8
                Vs: Pingesalvesti

                Kolm varianti:
                1) hakkad õppima progmist Arduino baasil. Ei lähe nii lihtsalt, et poest 1-2-3 ja õhtuke netis. Alustamiseks on rahaline väljaminek tuntav, ajaline mõõde hoomamatu. Aga vahva saaks olema.
                2) lased allhankena kasvõi Arduino-baasil süsteemi kokku panna; ainult korralik probleemipüstitus-täpsustus ja rahakulu. Kokkuvõttes võib tulla odavam kui 1. punkt.
                3) lased teha allhankena ja kasutad tööstuslikku kontrollerit. Võib tulla kallim kui 1 ja 2 kokku, aga tuleviku perspektiiv ja töökindlus on suuremad ja n.ö iga tööstusprogemist valdav asjatundja on suuteline tulevikus asja haldama või parendama.

                Elavat arutelu põhjustavad punktid 1 ja 2, 3. jaoks tuleb natuke eeltööd teha.
                Erilahendused.
                PS või mail.

                Comment


                  #9
                  Vs: Pingesalvesti

                  Tööstusliku kontrolleriga arvatavasti läheks liiga kalliks, ega ma iga päev seda seadet ei kasuta ja raha ka ei teeni sellega. Kui palju Arduino detailid kokku võiksid maksma minna? Ilmselt pole aega ja piisavalt tahtmist endal seda selgeks õppida ja laseks kellelgi teha.

                  Comment


                    #10
                    Vs: Pingesalvesti

                    Esmalt postitatud abp poolt Vaata postitust
                    Päris soojalembene oled.
                    Milliseid detaile siit vaja oleks: https://www.oomipood.ee/category/rob...ktorid/arduino
                    Kisub jah väga palavaks - ühistu otsustas Kredexi remondi teha ja hetkel on paks väline soojustus majale juba pandud, kuid torumehed ei ole veel kütet ringi teinud.

                    Alustuseks soovitaks klassikat - https://www.oomipood.ee/product/a000...duino_uno_rev3
                    Lisaks paar takistit 1:4 või 1:5 pingejaguriks - Uuno analoog sisend on max 5V.

                    Sellest näitest AnalogInOutSerial oleks küll hea osa välja komenteerida ja kustutada, aga peaks ka niisama sisendi väärtused kätte saama.
                    Järgi jääks midagi sellist:
                    Kood:
                     const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
                    
                    int sensorValue = 0;        // value read from the pot
                    
                    void setup() {
                      // initialize serial communications at 9600 bps:
                      Serial.begin(9600);
                    }
                    
                    void loop() {
                      // read the analog in value:
                      sensorValue = analogRead(analogInPin);
                    
                      // print the results to the Serial Monitor:
                    //  Serial.print("sensor = ");
                      Serial.println(sensorValue);
                    
                      // wait 20 seconds before the next loop for the analog-to-digital
                      // converter to settle after the last reading:
                      delay(20000);
                    }
                    Raha eest ei taha teha - viletsalt, ruttu ja odavalt ei taha, korralikult tegemiseks pole aga üleliigset vaba aega.
                    viimati muutis kasutaja klm; 16 m 2018, 22:41.
                    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                    Comment


                      #11
                      Vs: Pingesalvesti

                      Kas aga mingit sama eesmärki täitvat valmistoodet pole olemas?

                      Comment


                        #12
                        Vs: Pingesalvesti

                        The EasyLog EL-USB-3 Voltage data logger by Lascar Electronics measures more than 32,000 readings over a 0 to 30V d.c. range at a resolution of 50 mV d.c.


                        Logib pulga sisse, pärast arvutiga loed välja.
                        50EUR, uus, kui soovid.
                        Erilahendused.
                        PS või mail.

                        Comment


                          #13
                          Vs: Pingesalvesti

                          See paistab olema täpselt see, mida vaja ja hind ka OK.

                          Comment


                            #14
                            Vs: Pingesalvesti

                            Click image for larger version

Name:	aku pinge.jpg
Views:	1
Size:	51,4 KB
ID:	871003

                            Prooviks logisin ühe kehvas seisukorras oleva autoaku pinge muutumist u. 5 A koormusega (12 V juures 5 A, eks pinge alanedes langesid ka amprid). Aku oli täis laetud (nagu näha kohe koormuse külge ühendamisel oli pinge väga madal 12 V aku kohta).

                            Comment

                            Working...
                            X