Lysande!

Idag kom lysdioderna från min morbror som driver Oceanakvarium och bland annat säljer material för hemmabyggare. Det är bra tryck i lysdioder på 2W, jag var förstås tvungen att löda ihop några och prova…

DSC_0168

Share

Det är python…

Idag blev det en tur till Clas för att köpa lite fästliga saker som lim, buntband och tejp. Det kom även ett kuvert från Electro:kit med bland annat de motstånd som behövs i serie med lysdioderna. De drar ungefär 700mA över 3V så sex stycken dioder i serie med ett motstånd på ett ohm blir ganska lagom till mitt nätagg på 19V.

DSC_0167

Det blev även en del programmerat i helgen så nu har jag en liten slinga som sköter ljuset. Den börjar med att tända månljuset vid sex på morgonen och går vid tio över till en soluppgång då ljuset stegas upp under en timma. Under dagen går det slumpmässiga ”molnskuggor” över karet då ett antal dioder släcks i en vandrande sekvens. Vid nio på kvällen börjar solnedgången som håller på en timma innan månljuset åter tar över fram till ett på natten. Det ska byggas ut med olika tider olika veckodagar och lite annat pill men är en bra början. Jag hittade dessutom en bra beskrivning på hur man kör python-skript som tjänster så att det startar automatiskt. Slutligen la jag in en rad i /etc/rsyslog.d/aquacontrol.conf (ja, jo, jag har döpt snurran till aquacontrol. Stäm mig) för att få loggningen till en egen fil:

if $programname == 'aquacontrol.py' then /var/log/aquacontrol.log

Och själva skriptet, skrivet i python, kommer här:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import datetime
import syslog
from random import randint

syslog.syslog('Aquacontrol started')

# Definiera tider
moon_on = datetime.datetime(2015, 1, 1, 6, 0)
moon_off = datetime.datetime(2015, 1, 1, 1, 0)
sunrise_on = datetime.datetime(2015, 1, 1, 10, 0)
sunset_on = datetime.datetime(2015, 1, 1, 21, 0)

# definiera variabler
sun = [2,3,4,5,6,7,8,9,10]
moon = 11

# Initiera GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
for x in range (0, 9):
	GPIO.setup(sun[x], GPIO.OUT)
GPIO.setup(moon, GPIO.OUT)
syslog.syslog('GPIO initialized')

# Subrutiner
def sunrise(interval):
	syslog.syslog('Sunrise started')
	for x in range (0, 9):
		GPIO.output(sun[x], 1)
		if x == 1: GPIO.output(moon, 0)
		time.sleep(interval)
	syslog.syslog('Sunrise ended')
def sunset(interval):
	syslog.syslog('Sunset started')
	for x in range (8, -1, -1):
		GPIO.output(sun[x], 0)
		if x == 1: GPIO.output(moon, 1)
		time.sleep(interval)
	syslog.syslog('Sunset ended')
def shadow(runtime):
	syslog.syslog('Shadow started')
	for x in range (0, 11):
		if x < 9: GPIO.output(sun[x], 0)
		if x > 1: GPIO.output(sun[x - 2], 1)
		time.sleep(runtime / 11)
	syslog.syslog('Shadow ended')

# Initiera state (night, moon, day, moon)
now = datetime.datetime.now()
sunset(0)
GPIO.output(moon, 0)
state = 0
if now.time() > moon_on.time(): state = 1
if now.time() > sunrise_on.time(): state = 2
if now.time() > sunset_on.time(): state = 3
if now.time() > moon_off.time() and now.time() < moon_on.time(): state = 0
if state == 1 or state == 3:
	GPIO.output(moon, 1)
elif state == 2:
	sunrise(0)
syslog.syslog('Initial state is %d' % state)

# Huvudloop
while True:
	now = datetime.datetime.now()
	if state == 0:
		# Night mode, wait for morning moon
		if now.time() > moon_on.time():
			state = 1
			syslog.syslog('Entering state 1')
			GPIO.output(moon, 1)
	elif state == 1:
		# Morning moon, wait for sunrise
		if now.time() > sunrise_on.time():
			state = 2
			syslog.syslog('Entering state 2')
			sunrise(450)
	elif state == 2:
		# Daytime, random shadows, wait for sunset
		if randint(1, 60) == 1:
			shadow(60)
		if now.time() > sunset_on.time():
			state = 3
			syslog.syslog('Entering state 3')
			sunset(450)
	elif state == 3:
		# evening moon, wait for night
		if now.time() > moon_off.time() and now.time() < moon_on.time():
			state = 0
			syslog.syslog('Entering state 0')
			GPIO.output(moon, 0)
	time.sleep(60)
Share

Provar lite…

Lysdioderna och motstånden är på väg så snart har jag alla delar hemma. Dags att börja testa lite! Jag har installerat WebIOPi på min Pi och kopplat ihop det hela. Tänk att det kan vara så kul att tända och släcka lysdioder genom att klicka på en webbsida! För att WebIOPi ska hantera alla pinnar på en B+ behövs det en liten patch. Den är visserligen för 0.7.0 men verkar fungera bra även på 0.7.1 som är aktuell version. Nu är det dags att börja programmera lite, python var ett tag sedan man höll på med senast…

DSC_0166

Share

Känner du Kjell?

Kjell och Clas är två bra kompisar, idag hälsade jag på Kjell och ordnade lite mer till rampbygget. Förutom sladd att koppla ihop allt med blev det även en liten strömregulator. Jag kommer att driva belysningen med ett gammalt nätagg till en bärbar Dell-dator. Det lämnar 19V vilket blir bra till lysdioderna men Raspberry Pi och reläkortet trivs bättre med 5V. Det fixar en liten LM2596, färdigbyggd för en femtiolapp hos Kjell & Co.

DSC_0165

Share

Reläer

Idag kom det ett paket från Tyskland med ett par åttakanalers reläkort, Ebay är bra att ha! De ska styras från en Raspberry Pi, mest för att jag hade en sådan liggande. Jag vet att tio kanaler går åt till ljuset, klurar på vad jag ska ha de sista sex till…

DSC_0156

Share

Själva rampen…

Vi kommer att dra igång akvarium nummer två under våren. Då jag inte har någon belysning till det har jag bestämt mig för att bygga en LED-belysning. Den kommer ha både dagsljus (i nio olika nivåer) och månljus och ska styras av en Raspberry Pi. Steg ett blev att ordna själva rampen som allt ska sitta i. Efter lite diskussion med Byggstål i Karlstad gjorde de denna fina ramp till mig:

DSC_0155

Den är gjord i vitlackerad skyltaluminium på 1,5mm och det är Micke som hjälper till med att hållfasthetstesta den.

Share

Mina projekt

Ibland har man ett behov av dokumentera vad man gör. Både för att efter ett år eller tio komma ihåg vad man gjorde och för att skryta inför omvärlden med vad man håller på med. Här lägger jag ut sådant.

 

Share