Innholdsfortegnelse:

Trådløs MQTT Sengegavlkontroll: 5 trinn (med bilder)
Trådløs MQTT Sengegavlkontroll: 5 trinn (med bilder)

Video: Trådløs MQTT Sengegavlkontroll: 5 trinn (med bilder)

Video: Trådløs MQTT Sengegavlkontroll: 5 trinn (med bilder)
Video: wiz spacesense og integration 2024, Juli
Anonim
Trådløs MQTT Sengegavl
Trådløs MQTT Sengegavl
Trådløs MQTT Sengegavl
Trådløs MQTT Sengegavl

For noen år siden kjøpte vi en ny memory foam -seng, og som med de fleste senger måtte du også kjøpe en av deres "godkjente baser" for å opprettholde en garanti. Så vi valgte den billigste basen som også inkluderte muligheten til å heve og senke sengens hode. Noen dager senere ble madrassen og den billige basen til American Adjustables med kablede kontroller (en for hver side av sengen) levert og satt opp.

Det første vi la merke til var at ledningene i utstillingsrommet som var fine og lange ikke var det vi hadde på sengen vår! De i utstillingslokalet hadde utvidelser. Disse forlengelsene var IKKE inkludert i sengen vår og interessant nok, ingen var interessert i å selge oss et par skjøteledninger. Dette etterlot oss kontroller som knapt nådde toppen av sengen, og som vi måtte snu for å bruke.

Du får det du betaler for

Etter omtrent 6 måneder merker vi at strekkavlastningskrager på en av kontrollene begynte å rive. Noen måneder senere - bar ledning. Raskt fremover i omtrent et år, en av kontrollene fungerer ikke lenger, og den andre blir litt rykende.

Igjen, ingen var interessert i å selge oss erstatninger. Så slo det meg!

Vent litt! Jeg bygger ikke et hjemmeautomatiserings- og KONTROLLSYSTEM?!?

Trinn 1: Oppdagelse

Oppdagelse
Oppdagelse
Oppdagelse
Oppdagelse

Jeg ville se hva jeg kunne gjøre med det jeg hadde, så jeg tok den defekte kontrolleren og vips! det var mye dritt der inne! Hva var alt dette til? Jeg gikk tilbake og så bare på linjene som kom inn og ut. Jeg kunne se at det var en 12 volt forsyningsledning og en jordledning. De to andre linjene så ut som signallinjer for de to opp- og nedknappene. Så jeg tok en sjanse og hoppet nettopp 12v -forsyningen til "opp" -linjen. Sengen begynte å bevege seg! Jeg flyttet deretter hoppekabelen over til signallinjen "ned" og sengen gikk ned!

I boksen er det kontakter for ytterligere 4 signallinjer og 4 knapper. Mitt beste gjetning er at dette kontrollkortet brukes i alle deres kabelforbundne basismodeller, og de legger bare forskjellige ansiktsplater over brettet etter behov. Så jeg hadde en arbeidsteori. Jeg testet forsyningslinjen for å se om den dyppet under bruk eller pigget når som helst - nei. Det var veldig lite strømtrekk over signallinjene, men de krevde 12 volt for å aktivere motoren.

Trinn 2: Design

Design
Design
Design
Design
Design
Design
Design
Design

Så en enkel kontaktforbindelse mellom VCC og signalpinnen er alt som trengs, men hvordan gjøres det i systemet mitt. To reléer ville være nødvendig for kontaktene, og en ESP8266 ville fungere for den trådløse kontrolleren. Siden reléene kan kreve mer strøm enn de digitale pinnene kan levere, er det best å bruke en optoisolator mellom kontrolleren og reléet. Dette vil tillate et lite signal å slå på en høyere strømbryter (i dette tilfellet en lysdrevet transistor) og trygt aktivere reléspolen. Også en optoisolator isolerer kontrolleren fra eventuelle pigger som kan dannes når reléspolen slippes og magnetfeltet kollapser. Heldigvis finnes det relemoduler som allerede inneholder alt dette kretsløpet og til en ganske lav pris.

Sengen vil være strømforsyningen til kontrolleren, og for å håndtere de medfølgende 12 volt trenger vi en variabel buck -omformer. En veldig billig en er koblet nedenfor og fungerer vakkert. 12V-linjen og GND-linjene kobles til inngangssiden til omformeren, og den regulerte 5 volt-siden kobles til VCC på NodeMCU og VCC-pinnen på relemodulen. Bakken (-) på omformeren kobles til GND-pinnene på både relemodulen og NodeMCU.

NodeMCU kobles til IN1 ved bruk av D1 (GPIO5) og IN2 ved bruk av D2 (GPIO4). Signalledningen opp på sengen kobles til den normalt åpne skrueterminalen for relé 1, og den nedre signallinjen kobles til relé 2 -koblingen som vanligvis er åpen. Du må koble 12V -ledningen som er koblet til inngangssiden av bukkomformeren, til den andre klemmekoblingen for begge relé 1 og 2.

Deler

  • 1 - NodeMCU
  • 1 - Duellrelémodul med strømisolasjon
  • 1 - Variabel input/output buck -omformer
  • 1 - Breadboard PCB
  • 22 gauge strandet kobberkjernetråd
  • 2 - M3x 8 skruer

Trinn 3: Vedlegg

Innhegning
Innhegning

Kapslingen finner du her:

Jeg designet en enkel skap med Tinkercad som gjør at sengestyringskabelen kan komme inn i boksen mellom strekkavlastningsbraketter inne i boksen. Det er spor for glidelås her som vil hjelpe til med å unngå at kabelen glir, men i mitt tilfelle var passformen veldig tettsittende og trengte den ikke. Dekselet er boltet ned med 2 M3x 8 skruer. Jeg vil anbefale å laste opp koden og teste systemet før du monterer den i esken.

Jeg brukte varmt lim for å holde brettene på plass, men dette er kanskje ikke nødvendig.

Trinn 4: Kode

Koden finner du her:

MERK: Dette prosjektet bruker pubsubclient -biblioteket som kan legges til i Library Manager i Arduino IDE

Koden her er ganske grunnleggende og ble designet basert på Cover MQTT -typen i Home Assistant. Tanken her er enkel: Når du trykker på opp- eller ned -knappen i hjemmeassistenten, lukkes det riktige reléet til stoppkommandoen mottas ELLER systemet når en maksimal aktiveringstid og stopper.

Maksimal tid er ment som en sikkerhetsforanstaltning hvis brukeren glemmer å stoppe den eller hvis kommandoen ble sendt ved et uhell og det er lite sannsynlig at noen vil stoppe den. Vi ønsker ikke reléet på ubestemt tid eller uventede problemer med sengen på grunn av langvarig kontaktlukking.

I koden min er denne tidsavbruddet 20 sekunder og kan justeres i den globale variabelen øverst i koden.

En annen sikkerhetstiltak var å alltid sørge for at hvis jeg aktiverer det ene reléet, kalles det alltid en forsettlig deaktivering av det andre, selv om den siste tilstanden allerede var av. Jeg vil ikke sende 12v nedover begge signallinjene siden jeg ikke vet hva det vil gjøre med sengen.

Annet enn det, publiserer sengen at den er tilgjengelig hvert 60. sekund, og det er det. Ingen bjeller eller fløyter her. Siden sengen ikke har tilbakemelding om posisjon, kunne jeg ikke sende noen tilbake til Hjemmeassistent.

Trinn 5: Eksempel på integrasjon

Eksempel på integrasjon
Eksempel på integrasjon
Eksempel på integrasjon
Eksempel på integrasjon

Koden jeg skrev bruker MQTT til å kommunisere via WiFi og kan derfor kommunisere med alle automatiseringshubber eller enheter som bruker MQTT. Jeg bruker Home Assistant som har en innebygd MQTT -megler. Nedenfor er et eksempel på min HA -konfigurasjon.

I HA har jeg en covers.yaml -fil med følgende definisjon:

- plattform: mqtt

name: "Master Bed Headboard" command_topic: "master_bed_control/cmd" availability_topic: "master_bed_control/availability" qos: 0 behold: false payload_open: "UP" payload_close: "DOWN" payload_stop: "STOP" payload_available: "online" payload_not_available: " offline "optimistisk: sant

Dette gir meg en oppføring i mitt HA -grensesnitt med en opp/stopp/ned -knapp satt med handlingen som beskrevet ovenfor.

I tillegg har jeg definert to knapper på kontrollpanelet ved sengen (instruerbart / blogginnlegg) for å heve og senke hodegjerden. Knappene på kontrollpanelet er definert som MQTT -sensorer:

- plattform: mqtt

state_topic: "bedside_cp1/button5" navn: "Sengeknapp CP1 -knapp 5" -ikon: mdi: sirkel

- plattform: mqtt

state_topic: "bedside_cp1/button6" navn: "Sengeknapp CP1 -knapp 6" -ikon: mdi: sirkel

… og 4 automatiseringsregler for når hver knapp trykkes og slippes. Når den trykkes, sendes opp- eller ned -kommandoen til sengen, avhengig av hvilken knapp som ble aktivert, når knappen slippes, sendes stoppkommandoen:

- id: '1548308650383'

alias: MBR Bedside CP Button 5a trigger: - entity_id: sensor.bedside_cp1_button_5 from: 'Off' platform: state to: 'On' condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.open_cover - id: '1548308758911' alias: MBR Bedside CP Button 5b trigger: - entity_id: sensor.bedside_cp1_button_5 from: 'On' platform: state to: 'Off' condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.stop_cover - id: '1548308863495' alias: MBR Bedside CP Button 6a trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'Off' platform: state to: 'On' condition: action: - data: entity_id: ' cover.master_bed_headboard 'service: cover.close_cover - id:' 1548308911467 'alias: MBR Bedside CP Button 6b trigger: - entity_id: sensor.bedside_cp1_button_6 from:' On 'platform: state to:' Off 'condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.stop_cover

Anbefalt: