En interessant hjernevrider til folket! ;)

Tags:    diverse

Jeg har altså valgt og tage fri fra skolen imorgen, så jeg kan holde ferie fra nu af og frem til mandag d. 21.

Så nu skal der kodes på hjemme automatiseringen ! :)

Har også fået lavet nogle interessante funktioner idag (blandt andet alarmsystem som automatisk informerer de andre computere på netværket så alarmen lyder næsten helt synkroniseret ud gennem hele huset.)

Nåh ligemeget!

Jeg er nået til varmen. Der har jeg valgt og gå en måske lidt "underlig" vej, men jeg ville ikke lave nogle seriøse indgreb. Mit ellers ret store værelse, opvarmes fint af en 1600 watt radiator med sådan en skrueknap som man kan justere den på.

Jeg har så spændt den ind til væggen, med en hjemmelavet "griber" sat fast til drejeknappen og så over til en "high torque" motor som er sat fast på væggen. Det virker skam også helt fint og jeg kan sende kommandoer til motoren som så justerer thermostaten på radiatoren.

Jeg har så skrevet en softwaredel som tillader mig let at interface med den.

Der er 4 funktioner.

"Drej stort hak op"
"Drej stort hak ned"
"Drej lille hak op"
"Drej lille hak ned"

Den kan dreje 7 store hakker fra 0 (slukket) op til præcist 100% (fuld drøn) - Hvert 14,29% af hele thermostatens rækkevidde.

Den kan dreje 19 små hakker fra 0 til 100. Dvs hvert lille hak er ca. 5,26%


Så har jeg også en "høj præcissions" temperatur sensor sat på computeren der styrer værelset.


Tricket jeg nu vil lave er at lade pc'en regulere varmen. Og jeg må indrømme den er ret hår at knække :S

Hvis vi fx siger at vi vil have det 25 grader varmt herinde (okay ikke præcist men inden for 2 graders margin eller sådan deromkring)

... Så siger computeren okay lige nu er der 18 grader herinde, jeg drejer 2 store hakker og 1 lille op. (bare et tilfældigt eksempel, tror ikke det ville passe)

Jeg har forsøgt at stykke noget sammen og det ser ud til at køre acceptabelt her i baggrunden, men tror ikke det er så smart i længden.


Når ja, jeg gemmer "varme procenten" (altså hvor langt oppe vi er på skalaen på radiatoren) i en database så jeg altid har styr på det.

Jeg søger bare lidt hjælp med logikken til hvordan det her kan udføres. Lige nu kører jeg noget alla det her:

Fold kodeboks ind/udKode 




Well, sorry for at det ligner lort for programmøre men ville fjerne "sprog aspektet" fra spørgsmålet da sproget ikke er et problem.
Og så havde jeg regnet med det ville se bedre ud men wtf nu gider jeg ikke ændre det.

Håber at i gider hjælpe mig ! :)





Indlæg senest redigeret d. 11.02.2011 00:14 af Bruger #14381
Jeg er ikke helt sikker på hvad du spørger om her.

En ting der er uklart er hvor ofte du kører din algoritme.

Hvis den fx kører hvert sekund, og der er for koldt i rummet, så vil den starte med at skrue op for varmen, men før der er nået at blive varmere skruer den op igen, og den ender altså med at skrue radiatoren op på 100%. Det vil så betyde at radiatoren altid vil stå på 0% eller 100%.

Du skal nok sørge for at gemme to datarækker. En for temperaturen over tid og en for radiatorindstillingen over tid. Du skriver at du allerede gemmer den sidste.

Du kan vælge at bygge en selvlærende algoritme ud fra disse data, men det ville nok være nemmere til at starte med at udregne tingene manuelt og hardcode dem. Du kan fx starte med at finde ud af hvor stor forsinkelsen er fra at skrue op for radiatoren og til rummet bliver varmere, om det afhænger af hvor meget varmere der skal være, og om det er forskel på hastigheden til opvarmning og afkøling.

Hvis det nu tager fx 20 minutter, så kan du starte med at forsøge at lade din algoritme du har givet køre hvert 20. minut.

Ps. Du skal ikke undskylde at du skriver pseudokode. Dit spørgsmål er så vidt jeg kan se et spørgsmål om en algoritme, og så giver det meget mere mening at skrive tingene i pseudokode end i et programmeringssprog med alt for mange ligegyldige detaljer.



Jeg er ikke helt sikker på hvad du spørger om her.

En ting der er uklart er hvor ofte du kører din algoritme.

Hvis den fx kører hvert sekund, og der er for koldt i rummet, så vil den starte med at skrue op for varmen, men før der er nået at blive varmere skruer den op igen, og den ender altså med at skrue radiatoren op på 100%. Det vil så betyde at radiatoren altid vil stå på 0% eller 100%.

Du skal nok sørge for at gemme to datarækker. En for temperaturen over tid og en for radiatorindstillingen over tid. Du skriver at du allerede gemmer den sidste.

Du kan vælge at bygge en selvlærende algoritme ud fra disse data, men det ville nok være nemmere til at starte med at udregne tingene manuelt og hardcode dem. Du kan fx starte med at finde ud af hvor stor forsinkelsen er fra at skrue op for radiatoren og til rummet bliver varmere, om det afhænger af hvor meget varmere der skal være, og om det er forskel på hastigheden til opvarmning og afkøling.

Hvis det nu tager fx 20 minutter, så kan du starte med at forsøge at lade din algoritme du har givet køre hvert 20. minut.

Ps. Du skal ikke undskylde at du skriver pseudokode. Dit spørgsmål er så vidt jeg kan se et spørgsmål om en algoritme, og så giver det meget mere mening at skrive tingene i pseudokode end i et programmeringssprog med alt for mange ligegyldige detaljer.



Tak for info, skal huske det med pseudokode :)

Du forstod i øvrigt spørgsmålet helt korrekt. Jeg har forsøgt mig med ovenstående med lettere modifikation og jeg mistænkte den også for at ville ramme maks eller minimum konstant. Det gjorde den også hurtigt.

Jeg havde kørt algoritmen med 10 minutters mellemrum.

Jeg tror jeg vil prøve og sætte det der med at gemme temperaturen ind i. Den skal jo alligevel logge det til en database.

Måske noget med at måle temperatur forskellen for hvert "tak" på thermostaten ville kunne gøre det?

Tænkte noget i retning af, at hvis jeg fandt ud af et StortHak betød en ændring på 1,2 grader celcius så kunne den bare køre modulus og finde hver mange takker der skulle til?

Men tror ikke altid helt den vil holde. Så derefter må den også have en eller anden form for selvregulering, som gør at den kan "prøve" og skrue et lille hak ned og så se om den kom tættere på den ønskede temperatur efter 30 min eller sådan (overvejer at skifte algoritmen til at køre hvert 30. Minut)

Samtidigt vil jeg bare helst ikke have det tager for langt tid at ramme temperaturen.

Den originale idé med forrige algoritme var netop noget i retning af selv indlæring. At den ville fejle i starten men over et lille stykke tid ville den "ramme" radiatoren og styre tingene nogenlunde.



I øvrigt kan det siges at temperaturændringer primært vil komme fra 2 kilder. Fx fra min touchskærm af, hvis jeg kommer hjem og tænker "fuck her er koldt!" og trykker 3 hakker op på skærmen. (Hvert hak vil nok være én grad celcius.)

Så hvis forrige temperatur var 19 grader ville den bare sige "Okay Henrik vil have at her skal være 22 grader hurtigst muligt"

Den anden kilde vil være om aftenen hvor jeg foretrækker at have det lidt mere køligt, så den ud på natten sænker temperaturen lidt til en fastsat temperatur (via et webinterface - ligemeget) og så yderligere når jeg går i seng og sover.

Jeg har også tænkt på bare at vise temperaturen og så regulere efter de der "hakker" men jeg ville nu foretrække temperaturindeling.

Især fordi jeg altså stadig "kun" er 15 år. Jeg har massere af fritid som jeg kan spilde, så jeg vil gerne øve mig i at løse problemstillingerne, i stedet for bare at springe over der hvor gærdet er lavest.

(håber ikke det blev for sammenrodet.)




UPDATE:
Sådan, jeg satte lige radiatoren et stort hak i vejret og satte min bærbare til at begynde logningen. Tror jeg vil se om et par timer hvor stort forskellen er. Fordelen ved logningen her er at jeg også kan se tidspunkterne og den logger hvert 5. sekund :) (jubiii mere data der skal behandles)



Indlæg senest redigeret d. 11.02.2011 19:00 af Bruger #14381
Hej Henrik,

Lidt off-topic, men jeg kan næsten ikke undgå at blive nysgerrig: Har du en slags "robot-arm" der kan dreje på radiatoren for dig?? I så fald er du næsten nødt til lige at poste et billede eller to, for det MÅ jeg altså bare se :D

Mvh.

Kasper (TSW)



Det er ikke en robotarm som sådan :)

- Men det er en gearmotor købt på http://solarbotics.com/ kaldet GM3. Den er så sat til et Arduino motorskjold (købt på ebay men adafruit's design og bibliotek), som så sidder på en Arduino Duemilanove (også fra Ebay).

Selve motoren sidder i en gammel æske fra papirklips, sådan en gennemsigtig en hvor jeg har boret den til, og limet med epoxy/silikone indvendigt. Æsken er så forsigtigt skruet op på væggen.

Så har jeg også bestilt sådan nogle skiver man kan bruge til at sætte på Solarbotics gearmotore (tror de ligger under diverse eller sådan), som jeg så har skruet en af på, og derefter slibet den lidt ned, og lagt epoxy på til at holde sådan en speciel "griber" jeg har haft lavet ud af sådan nogle "støtteklodser" min far havde liggende som jeg har skåret til :)


Men et billede siger jo mere end tusinde ord, og her er et par stykker ;)

http://hsp.dk/radiator/1.jpg
http://hsp.dk/radiator/2.jpg
http://hsp.dk/radiator/3.jpg
http://hsp.dk/radiator/4.jpg
http://hsp.dk/radiator/5.jpg
http://hsp.dk/radiator/6.jpg
http://hsp.dk/radiator/7.jpg


Jeg har altså ikke gidet komprimere dem eller noget så lev med det :D



Haha fedt! Det var ikke som jeg havde forestillet mig oppe i hovedet, hvilket også var grunden til at jeg bad om et billede eller to, men kreativt, det er det godt nok! Skide sjovt at se :)

Mvh.

Kasper (TSW)



Haha tager jeg som et kompliment! :)

Men jeg vil sige det sådan. Det ville være spild af resurser at have en "rigtig" robotarm stående.

Og varmestyring de vil jeg sgu have. Så kiggede jeg på at have en rigtig thermostat og jeg kiggede også på at styre radiatoren på en anden måde.

Det gik bare ikke rigtigt, så i stedet endte jeg med denne her løsning.

Eller løsning er det ikke endnu, for koden volder lidt problemer endnu :roll:



- all -

Ender nok med at satse på at hardcode de forskellige temperaturændringer trin for trin.



t