Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Måle snødybde


Anbefalte innlegg

Jeg hadde planlagt å peke sensoren litt ut slik at det traff ett punkt ca. 20 cm lenger ut en loddrett. Men siden jeg plagdes med å få sikkelig data på slutten så endte den nok helt loddrett eller bitte litt inn mot garasjeporten. Nå når jeg vet at jeg oppnår best resultat med garasjeporten igjen så kanskje jeg prøver på nytt å vinkle den litt ut.

 

Utenfor sensoren så er raftekassen, ca 1,5 meter opp og 30-40 cm utover. Det er ca. 35-45 cm fra sensoren inn til garasjeporten. Ta tallene med en klype salt :)

 

Det er kjempelenge siden jeg bestillte den trafoen, men nå var jeg gått tom for mobilladere så jeg hadde ikke noe valg. Jeg mener å huske at jeg leste noen reviews og fant ut at prisen var grei nok til at jeg tør å bruke den. Foreløpig med stikkontakt i garasjen.

 

De ethernet-modulene er kjøpt separat. Altså kortet og pluggen hver for seg. Søk etter "RJ45 Ethernet Connector Breakout Board" på E-Bay.

 

Planen er å vite når jeg står opp om vi må stresse for å rekke å måkke eller ikke. På sikt kan det være fornuftig å stå opp 15 minutter tidligere :)

Endret av xibriz
Lenke til kommentar
Del på andre sider

Nå prøvde jeg å vinkle sensoren litt ut slik at den treffer bakken helt utenfor garasjen. Det gikk bra så lenge porten er igjen.

 

De to toppene er når porten er åpen:

image.thumb.png.cdffce99f02339dff025dad1fcbef1f1.png

 

Her satt jeg søppeldunken under:

image.thumb.png.ac13fbad55f11b7541a74d6f66c2fa89.png

 

Det er ikke meldt nedbør den neste uken så det er bare å smøre seg med tålmodighet.

Lenke til kommentar
Del på andre sider

Det kommer (kanskje) litt mindre snø helt inntil porten enn under åpen himmel + alt snøen kan bli komprimert rett forran porten hvis pga. varmluft som siger ut av garasjen.

 

Jeg har ikke oppvarmet garasje, men det er varmere inni en utenfor.

Endret av xibriz
Lenke til kommentar
Del på andre sider

For snømåling så bør jo sensoren stå langt ute på et jorde, og være upåvirket av alle objekter rundt (turbulens som legger snøen ujevnt). For snømåkebehovsensor så er kanskje kravene litt mindre.. ;)

 

Har du tenkt på korrigering av distanse etter temperatur? Lydhastigheten endrer seg noe med temperatur. Hvis lyden skal 2.5 meter ned og 2.5 meter tilbake igjen, så vil en temperaturforskjell på 10 grader gi sånn ca 9 cm forskjell etter et raskt overslag.

Lenke til kommentar
Del på andre sider

Koden, som jeg stort sett stjal på internett, tar høyde for både temperatur å luftfultighet. Det er derfor jeg har en DHT22 der :)

 

Alle funksjoner under loop er kun for å håntere MQTT og FOTA-oppgradering.

 

#include "DHT.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>

#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// 3.3v = Ethernet 1
// 5v = Ethernet 2
// GND = Ethernet 7 and 8
#define trigPin 5 //Ethernet 5
#define echoPin 4 //Ethernet 4
#define dhtPin 2 // Ethernet 3

const int FW_VERSION = 1001;

WiFiClient espClient;
PubSubClient client(espClient);

// WiFi and MQTT endpoints
const char* ssid     = "ssid";
const char* password = "pass";
const char* mqtt_server = "mqtt";

const char* mqtt_topic_fw_version = "esp/sensor3/fw/version";
const char* mqtt_topic_fw_update = "esp/sensor3/fw/update";
const char* mqtt_topic_fw_info = "esp/sensor3/fw/info";

const char* mqtt_topic_temp = "esp/sensor3/temperature";
const char* mqtt_topic_humid = "esp/sensor3/humidity";
const char* mqtt_topic_dist = "esp/sensor3/distance";

DHT dht(dhtPin, DHTTYPE);
float lastTime = 0;

void setup() {
  setupWiFi();
  setupMqtt();
  
  Serial.begin (9600);
  delay(10);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  dht.begin();
}

void loop() {
  loopMqtt();
  
  float duration, distance;
  float speed;

  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  speed = 331.4 + (0.606 * temperature) + (0.0124 * humidity);
  distance = (duration / 2) * (speed / 10000) - 1.5; //Calibrated -1.5 cm
  
  if (distance >= 400 || distance <= 2){
    Serial.print("Distance = ");
    Serial.println("Out of range");
  }
  else {
    Serial.print("Distance = ");
    Serial.print(distance);
    Serial.println(" cm");
    delay(1000);
  }
  
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.print(" *C ");
  Serial.print("    Humidity = ");
  Serial.print(humidity);
  Serial.println(" % ");

  
  if(millis() - lastTime >= 5000) {
    lastTime = millis();

    client.publish(mqtt_topic_temp, ((String)temperature).c_str());
    client.publish(mqtt_topic_humid, ((String)humidity).c_str());
    client.publish(mqtt_topic_dist, ((String)distance).c_str());
  }
  
  delay(1000);
}

void setupMqtt()
{
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void setupWiFi()
{
  delay(10);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}


void callback(char* topic, byte* payload, unsigned int length) {
  if (strcmp(topic, mqtt_topic_fw_update) == 0) {
    String fwURL = "";
    for (int i = 0; i < length; i++) {
      fwURL.concat( (char)payload[i] );
    }
  
    checkForUpdates(fwURL);
  }
}


// Ensure the MQTT lirary gets some attention too
void loopMqtt()
{
  if (!client.connected()) {
    reconnectMqtt();
  }
  client.loop();
  delay(100);
}

void reconnectMqtt() {
  // Loop until we're reconnected
  while (!client.connected()) {
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    
    // Attempt to connect
    if (client.connect(clientId.c_str())) {
      client.subscribe(mqtt_topic_fw_update);
      client.publish(mqtt_topic_fw_version, ((String)FW_VERSION).c_str());
    }
    else {
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void checkForUpdates(String fwURL) {
  String fwVersionURL = fwURL;
  fwVersionURL.concat( ".version" );

  client.publish(mqtt_topic_fw_info, ((String)"Checking for firmware updates.").c_str());
  client.publish(mqtt_topic_fw_info, fwVersionURL.c_str());

  HTTPClient httpClient;
  httpClient.begin( fwVersionURL );
  int httpCode = httpClient.GET();
  if( httpCode == 200 ) {
    String newFWVersion = httpClient.getString();

    client.publish(mqtt_topic_fw_info, ((String)"Current firmware version").c_str());
    client.publish(mqtt_topic_fw_info, ((String)FW_VERSION).c_str());
    client.publish(mqtt_topic_fw_info, ((String)"Available firmware version").c_str());
    client.publish(mqtt_topic_fw_info, newFWVersion.c_str());
    
    int newVersion = newFWVersion.toInt();

    if( newVersion > FW_VERSION ) {
      client.publish(mqtt_topic_fw_info, ((String)"Preparing to update").c_str());

      String fwImageURL = fwURL;
      fwImageURL.concat( ".bin" );

      client.publish(mqtt_topic_fw_info, ((String)"Downloading new firmware.").c_str());
      client.publish(mqtt_topic_fw_info, fwImageURL.c_str());
      
      t_httpUpdate_return ret = ESPhttpUpdate.update( fwImageURL );

      switch(ret) {
        case HTTP_UPDATE_FAILED:
          //Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
          client.publish(mqtt_topic_fw_info, ((String)HTTP_UPDATE_FAILED).c_str());
          client.publish(mqtt_topic_fw_info, ((String)ESPhttpUpdate.getLastError()).c_str());
          client.publish(mqtt_topic_fw_info, ESPhttpUpdate.getLastErrorString().c_str());
          break;
        case HTTP_UPDATE_NO_UPDATES:
          client.publish(mqtt_topic_fw_info, ((String)HTTP_UPDATE_NO_UPDATES).c_str());
          break;
      }
    }
    else {
      client.publish(mqtt_topic_fw_info, ((String)"Already on latest version").c_str());
    }
  }
  else {
    client.publish(mqtt_topic_fw_info, ((String)"Firmware version check failed, got HTTP response code").c_str());
    client.publish(mqtt_topic_fw_info, ((String)httpCode).c_str());
  }
  httpClient.end();
}

 

  • Like 2
Lenke til kommentar
Del på andre sider

51 minutes ago, xibriz said:

Jeg mistenker at sensoren treffer det det ikke er snø. Må nok finne en annen plassering.

Ultralyd-beamen er nok såpass stor der nede at du vil nok se det når det blir mer snø. Men det blir sikkert en "midlingseffekt", så det kan bli nødvendig å kalibrere.

Lenke til kommentar
Del på andre sider

5 timer siden, xibriz skrev:

Jeg mistenker at sensoren treffer det det ikke er snø. Må nok finne en annen plassering

Jeg gjetter på at for å få presisjon nok til å detektere dette snølaget, må du peke sensoren loddrett ned, og montert på en pinne som stikker 1-2 meter ut fra garasjen. 

Lenke til kommentar
Del på andre sider

Nå har jeg prøvd sonsoren her

20181207_142711.thumb.jpg.405fb1143fe319c40d6a959cf619f94d.jpg

 

Og her

20181207_143408.thumb.jpg.f2e0e2ee922535cf6046d7d0a65795cf.jpg

 

Og til slutt her

20181207_143838.thumb.jpg.813732adcd86df9dafb21fc2342db112.jpg

 

Uten å få noen avstand :o prøvde også en ny sensor i tilfelle den var defekt, og kontrollerte mot vegg og det fungerte bra. 

 

Konkluderer med at hc-sr04 er en blindvei. 

  • Thanks 1
Lenke til kommentar
Del på andre sider

1 time siden, xibriz skrev:

 

Uten å få noen avstand :o prøvde også en ny sensor i tilfelle den var defekt, og kontrollerte mot vegg og det fungerte bra. 

 

Konkluderer med at hc-sr04 er en blindvei. 

Får du avstand til bakken under snøen, eller får du bare støy fra sensoren?

 

Siden det finnes proff-varianter av ultralydsensorer der jeg ser teksten "Recommended for snow level measurement" så er det litt snodig hvis ultralyden fra din hc-sr04  er helt ubrukelig (går gjennom snøen)

Lenke til kommentar
Del på andre sider

Jeg får bare støy, ingen reell måling av verken snø eller bakken under.

 

Jeg synes også det er rart. Men hvis jeg skal forske mer på dette må jeg lage en portabel sak for å prøve forskjellige plasseringer. 

 

Lurer på hva som hadde skjedd hvis jeg putter den i ett rør som er ca  10cm langt

Lenke til kommentar
Del på andre sider

Jeg regner med at du har en egen værstasjon? Selv har jeg netatmo m/vind [emoji100] og regn [emoji299] sensor. Jeg tenkt tanken om å kle inn regnsensor i en varme boks, slik at når det snør så tiner den snøen og sensoren registrerer nedbøren. Videre så kan man jo kalkulere snødybde fra nedbør. 1mm regn = 1cm snø[emoji300].

Sent fra min SM-G950F via Tapatalk

Lenke til kommentar
Del på andre sider

On 07/12/2018 at 18:24, xibriz said:

Jeg får bare støy, ingen reell måling av verken snø eller bakken under.

Rart. Har du flere av de så du kan bytte og forsøke en annen? Det kan være en feil på denne ene. Jeg har en sittende i garasjetaket. Den måler avstand til gulvet, som den rapporterer inn til Domoticz, som evt varsler om at porten er glemt åpen.

Der er støy, der er enkeltmålinger som er helt feil (med mindre det spøker i garasjen!) - men den detekterer altså problemfritt avstanden til betonggulvet som er ca 215 cm lavere. Akkurat nå står det en høytrykksvasker under, og den viser da lavere verdi som vist nedenfor. Det ser ut for å bli en slags "midlingseffekt".

image.png.855600ab179cf12590ea09f561888d92.png

 

Hvilken temperatur har du? Kan det tenkes at det er noe i hc-sr04 som ikke takler kulde? (f.eks. membranet i "høyttaleren" som sender ut lyd)

 

EDIT

Vanskelig å finne gode datablader for denne modulen, men denne artikkelen
https://www.sciencedirect.com/science/article/pii/S221302091630163X

omtaler hc-sr04, og litt ned på siden står det:

image.png.92b306b1dbd195b91cfcc3eecf88a8b2.png

Endret av ArnieO
Lenke til kommentar
Del på andre sider

Ja, det kan kanskje hjelpe på. Ser det finnes noen andre billige alternativer:

 

JSN-SR04T

https://www.ebay.com/itm/Arduino-Ultrasonic-Ranging-Measuring-Transducer-Sensor-Waterproof-JSN-SR04T/272266517229?hash=item3f64595aed:g:VvcAAOSwtJZXVnh8:rk:5:pf:0

 

Den må jo være bra.. den koster jo 12 ganger mer enn HC-SR04 ?

Mulig den eneste forskjellen er at den er vanntett?

Endret av xibriz
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.