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

Arduino / Node MC for HomeSeer


kimstoroy

Anbefalte innlegg

Hei.

 

Her er jeg inne på et område der jeg ikke har noen kunnskaper,  jeg har bygget meg en garasje til robotklipper.

I dag bruker jeg en Fibaro RGBW + Universalsensor, men tenker jeg kunne ha forenklet dette litt.

Er i dag mange rele og mye kabler som må til for at dette skal fungere.

 

Kan noe hjelpe meg i gang med hva jeg trenger her for å få sensor verdier inn i HomeSeer og kunne sende kommandoer tilbake dersom jeg benytter en Arduino / Node MC.

 

Behov:

 

Innganger: 

1stk for Magnetkontakt på robotklipper

2stk for Microbryter endestopp på garasjeport

 

Sensorer:

1stk Temperatur sensor

1stk Lyd Sensor

 

Utganger:

1stk on/off for styring av 12v rele til garasjeport

1stk on/off for styring av 12v polaritets releer til garasjeport

1stk Dimmer for 12v led stripe utvendig

1stk on/off for styring av 12v grønn led stripe

1stk on/off for styring av 12v rød led stripe

 

Bør ha wifi modul

 

  • Like 2
Lenke til kommentar
Del på andre sider

Du kommer iallefall veldig lagt med en Wemos eller NodeMcu, der har du både wifi og inn/utganger

Magnetkontakt, vil det si at du har en magnet på klipperen og en "mottaker"  for den i garasjen, eller hva mener du her?

 

Uansett, magnetkontakt, mikrobryter, temperatur og lyd kan du fint koble opp mot en NodeMcu el, samme med releer, dimmingen er jeg mer usikker på hvor lett er å få til, det har jeg aldri forsøkt.

 

I teorien har du 11 brukbare inn/utganger på en ESP8266 brikke som Wemos og NodeMcu er bygd opp rundt, men pga flere innganger også har andre bruksområder er det ikke alle som kan brukes helt fritt, mulig du derfor må ha 2 stk for å få nok innganger/utganger.

 

Det er veldig enkelt å sette opp input og outputs med Arduino plugin til HS, du bare velger NodeMcu som kort, og hvilken pinne som skal være inngang og hvilken som er utgang, så laster du opp den koden pluginen gir deg.

Når det gjelder temp sensor må du velge NodeMcu API mode og lage koden selv, men det er heller ikke vanskelig, hjelper gjerne hvis det er noe.

 

Reler 3v

NodeMcu

Temp/Fukt sensor

 

Lydsensor har jeg ikke brukt før, men ser det finnes flere for arduino, hva er den for?

Mikrobrytere er jo også grei skuring, mange å velge mellom der

 

Lenke til kommentar
Del på andre sider

Se der ja! Litt av en tøffing den klippern din! Min hadde nok sendt meg en klage om det var så ulendt terreng foran foringsplassen.

 

Ellers kan jeg ikke hjelpe så mye med tanke på Arduino. Jeg hadde tenkt å kjøre ModbusRTU til et kort med 2 motordrivere, 8 reléer, temperaturmåling og et titall digitale innganger. Det er et kort jeg selv har designet.  Det er også satt av plass for radiomoduler, men dette har jeg ikke laget noe program for. Kortet er basert på AVR XMega. Kan du tenke deg å kjøre ModbusRTU som et alternativ så ta kontakt.

 

Lenke til kommentar
Del på andre sider

@Actibus takk for info.

 

Ble en handlerunde på Kjell i kveld:

Kort:

https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/utviklingskort/nodemcu-utviklingskort-p87949

Lyd Sens:

https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/moduler/luxorparts-lydsensormodul-for-arduino-p90789

Dimme modul:

https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/moduler/luxorparts-mosfet-modul-for-arduino-p90631

Rele Modul:

https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/moduler/luxorparts-relemodul-for-arduino-4x-p87879

Temp sens:

https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/moduler/temperatursensor-for-arduino-p87883

 

Lyd sensor tenker jeg å benytte ettersom klipper begynner å pipe før den starter, tenker dette kan trigge åpning av port.

 

Micro brytere har jeg så jeg må sikker koble dem mellom GND og input eller noe slikt.

Samme gjelder nok magnet sensor også, denne bruker jeg for å se om den er parkert i lader.

 

Jeg tar gjerne imot all hjelp du kan bidra med har ikke sett på dette tidligere, så kan ingenting :)

 

@Einar skal nok få fikset litt på terreng, den er satt i et hjørne med takrenne nedløp fra 2 garasjer og der er noe fjell som kommer igjennom plenen akkurat der :)

 

 

  • Like 1
Lenke til kommentar
Del på andre sider

B79D24A5-05AF-4D5F-8F0B-0E6A3AE6DBD5.pngSlik skal jeg koble styring av motor med 4x rele modul

 

Her vil da aktivering av rele 1 sende strøm til motor.

 

Rele 2 og 3 vil snu polaritet på motor for å lukke porten.

 

Rele 4 styrer en LED stripe direktekoblet på rød og grønn som forteller om den er parkert eller ute å klipper. Grønn = Parkert 

Endret av kimstoroy
Lenke til kommentar
Del på andre sider

Du kan klare deg med 2 motorreléer. Legg NC kontaktene til 0V og NO kontaktene til +12V. Da får du  4 mulige tilstander: Høyre/Venstre/Bråstopp/Bråstopp.

Forskjellen ift. ditt tredje relé er at med det kan du koble motoren fra så den stopper litt roligere. Men den vil jo uansett bråstarte så mekanikken må jo tilpasses for rykk.

 

LED releét kan du også kutte ut. Bruk spolespenningen fra de andre reléene + en motstand til hver LED.

Lenke til kommentar
Del på andre sider

Har fått satt opp plugin osv i Homeseer, men sliter med å "connect" til NodeMCU.

Brukte BETA plugin ettersom det var eneste som jeg fikk NodeMCU som valg på, har lastet opp Sketch i Audrino med wifi info.

Har konfigurert pinner og får dem opp i HomeSeer, men klarer ikke å koble til kortet.

 

Noe tips?

 

 

 

 

Skjermbilde 2017-11-23 kl. 19.35.56.png

Lenke til kommentar
Del på andre sider

2 timer siden, kimstoroy skrev:

Har konfigurert pinner og får dem opp i HomeSeer, men klarer ikke å koble til kortet.

... og du har definert rett WLAN med riktig passord og satt opp en MAC-adresse, og deretter lastet ned .uno-filen som du lastet opp på NodeMCUen?

Lenke til kommentar
Del på andre sider

Pass på at IP adressen er i samme range som du bruker ellers, og at det er riktig subnet og gateway. Skal da koble seg til fint egentlig..

 

Det er mulig å overvåke hva som skjer ved å åpne seriell monitor inni Arduino ide med NodeMCU tilkoplet, du får iallefall opp info om Wi-Fi oppkobling.

 

Koble den til PC, åpne Arduino og tools serial monitor/seriell overvåking eller noe sånt, velg riktig hastighet nederst til høyre, 115200 burde det være, prøv evt en reset av NodeMCU mens du ser på skjermen, da burde det komme info om at den forsøker å koble til

  • Like 1
Lenke til kommentar
Del på andre sider

1 time siden, Moskus skrev:

... da hadde jeg begynt å sjekke det. Hvordan ser .uno filen ut? Er det riktig der?

 

Fant feilen, koblet fra relene så kom den inn med en gang.

 

Ser ut som USB power jeg benyttet leverer litt for lite

 

Takker

Endret av kimstoroy
  • Like 1
Lenke til kommentar
Del på andre sider

8 timer siden, kimstoroy skrev:

Ser ut som USB power jeg benyttet leverer litt for lite

 

Begrensningen kan ligge i NodeMCU også - den har ganske liten maks strøm den kan levere. Reléene bør mates med strøm utenom NodeMCU og bare styres fra den. 

Lenke til kommentar
Del på andre sider

Her har du nok ikke mange nok tilgjengelige GPIO (inn/utganger) til å kunne bruke bare 1 NodeMcu.

Jeg ville vurdert å bruke 2.

 

Først begynner du med å velge NodeMcu API i Arduino pluginen, der velger du hvor mange inputs og outputs du skal ha (du kan fint legge til flere senere, trenger ikke laste ned sketchen på nytt).

 

Så åpner du sketchen i Arduino IDE, den er da satt opp med det du trenger for å connecte til HS, men du legge inn kode i setup() og loop() for å utføre det du ønsker.

En viktig ting å vite er at du ikke kan bruke delay() funksjonen, hvis det skulle være nødvendig må man bruke prinsippet fra BlinkWithoutDelay eksempelet i Arduino IDE.

 

Legger ved et enkelt eksempel på hvordan du kan styre rele, bryter/magnetsensoe/lyd, temp, PWM har jeg ikke prøvd før.

 

Tror ikke du trenger ekstern motstand på det DS18B20 kortet du har kjøpt, kjøper man sensoren løs må man ha 4.7K motstand mellom + og Data på føleren.

 

Denne er ikke testet med NodeMcu, men compiler greit.  Du får hyle ut hvis du lurer på noe ;)

 

Du åpner sketchen du laster ned og kopierer inn det som står under i disse feltene:

- Declare your variables here

- Add your setup here

- Add your code here

 

Du vil finne igjen de samme feltene i sketchen du laster ned fra HS,.

 


/*************************************************************
  Arduino to Homeseer 3 Plugin API written by Enigma Theatre.
   V1.0.0.140
 *                                                           *
 *************************************************************/
int FromHS[50];
boolean IsConnected = false;
//************************************************************


//**************Declare your variables here*******************
//Sketch -> Include library -> OneWire og DallasTemperature, evt Manage Library og last de ned hvis ikke i lista
#include <OneWire.h>
#include <DallasTemperature.h>

//Definer hvilken GPIO pinner du vil bruke, google NodeMcu pinout så finner du bilde.
int MotorPin = 16; //D0 på NodeMcu
int FasevenderPin = 5; //D1
int MikrobryterPin = 4; //D2
int TempPin = 14; //D5


// Variabler
int interval = 10000; //hvor ofte du vil at temperatur skal sendes til HS, i millisekunder, 10000 er 10 sek
unsigned long previousMillis = 0;
unsigned long currentMillis;
double Temperatur;
int MotorAktiv = LOW;
int FasevenderAktiv = LOW;
int Mikrobryter = LOW;
int MikrobryterStatus = LOW;
int MotorStatus = LOW;


//HS Inputs og Outputs
int MotorHS = 1; //API Output nr 1
int FasevenderHS = 2; //API Output nr 2
int TempHS = 1; //API Input nr 1
int MikrobryterHS = 2; //API Input nr 2

//Temp sensor setup
OneWire oneWire_in(TempPin);
DallasTemperature tempsensor(&oneWire_in);


//****************************************************************


void HSSetup() {

  //************************
  //Add YOUR SETUP HERE;
  pinMode(MotorPin, OUTPUT); //Setter pinnen som Motor er linket til som en utgang
  pinMode(FasevenderPin, OUTPUT);
  pinMode(MikrobryterPin, INPUT); //Alle pinner står som standard til INPUTS, men greit å definere de uansett
  pinMode(TempPin, INPUT);


  tempsensor.begin();
  //************************


}


void HSloop() {


  //************************
  //Add YOUR CODE HERE;
  
  //Lese ut temperatur
  currentMillis = millis();
  if (currentMillis - previousMillis <= interval) //Utfører det som står i { } under så ofte som angitt i interval
  {
    tempsensor.requestTemperatures();
    Temperatur = (tempsensor.getTempCByIndex(0));
    SendToHS(TempHS, Temperatur); //Sender temperaturen til HS, API inngang som oppgitt i HS Inputs og Outputs lenger opp

  }

  //Se om noen utganger skal aktiveres (samme kode brukes for fasevender og andre reler, bare med egne unike variabler)
  MotorAktiv = FromHS[MotorHS];
  if (MotorAktiv == HIGH && MotorStatus == LOW) //Hvis HS har sendt beskjed om å slå på relet, og det ikke allerede er på, slå det på
  {
    digitalWrite(MotorPin, HIGH); //Setter utgangen på pinnen tilhørende Motor til Høy (noen reler trigger på lavt signal, da må man sette digitalWrite(Motor, HIGH); i Setup() over, og sette den til LOW her nede.
    MotorStatus = HIGH;        //Vi setter denne til HIGH for å forhindre å trigger denne If hele tiden, den trenger ikke å trigge hvis den allerede er PÅ
  }
  if (MotorAktiv == LOW && MotorStatus == HIGH) //Hvis HS har sendt beskjed om å sle relet av, og det ikke allerede er av, slå det av
  {
    digitalWrite(MotorPin, LOW); //Og motsatt må den settes tilbake til HIGH her.
    MotorStatus = LOW;
  }

  //Se om noen brytere er aktivert (bryter kan være magnetkontakt, mikrobryter, lydsensor, bevegelsensor etc.)
  Mikrobryter = digitalRead(MikrobryterPin);
  if (Mikrobryter == HIGH && MikrobryterStatus == LOW)
  {
    SendToHS(MikrobryterHS, Mikrobryter);
    MikrobryterStatus == HIGH;
  }
  if (Mikrobryter == LOW && MikrobryterStatus == HIGH)
  {
    SendToHS(MikrobryterHS, Mikrobryter);
    MikrobryterStatus == LOW;
  }
  //************************
  /* To Send Data to Homeseer use SendToHS(Device,Value)
    Eg.. SendToHS(1,200); where 1 is the API device in homeseer and 200 is the value to send
    To Recieve data from Homeseer look up the FromHS array that is updated when the device value changes.
    Eg.. FromHS[5] would be the data from API Output device 5
    All code that is located just below this block will execute regardless of connection status!
    You can include SendToHS() calls, however when there isn't an active connection, it will just return and continue.
    If you only want code to execute when HomeSeer is connected, put it inside the if statement below.
  */

  /*Execute regardless of connection status*/


  if (IsConnected == true) {
    /*Execute ONLY when HomeSeer is connected*/


  }

}

//************Do not change anything after Here*****************

 

 

 

  • Like 1
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.