Hjemmelaget temperaturkontroll for gjæringsskap

Så – som nevt i et tidligere innlegg har jeg bygget en provisorisk temperaturkontroll for gjæringsskapet mitt.

Den gjør vel omtrent havlparten av jobben som en STC-1000 gjør, og koster mer å bygge pluss at man må ha en apache/mysql-server stående, men det har vi vel alle?

Riggen betår av

1 stk NodeMCU fra Kjell & Co
1 stk ds18b20 1-wire temperatursensor
1 stk relekort 10A250V, for eksempel dette – selv gikk jeg for 2 releer, da det sørget for to-fase brudd i varmekildens strømtilførstel.

NodeMCU må settes opp mot nettverk, dette kan gjøres på flere måter, men jeg valgte å sette den opp som en klient med statisk ip, uten DNS.

Filnavn: networking.lua

--connect network
wifi.setmode(wifi.STATION)
wifi.sta.config("din ssid","ditt wpa2 passord")
wifi.sta.setip({ip="ip-adresse",netmask="subnet-maske",gateway="gateway-adresse"})

I tillegg fant jeg et bibliotekskrevet av Peter Scargill som håndterte ett stk ds18b20-sensor uten noe hassle

Filnavn: ds18b20.lua

--------------------------------------------------------------------------------
-- DS18B20 one wire module for NODEMCU
-- LICENCE: http://opensource.org/licenses/MIT
-- Vowstar <vowstar@nodemcu.com>
-- Dramatic simplification: Peter Scargill
--------------------------------------------------------------------------------

-- Set module name as parameter of require
local modname = ...
local M = {}
_G[modname] = M
--------------------------------------------------------------------------------
-- Local used modules
--------------------------------------------------------------------------------
-- Table module
local table = table
-- String module
local string = string
-- One wire module
local ow = ow
-- Timer module
local tmr = tmr
-- Limited to local environment
setfenv(1,M)
--------------------------------------------------------------------------------
-- Implementation – you don’t get any shorter than this
--------------------------------------------------------------------------------

function readNumber(pin)
ow.setup(pin)
ow.reset(pin)
ow.write(pin, 0xCC, 1)
ow.write(pin, 0xBE, 1)
data = nil
data = ""
for i = 1, 2 do
data = data .. string.char(ow.read(pin))
end
t = (data:byte(1) + data:byte(2) * 256) / 16
if (t>100) then
t=t-4096
end
ow.reset(pin)
ow.write(pin,0xcc,1)
ow.write(pin, 0x44,1)
return t
end

-- Return module table
return M

Serverside laget jeg en php som returnerte <maxtemp> og <mintemp> i en særs forenklet xml – jeg kalte den for reg.php

reg.php har også fuksjonaliteten som poster currentTemp til mySQL-basen beer og tabellen dataLogger

filnavn reg.php

&lt;?php

$scurrTemp = $_GET['currTemp'];
$srelayState = $_GET['relayState'];
$sqlServer = "localhost";
$sqlUser = "username"; //byttes ut med din mysql bruker
$sqlDB = "beer";

//koble til databaseserver
$dbhandle = mysql_connect($sqlServer, $sqlUser,"mypassword")
 or die("Klarte ikke koble til $sqlServer");

// Koble til riktig database
$selected = mysql_select_db($sqlDB, $dbhandle)
 or die("Klarte ikke åpne $sqlDB");

$sql = "INSERT INTO datalogger (currTemp, relayState) VALUES(".$scurrTemp.",".$srelayState.")";

mysql_query($sql);
echo "&lt;maxtemp&gt;28&lt;/maxtemp&gt;";
echo "&lt;mintemp&gt;26&lt;/mintemp&gt;"

?&gt;

datalogger-tabellen ser slik ut

mysql&gt; describe datalogger;
+-------------+--------------+------+-----+-------------------+----------------+
| Field       | Type         | Null | Key | Default           |          Extra |
+-------------+--------------+------+-----+-------------------+----------------+
| id          | int(11)      | NO   | PRI | NULL              | auto_increment |
| currTemp    | decimal(7,4) | NO   |     | NULL              |                |
| relayState  | int(1)       | NO   |     | NULL              |                |
| tidsstempel | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+--------------+------+-----+-------------------+----------------+

Også til slutt lua-koden for polling og posting av temperatur.
Det er nok sikkert veldig tydelig at lua ikke er et språk jeg påstår jeg behersker.

Filnavn; beercontrol13.lua

--- Beercontroller by tdegerdalen
--- version 0.13
--- uses ds18b20.lua by Peter Scargill 
--- uses networking.lua to configure wifi and static ip
---
--- todo: relaybug at startup (see below)
--- todo2: enable more sensors and average between them
---
---
--- note; to avoid memory issues this script should be compiled before run

maxTemp = 20
minTemp = 18
currTemp = 0
relayState = 0

--define pin for one 1-wire dallas tempsensor.
sensorPin = 7

--define pins to control relay, set them to output
--relay module attached kicks in when pulled low
--bug: relay kicks in a few millisecs at boot - might fix it witch capacitator

relay1pin = 3
relay2pin = 4
gpio.mode(relay1pin,gpio.OUTPUT)
gpio.mode(relay2pin,gpio.OUTPUT)
gpio.write(relay1pin,gpio.HIGH)
gpio.write(relay2pin,gpio.HIGH)


--- triggers
--- every 5 seconds, poll tempsensor
--- every 30 seconds, post to net and get temperature thresholds

tmr.alarm(1, 5000, 1, function() pollTemp() end )
tmr.alarm(2, 30000, 1, function() postData() end )

--- functions below

function pollTemp()
 t=require("ds18b20") 
 currTemp = t.readNumber(sensorPin)
 print(currTemp) 
 print("maxtemp", maxTemp)
 if currTemp &gt; maxTemp and relayState == 1 then
 relayOff()
 end
 if currTemp &lt; minTemp and relayState == 0 and currTemp ~= -0.0625 then
 relayOn()
 end
 if currTemp == -0.0625 then
 relayOff()
 end
 t = nil 
 ds18b20 = nil 
 package.loaded["ds18b20"]=nil
end

function postData()
 conn=net.createConnection(net.TCP, 0) 
 conn:on("connection",function(conn, payload)
 conn:send("GET /beer/reg.php?currTemp="..currTemp.."&amp;relayState="..relayState.." HTTP/1.1\r\n".. 
 "Host: 10.0.0.2\r\n"..
 "Accept: */*\r\n"..
 "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)"..
 "\r\n\r\n") 
 end)
 
 conn:on("receive", function(conn, payload)
 tStreng,maxTempStart = string.find(payload,"&lt;maxtemp&gt;")
 maxTempEnd, tStreing = string.find(payload,"&lt;/maxtemp&gt;")
 maxTempStart = maxTempStart + 1
 maxTempEnd = maxTempEnd - 1
 
 maxTempDeg = string.sub(payload, maxTempStart, maxTempEnd)

 tStreng,minTempStart = string.find(payload,"&lt;mintemp&gt;")
 minTempEnd, tStreing = string.find(payload,"&lt;/mintemp&gt;")
 minTempStart = minTempStart + 1
 minTempEnd = minTempEnd -1
 minTempDeg = string.sub(payload, minTempStart, minTempEnd)

 print(minTempDeg, maxTempDeg)
 maxTemp = tonumber(maxTempDeg)
 minTemp = tonumber(minTempDeg)
 maxTempDeg = nil
 minTempDeg = nil
 conn:close()
 end)
 
 conn:connect(80,'10.0.0.2') 
end

function relayOn()
 relayState = 1
 print("RelayOn")
 gpio.write(relay1pin,gpio.LOW)
 gpio.write(relay2pin,gpio.LOW)
end

function relayOff()
 relayState=0
 print("RelayOff")
 gpio.write(relay1pin,gpio.HIGH)
 gpio.write(relay2pin,gpio.HIGH)
end
Publisert i Øl, Tech | Skriv en kommentar

Bygg 2 – Pils

Som brygg to tenkte jeg å prøve meg på en undergjæret pilser.

Jeg besøkte Bryggeland på Strømmen og kjøpte meg et sirups-kit fra Coopers – Thomas Coopers 86 Days pilsner. Dama i kassa kunne mersalg, så jeg fikk med et par pakker «bedre gjær», maltblanding samt et hydrometer.

Ingredienser

Fremgangsmåte

Sikker på mine kunnskaper etter forrige runde med IPA, hoppet jeg bukk over alle anbefalinger og guider som fulgte med fra både bryggeland og Coopers. Jeg brukte følgende fremgangsmåte, så vil det vise seg om det blir bra.

  1. Legg boksen med sirup i varmt vann noen minutter, slik at innholdet blir mer flytende.
  2. Tilsett boksens innhold i gjæringsspann, fyll på et par-tre liter kokende vann.
  3. Fyll så opp til 23 liter med kaldt vann fra springen
  4. Tøm i Spraymalt
  5. Sett på lokket og rist godt, slik at blandingen blander seg.
  6. Ta av lokket, fyll reagensrøret med vørter (blandingen)
  7. Tilsett gjær
  8. Rist litt til
  9. Sett på gjærstopp
  10. Sett til undergjæring (gjæring i kaldt rom ca 8-12 grader)

Brygget ble satt kl 22:30 21.03.2016 – OG ble målt til 1036


Ølet ble flasket og satt til karbonering – 21.04 var dette ferdig.

FG målt til 1012 – dette ble altså et lettøl.

Neste gang – mer spraymalt – OG bør ligge rundt 1050+

 

Publisert i Øl | Skriv en kommentar

Ølbasill – Setup, Brygg 1

Etter å ha blitt overtalt av en kollega til å teste enkel ølbrygging gikk jeg til innkjøp av minimumskit for brygging av øl.

Det besto av:
2 stk gjæringskar fra Europris
1 stk hevert fra Europris
1 stk gjærlås fra Europris.

I tillegg gikk jeg for et IPA-kit fra St. Peters – også fra Europris

IMG_3956.JPG

I følge min kollega skal slikt gjæres på 18-20 grader, så jeg bygget en provisorisk boks i kjelleren som jeg isolerte og satte inn et varmeelement. Siden jeg har litt arduino-utstyr liggende fra andre prosjekter (som sjelden kommer i mål) laget jeg også en enkel temperaturstyring.

IMG_3967.JPG

Godt renhold er visst alfa og omega når det kommer til ølbrygging. Jeg ble anbefalt å vaske innsiden av gjæringskar og alt annet som skal være i kontakt med brygget med klor og skylle godt.

Vørteren (innholdet i hermetikkboksene St. Peterskittet) ble lagt i varm vann for å «smelte» sirupen i noen minutter, før de ble helt over i gjæringsboks nummer 1. Deretter ble 4 liter kokende vann tilsatt (fra vannkoker) før boksen ble fylt opp til 19 liter med kaldt vann. Lokket ble plassert på karet og jeg ristet det kraftig i ca 5 minutter, slik at det hele blandet seg godt. Gjær og humle ble så tilsatt (alt dette fulgte også med i kittet) og ristet litt til. Gjærlåsen ble fylt med vann og plassert i karets lokk og karet ble satt ned i mitt provisoriske gjæringsskap.

Etter en dag eller to hadde det begynt å «ploppe» som det visstnok heter på fagspråket når det går luft/co2 ut av gjærlåsen.

Jeg hadde litt dårlig magefølelse på arduino-kontrolleren min, så jeg satt meg ned og bygde en ny løsning basert på nodeMCU med logging mot mysql og noe mindre brannfarlige relekoblinger. Legger ut egen artikkel på nodeMCU senere.

IMG_3981.JPG

Brygget fikk stå i 16 dager før det fikk holde. Da hadde ploppingen avtatt ganske mye og jeg antok at gjæreprosessen var ferdig.

Lokket ble fjernet og jeg syntes det hele så relativt udelikat ut, og tenkte med meg selv at brygget nok var blitt forurenset av bakterier/dårlig renohold. Tok et bilde og sendte min bryggekyndige kollega, som kunne berolige meg med at alt så normalt ut

IMG_4007.JPG

Det å få kullsyre inn i ølen skjer etter den er flasket. Dette gjøres med at man lager litt sukkerlake som tilsettes ølen, mer om det i neste avsnitt. Jeg brukte en kalkulator jeg fant på nett for å finne ut hvor mye sukker som skulle tilsettes. Jeg endte vel med ca 40 gram på 19 liter.

Brygget ble ført over i bryggekar 2 ved hjelp av nykloret heverten. Det var viktig å ikke suge med seg slam fra bunnen, ei heller tilføre noe særlig oksygen ved å «splashe» ølen rundt. Jeg overførte ca en liter i første omgang før jeg tilførte sukkerlaken nevnt over. Så fortsatte jeg å overføre og lot ølen virvle og dermed spre skukkerlaken helt til det bare var ca 1 cm igjen i gjæringskar 1. Dette anså jeg som spilløl, da jeg ikke ville risikere å få med gjærrester over i kar 2.

Alt var dermed klart for å flaske

Jeg hadde kvelden i forveien brukt et par timer på å vaske og koke gamle halvliters brusflasker. Disse krympet og ble urunde i bunnen, men det fikk duge. Heverten ble renset med klor nok en gang og flaskene fylt til randen med øl. Når heverten ble fjernet fra flasken, sank nivået til noe er fornuftig. Når jeg skulle skru på korken, klemte jeg på flaskene slik at ølen kom helt på kanten av flasken, for å få ut så mye oksygen fra flaska som mulig.

IMG_4008.JPG

Så var det bare å skru opp temperaturen på gjæringsskapet til 22 grader og la ølen stå og karboneres et par uker, før den dernest ble satt kjølig.

Smaskprøver:
1 uke etter flasking: Markant gjærsmak, beskt – ikke drikkbart
2 uker etter flasking: Ingen gjærsmak, forstatt for beskt.
3 uker etter flasking: Begynner å nærme seg.
TBC

Publisert i Øl | Merket med , , , , , | Skriv en kommentar

Samsung 8-series remote and Kodi/OSMC keymap on the RPI2

Ok

I´ve been running xbmc/kodi/osmc on the rpi for a few years. Did have a extensive night configuring it in 2013 or 14, and I´ve kept the config while moving between releases – and hardware. I´m now up to the rpi2, and is really pleased.

However, after the sd-card on my rpi2 died, and with no backup of the config I found my self back at square one.

I decided to do it a bit diffrently this time, and to make sure I won´t loose the config again, i´m putting it online.

Filename: ~/.kodi/userdata/keymaps/keymap.xml

<keymap>
  <global>
    <remote>
      <red>XBMC.ActivateWindow(Home)</red>
      <green>noop</green>
      <yellow>ContextMenu</yellow>
      <blue>Info</blue>
      <guide>FullScreen</guide>
      <title>Back</title>
      <back>XBMC.ActivateWindow(Home)</back>
    </remote>
  </global>
  <Home>
    <remote>
      <red>XBMC.Restart()</red>
      <green>XBMC.ActivateWindow(Home)</green>
      <yellow>ContextMenu</yellow>
      <blue>Info</blue>
      <guide>FullScreen</guide>
      <title>Back</title>
      <back>XBMC.ActivateWindow(Home)</back>
    </remote>
  </Home>
  <FullscreenVideo>
    <remote>
      <red>CodecInfo</red>
      <green>SubtitleAlign</green>
      <yellow>XBMC.ActivateWindow(subtitlesearch)</yellow>
      <blue>NextSubtitle</blue>
      <guide>FullScreen</guide>
      <title>Back</title>
      <back>RunScript(/home/osmc/.kodi/userdata/stopandmain.py)</back>
      <left>Seek(-10)</left>
      <right>Seek(10)</right>
      <up>Seek(30)</up>
      <down>Seek(-30)</down>
    </remote>
  </FullscreenVideo>
  <VirtualKeyboard>
    <remote>
      <back>PreviousMenu</back>
      <title>BackSpace</title>
    </remote>
  </VirtualKeyboard>
  <Visualisation>
    <remote>
      <blue>Info</blue>
    </remote>
  </Visualisation>
  <MusicOSD>
    <remote>
      <blue>Info</blue>
      <red>CodecInfo</red>
    </remote>
  </MusicOSD>
  <SlideShow>
    <remote>
<blue>Info</blue>
      <red>CodecInfo</red>
    </remote>
  </MusicOSD>
  <SlideShow>
    <remote>
      <blue>Info</blue>
      <red>CodecInfo</red>
    </remote>
  </SlideShow>
  <VideoMenu>
    <remote>
      <blue>Info</blue>
      <red>CodecInfo</red>
    </remote>
  </VideoMenu>
  <OSDVideoSettings>
    <remote>
      <red>noop</red>
      <green>Back</green>
      <yellow>noop</yellow>
    </remote>
  </OSDVideoSettings>
  <OSDAudioSettings>
    <remote>
      <red>noop</red>
      <green>noop</green>
      <yellow>Back</yellow>
    </remote>
  </OSDAudioSettings>
</keymap>

when hitting the exit-button while in fullscreen, the pythonscript stopandmain.py is called stopping the playback and returing to the main menu.

Filename: ~/.kodi/userdata/stopandmain.py

#!/usr/bin/python
import xbmc
import xbmcgui
xbmc.executebuiltin("Action(Stop)")
xbmc.executebuiltin( "XBMC.ActivateWindow(Home)" )

Publisert i Software, Tech, Uncategorized | Merket med , , , | Skriv en kommentar

Kameratrigger, fremdriftsrapport

Så, har ikke hatt så mye tid til hands on med kameratriggeren ennå, men har googlet litt og tenkt litt.

Photoresistoren er definitivt byttet ut med en phototransistor, for å holde hastigheten oppe.
Jeg har handlet inn ir og phototransistor fra Ebay, og koblet dette opp mot en arduino og lest av laserpeker.
Dette fungerte utmerket.

phototransistor_nano

Usikker på om denne transistoren leser for snevert fysisk område, da laserpekeren måtte treffe nøyaktig senter på transistoren for at den skulle registrere. Denne virkemåten er jo perfekt for «tripwire» foto, men neppe lyn.
Jeg skal eksperimentere med andre verdier på R1, se om det gjør nytten.

Tenker muligens å lese nivået på transistoren ved start (og kanskje hver n-te loop) og sette dette til normalen. hvis sensorverdien endrer seg nevneverdig fra dette (justerbar threshold) vil kameraet trigges.

Publisert i Tech | Merket med , | Skriv en kommentar

Ok – Challenge accepted!

Snublet over MIOPS på Kickstarter i dag.

MIOPS er en fjernutløser for kamera rigget mot forskjellige sensorer, blandt annet lyd og lys.

Jeg har jo allerede en bøtte sensorer og noen arduinoer liggende, så dette må da være noe jeg kan få til selv.

Smørbrødliste:
* Arduino
* Lydsensor (mikrofon, piezo?)
* Fototransistor eller IR-diode (må forskes på)
* Bevegelsesdeteksjon (Bryte IR stråle?, trenger man speil?)
* Display med backlight
* Modus-knapp
* Justeringsknapp (Rotary encoder)
* Kameratilkobling (2.5mm jack?)
* Oppladbart batteri

Oppdatering 03.08.2014
Lekt litt i Fritzing, laget en konseptlayout uten display.
Untitled

Publisert i Tech | Merket med , | Skriv en kommentar

Hvordan finne frem til Fagerli?

Det anbefales å benytte fylkesvei 229 fra Bjørkelangen selv om det er noen kilometer lenger enn via 170 / 21

Det er også begrenset med Telenor mobildeking i området, Netcom er ok.
Vi anbefaler at man slår på tråden før man kjører inn på fv 228. Dette vil være ca 10 minutter før ankomst, slik at vi kan møte dere ved bommen.

Bomvegen inn til Fagerli befinner seg 33 km sør for Bjørkelangen på disse koordinatene (oppgitt i forskjellige formater avhengig av gps-type).

59.75150,11.64492
59.75150º N, 11.64492º Ø
59° 45′ 5.4″N, 11° 38′ 41.7″Ø

Klikk for å åpne kart

God gammeldags veibeskrivelse:
* Kjør forbi Shell(?)-stasjonen på venstre hånd på veien mellom Aursmoen og Bjørkelangen, kjør forbi skiltet «Setskog»
* Etter ca 1 km, sving til venstre (Skiltet Ørje/Hemnes)
* Følg denne veien (FV 229) til enden (ca 20 km)
* Ta til venstre (Skiltet Ørje)
* Følg denne veien ca 2 km
* Ta til venstre (Skiltet Setskog/Åserud)
* Nå er det lurt å ringe hvis du har Telenor
* Følg veien i 9 km, ca 11 minutter. Du er nå fremme ved en bomvei ned til høyre

fagerli

Publisert i Uncategorized | Skriv en kommentar

Norgesferie – Dag 8 – Torghatten

Dagen startet grått som de pleier å gjøre, men innen vi nådde startpunktet for løypa opp til juvet i Torgatten var sola fremme. Turen opp var ikke lang men nogen slitsom for oss som ikke er trent. Dessuten var det Linus på 5 som satte farten, og den var bånn gass!

Ask fikk låne bæremeis og Per tok oppgaven med å ha han på ryggen. Noe som var stor stas for Ask.

Vel oppe tok vi en pust i bakken og et par bilder før vi fortsatte ned på baksiden i et noe ulendt terreng

20140626-000248-168116.jpg

Vel nede ble det grilling og kasting av stein, Linus’ favorittaktivitet nede ved vannet.

På kvelden var vi nok en gang invitert til god mat hos Beate før vi rundet av kvelden med en episode OitnB

Les videre

Publisert i Uncategorized | Skriv en kommentar

Norgesferie – dag 7 – ankomst Brønnøysund, Sankthans

Også dag 7 begynte grå og kald, men i det vi passerte polarsirkelen ble det andre boller. Sol fra blå himmel og nok varme til turens første utepils på dekk! Vi koste oss hele dagen og ankom Brønnøysund kl 15:45.

Her ble vi møtt på kaia av Per og Lill-Tove som hadde ordnet masse så vi skulle være velkomne. Leiebil og barnesete sto parkert rett ved kaia og vi kjørte til Mosheim camping hvor barnesenga sto klar. Dernest var det st. Hans-feiring med familien til Lill-Tove, deilig grillmat i alle varianter.

20140625-232349-84229258.jpg

20140625-232348-84228712.jpg

20140625-232349-84229082.jpg

20140625-232348-84228904.jpg

20140625-232349-84229623.jpg

20140625-232349-84229812.jpg

20140625-232349-84229432.jpg

20140625-233410-84850899.jpg

20140625-233410-84850716.jpg

Publisert i Tur | Skriv en kommentar

Norgesferie – dag 6 – Stokmarknes, Raftsundet, Trollfjorden og Svolvær

Dette skulle vise seg å bli en begivenhetsfull dag
Klokken 8 la vi til kai i Harstad, været var grått og 5 grader. Vi gikk ikke i land men tok heller en frokost. Vi trosset temperaturen og våget oss ut på dekk for å ta noen bilder.

11:15 var det minikonsert med Dagny med band i forbindelse med Festspillene i Nord Norge. Behagelig akustisk musikk.

Klokken 14:15 ankom vi Stokmarknes. Dette var en ganske typiske søndagsstengt norsk tettsted, men vi gikk en liten runde.

Ombord igjen var tiden kommet for det besetningen kalte den vakreste delen av strekningen – Raftsundet og Trollfjorden. Spektakulære fjell og endelig kom det noen glimt med sol. Vi så tiligmed to ørner.

I Trollfjorden kom det nok et musikalsk innslag fra Festspillene i NN. Ole Edward Antonsen sto bak på dekk og la en fin stemning over turen inn og ut den lille fjorden.

Neste stoppested var Svolvær. Hovedstaden i Lofoten.
Dette så ut til å være en skikkelig perle på en fin sommerdag med nydelig beliggenhet ved et fjell. Vi gikk en runde også her.

Les videre

Publisert i Tur | Merket med | Skriv en kommentar