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

Vinnerliste

Populært innhold

Viser innholdet med mest poeng siden 24. april 2023 i Blogginnlegg

  1. Da jeg var innom et shoppingsenter i Berlin i fjor sommer fant så jeg disse klokkene: Jeg ble kjempefasinert, særlig fordi det slo meg at dette var noe jeg selv kunne klare å lage. Da jeg kom hjem fant jeg dem på nettet hos Nordiska Galleriet og de var ikke akkurat billige 😮 (Sjekk DEN prisen) Enda en grunn til å lage dem selv. Jeg har alltid være fasinert (og litt stolt) over måten vi normenn angir tiden med "avstanden til nærmeste halve time": - 5 over 2 - 5 på halv 3 - 5 over halv 3 -5 på 4 osv Utlendinger går i fella hele tiden og mange tror at "halv 7" er 07:30 🙂 I tillegg ville jeg selvfølgelig ha minutters nøyaktighet (og ikke 5 min nøyaktighet som de kjøpeklokkene hadde) og også tekst på "halv" og "kvart". Etter å ha sittet noen kvelder og stablet sammen ord på rutepapir (Trenger ikke egen TO når du kan tenne de 2 første bokstavene i TOLV etc) endte jeg opp med en matrise på 12x12 bokstaver. Jeg hadde da også plass til "KLOKKA ER NÅ" og litt Service ord som "WIFI" og "DOT" Jeg var litt usikker på angivelsen av minuttene mellom xx:15 og xx:20 (og xx:40 og xx:45). -Sier vi "tolv minutter over halv" eller "atten minutter på" ? (Antakeligvis ingen av delene 🙂 ) Jeg tok en sjefsavgjørelse og bestemte meg for 1..19 minutter på og over hel time, og 1..10 minutter på/over halv time Å frese ut så små bokstaver i aluminium er ikke bare-bare og det prosjektet arbeider jeg fortsatt med, -MEN jeg har jo en laser 😉 ! Og laserskårene Times New Roman (Med seriff og greier) ble skikkelig fint i svart kartong (Fra Ark bokhandel) Måtte jobbe litt i CAD for å få bokstavene til å bli "stencil-type" men det ble jo ferdig til slutt. De nye adresserbare LED stripene er jo helt perfekte til slikt og jeg valgte en 5V stripe med RGBW slik at jeg kunne kjøre dem på en USB kabel og kunne få litt varmt gult lys. Med 30 stk på meteren ble det 3.33cm på hver bokstav som var helt passe. Så da var det bare å klippe dem opp og lime dem på bakplata og lodde dem sammen med strøm og data slik at alle kom etterhverandre: "Avstands plata" ble det jo en del arbeid med. Den måtte freses nøyaktig og ha utsparinger til loddingene: Her er et glimt fra produsjonen IMG_0096.mp4 Med plata montert og ESP32'en på plass så det slik ut: Hadde ikke lyst til å sette av noe plass til en "reset knapp" så den ble bare 2 kabler på baksiden 🙂 : For at kartong-bokstavene skulle holde seg flate måtte jeg ha plastplate både over og under. Jula hadde noen fine i 2mm og 4mm. Jeg prøvde meg med hvit plast fra Biltema for å gjøre lyset diffust men det "lakk" for mye over til nabobokstaven så løsningen ble faktisk helt vanlig printerpapir (2 x A3) som ble lagt under bokstavene: En venn av meg foreslo svart silkepapir som difusjonspapir og det ble også ganske fint. -Da ser en ikke bokstavene så godt før de lyser opp og det gir en annen effekt (men jeg synes det er litt kult å se dem ellers også) 2 x 6mm MDF + 2mm plast + 4mm plast = 18mm Til slutt hadde jeg litt flaks og fant alu-profiler hos Maxbo som var perfekte. Disse var rett under 18 og kunne klemmes på som eneste festemåte etter at de var skåret i gjerdesaga. Siden jeg bruke 5m USB kabler til strømforskyning var det jo ingen grunn til ikke å la den USB'en også være plugget i ESP32'en slik at en kan reprogrammere om en vil. Men jeg turte ikke å ta strøm til LED'ene fra ESP32'en så kablene ble klippet opp og tappet for 5V. Så var det programvaren da. Minimums konfigurasjonen fikk WiFi Manager som setter opp en SSID = "BokstavKlokke" med samme passord for å sette opp husets WiFi. Den leser så klokka fra nettet med NTP og "tidssone" = CET-1CEST,M3.5.0,M10.5.0/3 Det skal gi riktig sommertid også så vidt jeg forstår. Når du trykker "reset" (kortslutter de to kablene på baksiden) går den i AP mode igjen og viser "WIFI" på displayet Når den starter tester den alle LEDene i alle farger og så "tekster" den ut IP adressen 🙂 Untitled video - Made with Clipchamp (2).mp4 Mulighetene herfra er mange: - Flere konfigurerings-parametere i WiFi Manager: Justering av bokstav-farger og intensitet Modi med andre farger om natta Feiring av hel/halv time med farger - MQTT support fra Smarthuset Blinker klokka om noe skjer Styrer fargene avhengig av sol opp/ned MEN alt dette må jeg jo spille ball med dere på forumet om ! Jeg opretter en tråd på Mikroprosessor-forumet og tar imot ideer og kode der. (Min kode skal dere selvfølgelig få) Jeg har brukt så mange timer på dette prosjektet at det ville være dumt å ikke dele det med flere. Så jeg har laget noen få komplette som er lagt ut på finn. (Søk på bokstavklokke) Til dere som liker å gjøre ting selv men ikke har fres og/eller laser tenkte jeg å tilby et "byggesett" med de delene som er vanskelige å lage. Egentlig er det bare de to MDF platene og bokstavkartongen men jeg er redd kartongen ikke overlever postgang om jeg ikke legger den mellom plastplatene. Kontakt meg her eller på Finn om dere er interessert. Og hva er neste skritt? Vel, jeg har ikke gitt opp å frese ut bokstavene i aluminiumsplate. Da kan den øverste plastplaten skippes og difusjonspapiret bør byttes ut med plastfolie. Jeg HAR allerede forsøkt å bruke noe annet enn svart kartong i laseren. Jeg har prøvd meg på tapet, både med og uten mønster. Det ble veldig kult men min laser er egentlig bare en fres med påmontert laser og brenner derfor et lite hull hver gang den starter en skjæring. Jeg har kjøpt inn en ny controller som kan ta M11P1/M10P1 koder (skru på laseren først når aksen begynner å bevege seg) så når den er montert får vi se mere på tapeter.
    3 poeng
  2. Kona vil ha frisk luft på soverommet, mens jeg synes det blir for kaldt i løpet av natta. Jeg forsøkte meg med en Fakro ZWS230 for å lukke vinduet automatisk, men den bråket for mye (WAF=0). Jeg ønsket derfor å forsøke meg på en servostyrt ventil med en vifte i som kunne blåse frisk luft inn, men lukkes automatisk dersom det blir for kaldt. Vifta skulle være en lydsvak PC vifte med høyt volum, og hastigheten skulle kunne reguleres trinnløst med PWM. Siden dette skulle gå på fast strøm, valgte jeg WiFi som kommunikasjon. Arduino MRK WiFi 1010 er en kompakt og grei microprosessor som hadde alt jeg trengte. Siden jeg hadde pinner til overs, slang jeg på en temperatursensor og en RGB LED for å kunne kommunisere med omverdenen. Dette er greit for debugging, men også for å kunne vise status under konfigurasjon. Utgangspunktet er en Flexit ventil med snortrekk for å få en blank (ikke 3D printet) front. Har du en slik eksisterende ventil, kan du altså oppgradere med denne Jeg hadde ikke ventil på soverommet fra før og måtte derfor sette inn en slik. Byggeveiledningen: (Du finner "handlelisten" i bunn av denne posten) Start med å fjerne mekanismen for snortrekket og erstatt fjæra med en svakere en. Min er hentet fra biltema sitt fjærsett. Den bør være sterk nok til at ventilen ikke klapprer i vind, men svak nok til at servoen orker å dra den. Etter masse prøving og feiling landet jeg på denne 3D modellen som ble modellert i Onshape og printet på en Flashforge Inventor. Onshape er gratis for hobbyfolk, men er helt profft og veldig greit å bruke. Anbefales! 3D modellen er tilgjengelig for dere for printing eller viderearbeid (Lag deg en gratis konto, logg inn og trykk på linken i delelista nederst) STL filer ligger også vedlagt. PC vifter skal PWM styres med 25KHz, og det tok meg en del tid å finne ut hvordan en endrer PWM frekvensen på Arduinoen til dette. Her er koden som må kjøres etter andre interupt oppsett: Vifta har mulighet til å rapportere faktisk hastighet, men det fikk jeg aldri helt til og droppet derfor det. Å styre servo og blinke med LED er jo planke med en Arduino, så det går jeg ikke gjennom. Siden vifta skulle ha 12V og servoen og Arduinoen 5V, måtte jeg inn med en regulator. Kunne sikkert brukt noe mindre og enklere i To-220 kapsel, men jeg hadde en haug med slike liggende: DS18B20 er en artig IC som måler temperatur og er lett å kommunisere med fra en Arduino. Det eneste den trenger er en pull-up resistor på 4,7k Siden LEDen også trenger 3 resistorer (220ohm), tok jeg like godt et lite kretskort med faste baner og monterte alt sammen på det. Kuttet noen baner med bor, laget kryssninger med noe koppertråd og loddet på vinklede kontakter på enden. Det hele blir mer stabilt også. En liten borrefeil korrigeres med en liten kabelstump (blå) Spenningsregulatorpinnene er merket med rødt. Ellers er koblingene laget slik at de går mest mulig rett ut på koblingspinnene. Her er skjema tegnet med Arduinoen og kontaktene i samme linjer som på kretskortet Fargene på ledningene er slik de er i virkeligheten. Vifta og servoen som har ferdige kontakter kan plugges rett inn: Siden ventilen allerede har et hull der snora satt, kan det borres opp til 4.5 - 4.8 mm og LED'en presses inn der. Kabel lages med riktig pinout ved å lime sammen hunn-hunn koblingskabel med superlim: Temperatur IC'en loddes også på en slik kabel: men her tillater jeg meg å dele dem opp slik at den brune signalkabelen plugges for seg. - det ble alt for mye styr å få dem til å gå inn ved siden av hverandre. Pinnene skilles med litt kna-epoxy: Da er det klart for montering. Først inn med servoen. Her må en bruke kubbe-trekker. Så er det på med viftefestene. Legg merke til at de skal forbi begge hakkene. (Bare dra selv om gummien blir hvit, - de tåler det) Neste er å feste temperatursensoren med mere kna-epoxy: Når epoxyen har herdet, kan du sette på vifta. OBS! ledningen skal gjennom utsparingen for dette i kanten. Fjern gjerne litt av strømpa, så blir kabelen mykere å legge og fargene synlig for å kunne sette kontaktene riktig vei. Vifta sitter på yttersiden nettop fordi det skal bli enklere å trekke gummifestene igjennom vifta. Nå bør du plugge det hele sammen og teste på benken før du fester noe på servoen. Her er kode for Arduinoen (ino fil er også vedlagt): Husk å endre WiFi SSID, passord og IP adresse: Når du går til IP-adressen du anga med en browser, skal du få opp denne websiden: Hastigheten på vifta går fra 0 til 100 og ventilen fra 0 til 180 (grader). Nå kan du testkjøre vifta og servoen og sjekke temperaturen før du går videre. Skru deretter stagene sammen og fest dem på en avklippet servo-arm. Kjør servoen tilbake til "helt lukket" (0) og fest staget på servoen slik at det er en liten klaring til veggen Test at servoen beveger seg som den skal, sett den i "helt åpen" (180) posisjon og skru deretter staget fast i luka. Nå må du montere hele greia i veggen før du fester LED'en, setter luka på plass og fester fjæra. Integrasjonen med Alexa og HomeSeer er foreløpig enkel Alexa har 3 Routines ("Bedroom Fan Close", "Bedroom Fan Silent" og "Bedroom Fan Full") som setter en verdi på en virtuell device (Tips: La kona bestemme kommandoene så husker hun dem ) Denne har eventer som trigger når den blir satt: Som i sin tur kaller opp primitiv-eventer: Selve kommandoen er denne: &hs.URLAction("http://192.168.XXX.YYY/?speed=0&valve=0", "GET", "", "") Da er det bare å teste: IMG_5372.mp4 Helt til slutt vil jeg si noe om koden: Den er ikke ferdig og slik jeg vil ha den! Problemet er at om jeg skulle vente med å publisere dette til den ble perfekt, ville det aldri bli postet noe... Jeg gir dere derfor koden slik den er akkurat nå og så får vi heller jobbe sammen med å få på plass de tingene jeg ønsker meg: Når den starter, bør den hente SSID og pwd fra EEPROM Dersom den ikke får kontakt med WiFi, bør den gå i AP mode slik at du kan koble til den på en fast IP (10.0.0.1 feks) med telefonen og få opp en side der du kan velge SSID og oppgi passord og ønsket IP (mens dette skjer kan den f. eks. lyse blått) Dersom du velger en egen parameter, burde du få opp en side der du kan endre IP Den burde snakke på Web-socket med HomeSeer HomeSeer burde ha egne devicer med slidere for speed og ventilåpning. Og en egen device som viser temp DEL GJERNE TILBAKE DET DERE LAGER Deleliste: 3D Modell i OnShape (Eller bare søk etter "Flexit vent with Servo og CPU fan") Servoen Luxorparts S3003 Standardservo Viften er en Noctua NF-S12A PWM Dioden er en RGB Common Cathode 4-Pin F5 5MM Temp sensoren er en DS18B20 Arduino MKR Wifi 1010 Spenningsregulator 5V fra 12V Kretskort, Kabler, Pinnelist Pull-up motstand til Temp sensoren: 4,7k ohm Motstand til LED: 3 x 220 ohm Flexit ventil 6x6 (150x150mm) art 02024 feks herfra Flexit_Ventil_uten_wifiParametere.ino Module.stl Rod1.stl Rod2.stl
    1 poeng
  3. Jeg har en del rullegardiner fra IKEA som er automatisert med Rollertol motorer. Her om dagen gikk en istykker og jeg hadde lite lyst til å bestille en ny fra USA. - Dyre er de også. Men jeg hadde nettop oppdaget hvor lett det er å designe og 3D printe tannhjul (Jeg bruker OnShape men regner med at Fusion 360 er like enkelt) så jeg tenkte at her var et fint byggeprosjekt. Jeg hadde kjøpt noen artige motorer fra Aliexpress for en stund siden som kunne passe til slikt bruk. https://www.aliexpress.com/item/32855724293.html Den jeg bruker her er 50RPM. Disse er giret kraftig ned med planet-gir og har rotasjons sensorer som gir 11 pulser / rotasjon. Dette gjør at de er mye sterkere enn en stepper motor men kan posisjoneres like nøyaktig ved å telle pulser. Fasongen inviterer til å plassere den i et klikk-on stativ som dette: (Slutt-versjonen måtte ha enda en klemme for å holde den helt fast) Tannhjulene ble laget for å kunne settes inn i enden av rullegardinen og et passende veggfeste ble printet: Siden det kun var et museklikk å lage tannhjulene heliske (skrå tenner) måtte jeg prøve dette. (Jeg hadde hørt at en gjorde slikt i girkasser for at de skulle lage mindre lyd) Dette ga meg to raske lærdommer: - Tannhjulene som skal gripe inn i hverandre må ha motsatt vinkling - Når de belastes vil de få en skyvekraft sidelengs Det siste bruker jeg nå aktivt for å forhindre at tannhjulet på motoren trekkes av akslingen når gardinen kjøres opp. Denne L298N motor-driveren tar 12V og er litt overdimensjonert men har også en 5V utgang som er fin å mate ESP32'en med. Jeg hadde bestemt meg for at jeg skulle ha 3 knapper: OPP, NED og SET I drift skulle knappene kjøre gardinen (helt) opp og (helt) ned og SET knappen skulle sette den i SETUP mode. I setup mode skulle knappene kjøre gardinen opp og ned så lenge de ble holdt inne. Først for å finne TOP posistion og så kvittere denne ved å trykke SET og deretter finne BUNN posisjonen og kvittere denne ved å trykke SET på nytt. En RGB LED skulle kommunisere hvilken modus du var i. Så var det bare å printe en passende boks, med skrue hull, for å putte hele greia inn i: Koblingen var sånn: For å unngå at jeg måtte sette oppigjen stopp posisjonene i topp og bunn dersom strømmen forsvant skrev jeg disse (=denne, top er uansett alltid 0) ned i Flash memory. Jeg bestemte derfor også at gardinen ikke skulle kunne stoppes halveis og kun var enten åpen eller lukket. Denne statusen (Oppe eller Nede) ble også skrevet til Flash. Flash tillater kun 100 000 skrivinger så om jeg kjører gardinen 3 ganger om dagen vil den kun holde i ca 100 år... Motor pulsene telles med et Interupt på pinne 25. Knappene bruker også en Interupt-timer for å slippe å håndtere rippel. For hver 100ms sjekker jeg om knappene er av eller på. Er de aktive teller jeg en teller OPP er de passive teller jeg en teller NED. Blir telleren 4 setter jeg knappen som AKTIV, blir den -4 setter jeg den som inaktiv. LED'en fikk kun en motstand felles (latskap) så den tåler ikke at mer enn en farge skrus på om gangen. Selve logikken er en tilstands maskin med disse tilstandene: SETUP_DEFINING_TOP, SETUP_DEFINING_BOTTOM, SETUP_STOP_SET_PRESSED_TOP, SETUP_STOP_SET_PRESSED_BOTTOM, MOVING, STOPPED_TOP, STOPPED_BOTTOM, STOP_SET_PRESSED I tillegg holdes det styr på rettning: MOVING_UP, MOVING_DOWN, STOPPED Da er det også enkelt å vite om pulsene som kommer fra motoren skal telles opp eller ned. Motoren har riktignok 2 sensorer som står i forskjellig vinkel på akslingen så det ville være mulig å måle avstanden mellom pulsene for å avgjøre rettning men dette er MYE lettere. MQTT biblioteket jeg fant var så enkelt å bruke at det nesten var latterlig. Jeg burde selvfølgelig rydde masse i koden og skrive pedagogiske kommentarer for å vise alle hva for en dreven og fantastisk programmerer jeg (egentlig) er men det gidder jeg ikke nå, sorry. Dere får heller spørre om dere lurer på noe. Jeg gadd heller ikke å lage noe fancy setup automatikk med oppstarts AP og Webside for å sette IP og velge SSID. (Post gjerne slik kode som jeg kan stjele til neste gang) Her er koden: #include <Preferences.h> #include <EspMQTTClient.h> Preferences preferanser; EspMQTTClient client( "SSID", "PWD", "192.168.232.8", // MQTT Broker server ip "", // MQTTUsername Can be omitted if not needed "", // MQTTPassword Can be omitted if not needed "rullegardinClient", // Client name that uniquely identify your device 1883 // The MQTT port, default to 1883. this line can be omitted ); // MQTT int receivedCommand=0; // 1=UP 2=Down 0=Executed // Motor int motorPin1 = 14; int motorPin2 = 12; int enablePin = 13; // Interupt portMUX_TYPE sync1 = portMUX_INITIALIZER_UNLOCKED; // External int IntPin1 = 25; // Timer hw_timer_t * timer = NULL; // Switches const int swPinUp = 23; const int swPinDown = 22; const int swPinStopSet = 21; volatile bool swUp = false; volatile bool swDown = false; volatile bool swStopSet = false; // LED const int RED = 5; const int BLUE = 18; const int GREEN = 19; // Modes enum stateType { SETUP_DEFINING_TOP, SETUP_DEFINING_BOTTOM, SETUP_STOP_SET_PRESSED_TOP, SETUP_STOP_SET_PRESSED_BOTTOM, MOVING, STOPPED_TOP, STOPPED_BOTTOM, STOP_SET_PRESSED, }; // Direction enum directionType { MOVING_UP, MOVING_DOWN, STOPPED }; //VARS volatile stateType state; volatile directionType movingDirection; volatile long stepCount=0; //0= På toppen volatile long stepMax=0; volatile int countUpSW =0; volatile int countDownSW = 0; volatile int countStopSetSW = 0; unsigned long lastTime=0; char lastPos; //------------- Interupt Routine Steps ----------------- void IRAM_ATTR isr_steps() { portENTER_CRITICAL(&sync1); if (movingDirection==MOVING_DOWN) { stepCount++; } else if (movingDirection==MOVING_UP) { stepCount--; } if (stepCount<0) stepCount=0 ; // cap on 0 portEXIT_CRITICAL(&sync1); } //------------- Interupt Routine Timer ----------------- void IRAM_ATTR isr_timer() { portENTER_CRITICAL(&sync1); if (digitalRead(swPinUp)==LOW) { countUpSW++; if (countUpSW > 4) { swUp = true; countUpSW=0; } } else { countUpSW--; if (countUpSW < -4) { swUp = false; countUpSW=0; } } if (digitalRead(swPinDown)==LOW) { countDownSW++; if (countDownSW > 4) { swDown = true; countDownSW=0; } } else { countDownSW--; if (countDownSW < -4) { swDown = false; countDownSW=0; } } if (digitalRead(swPinStopSet)==LOW) { countStopSetSW++; if (countStopSetSW > 4) { swStopSet = true; countStopSetSW=0; } } else { countStopSetSW--; if (countStopSetSW < -4) { swStopSet = false; countStopSetSW=0; } } portEXIT_CRITICAL(&sync1); } //************************* INIT ********************* void setup() { // LED pins pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); digitalWrite(RED, HIGH); preferanser.begin("Prefs",false); stepMax=preferanser.getLong("stepMax",-1); // -1= not init before if (stepMax==-1) { state=SETUP_DEFINING_TOP; } else { lastPos=preferanser.getChar("position",' '); if (lastPos=='T') { state=STOPPED_TOP; client.publish("rullegardin/position", "TOP"); } else if (lastPos=='B') { state=STOPPED_BOTTOM; client.publish("rullegardin/position", "BOTTOM"); } else { // error or default state=SETUP_DEFINING_TOP; } } // Motor pins pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(enablePin, OUTPUT); // init interupt pinMode(IntPin1, INPUT); attachInterrupt(IntPin1,&isr_steps,FALLING); // Interupt timer timer = timerBegin(0,240,true); // 240Mhz timerAttachInterrupt(timer,&isr_timer,true); timerAlarmWrite(timer, 100, true); // 100ms ? timerAlarmEnable(timer); // SW pinMode(swPinUp, INPUT_PULLUP); pinMode(swPinDown, INPUT_PULLUP); pinMode(swPinStopSet, INPUT_PULLUP); // Motor Enable digitalWrite(enablePin,HIGH ); // testing Serial.begin(9600); Serial.println("Testing DC Motor..."); client.enableDebuggingMessages(); client.enableLastWillMessage("rullegardin/lastwill", "I am going offline"); digitalWrite(RED, LOW); digitalWrite(GREEN, HIGH); digitalWrite(BLUE, LOW); } //*********************************** ROUTINES void move_down() { movingDirection=MOVING_DOWN; digitalWrite(motorPin1,HIGH); digitalWrite(motorPin2,LOW); } void move_up() { movingDirection=MOVING_UP; digitalWrite(motorPin1,LOW); digitalWrite(motorPin2,HIGH); } void stop_moving() { movingDirection=STOPPED; digitalWrite(motorPin1,LOW); digitalWrite(motorPin2,LOW); } void update_leds() { // LED if (state==SETUP_DEFINING_TOP){ digitalWrite(RED, LOW); digitalWrite(GREEN, HIGH); digitalWrite(BLUE, LOW); } if (state==SETUP_DEFINING_BOTTOM){ digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); digitalWrite(BLUE, HIGH); } else { digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); digitalWrite(BLUE, LOW); } } // ************************ LOOP *********************** void loop() { // MQTT client.loop(); // Debug if (millis()-lastTime>200) { Serial.print("State:"); Serial.print(state); Serial.print(" moving:"); Serial.print(movingDirection); Serial.print(" Cnt:"); Serial.print(stepCount); Serial.print(" Max:"); Serial.print(stepMax); Serial.print(" UP:"); Serial.print(swUp); Serial.print(" Dwn:"); Serial.print(swDown); Serial.print(" StopSet:"); Serial.print(swStopSet); Serial.println(""); lastTime=millis(); } update_leds(); // Final state machine // SETUP if (state==SETUP_DEFINING_TOP) { // -------------- if ((movingDirection==STOPPED) && swStopSet) { // Set top pos stepCount=0; state=SETUP_STOP_SET_PRESSED_TOP; } else if (swUp) { move_up(); } else if (swDown) { move_down(); } else { // no buttons pressed stop_moving(); } } else if (state==SETUP_DEFINING_BOTTOM) { // -------------- if ((movingDirection==STOPPED) && swStopSet) { // Set bottom pos stepMax=stepCount; preferanser.putLong("stepMax",stepMax); //save for next boot Serial.println("Saving stepMax"); state=SETUP_STOP_SET_PRESSED_BOTTOM; } else if (swUp) { move_up(); } else if (swDown) { move_down(); } else { // no buttons pressed stop_moving(); } } else if (state==SETUP_STOP_SET_PRESSED_TOP) { // -------------- if (!swStopSet) { // released state=SETUP_DEFINING_BOTTOM; } } else if (state==SETUP_STOP_SET_PRESSED_BOTTOM) { // -------------- if (!swStopSet) { // released move_up(); state=MOVING; } // NOT SETUP } else if (state==MOVING) { // -------------- if (swStopSet) { stop_moving(); state=SETUP_DEFINING_TOP; } else if (swUp) { move_up(); state=MOVING; } else if (swDown) { move_down(); state=MOVING; } // Ende stop? if (stepCount<=0 && movingDirection==MOVING_UP) { stop_moving(); preferanser.putChar("position",'T'); Serial.println("Saving Position = T"); state=STOPPED_TOP; client.publish("rullegardin/position", "TOP"); } else if (stepCount>stepMax && movingDirection==MOVING_DOWN) { stop_moving(); preferanser.putChar("position",'B'); Serial.println("Saving Position = B"); state=STOPPED_BOTTOM; client.publish("rullegardin/position", "BOTTOM"); } } else if (state==STOPPED_TOP) { // -------------- if (swDown) { move_down(); state=MOVING; } else if (swStopSet) { state=STOP_SET_PRESSED; } else if (receivedCommand==2) { move_down(); state=MOVING; receivedCommand=0; } } else if (state==STOPPED_BOTTOM) { // -------------- if (swStopSet) { state=STOP_SET_PRESSED; } else if (swUp) { move_up(); state=MOVING; } else if (receivedCommand==1) { move_up(); state=MOVING; receivedCommand=0; } } else if (state==STOP_SET_PRESSED) { // -------------- if (!swStopSet) { // release button state=SETUP_DEFINING_TOP; } } else { Serial.println("ERROR Unknown state"); } } void onConnectionEstablished() { // Subscribe to "mytopic/test" and display received message to Serial client.subscribe("rullegardin/command", [](const String & payload) { Serial.println(payload); receivedCommand=payload.toInt(); }); /* // Subscribe to "mytopic/wildcardtest/#" and display received message to Serial client.subscribe("mytopic/wildcardtest/#", [](const String & topic, const String & payload) { Serial.println("(From wildcard) topic: " + topic + ", payload: " + payload); }); */ // Publish a message to "mytopic/test" client.publish("rullegardin/position", "startUp"); // You can activate the retain flag by setting the third parameter to true /* // Execute delayed instructions client.executeDelayed(5 * 1000, []() { client.publish("mytopic/wildcardtest/test123", "This is a message sent 5 seconds later"); }); */ }
    1 poeng
  4. På kjøkkenet har jeg en peis. med et spjeld når jeg fyrer opp og åpner spjeldet glemmer jeg alltid å lukke det igjen, så når jeg kommer ned om morgenen etter er det iskaldt på kjøkkenet for pipa har suget ut all varmen (den trekker veldig bra) og panelovnene har fyrt hele natta for kråka Alexa burde ha advart meg når jeg gikk og la meg, på samme måte som hun varsler om at jeg ikke har låst døra eller lukket garasjeporten osv. Eller HomeSeer burde har gitt meg en advarsel over Squeezeboksene etter 3-4 timer. Jeg trengte altså en sensor på spjeldet! En microbryter eller en tiltsensor ville nok kunne monteres men en kabel derfra til en sender ville bli skjemmende. Løsningen ble en boks rundt selve spjeld stanga: Inne i boksen puttet jeg en microbryter, en borstopp på akslingen og av plasshensyn måtte jeg slakte en Nexa WBT-912 sender: Nexa er ikke det foretrukne fordi de sender så lange signaler og blokkerer all (433MHz) radio trafikk men siden spjeldet åpnes og lukkes såpass sjeldent fikk det duge En skrue i fugen på pipa stabiliserte det hele nok: Også var det hele på plass: IMG_0409.MOV PS: JA jeg har sjekket at ikke stanga blir for varm for plasten og elektronikken
    1 poeng
Vinnerlisten er satt til Oslo/GMT+02:00
×
×
  • 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.