Avancerad kökstimer (ESP8266)

Här kan man starta en egen tråd för sitt stora eller lilla projekt, för att få inspiration, beröm, hjälp om man kör fast etc.
Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Avancerad kökstimer (ESP8266)

#1

Inläggav pelle » tor 18 maj 2017, 21:05

Jag har skrivit om det här projektet förut i ett annat forum i samband med en tävling, men av olika skäl valde jag att avbryta mitt engagemang i det forumet men fortsätter här istället. Jag lägger in inläggen i ungefär samma ordning som där så att ni kan se hur projektet växer fram gradvis. Tiden är komprimerad i svarsinläggen men stämmer enligt historiken i första inlägget

Användare pelle är samma person som hanpa och det är samma som forumägaren (admin).
Använder hanpa som mig själv, pelle var ett tillfälligt testkonto som inte används mer
.

Detta har funnits i pipen sedan länge men inget har gjorts, dvs projektet är helt nytt och inget återanvänds.

Kökstimer kan tyckas trivialt men då detta är något jag använder varje dag, 1-4 stycken parallellt, så är jag inte nöjd med det som finns på marknaden och jag vill skräddarsy så det blir exakt som jag vill ha det:

Grundfunktion
  • 4 separata timers som kan startas och stoppas separat på enkelt sätt men de ska sitta i samma enhet
  • Troligen LED-display med stora siffor men det finns andra alternativ, det ska se snyggt ut, kanske olika färger per timer
  • Tänker mig primärt rotary encoders med tryckknapp, en per timer
  • Inställda tider ska kommas ihåg eftersom jag ofta kör samma tider för vissa saker upprepat
  • Displayen ska lätt kunna avläsas på håll, ser inte lika bra som förr. Billiga LCD-timers är svåra att läsa av på håll och displayen blir sämre då den åldras
  • Ljudsignaler ska vara tydliga och man ska kunna skilja på vilken/vilka timer(s) det är som löst ut, kanske med ökande ljudnivå

Lullull
  • Tänkte lösa det med ESP8266 och vill då koppla det till hemautomationssystemet, främst för att kunna veta om någon timer går men kanske även för att kunna skicka SMS/push eller meddela på annat ställe i huset att en timer löst ut om jag inte hör det, t.ex. i källaren. Kan varnas om detta exempelvis via Apple Watch om larmet inte har "kvitterats" inom en viss tid.
  • Aktiveringen kan vara baserat på proximity sensor eller dylikt. Tänkte ha den nätansluten men det finns ingen anledning att visa något på displayen om ingen timer är aktiv och man inte avser att använda den.

Exakt lösning återstår att fundera ut, detta är första skissen på behovet

Principskiss, tänkt att placera den under överskåpet i köket.
file_009.png
file_009.png (83.66 KiB) Visad 1288 gånger


Progress
2017-04-20: Projektdefinition med första kravställning och skiss på överordnad design
2017-04-21: Gjorde en mockup för att prova olika storlekar på Adafruits 7-segment LED-displayer med I2C-interface. Beslutade att använda 0.56", 1.2" blir för stor.
2017-04-22: Skal till kod för ESP8266 med stöd för OTA och MQTT. Provat mot NodeMCU ESP-12F som jag har hemma, kör på den tills vidare då Wemos D1 mini har för få pinnar om man inte ska behöva trixa med externa kretsar. Första versionen av modlogik och 4 parallella timers som fungerar OK via simuleringskod.
2017-04-23: Utökade med hantering av uppåträkning då man startar från 0. Var lite småtrixigt men funkar nu enligt nya fall i simuleringskoden.
2017-04-24: Full funktion på MQTT för in/ut-matning från servern mot ESP8266. Provat via skalkommandon men har påbörjat iPhone-app för enklare manövrering.
2017-04-26: Fungerande alternativt användargränssnitt via iPhone i väntan på riktig hårdvara. ESP8266 förmedlar data till linux-servern via MQTT, appen kommunicerar med servern.
2017-04-29: Alla 5 displayerna inkopplade provisoriskt! Lade även till en timvisning då antal sekunder >= 60*60. Blinkar med ":" eller "." då en timer går.
2017-05-06: Kopplade ihop alla displayer via Wago 221 istället för via kopplingsplatta.
2017-05-07: Fortsatt finlir med timerdelen i väntan på hårdvara. Ny designskiss längst ner i inlägget, den ursprungliga finns kvar som jämförelse.
2017-05-14: Kopplat in buzzer och labbat med olika pipmönster, frekvenser och volymer. Funkar över förväntan för $0.39! Klart med pipdelen man kan guldpläteras förstås.
2017-05-16: Drar mig ur tävlingen på elektronikforumet.com då jag tröttnat på översitteri och mobbarfasoner i forumet
2017-05-18: Fortsätter i eget forum här.
2017-05-25: Sensorn för ljus och avstånd inkopplad, ej programmerat än.
2017-05-27: Har lyckats läsa av data från ljussenssorn.
2017-05-28: Har provat radarsensorn LFS-DC04, har inte fått den att fungera bra, den störs troligen av Wifi och andra liknande sensorer i huset. Överger den tills vidare.
2017-05-28: Har programmerat upp full kompensation för omgivande ljus, så att displayerna lyser starkare då det är ljust i köket.
2017-05-31: Har nu skippat användning av sensorer i timern för att aktivera. Går på det jag har övrigt i hemautomationsssystemet och skickar aktiveringssignal via MQTT då rörelse detekteras i närheten av köket.
2017-06-24: Rotary encoders inkopplade via SX1509 och avläsning av alla signaler fungerar. Hantering av mittknappen klar för start och stopp av timers. Återstår att få till interrupthantering och avkodning av rotation.
2017-06-25: Har en fungerande avläsning av rotary encoders men då och då missat ett snäpp. Ska prova en annan algoritm för avläsning.

Senaste designskiss, den längst upp är den ursprungliga, från vitt papper. Den nya är efter prototyping och nya designval:
Skärmavbild 2017-06-01 kl. 07.33.25.png
Skärmavbild 2017-06-01 kl. 07.33.25.png (431.2 KiB) Visad 1059 gånger
Senast redigerad av pelle tor 18 maj 2017, 21:06, redigerad totalt 1 gång.

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#2

Inläggav pelle » tor 18 maj 2017, 21:05

Tänkte placera den under överskåpet i köket. Har nu uppdaterat huvudinlägget med principskiss.

Tanken är att den ska finnas där alltid men när man för handen i närheten (eller manövrerar en knapp) så aktiveras den och så är den på tills en viss tid gått efter att sista timern har stannat och ev. kvitterats. Har inte funderat så mycket på kvittering men man kan ju göra så att aktivering av närvarosensorn räknas som kvittering, alternativt att det kan göras via mobil/klocka om det skulle vara av intresse (för att det går...)

Har oftast Apple Watch på mig hemma så jag kan lika gärna skicka info om att timern löst ut, eller kanske att visa status/tid på alla timer via en app på klockan, även detta för att det går och inte för att det är superviktigt. Får se hur mycket jag orkar på lulluldelen men tanken är att åtminstone via MQTT ge möjlighet att styra dubbelriktat mot servern så att funktionen finns om jag vill använda den senare.

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#3

Inläggav pelle » tor 18 maj 2017, 21:06

Jag gillar att jobba strukturerat!

Steg 1: Rafsade ihop kravbilden för att definiera projektet och bli bland de 5 första... 20 minuter på lunchrasten på jobbet.
Steg 2: Ritade en skiss när jag kom hem.
Steg 3: Vadå?

Jag brukar ha svårt för att bestämma mig för komponenter så jag väntar med det. ESP8266:or har jag dock hemma så jag tänkte prova en helt ny grej (för mig).

Steg 3 blir att göra en prototyping-app till iPhone som simulerar displayer, knappar och kanske även ljudsignal och proximitysensorn. Jag bygger sedan upp funktionen gradvis på ESP:n men istället för att koppla in riktig hårdvara (som jag inte har) så får den kommunicera med iPhone-appen så att jag kan prova hur det fungerar med riktig kod på ESP:n.

iPhone-appen:
- Användargränssnitt, inte precis som på riktigt men samma saker ska kunna utföras
- Kommunicerar med linux-servern som i sin tur får kommunicera via MQTT med ESP:n (mest beroende på att jag inte orkat få till MQTT från egen app på iPhone)

ESP:n, ungefär i följande prio byggs funktionen upp:
- Grundskal med stöd för MQTT och OTA-uppdatering (bra att ha sen när den sitter i köket)
- States/modes skapas för att hålla reda på resp. timers status
- Hantering av timers, med inställning av värden, start, stop, nollställ etc. och styrning via appens simulerade "knappar"
- Hantering av "ljudsignaler" (får utföras konkret av appen)
- Fejkad hantering av proximity sensor (triggat av appen)

Detta lär väl ta ett tag men sen återstår ju "bara" att välja riktig hårdvara och interfacea mot, och plus på slutet, något som inte är min grej, att göra någon form av "låda".

Edit: Webbserver på ESP:n med knappar och loggutskrifter mot webbläsare kanske är enklare för prototyping men inte lika roligt. Får se var det tar vägen, jag kan köra MQTT-kommandon via enkla script från linuxburken också...

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#4

Inläggav pelle » tor 18 maj 2017, 21:08

Huvudkandidater för displayer just nu är Adafruits 7-segment LED med "backpack" och I2C-styrning. Har svårt att välja mellan 0.56" och 1.2".

file-2.png
file-2.png (250.38 KiB) Visad 1286 gånger


https://www.adafruit.com/product/881

Någon som känner till något liknande alternativ?

Fördelen med denna och I2C är det går att göra programvaran modulär. Med just denna går det att adressera upp till 8 displayer genom att konfigurera "backpack"-kretskortet med individuell adress och då kan alla nås från samma 2 pinnar från ESP:n. De har även stöd för blinkning, ändring av ljusstyrka etc. som jag har behov av.

0.56"
- Finns i 5 färger men bara 4 går att beställa just nu (inte vit)
- Skulle vara kul att ha 5 stycken, en i varje färg
- Är lite mindre men kanske är lätta att avläsa ändå på håll

1.2"
- Finns bara i 3 färger
- Är kanske lite väl stora, måste ju få plats med dem också

Ska nog prova att göra en "mockup" i form av skiss via copy&paste på bilder på displayerna och utskrift på A3 på färglaser och se hur det kan ta sig ut där jag vill ha den. Eller om jag bygger två enheter, en på varje sida av spisen. Det bör vara en smal sak att skriva progammet för stöd av upp till 8 displayer och så är det en enkel konfigurering i koden vilka man använder och vilka adresser de har. Dock måste jag ju även lösa hanteringen av knapparna på något liknande sätt, om även detta ska vara enkelt att konfigurera. Beror på om jag vill använda många ingångar eller om det kan "muxas" utanför ESP:n. Har ännu inte valt vilken ESP, min favvo Wemos D1 mini kanske har för få pinnar för denna tillämpning, beroende på hur jag gör med knapparna (rotary encoder med tryckknapp).

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#5

Inläggav pelle » tor 18 maj 2017, 21:08

"Mockup" testad.

1.2" är sjukt stort och tar för mycket plats.
0.56" är helt tillräckligt och kanske drar jag till även med den 5:e färgen som är vit, dock inte i lager hos Adafruit.

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#6

Inläggav pelle » tor 18 maj 2017, 21:10

Grundläggande kod för MQTT och OTA-uppdatering klar, snurrar nu på en NodeMCU ESP-12F.

Första varianten av moder och hantering av 4 parallella timers är funkis. Moderna för timers ser ut så här just nu:

Kod: Markera allt

enum timerStatesType {
  inactive,     // Timer not beeing used for a while, inactive
  ready,        // Timer at set value, ready to start (or restart again from previously set value after acknowledge)
  countingDown, // Timer is counting down, has not yet reached 0
  ended,        // Timer has ended, reached 0, not acknowledged yet
  paused        // Timer has paused from counting down
};

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#7

Inläggav pelle » tor 18 maj 2017, 21:12

Har provkört timerhanteringen via simuleringskod där användarens input simuleras vid olika tidpunkter. När en timer kommit till noll är det tänkt att den ska kvitteras av användaren, vilket simuleras. Då går man tillbaka till senaste inställda värdet som även är sparat i EEPROM. Om man stoppar innan man kommit ner till noll så hamnar man i pausmod och så kan man fortsätta därifrån igen. Utskrift från loggning via serieporten:

Kod: Markera allt

Booting
......
SYSTEM INIT
 0:00    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:01    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:02    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:03    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:04    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:05    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:06    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:07    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:08    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:09    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:10    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:11    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:12    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:13    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
 0:14    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]
USER:                                                                     T4 STARTED
 0:15    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  2:00 ]
 0:16    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:59 ]
 0:17    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:58 ]
 0:18    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:57 ]
 0:19    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:56 ]
 0:20    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:55 ]
 0:21    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:54 ]
 0:22    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:53 ]
 0:23    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:52 ]
 0:24    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:51 ]
 0:25    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:50 ]
 0:26    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:49 ]
 0:27    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:48 ]
 0:28    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:47 ]
 0:29    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:46 ]
USER:     T1 STARTED
 0:30    [ T1 COUNT  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:45 ]
 0:31    [ T1 COUNT  0:29 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:44 ]
 0:32    [ T1 COUNT  0:28 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:43 ]
 0:33    [ T1 COUNT  0:27 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:42 ]
 0:34    [ T1 COUNT  0:26 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:41 ]
 0:35    [ T1 COUNT  0:25 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:40 ]
 0:36    [ T1 COUNT  0:24 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:39 ]
 0:37    [ T1 COUNT  0:23 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:38 ]
 0:38    [ T1 COUNT  0:22 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:37 ]
 0:39    [ T1 COUNT  0:21 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:36 ]
 0:40    [ T1 COUNT  0:20 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:35 ]
 0:41    [ T1 COUNT  0:19 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:34 ]
 0:42    [ T1 COUNT  0:18 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:33 ]
 0:43    [ T1 COUNT  0:17 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:32 ]
 0:44    [ T1 COUNT  0:16 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  1:31 ]
USER:                           T2 STARTED           T3 STARTED
 0:45    [ T1 COUNT  0:15 ]   [ T2 COUNT  1:00 ]   [ T3 COUNT  1:30 ]   [ T4 COUNT  1:30 ]
 0:46    [ T1 COUNT  0:14 ]   [ T2 COUNT  0:59 ]   [ T3 COUNT  1:29 ]   [ T4 COUNT  1:29 ]
 0:47    [ T1 COUNT  0:13 ]   [ T2 COUNT  0:58 ]   [ T3 COUNT  1:28 ]   [ T4 COUNT  1:28 ]
 0:48    [ T1 COUNT  0:12 ]   [ T2 COUNT  0:57 ]   [ T3 COUNT  1:27 ]   [ T4 COUNT  1:27 ]
 0:49    [ T1 COUNT  0:11 ]   [ T2 COUNT  0:56 ]   [ T3 COUNT  1:26 ]   [ T4 COUNT  1:26 ]
 0:50    [ T1 COUNT  0:10 ]   [ T2 COUNT  0:55 ]   [ T3 COUNT  1:25 ]   [ T4 COUNT  1:25 ]
 0:51    [ T1 COUNT  0:09 ]   [ T2 COUNT  0:54 ]   [ T3 COUNT  1:24 ]   [ T4 COUNT  1:24 ]
 0:52    [ T1 COUNT  0:08 ]   [ T2 COUNT  0:53 ]   [ T3 COUNT  1:23 ]   [ T4 COUNT  1:23 ]
 0:53    [ T1 COUNT  0:07 ]   [ T2 COUNT  0:52 ]   [ T3 COUNT  1:22 ]   [ T4 COUNT  1:22 ]
 0:54    [ T1 COUNT  0:06 ]   [ T2 COUNT  0:51 ]   [ T3 COUNT  1:21 ]   [ T4 COUNT  1:21 ]
 0:55    [ T1 COUNT  0:05 ]   [ T2 COUNT  0:50 ]   [ T3 COUNT  1:20 ]   [ T4 COUNT  1:20 ]
 0:56    [ T1 COUNT  0:04 ]   [ T2 COUNT  0:49 ]   [ T3 COUNT  1:19 ]   [ T4 COUNT  1:19 ]
 0:57    [ T1 COUNT  0:03 ]   [ T2 COUNT  0:48 ]   [ T3 COUNT  1:18 ]   [ T4 COUNT  1:18 ]
 0:58    [ T1 COUNT  0:02 ]   [ T2 COUNT  0:47 ]   [ T3 COUNT  1:17 ]   [ T4 COUNT  1:17 ]
 0:59    [ T1 COUNT  0:01 ]   [ T2 COUNT  0:46 ]   [ T3 COUNT  1:16 ]   [ T4 COUNT  1:16 ]
USER:                                                                     T4 PAUSED
 1:00    [ T1 ENDED  0:00 ]   [ T2 COUNT  0:45 ]   [ T3 COUNT  1:15 ]   [ T4 PAUSE  1:15 ]
 1:01    [ T1 ENDED  0:00 ]   [ T2 COUNT  0:44 ]   [ T3 COUNT  1:14 ]   [ T4 PAUSE  1:15 ]
 1:02    [ T1 ENDED  0:00 ]   [ T2 COUNT  0:43 ]   [ T3 COUNT  1:13 ]   [ T4 PAUSE  1:15 ]
 1:03    [ T1 ENDED  0:00 ]   [ T2 COUNT  0:42 ]   [ T3 COUNT  1:12 ]   [ T4 PAUSE  1:15 ]
 1:04    [ T1 ENDED  0:00 ]   [ T2 COUNT  0:41 ]   [ T3 COUNT  1:11 ]   [ T4 PAUSE  1:15 ]
USER:      T1 ACKNOWLEDGED
 1:05    [ T1 ready  0:30 ]   [ T2 COUNT  0:40 ]   [ T3 COUNT  1:10 ]   [ T4 PAUSE  1:15 ]
 1:06    [ T1 ready  0:30 ]   [ T2 COUNT  0:39 ]   [ T3 COUNT  1:09 ]   [ T4 PAUSE  1:15 ]
 1:07    [ T1 ready  0:30 ]   [ T2 COUNT  0:38 ]   [ T3 COUNT  1:08 ]   [ T4 PAUSE  1:15 ]
 1:08    [ T1 ready  0:30 ]   [ T2 COUNT  0:37 ]   [ T3 COUNT  1:07 ]   [ T4 PAUSE  1:15 ]
 1:09    [ T1 ready  0:30 ]   [ T2 COUNT  0:36 ]   [ T3 COUNT  1:06 ]   [ T4 PAUSE  1:15 ]
 1:10    [ T1 ready  0:30 ]   [ T2 COUNT  0:35 ]   [ T3 COUNT  1:05 ]   [ T4 PAUSE  1:15 ]
 1:11    [ T1 ready  0:30 ]   [ T2 COUNT  0:34 ]   [ T3 COUNT  1:04 ]   [ T4 PAUSE  1:15 ]
 1:12    [ T1 ready  0:30 ]   [ T2 COUNT  0:33 ]   [ T3 COUNT  1:03 ]   [ T4 PAUSE  1:15 ]
 1:13    [ T1 ready  0:30 ]   [ T2 COUNT  0:32 ]   [ T3 COUNT  1:02 ]   [ T4 PAUSE  1:15 ]
 1:14    [ T1 ready  0:30 ]   [ T2 COUNT  0:31 ]   [ T3 COUNT  1:01 ]   [ T4 PAUSE  1:15 ]
USER:                                                                     T4 STARTED
 1:15    [ T1 ready  0:30 ]   [ T2 COUNT  0:30 ]   [ T3 COUNT  1:00 ]   [ T4 COUNT  1:15 ]
 1:16    [ T1 ready  0:30 ]   [ T2 COUNT  0:29 ]   [ T3 COUNT  0:59 ]   [ T4 COUNT  1:14 ]
 1:17    [ T1 ready  0:30 ]   [ T2 COUNT  0:28 ]   [ T3 COUNT  0:58 ]   [ T4 COUNT  1:13 ]
 1:18    [ T1 ready  0:30 ]   [ T2 COUNT  0:27 ]   [ T3 COUNT  0:57 ]   [ T4 COUNT  1:12 ]
 1:19    [ T1 ready  0:30 ]   [ T2 COUNT  0:26 ]   [ T3 COUNT  0:56 ]   [ T4 COUNT  1:11 ]
 1:20    [ T1 ready  0:30 ]   [ T2 COUNT  0:25 ]   [ T3 COUNT  0:55 ]   [ T4 COUNT  1:10 ]
 1:21    [ T1 ready  0:30 ]   [ T2 COUNT  0:24 ]   [ T3 COUNT  0:54 ]   [ T4 COUNT  1:09 ]
 1:22    [ T1 ready  0:30 ]   [ T2 COUNT  0:23 ]   [ T3 COUNT  0:53 ]   [ T4 COUNT  1:08 ]
 1:23    [ T1 ready  0:30 ]   [ T2 COUNT  0:22 ]   [ T3 COUNT  0:52 ]   [ T4 COUNT  1:07 ]
 1:24    [ T1 ready  0:30 ]   [ T2 COUNT  0:21 ]   [ T3 COUNT  0:51 ]   [ T4 COUNT  1:06 ]
 1:25    [ T1 ready  0:30 ]   [ T2 COUNT  0:20 ]   [ T3 COUNT  0:50 ]   [ T4 COUNT  1:05 ]
 1:26    [ T1 ready  0:30 ]   [ T2 COUNT  0:19 ]   [ T3 COUNT  0:49 ]   [ T4 COUNT  1:04 ]
 1:27    [ T1 ready  0:30 ]   [ T2 COUNT  0:18 ]   [ T3 COUNT  0:48 ]   [ T4 COUNT  1:03 ]
 1:28    [ T1 ready  0:30 ]   [ T2 COUNT  0:17 ]   [ T3 COUNT  0:47 ]   [ T4 COUNT  1:02 ]
 1:29    [ T1 ready  0:30 ]   [ T2 COUNT  0:16 ]   [ T3 COUNT  0:46 ]   [ T4 COUNT  1:01 ]
 1:30    [ T1 ready  0:30 ]   [ T2 COUNT  0:15 ]   [ T3 COUNT  0:45 ]   [ T4 COUNT  1:00 ]
 1:31    [ T1 ready  0:30 ]   [ T2 COUNT  0:14 ]   [ T3 COUNT  0:44 ]   [ T4 COUNT  0:59 ]
 1:32    [ T1 ready  0:30 ]   [ T2 COUNT  0:13 ]   [ T3 COUNT  0:43 ]   [ T4 COUNT  0:58 ]
 1:33    [ T1 ready  0:30 ]   [ T2 COUNT  0:12 ]   [ T3 COUNT  0:42 ]   [ T4 COUNT  0:57 ]
 1:34    [ T1 ready  0:30 ]   [ T2 COUNT  0:11 ]   [ T3 COUNT  0:41 ]   [ T4 COUNT  0:56 ]
 1:35    [ T1 ready  0:30 ]   [ T2 COUNT  0:10 ]   [ T3 COUNT  0:40 ]   [ T4 COUNT  0:55 ]
 1:36    [ T1 ready  0:30 ]   [ T2 COUNT  0:09 ]   [ T3 COUNT  0:39 ]   [ T4 COUNT  0:54 ]
 1:37    [ T1 ready  0:30 ]   [ T2 COUNT  0:08 ]   [ T3 COUNT  0:38 ]   [ T4 COUNT  0:53 ]
 1:38    [ T1 ready  0:30 ]   [ T2 COUNT  0:07 ]   [ T3 COUNT  0:37 ]   [ T4 COUNT  0:52 ]
 1:39    [ T1 ready  0:30 ]   [ T2 COUNT  0:06 ]   [ T3 COUNT  0:36 ]   [ T4 COUNT  0:51 ]
 1:40    [ T1 ready  0:30 ]   [ T2 COUNT  0:05 ]   [ T3 COUNT  0:35 ]   [ T4 COUNT  0:50 ]
 1:41    [ T1 ready  0:30 ]   [ T2 COUNT  0:04 ]   [ T3 COUNT  0:34 ]   [ T4 COUNT  0:49 ]
 1:42    [ T1 ready  0:30 ]   [ T2 COUNT  0:03 ]   [ T3 COUNT  0:33 ]   [ T4 COUNT  0:48 ]
 1:43    [ T1 ready  0:30 ]   [ T2 COUNT  0:02 ]   [ T3 COUNT  0:32 ]   [ T4 COUNT  0:47 ]
 1:44    [ T1 ready  0:30 ]   [ T2 COUNT  0:01 ]   [ T3 COUNT  0:31 ]   [ T4 COUNT  0:46 ]
 1:45    [ T1 ready  0:30 ]   [ T2 ENDED  0:00 ]   [ T3 COUNT  0:30 ]   [ T4 COUNT  0:45 ]
 1:46    [ T1 ready  0:30 ]   [ T2 ENDED  0:00 ]   [ T3 COUNT  0:29 ]   [ T4 COUNT  0:44 ]
 1:47    [ T1 ready  0:30 ]   [ T2 ENDED  0:00 ]   [ T3 COUNT  0:28 ]   [ T4 COUNT  0:43 ]
 1:48    [ T1 ready  0:30 ]   [ T2 ENDED  0:00 ]   [ T3 COUNT  0:27 ]   [ T4 COUNT  0:42 ]
 1:49    [ T1 ready  0:30 ]   [ T2 ENDED  0:00 ]   [ T3 COUNT  0:26 ]   [ T4 COUNT  0:41 ]
USER:                           T2 ACKNOWLEDGED
 1:50    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:25 ]   [ T4 COUNT  0:40 ]
 1:51    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:24 ]   [ T4 COUNT  0:39 ]
 1:52    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:23 ]   [ T4 COUNT  0:38 ]
 1:53    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:22 ]   [ T4 COUNT  0:37 ]
 1:54    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:21 ]   [ T4 COUNT  0:36 ]
 1:55    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:20 ]   [ T4 COUNT  0:35 ]
 1:56    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:19 ]   [ T4 COUNT  0:34 ]
 1:57    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:18 ]   [ T4 COUNT  0:33 ]
 1:58    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:17 ]   [ T4 COUNT  0:32 ]
 1:59    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:16 ]   [ T4 COUNT  0:31 ]
 2:00    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:15 ]   [ T4 COUNT  0:30 ]
 2:01    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:14 ]   [ T4 COUNT  0:29 ]
 2:02    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:13 ]   [ T4 COUNT  0:28 ]
 2:03    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:12 ]   [ T4 COUNT  0:27 ]
 2:04    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:11 ]   [ T4 COUNT  0:26 ]
 2:05    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:10 ]   [ T4 COUNT  0:25 ]
 2:06    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:09 ]   [ T4 COUNT  0:24 ]
 2:07    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:08 ]   [ T4 COUNT  0:23 ]
 2:08    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:07 ]   [ T4 COUNT  0:22 ]
 2:09    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:06 ]   [ T4 COUNT  0:21 ]
 2:10    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:05 ]   [ T4 COUNT  0:20 ]
 2:11    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:04 ]   [ T4 COUNT  0:19 ]
 2:12    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:03 ]   [ T4 COUNT  0:18 ]
 2:13    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:02 ]   [ T4 COUNT  0:17 ]
 2:14    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 COUNT  0:01 ]   [ T4 COUNT  0:16 ]
 2:15    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ENDED  0:00 ]   [ T4 COUNT  0:15 ]
 2:16    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ENDED  0:00 ]   [ T4 COUNT  0:14 ]
 2:17    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ENDED  0:00 ]   [ T4 COUNT  0:13 ]
 2:18    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ENDED  0:00 ]   [ T4 COUNT  0:12 ]
 2:19    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ENDED  0:00 ]   [ T4 COUNT  0:11 ]
USER:                                                T3 ACKNOWLEDGED
 2:20    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:10 ]
 2:21    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:09 ]
 2:22    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:08 ]
 2:23    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:07 ]
 2:24    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:06 ]
 2:25    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:05 ]
 2:26    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:04 ]
 2:27    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:03 ]
 2:28    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:02 ]
 2:29    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 COUNT  0:01 ]
 2:30    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ENDED  0:00 ]
 2:31    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ENDED  0:00 ]
 2:32    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ENDED  0:00 ]
 2:33    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ENDED  0:00 ]
 2:34    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ENDED  0:00 ]
USER:                                                                     T4 ACKNOWLEDGED
 2:35    [ T1 ready  0:30 ]   [ T2 ready  1:00 ]   [ T3 ready  1:30 ]   [ T4 ready  2:00 ]

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#8

Inläggav pelle » tor 18 maj 2017, 21:13

Jag anade att logiken kring dessa timers skulle vara lite trickig att få till men jag har nu en komplett testsvit för den funktion jag har nu så det är lätt att se om det fungerar som det ska. Har kompletterat med att timers kan räkna uppåt också om man startar från 0. Fördelen med att ha flera timers är ju att logiken är "gratis" för timer 2 och framåt. Har en konstant som säger 4 st för att det är så många displayer jag planerar för just nu men det skulle funka lika bra med 100 i koden. Provade med 100 och 1000 timers också för skojs skull och det tuffade på bra men loggutskriften blev aningen bred...

Just nu räknar timers max till 99:59 men det kanske vore smart att byta visningsformat till HH:MM om det är mer än 59 minuter, att man då döljer sekundvisningen. Jag använder i princip aldrig sekunder på vanliga kökstimers, det är ju bara på slutet när timers börjar löpa ut som man kollar på det, kortare tider än 30 sekunder är ovanligt.

Har inte funderat så mycket kring logiken med rotary encoders än men kanske något i stil med följande:

Normal användning
1. Ställ in tid genom att vrida, går åt bägge håll förstås. Då ändras bara minutinställningen i grundläget. (Eller använd sparad inställning för timern)
2. Tryck på knappen för att starta
Ev. tryck igen för att pausa och en gång till för att fortsätta därifrån
När en timer löper ut (går till 0 eller till maxvärdet om den går uppåt) så ska det pipa och blinka tills man kvitterat, ev. att det autokvitterar efter en viss tid.
När kvittering är klar så återgår timern till senaste inställda värdet automatiskt

När ytterligare tid går utan att man använder så går timern ner till inaktivt läge och displayen tonas ner till mycket låg ljusstyrka alternativt släcks helt. Behöver provas ut. Har inte bestämt mig för om proximity sensor är vettigt, misstänker att sådana kan jävlas och inte funka tillräckligt bra. Då detta blir lite som en dekoration så kan alternativet vara att aldrig släcka helt utan bara välja en låg ljusstyrka. Därifrån kan man starta eller ändra tid etc. och då tänds displayen upp igen för den timern.

Nollställning
Om man vill nolla timern helt så håller man inne knappen en viss tid, behöver provas.

Accelererande funktion vid inställning
Kanske inte behövs då det är 20 pulser per varv med de rotary encoders jag tänker mig. Annars kan man ju accelerera upp/ned-räkningen efter en tids ändring.

Ändring med aktiv timer
Man borde kunna vrida upp och ner medan timern är aktiv om man vill ändra tiden.

Sekundinställning
Om detta nu behövs. Kan tänka mig några olika alternativ.
- Trycka ner knappen och vrida samtidigt. Måste provas.
- Dubbeltrycka på knappen och byta mod till sekundinställning, återgår en stund senare till minutmod.
- Dito fast kanske långt tryck, hur långt får jag prova i så fall.

Ytterligare ett alternativ är att normala inställningen görs i steg om 30 sekunder. Kanske blir ännu bättre.

Inställning av långa tider
Tveksamt behov men borde kunna funka så att när man passerar över 59 minuter så ändras visningen från MM.SS till HH:MM, vid nedräkning ändras den sedan automatiskt till MM.SS under 60 minuter. I så fall borde maxtiden vid uppräkning från noll också ändras till 24 timmar eller liknande.

För att se att en timer är aktiv i den moden så tänkte jag att det ska blinka i sekundtakt så att man ser att den lever.
Lyxfunktion skulle vara att den alternerar mellan de olika visningarna varannan sekund.

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#9

Inläggav pelle » tor 18 maj 2017, 21:14

Har provat andra varianter av uppräkning. Tror inte längre på någon speciell sekundinställningsmod utan att man stegar olika mycket beroende på värdet på timern. Typ steg om 5 sekunder upp till 1 minut, steg om 10 sekunder upp till 5 minuter, steg om 30 sekunder upp till en halvtimme etc. Då det är 20 varv på rotary encodern så lär det gå snabbt att ställa in även höga värden. Går ju att lägga på acceleration också så det går ännu snabbare att komma upp till långa tider. Har även "alignment" till närmaste steg, typ stega upp från pausad timer på 1:07 hamnar då på 1:10, nästa 1:20 osv.

Har nu komplett utläsning av värdet på timers via MQTT och styrning från MQTT av fejkade rotary encoders. Har påbörjat app till iPhone som ska kopplas ihop via servern för att enklare kunna hårdtesta. Lär ta flera veckor till innan jag har displayer och rotary encoders så jag kan lika gärna göra klart all timer-logik innan dess.

Appen har visning av timervärden och en enklare fejk av rotary encoders. Tänkte skicka kommandon för mittknappen (som finns på riktig rotary encoder), kort resp. lång tryckning (för reset) och upp/ner-kommando som motsvarar det jag ska koda av mot rotary encoders. Skulle i princip kunna simulera rotary encoder fullt ut med graykod från appen men det känns lite överkurs.

file_005.png
file_005.png (52.42 KiB) Visad 1286 gånger

Användarvisningsbild
pelle
Inlägg: 23
Blev medlem: tor 18 maj 2017, 17:36

Re: Avancerad kökstimer

#10

Inläggav pelle » tor 18 maj 2017, 21:15

Första versionen av fungerande alternativt användargränssnitt via iPhone. Data kommer från ESP8266 där all logik för 5 timers körs. Detta hamnar på linux-servern via MQTT i c:a 10Hz och så kommunicerar iPhone med servern och agerar användargränssnitt i väntan på riktig hårdvara för detta.

Några kommentarer/observationer:
- Alla timers går oberoende av varandra. Kanske snyggare att "aligna" starttiden till hel sekund så att de räknar samtidigt, ser lite rörigt ut då de inte rör sig synkat. Å andra sidan fördröjer ju detta starten med upp till 1s och det kan bli missvisande...
- Den gröna lyser svagare, tanken är att icke aktiva timers ska lysa svagare men det syns inte så bra i filmen. Får provas ut mot riktig display sen vilka nivåer som blir bra.
- Blå räknar upp, grön, gul och vit räknar ner.
- Blinkfunktion ska läggas till för att blinka då en timer kommit ner till noll och inte har kvitterats.

Demo:

https://www.youtube.com/watch?v=Gxe5n5VGENk


Återgå till "Egna projekt"

Vilka är online

Användare som besöker denna kategori: 1 och 0 gäst