Projekt regnsensor

I mitt projekt med att automatisera trädgården insåg jag att en regnsensor behövdes. Bestämde mig därför för att bygga en egen från grunden upp. Den största orsaken till det var för att lära mig mer om 3D utskrifter och CAD. Jag kommer återge utvecklingen av vattenmätaren och de fallgropar jag upptäckt på vägen.  All info för att du sedan ska kunna bygga en kommer finns här. Förhoppningsvis kommer sensorn att utvecklas under en bra tid framöver och delar uppgraderas.  Är du enbart intresserad av att se det färdiga resultatet så kan du gå till den här sidan (Summering av regnsensorn ). Vill du däremot se hur mycket arbete det är bakom en så pass enkel sak som en regnmätare så fortsätt läsa.

Den nuvarande versionen (2018-08-25) av regnsensorn är uppbyggd i moduler. Min förhoppning är att addera mer än bara regnsensor i denna i framtiden.

Jag valde att använda CAD programmet Fusion 360 eftersom den har en fördelaktig licensform. Jag delar med mig av all kod och STL filerna (filtypen som 3D skrivaren förstår). Kom gärna med tips på vad som går att göra bättre eller idéer på vad mer som borde ändras. Har som planerat på att göra en smart regnmätaren och att den ska gå att ladda hem och bygga själv.

Min modell går att vrida och vända på live i webbläsaren under följande länk: Fusion360

Det är mycket bilder och förklaring om varför respektive steg gick som det gick 🙂

Nuvarande version av regnmätaren är 2.0 (2018-08-10)

Logg: 1.0 ( 2018-07-30)

Regnmätare V1.0
Regnmätare V1.0

Det finns flera sätt att mäta regn, jag bestämde mig dock för tekniken med en vippbräda och två kärl som tippar när nog mycket vatten fyllt en sida. Det var en rolig teknik  att lösa med 3d Skrivaren. Som bilden en bit ner (”Första delen Fusion 360”) visar så valde jag att göra det så simpelt som möjligt eftersom mina kunskaper inom Fusion 360 är mycket begränsade vid projektstarten. Jag skrev ut delarna separat till en början. Modellen av skrivare jag använder är en FlashForge Finder, vilket ger helt ok utskrifter för priset. Den nyttjar en en sorts plast som kallas PLA och ska vara biologiskt nerbrytbar. Det kan vara ett problem långsiktigt för min regnmätare, men det får tiden visa.

Källa: http://www.flashforge.com/finder-3d-printer/
Bild från: http://www.flashforge.com/finder-3d-printer/

Konstruktionen av delar

Eftersom detta är mitt första projekt i Fusion 360 tog jag fram delarna stegvis. Blev en hel del Googlande och letande efter guider för respektive steg. Måtten för vippbrädan valde jag att göra 10 cm lång, skrivaren jag har klarar 14 cm max. Min tanke var att detta var nog stort för att testa skrivaren samtidigt som det var lätt att skriva ut (trodde jag…). Att börja med den här delen var riktigt utmanande eftersom jag inte hade någon som helst tidigare erfarenhet av CAD… Men skam den som ger sig, efter någon kvälls läsande och trial and error så fick jag till en fungerande modell.

Första delen Fusion 360
Första delen Fusion 360

När jag skickade utskriften till skrivaren gick det över förväntan, fast jag hade missat att sätta en ”brim” och skapa stödstrukturer. Delen blev robust med väggar på 2mm.

Vågskålen
Vågskålen

Jag gick nu vidare och färdigställde hållaren under vippbrädan, där testade jag att skriva ut med stödstruktur inne i själva öglorna, vilket gjorde att utskriften blev helt ok.

Fästet under
Fästet under
Monterad vågskål
utskriften såg helt ok ut och passade bra!

Efter att ha lyckats med de två bitarna och monterat ihop dom insåg jag att fästet under inte kan vara fristående, insåg även att mellanrummet mellan ringarna var lite för stort, vilket gjorde att vågskålen kunde åka ur fästet… Tillbaka till ritbordet igen och klura… Nästa design valde jag att göra med en vägg för att skydda min kommande elektronik från eventuellt vattenstänk.

Uppgraderade nu min modell i Fusion 360
Uppgraderade nu min modell i Fusion 360, passade även på att göra en vägg för att gömma elektroniken bakom

Utskrifter i 3D skrivaren kan inte hänga i luften, det krävs en extra stödstruktur (tree) i mitt fall för att lösa detta. Jag valde även att lägga något som heter ”BRIM” under utskriften. Detta för att undvika att utskriften släpper från utskriftsplattformen.

Flashforge Finder
Med FlashPrint som följde med min skrivare FlashForge Finder läggs stödstrukturen till under vågskålen.

Den nya delen kom ut ok från skrivaren, jag flyttade in fästena på sidan om vippbrädan ca 2mm på var sida i Fusion360. Fördelen nu är att vippbrädan nu satt väldigt bra mellan ringarna och riskerade inte att släppa längre. Det var lite jobb att plocka bort all stödstruktur.

Vågskålen utskriven i en enda del. Stödstrukturen under är i formen av trä.
Vågskålen utskriven i en enda del. Stödstrukturen under är i formen av trä.

Med den nya modellen behövde jag inte fundera över hur jag skulle få vippan centrerad under tratten. Vilket var välbehövligt eftersom tratten är designad för att vara öppen precis över mitten på vippan.

underdelen till regnmätaren klar
Nu tyckte jag att den undre delen var klar! När stödstrukturen tagits bort så ”vippade” den mycket fint.

Nu blev det ett test under vattenkranen bara för att se att den inte hängde sig eller att den missade att tippa.

Nu var det dags att göra tratten och kanterna runt om min vågskål. Min Flashforge Finder klarade max 14x14x14cm. Jag valde att göra ”tratten” precis så stor som skrivaren klarade bara för att se hur en sådan utskrift beter sig. Modellen nedan är den jag ännu kör i regnmätaren.

regnmätaren
Tratten gjorde jag med en öppning som bör göra att regnet hamnar i mitten av vippan.

Tyvärr krävdes det 3 utskrifter för att få den lyckad (3 utskrifter och 12 timmars väntan mellan varje…). Den första misslyckades på grund av att jag valt att skriva ut delen i orienteringen den skulle stå. Det slutade med att mitten tippade och tratten aldrig byggdes… Själva modellen var det inte något fel på. Orsaken till att den tippade var att för lite yta som fästes i plattan under och för lite stödstruktur. När skrivaren sedan rörde sig fram och tillbaka blev det nog för mycket tyngd och mitten tippade….

Misslyckad utskrift
Misslyckad utskrift….

Nästa utskrift placerade jag med tratten nedåt, dvs jag vände utskriften 180 grader i FlashPrint.  Flashprint är det program som importerar STL filer och gör om dom till GKod. Det var det som följde med min skrivare. Tyvärr gick det åt skogen även nu, skrivaren hängde sig efter 5 timmar. Kan ha berott på att jag hade FlashPrint igång på datorn och att den via wifi kopplingen till skrivaren störde något. Sedan den utskriften har jag för vana att stänga FlashPrint så fort jag gör en längre utskrift.

Skrivaren hängde sig.
Skrivaren hängde sig…

Testade sedan igen och då lyckades jag få en prefekt utskrift.

Nu gick utskriften igenom och resultatet blev över förväntan!
Nu gick utskriften igenom och resultatet blev över förväntan!

Elektroniken

Elektroniken består av en ”Reed switch”, dvs en liten brytare som reagerar på magnetism för att öppna eller stänga sig. Det är det lilla glasröret till höger på bilden. För att undvika störningar använder jag en 10kOhm resistor mellan porten på arduinon och jord, detta leder bort eventuella störningar. Mer avancerat än så är inte själva elektroniken som läser om vågskålen bytt läge.

Nu var delarna som behövdes för att mäta regn klart och det var dags att fundera över elektroniken. Jag insåg rätt snabbt att jag behövde fästa en magnet på vippbrädan. För att få träna mer i Fusion360 valde jag att göra delar som skulle passa på befintlig utskrift.

För att läsa av tippningar använder jag en neodymmagnet samt en "Reed Switch"
För att läsa av tippningar använder jag en neodymmagnet samt en ”Reed Switch”

Nu kunde jag montera ihop delarna. Dom passade perfekt! Det fungerade direkt och magneten fick sensorn att reagera. Nu kunde jag börja fokusera på att koppla upp regnmätaren med mina befintliga hemautomation. Jag började bygga med en Arduino Unu eftersom det är en stabil plattform att utgå ifrån. Allt den behöver göra är att läsa om en port är 1 eller 0, beroende på vippans orientering. Jag har valt att magnetsensorn är sluten när regnmätaren är tippad till höger, och att den är öppen när den tippar till vänster.

Nu veriferar jag att den registrerar varje tippning med hjälp av en Arduino.
Nu veriferar jag att den registrerar varje tippning med hjälp av en Arduino.

 

Nu upptäckte jag att underredet var lite väl rangligt och att insekter och annat lätt kan krypa upp under tratten och riskera att störa mätningarna…. För att få lite mer utmaning och lära mig ännu mer i Fusion 360 så bestämde jag mig för att göra ett underrede som direkt skulle jacka ihop med den tidigare utskrivna delen ovan. Jag har även insett att 3D skrivare inte ger 100% passform, därför har jag minskat vissa delar och ökat andra strax under 1 mm. Detta gör att delarna direkt passar i varandra och att den eventuella slipning som behövs göras hålls minimal.

Det här var en riktig utmaning att få till eftersom mina kunskaper i Fusion 360 fortfarande känns begränsade… Men jag lärde mig massor under tiden jag gjorde den.
Här sitter delarna på plats, skulle jag skriva ut delen som tippar igen så skulle jag skriva ut den tillsammans med underredet i en enda del.
Här sitter delarna på plats, skulle jag skriva ut delen som tippar igen så skulle jag skriva ut den tillsammans med underredet i en enda del.

Jag passade på att göra små väggar vid vågskålarnas slut för att undvika att vatten följer ringarna till höger / vänster. Lite för att skydda elektroniken som kommer sitta bakom plattan. Nu kunde jag fortsätta att koppla upp sensorn på WIFI. Jag gick vidare till en NodeMCU, vilket är en ESP8266 12 med alla de komponenter som behövs för att kopplas direkt in till datorn. Fick till kod som konsekvent rapporterar varje tippning via wifi. För att bli klar med projektet så valde jag att skicka via HTTP till min loggservern.

Nu adderade jag kod för att skicka via WIFI till min loggserver.
Nu adderade jag kod för att skicka via WIFI till min loggserver.

Koden fungerade bra och det är inte det här som är det komplexa i projektet (Tyckte jag då!). Jag skickar i den här versionen antal tippningar samt om det är åt höger eller vänster den tippat (0 eller 1), Fick till all kod och resultatet visades på följande sätt

NodeMCU:n skickar nu data konsekvent vid varje tippning.
NodeMCU:n skickar nu data konsekvent vid varje tippning.

Koden

Koden hastade jag ihop för att bli färdig med sensorn, jag tänkte att nästa version av koden kommer att hamna på vår GITHUB..

Rapporterar nu följande värden:

  • Firmware version
  • Sensor namn
  • Batteristatus (raw)
  • Antal tippningar sensorn gjort.
  • 1 / 0 på nuvarande tippning.
// Version 1.0 av koden 

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial


const char* WIFISSID = "xxxxx"; // SSID namn
const char* WIFIPASS = "xxxxx"; // Lösenordet. 

int maxStartDelay = 4; // Anger hur många försök man ska avvakta med i startup innan den går till loopen.
bool firstLoop = true; // Anger att detta är första loopen

int regnPinnen = 5;    // Pinnen som läser om den tippat.
int antalggr   = 0;    // en simpel räknare som adderar hur många tippningar den gjort sedan start.

bool lastState = false;    // Anger vilket läge som var förra gången. 
bool currentState = false; // Anger vilket läge loopen har nu

bool currentWifiState = false; // Används för att säga om enheten har wifi igång eller inte.

// Webb saker
String serverAddress = "xxx.xxx.xxx.xxx"; // Ip Adress till server
int    serverport    = xxx;            // Port till servern.
String sensorInfo    = "ESP826612E/HTTP/Regnsensor/1/";   // ettan står för att det är API version 1.0 som kommer användas.

// Här Finns början av det som kommer postas till servern. 
String sensorPostData = "http://" + serverAddress + ":" + String(serverport) + "/" + sensorInfo; // Färdig del av huvddata till servern. 

// Mäta Batteriets spänning
float batteryLevel = 0;   // variabel som sätts till noll vid varje uppstart. 

// Läs av batterispäningen på enheten (OBS Resistorerna måste beräknas! Jag har baserat detta på 470K Ohm (R1) och 100K Ohm (R2))
float batteryPower = 3.7; // Ange hur många volt du matar enheten med ( detta kommer sedan att nyttjas i omräkningen från 1V till korrekt volt)
int   voltDivdierVoltage = 658; // Agne vilket spänning din spänningsbrygga lämnade vid "full effetkt"  dvs i mitt fall 6V blev ca 1V med 470K ohm och 100k Ohm,dvs värdet att dela med då blir 1024 

ESP8266WiFiMulti WiFiMulti;

float getBatteryStatus(){
    // V1.2 --- testar att räkna batteristatus.

    int tmpBatteri =  analogRead(A0);
    batteryLevel = tmpBatteri;
    USE_SERIAL.print("Raw batteri status: ");
    USE_SERIAL.println(String(batteryLevel)); 
    batteryLevel = (batteryLevel * batteryPower) / voltDivdierVoltage;  // värdet 978 baseras på det värdet jag fick fram när jag matade 6V genom spänningsdelaren och mätte fram 0.978v
    USE_SERIAL.print("riktigt batterivarde: ");
    USE_SERIAL.println(String(batteryLevel));
    return tmpBatteri; 
    
}


void setup() {

    pinMode(regnPinnen, INPUT); // Väljer pinnen som regnmätaren sitter på.

    USE_SERIAL.begin(115200);
   // USE_SERIAL.setDebugOutput(true);
 
    Serial.println("Nu Startar enheten - Automatiserar.se");
    Serial.println("Data kommer skickas till: " + sensorPostData); 
    Serial.println(getBatteryStatus()); 
    WiFi.mode(WIFI_STA);

    WiFiMulti.addAP(WIFISSID, WIFIPASS);

    uint8_t snurr = 0; // räknaren i loopen nedan.
    
    while(WiFiMulti.run() != WL_CONNECTED || snurr <= maxStartDelay){

      Serial.println("Avvaktar wifi - " + String(snurr)); 
      snurr++; // adderar en till snurren
      delay(500);
    }

    ShowWifiStatus();
    
    if((WiFiMulti.run() == WL_CONNECTED)) {

    Serial.println("Skicka Info till loggservern");
    ShowWifiStatus();
          
    ///////////////////////

        HTTPClient http;

        USE_SERIAL.print("[HTTP] begin...\n");

           
            http.begin((sensorPostData + String(getBatteryStatus()) + "/" + "StartarTipparen" + "/" + String(WiFi.RSSI()))); 
            USE_SERIAL.print("[HTTP] GET...\n");
            // start connection and send HTTP header
            int httpCode = http.GET();
    
            // httpCode will be negative on error
            if(httpCode > 0) {
                // HTTP header has been send and Server response header has been handled
                USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
    
                // file found at server
                if(httpCode == HTTP_CODE_OK) {
                    String payload = http.getString();
                    USE_SERIAL.println(payload);
                }
            } else {
                USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
            }
    
            http.end();
            currentWifiState = true; // sätter att den haft wifi första uppstarten. 
        }
}

// Debug för att se vilken status wifi har.
void ShowWifiStatus(){

     Serial.print("WIFI - status:"); 
     Serial.println(WiFi.status()); 
  
}

// Används för att stänga wifi när det inte behövs skicka något. 
void WifiOnOff(bool toDo){

    if (toDo){
     WiFi.mode( WIFI_OFF ); // Stänger WIFI
     Serial.println("Stängde WIFI");

     ShowWifiStatus(); 
    } 
    else{
     WiFi.mode( WIFI_STA ); // Stänger WIFI
     //WiFiMulti.addAP(WIFISSID, WIFIPASS);

     Serial.println("Startar WIFI");
    }
    currentWifiState = toDo;  // Sätter global info om att wifi är av / på. 
}
void SkickaHttp(int antalggr,int statusMode){
  if((WiFiMulti.run() == WL_CONNECTED)) {
        
           Serial.println("Startar HTTP Klient med data:" + String(antalggr) + " : " + String(statusMode));
           HTTPClient http;

            http.begin((sensorPostData + String(WiFi.RSSI()) + "/" + String(getBatteryStatus()) + "/" +  String(antalggr) + "/" + String(statusMode)));
        
    
            USE_SERIAL.print("[HTTP] GET...\n");
            // start connection and send HTTP header
            int httpCode = http.GET();
    
            // httpCode will be negative on error
            if(httpCode > 0) {
                // HTTP header has been send and Server response header has been handled
                USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
    
                // file found at server
                if(httpCode == HTTP_CODE_OK) {
                    String payload = http.getString();
                    USE_SERIAL.println(payload);
                }
            } else {
                USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
            }
    
            http.end();

            ShowWifiStatus();
              
            Serial.println("Klar, data skickat");

  } // END - if((WiFiMulti.run() == WL_CONNECTED))
  else{
    Serial.println("KUNDE INTE KOPPLA UPP?!?! ingen data skickades.");  
  }
} // - END SkickaHttp


void loop() {       
          int currentState = digitalRead(regnPinnen);
          if (firstLoop){
              lastState = currentState;
              firstLoop = false;       // Sätter att den nu kört uppstarten . 

          };  //  Om det är första uppstarten så ska den inte skicka en tippning
           
          // Kontrollerar om värdet på pinnen, översätter det till ett bool värde. 
          if (currentState == 1){currentState = true;} else {currentState = false;}

          // Kontrollerar om förra loopen har samma som nuvarande loop. Kommer inte gå in här första loopen.
          if (lastState != currentState){
         
            lastState = currentState;
            antalggr++;
    
            SkickaHttp(antalggr,currentState);  // Skickar status till loggservern.
            
            Serial.print("Antal ggr:");
            Serial.println(antalggr);          
          } else{

          /*
              if (currentWifiState){
                        WifiOnOff(true); // Stänger - wifi 
                        currentWifiState = false; // Sätter att wifi stängts. 
                        Serial.println("Stängde WIFI"); 
              }
              else{
                       
              }
          */
        }
    
      
      delay(150);        // liten delay för att undvika falska avläsningar. 

}

 

Nästa steg var att göra detta energieffektivt och montera elektroniken, tidigare har jag byggt en ESP8266-12E som klarat att köra på wifi i flera år. Valet att fortsätta med den kändes självklart, började löda och ordna en ESP8266 12.

Hade ny bytt till en ESP8266-12E och började kolla på hur jag skulle lägga den i deep sleep..
Hade ny bytt till en ESP8266-12E och började kolla på hur jag skulle lägga den i deep sleep..

Nu insåg jag problemet med mitt val av en ESP8266-12E! Om jag adderade deep sleep i koden så har jag tidigare satt en intervall för när den ska vakna igen. Min tanke var då att interrupts skulle fungera även när sensorn låg i Deep Sleep. Vilket den inte gör tyvärr, kommer därför behöva göra en krets innan som läser om vågskålen tippar och sedan väcker ESP:n. Nu tyckte jag dock att projektet hade dragit ut på tiden så mycket så jag valde att fortsätta med sensorn utan deep sleep.

För att kunna montera två batterier och esp8266 snyggt så gjorde jag ännu fäste som skulle monteras på skyddsväggen.

För att få det att se snyggt ut valde jag att addera ett fästa för batteriback och esp8266
För att få det att se snyggt ut valde jag att addera ett fästa för batteriback och esp8266

Nu hade jag alla komponenter som behövdes så det enda förutom att mäta batterispänningen var att löda ESP:n på ett kretskort och ställa sensorn i regnet.

Nu kunde jag montera två batterilådor med två parallellkopplade LIFEPO4 batterier.
Nu kunde jag montera två batterilådor med två parallellkopplade LIFEPO4 batterier.

Nu började jag göra ett simpelt kretskort med en spänningsdelare och kablarna från vågskålen. Tyvärr blev det en lödning på baksidan fel samt spänningsdelaren vänd åt fel håll. Orkade inte börja löda och korrigera allt för att åtgärda detta. Så den här ligger på hyllan med misslyckade kort…

Tyvärr så misslyckades jag med en lödning på baksidan av kortet så jag fick kassera den här ESP8266 adaptern...
Tyvärr så misslyckades jag med en lödning på baksidan av kortet så jag fick kassera den här ESP8266 adaptern…
Designen fick bli lite större än jag tänkte för att bli klar någon gång.
Designen fick bli lite större än jag tänkte för att bli klar någon gång.

När jag insåg att kretskortet jag gjorde på bilden ovan inte skulle rymmas mellan de två batteripacken som jag ursprungligen tänkte tog jag till en snabb och effektiv lösning…. Kommer göra en ny utskrift och layout på kretskortet så fort jag beslutat mig för nästa steg.

Tålamodet tröt eftersom det tidigare fästet skulle ha ett mindre kretskort... Löste det tillfälligt med Eltejp.
Tålamodet tröt eftersom det tidigare fästet skulle ha ett mindre kretskort… Löste det tillfälligt med Eltejp.

Nu har jag haft sensorn ute två nätter och registrerade regn. Redan första natten klockan 04:16 såg jag att det regnat och att min sensor registrerat det.

Gjorde en snabb sökning efter regn dagen efter jag ställde ut sensorn. Såg nu att den fungerat som tänk!
Gjorde en snabb sökning efter regn dagen efter jag ställde ut sensorn. Såg nu att den fungerat som tänk!

Nu ansåg jag att projektet kommit nog långt för att publiceras på bloggen, kommer lägga upp stl filerna koden på github så fort jag är helt nöjd med underredet.

 

Fortsatt arbete på Version 2.0

Efter att ha sett brister i min nuvarande design bestämde jag mig för att uppdatera vissa delar och helt skapa nya. Detta för att göra själva höljet stabilare och mer lättmonterat. En av orsakerna var att vinden lyckades tippa min första version… Jag valde därför att addera ett system för att enkelt kunna lägga till och ta bort modulen, detta hjälpte även till när det var dags att montera ihop och isär den.

Bestämde mig för att bygga regnsensorn i moduler
Bestämde mig för att bygga regnsensorn i moduler, detta är version 2.0

Under mina försök att göra monteringspunkter mellan de olika lagren så insåg jag att skrivaren inte är på millimetern exakt, det kan skilja 0.3mm mellan det jag designat och det jag får ut i skrivaren, detta ledde till att min första version av fästen gick att få ihop med lite våld, men vid demontering gick dom av (röd ring på bilden längre ner)… Jag gjorde därför en ny tapp för att limma där den gamla suttit.

Jag testade nu att skriva ut en del med maximal kvalite på min flashforge finder (till höger)
Jag testade nu att skriva ut en del med maximal kvalite på min flashforge finder (till höger)

När jag såg skillnaden mellan en ”normal” utskrift kontra den med lägre fart och tätare lager insåg jag att tapparna skulle skrivas ut separat och inte sitta i modulerna..

Jag valde även att helt frångå min första design med en bas för tippen, nu skrivs allt som behövs för vågskålen ut tillsammans, vilket minskade mängden plast och gjorde delen mer robust. Detta gjorde att jag inte längre kunde skriva ut vågskålen i samma utskrift, därav fick jag göra öppningar i ringarna som håller vågskålen.

Jag valde att göra tappar på ovansida av delarna och motsvarande hål på undersidan.
Jag valde att göra tappar på ovansida av delarna och motsvarande hål på undersidan.

Jag hade nu börjat fundera en del över hur kalibrering av delen skulle göras, jag bestämde mig för att göra en bas som går att montera unders. Den går även att använda direkt med den del som samlar vatten ”tratten”. Vilket gör att man inte behöver ha någon hemautomationskontroller eller elektronik om man manuellt vill läsa av mängden vatten. Detta görs då genom att med fasta intervall tömma kärlet och mäta mängden vatten.

Uppsamlare till regnsensorn
Uppsamlare till regnsensorn

Nu hade jag två regnsensorer men inte all elektronik jag behövde för att göra ännu en ESP8266 sensor.

Jag hade nu två fungerade regnsensorer, dock bara en med elektronik
Jag hade nu två fungerade regnsensorer, dock bara en med elektronik

Eftersom ett av målet med den här regnsensorn är att lära mig mer om 3D skrivare och Fusion 360 så klurade jag lite på fler alternativ att skicka data. Gick igenom lådorna över gammal hemautomation om hittade en ringklocka från Nexa, den kommunicerar på 433Mhz, nu kommer jag självklart inte koppla in enheten som säger pling plong! Utan jag kommer istället hämta in datat till min VeraSecure via min RFXTRX. Jag har sedan tidigare kollat upp ett flöde via Node-Red vilket gjorde att jag kunde få in all data direkt i min http loggserver med.

Dörrklocka
Dörrklocka på 433Mhz

Fördelen med att ändra lite funktionalitet i dörrklockan är att jag får en uppkopplad enhet som inte drar energi i väntan på regn! Den röda markeringen är det som behöver kopplas samman för att ringklockan skall skicka signalen till RFXTRX.  Jag valde att behålla den röda dioden på ringklockan för att få en visuell info om data skickas från den med.

Dörrklockan uppskruvad
Dörrklockan uppskruvad

För att göra detta så enkelt som möjligt valde jag att skrapa bort lite av lacken på båda sidorna och löda två kablar. Dessa kopplas sedan till en reed switch, vilket är ett glasrör med två kontakter som sluter sig när en magnet kommer nära.

Jag lödde in två kablar som senare kopplas till en reed switch
Jag lödde in två kablar som senare kopplas till en reed switch

När jag sedan testade passformen så fungerade det riktigt bra, dörrklockan kan utan problem stå på samma yta som min ESP8266 annars nyttjar. Nu kände jag att dörrklockan gärna tippade och inte stod kvar om jag rörde enheten… Beslutade mig därför för att göra addons till regnsensorn! Skapade några komponenter för att supporta Nexa.

Dörrklockan passade perfekt
Dörrklockan passade perfekt

Jag började med att göra ett nytt fäste för en neodynmanget på 3mm X 8mm. Fästet gjordes nu med högsta upplösning och med 0.3 mm tolerans direkt på delen. Kunde nu fortsätta att göra ett uppdaterat fäste för dörrklockan och reed switchen.

Blev tvungen att göra ett nytt magnetfäste som enbart triggar reed switchen vid tippning
Blev tvungen att göra ett nytt magnetfäste som enbart triggar reed switchen vid tippning

Det nya fästet tillät mig att placera en reed switch så att magnetfältet endast triggade när tippen stod i mittenläge, vilket den inte är lång tid innan den tippar över.

Uppdaterat Reed Switch fäste
Uppdaterat Reed Switch fäste

Nu gick allt bra och reed switchen skulle lödas in. Men den är gjord av GLAS som jag tidigare skrev. Vilket fick den att gå sönder när jag försökte vrida switchen för att hamna optimalt

Tyvärr gick Reed Switchen av, Som den ser ut nertill ska den även göra upptill
Tyvärr gick Reed Switchen av, Som den ser ut nertill ska den även göra upptill

Jag passade även på att göra fästet för ringklockan, Den passade även vid första försöket.

Nexa fäste i Fusion 360
Nexa fäste i Fusion 360

Passformen blev riktig bra och kablarna kunde jag dra genom hålen jag gjort i skyddet mellan tippen och elektroniken.

Nexan monterad
Nexan monterad

Nu fanns tappar, reed switch och magneter på plats. allt passade bra och kändes robust.

Allt klart!
Allt klart!

Så här blev just lösningen med Nexa, jag väntar på en del för att kunna uppgradera min Esp8266 och fortsätta köra en på WIFI med.

 

Jag kommer lägga upp alla STL filer på Thingiverse eftersom det är en mycket bra plattform att dela 3D filer på.

Adressen är: https://www.thingiverse.com/thing:3039882

Kvar att göra / eventuella korrigeringar: 

  • API mot Vera
  • Alternativ med MQTT
  • Testa andra tekniker, funderar på 433Mhz genom att öppna en vanlig ”Nexa fjärr” och göra en simpel krets som skickar 1 / 0 när vågen tippar.
  • Presentation och grafning.
  • Beräkning mängd vatten / tippning utifrån storleken på tratten.
  • Dela koden på Github *** Blev Thingiverse istället.
  • Klart – Dela STL filerna på Github eller bloggen.
  • Göra en mindre variant av hela designen.

Nu tar jag gärna emot tips på vad som går att göra bättre eller om det finns andra sätt att göra motsvarade på. Hoppas att all denna text och alla bilder gav dig lite tips och förståelse för jobbet bakom en så simpel sak som att mäta regn 🙂

Dela gärna projektet så fler kan komma med tips och jag själv ser att det är ett värde att fortsätta med sensorn.

// Ispep

11 reaktioner på ”Projekt regnsensor”

  1. Pingback: Bygg en regnsensor |

  2. Bra inspirationskälla.
    Eftersom jag inte använder mig av Vera utan kör Home Assistant är tankarna att använda mig av din lösning med ringklockan. Tänker därför ge mig i kast med Fusion för att anpassa konstruktionen från början till ringklockan och samtidigt integrera flertalet av dom mindre delarna direkt i konstruktionen. Funderar även på en annan lösning för hopsättandet och det är att försöka få till någon form av bajonettfattning mellan den övre och undre delen.

    1. Tackar!
      Låter som en bra plan att minska på antalet delar om du direkt vet vad du vill ha. Orsaken att jag bygger mitt med fler komponenter är för att få det modulbaserat och lära mig Fusion 360 bättre. Jag vill slipp skriva om dom största delarna när jag adderar nya funktioner framöver. Har kollat lite loggar från min 433Mhz ringklocka och ser att den största nackdelen med att köra just 433Mhz är att sensorn skickar data, den vet inte om det mottagits eller inte hos kontrollern.
      Den regnsensorn jag byggt med ESP8266 skickar data och verifierar att det levererats med, kommer troligen jobba vidare på det spåret och köra parallellt med två bara för att se om det diffar något med tippningarna. Avvaktar lite delar dock innan jag kan komma vidare.

      Vad gäller bajonettfattning så kanske det är ett smartare sätt än att ha en genomgående tapp som jag, du får låsningen på köpet. Dela gärna någon bild och skriv hur det gick sedan.

      Har kvar lite uträkningar att göra med så man kan översätta trattens dimension och tippens 15ml till mm regn per kvadratmeter.

      *** Funderar på att byta antennen på ringklockan till en annan 433Mhz antenn vid nästa uppgradering, nuvarande antenn i Nexa klockan är troligen inte helt optimal

      // Ispep

  3. Hi thanks for sharing your project, I am currently printing and testing it, but I am encountering some errors. I am not able to see in the serial monitor the http requests, I am planning on implementing this via MQTT messages, but I don’t know how many water (in millimeters) is in a bucket. Can you please share this? Thanks

    1. Hello
      sorry, haven’t done all the calculation yet and forgot to post the values. The collector takes ~15 ml to tipp in my tests. Will try to run more samples to get a more accurate readings when i have time
      // Ispep

  4. Kul! Jag har en AAG väderstation som jag köpte i slutet av 90-talet. Men jag köpte aldrig någon regnmätare. Har köpt en billig på klasse som jag tänkte konvertera till 1-wire.

    Hur funkar plasten med uv? Tänker du göra kitt o sälja? En mätare från klasse kostar ca 100:- men den är liten, skulle vilja ha lite större, så som den du gör.
    sen vill jag gärna ha in värmning för vintern så man även kan mäta när det snöar.

  5. Provade ”https://esphome.io/index.html” addon tillsammans med Hassio.
    Aldrig varit enklare att mata in kod i en ESP Ingen kunskap att programmera krävs.
    Gör en upload med YAML
    t.ex
    switch:
    – platform: gpio
    name: ”Relay”
    pin: D1
    inverted: yes
    Kontakten skapas automatiskt i Hassio
    Prova……………….
    Nu skall jag prova att sätta upp en väderstation din artikel kommer vara till nytta..
    Tack

  6. Martin Yngveson

    Kan meddela att varje vippning ger 0,242mm regn enligt mina tester och beräkningar.
    Jag utgick ifrån 100ml vatten och en mätserie med 7 godkända serier och fick ett medelvärde på 29,7 vippningar vilket innebär att vippan håller 3,367ml(cm3).
    Trattens area fick jag till 138,925cm2
    3,367/138,925=0,0242cm dvs. 0,242 mm regn.

    Jag fick modifiera hålet i tratten lite, den skåra som finns är något för bred, dropparna blir lite okontrollerade.
    Med ett litet hål blir det betydligt mer exakt.

Lämna ett svar till Ispep Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *