ZieuwentLive!

  • 10 Augustus 2011
  • Een blij plaatje

  • Even een blij plaatje. De sensor ligt op mijn kantoortje voor het raam in de vensterbank. De temperatuur is constant. De relatieve vochtigheid niet. Dit is duidelijk te zien in het onderstaande plaatje

  • Het diagram wordt automatisch gegeneerd in de backoffice middels de Libchart class De afbeelding is momenteel nog niet (semi)dynamisch. Semi dynamisch?  Genereren van diagrammen op gezette tijden. Deze opslaan op de server en presenteren. Dit ontlast de server. Het genereren uit grote hoeveelheden data is nogal belastend voor de server.

    Daarnaast: di scripten is nu niet aan de orde. Komt later wel, als er meer data is. En de tijd ontbreekt momenteel...


  • 12 December 2010
  • Datalogger werkt!

  • Hoi hoi hoi. Het werkt!

    Ik heb de code aangepast, 2 scripts samengevoegd om temperatuur en vochtigheid naar de webserver te sturen. Het koste me wat zoekwerk. In het gecombineerde script werkte of het temperatuur-deel, of het webserver deel. Het blijkt dat de ethernetshield (netwerkkaartje) pin11 gebruikt. De temperatuursensor aangesloten op pin 6 en 7 en nu werkt het!

  • [code]

    #include <SPI.h>
    #include <string.h>
    #include <Ethernet.h>

    // De temperatuur/relatieve vochtigheids sensor
    // Maurice Ribble
    // 4-3-2008
    // http://www.glacialwanderer.com/hobbyrobotics

    // This code tests the SHT15 on the Arduino board.
    // This app assumes your data pin is pin 10 and your your clock pin is pin 11.
    // To run this app just attach HyperTerminal (or similar serial communications tool)
    // to your Arduino board at 9600 bits per second.  I also needed te set the
    // flow control to none or I couldn't send commands to my Arduino board via HyperTerminal.
    // Then press the 't' key to take a temperature reading or the 'h' key to take a
    // humidity reading.

    // These are commands we need to send to HSHT15 to control it
    int gTempCmd  = 0b00000011;
    int gHumidCmd = 0b00000101;
    int shiftIn(int dataPin, int clockPin, int numBits)
    {
       int ret = 0;
       int i;

       for (i=0; i<numBits; ++i)
       {
          digitalWrite(clockPin, HIGH);
          delay(10);  // I don't know why I need this, but without it I don't get my 8 lsb of temp
          ret = ret*2 + digitalRead(dataPin);
          digitalWrite(clockPin, LOW);
       }

       return(ret);
    }

    void sendCommandSHT(int command, int dataPin, int clockPin)
    {
      int ack;

      // Transmission Start
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      digitalWrite(dataPin, HIGH);
      digitalWrite(clockPin, HIGH);
      digitalWrite(dataPin, LOW);
      digitalWrite(clockPin, LOW);
      digitalWrite(clockPin, HIGH);
      digitalWrite(dataPin, HIGH);
      digitalWrite(clockPin, LOW);
              
      // The command (3 msb are address and must be 000, and last 5 bits are command)
      shiftOut(dataPin, clockPin, MSBFIRST, command);

      // Verify we get the coorect ack
      digitalWrite(clockPin, HIGH);
      pinMode(dataPin, INPUT);
      ack = digitalRead(dataPin);
      if (ack != LOW)
        Serial.println("Ack Error 0");
      digitalWrite(clockPin, LOW);
      ack = digitalRead(dataPin);
      if (ack != HIGH)
         Serial.println("Ack Error 1");
    }

    void waitForResultSHT(int dataPin)
    {
      int i;
      int ack;
     
      pinMode(dataPin, INPUT);
     
      for(i= 0; i < 100; ++i)
      {
        delay(10);
        ack = digitalRead(dataPin);

        if (ack == LOW)
          break;
      }
     
      if (ack == HIGH)
        Serial.println("Ack Error 2");
    }

    int getData16SHT(int dataPin, int clockPin)
    {
      int val;
     
      // Get the most significant bits
      pinMode(dataPin, INPUT);
      pinMode(clockPin, OUTPUT);
      val = shiftIn(dataPin, clockPin, 8);
      val *= 256;

      // Send the required ack
      pinMode(dataPin, OUTPUT);
      digitalWrite(dataPin, HIGH);
      digitalWrite(dataPin, LOW);
      digitalWrite(clockPin, HIGH);
      digitalWrite(clockPin, LOW);
              
      // Get the lest significant bits
      pinMode(dataPin, INPUT);
      val |= shiftIn(dataPin, clockPin, 8);

      return val;
    }

    void skipCrcSHT(int dataPin, int clockPin)
    {
      // Skip acknowledge to end trans (no CRC)
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);

      digitalWrite(dataPin, HIGH);
      digitalWrite(clockPin, HIGH);
      digitalWrite(clockPin, LOW);
    }

     

    // Webserver settings
    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte ip[] = {
      192, 168, 1, 36};
    byte server[] = { 12, 34, 56, 78};
    // String buffer
    char buffer[256];

    Client client(server, 80);

    void setup()
    {
      Ethernet.begin(mac, ip);
      Serial.begin(9600);
      delay(1000);
      //Serial.println("connecting...");
    }

    void loop()
    {
      //  Serial.println("loop works");
      // De sensor gegevens ophalen
      int theDataPin  = 6;
      int theClockPin = 7;
      //int ack;

      int tempval;
      int temp;
            
      sendCommandSHT(gTempCmd, theDataPin, theClockPin);
      waitForResultSHT(theDataPin);
      tempval = getData16SHT(theDataPin, theClockPin);
      skipCrcSHT(theDataPin, theClockPin);
      temp = -40.0 + 0.01 * (float)tempval;
      // De relatieve vochtigheid
      int humval;
      int humid;
              
      sendCommandSHT(gHumidCmd, theDataPin, theClockPin);
      waitForResultSHT(theDataPin);
      humval = getData16SHT(theDataPin, theClockPin);
      skipCrcSHT(theDataPin, theClockPin);
      humid = -4.0 + 0.0405 * humval + -0.0000028 * humval * humval;
      delay(1000);           
      Serial.println(temp);
      Serial.println(humid);
      if (client.connect())
        {
          // Serial.println("connected");
          sprintf(buffer, "HEAD /pathtologpage.php?temp=%d&humid=%d HTTP/1.1", temp, humid);
          client.println(buffer);
          client.println("Host: jorisbeerten.nl");
          client.println("Connection: close");
          client.println();
          client.stop();
          // Serial.println("client connected");
        }
       else
          {
            // Serial.println("connection failed");
          }
        delay(10000);  // wait 1 minute before sending new data
      }

    [/code]

    Bij de weg: wie kent er een plugin voor ckeditor om code als opegmaakt veld waar te geven?


  • 10 December 2010
  • Begonnen met Arduino datalogger

  • Vandaag weer eens wat gespeeld met mijn Arduino bordje. Het idee is om sensoren aan te sluiten op het bordje en vervolgens de verzamelde gegevens door te sturen naar mijn webserver

  • Het doorsturen van data naar de webserver werkt. Middels php en $_GET variabelen in de url die ik aanroep kan ik data in een database stoppen. Op de arduino zit een webclient die ik 111.111.111.111/log.php?temp=%d&humid=%d laat aanroepen.

    SHT15 temperatuurssensor en relatieve vochtigheidssensor werken ook. Als ik de sensor op mijn Arduino aansluit krijg ik data te zien. Check deze site voor de code

    Volgende stap is om de twee scripts te combineren ten einde echt data te uploaden. Nou ja, uploaden, overbrengen.

    Uiteraard ooit ook toerental, windsnelheid en richting etc. Maar laat ik vooraan beginnen...


RSS-feed, Altijd meteen op de hoogte van het laatste nieuws van Joris Beerten

M F
C O
Login