summaryrefslogtreecommitdiff
path: root/hardware
diff options
context:
space:
mode:
authorBernhard Tittelbach <xro@realraum.at>2011-12-09 23:15:49 +0000
committerBernhard Tittelbach <xro@realraum.at>2011-12-09 23:15:49 +0000
commit26a2f7520801066d1300f9297701bb70e9421718 (patch)
treeb364ebe67647b2634f74964c634ee8ddfce8f590 /hardware
parentread write buf ptr handling (diff)
plot of solarcell U/I measurements
git-svn-id: https://svn.spreadspace.org/mur.sat@211 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'hardware')
-rwxr-xr-xhardware/energy/solarcells_p_r_graph.py205
1 files changed, 205 insertions, 0 deletions
diff --git a/hardware/energy/solarcells_p_r_graph.py b/hardware/energy/solarcells_p_r_graph.py
new file mode 100755
index 0000000..94a8594
--- /dev/null
+++ b/hardware/energy/solarcells_p_r_graph.py
@@ -0,0 +1,205 @@
+#!/usr/bin/python2 -00
+# -*- coding: utf-8 -*-
+
+import numpy as np
+import pylab
+
+measurements={}
+
+def addm(subject, r, u, i):
+ """ Add Measurments to dict
+ @param subject name of solarcell panel. each panel has 6 cells. each 3 are in series. "1b" means panel 1 and second series of three cells
+ @param r load resistor
+ @param u measured voltage in volts
+ @param i remasured current in ampere
+ """
+ global measurements
+ if not subject in measurements:
+ measurements[subject]={}
+ measurements[subject][r] = (u,i)
+
+def getm_ui(subject):
+ global measurements
+ return zip(* map( lambda (r, ui): ui, sorted(measurements[subject].items()) ))
+
+def getm_rp(subject):
+ """ get measurements load over power
+ @param subject name of solarpanelcells series
+ @returns tuple of lists: (list(r values), list(p values))
+ """
+ global measurements
+ return zip(* map( lambda (r, (u,i)): (u/i, u*i), sorted(measurements[subject].items()) ))
+
+def getm_parallelAB_ui(panelnum):
+ global measurements
+ (uA, iA) = getm_ui(str(panelnum)+'a')
+ (uB, iB) = getm_ui(str(panelnum)+'b')
+ u_par = map(lambda us: sum(us)/2, zip(uA,uB))
+ i_par = map(lambda (i1,i2): i1+i2, zip(iA,iB))
+ return (u_par, i_par)
+
+def getm_parallelAB_rp(panelnum):
+ """ get measurements load over power with simulated parallel connection between xA and xB
+ @panelnum number of panel
+ @returns tuple of lists: (list(r values), list(p values))
+ """
+ (u_s, i_s) = getm_parallelAB_ui(panelnum)
+ return zip(* map(lambda (u,i): (u/i, u*i), zip(u_s, i_s)))
+
+subjects = [str(i)+c for i in range(1,7) for c in "ab"]
+
+#### Measurements ####
+addm("2a", 120, 0.88, 7.4e-3)
+addm("2b",120, 0.8, 6.6e-3)
+addm("3a",120, 0.7, 5.8e-3)
+addm("3b",120, 0.65, 5.4e-3)
+addm("4a",120, 0.66, 5.5e-3)
+addm("4b",120, 0.78, 6.6e-3)
+addm("5a",120, 0.77, 6.5e-3)
+addm("5b",120, 0.9, 7.8e-3)
+addm("6a",120, 0.72, 6.0e-3)
+addm("6b",120, 0.93, 7.8e-3)
+addm("1a",120, 0.84, 7.1e-3)
+addm("1a", 330, 2, 6.2e-3)
+addm("1a", 1000, 4.58, 4.5e-3)
+addm("1a", 4700, 6, 1.2e-3)
+addm("1b",120, 0.74 , 6.2e-3)
+addm("1b", 330, 1.8, 5.7e-3)
+addm("1b", 1000, 4, 4e-3)
+addm("1b", 4700, 4.3, 0.9e-3)
+addm("2a", 330, 2.25, 6.9e-3)
+addm("2a", 1000, 4.74, 4.7e-3)
+addm("2a", 4700, 5.8, 1.2e-3)
+addm("2b", 330, 2.17, 6.7e-3)
+addm("2b", 1000, 3.95, 3.9e-3)
+addm("2b", 4700, 4.6, 1.0e-3)
+addm("3a", 330, 1.86, 5.7e-3)
+addm("3a", 1000,4.75, 4.7e-3)
+addm("3a", 4700, 5.8, 1.2e-3)
+addm("3b", 330, 1.74, 5.3e-3)
+addm("3b", 1000, 4.52, 4.6e-3)
+addm("3b", 4700, 5.8, 1.2e-3)
+addm("4a", 330, 1.81, 5.5e-3)
+addm("4a", 1000, 4.98, 4.9e-3)
+addm("4a", 4700, 5.8, 1.2e-3)
+addm("4b", 330, 2.21, 6.5e-3)
+addm("4b", 1000, 4.29, 4.2e-3)
+addm("4b", 4700, 5.5, 1.2e-3)
+addm("5a", 330, 2.1, 6.4e-3)
+addm("5a", 1000, 4.0, 4.0e-3)
+addm("5a", 4700, 4.7, 1e-3)
+addm("5b", 330, 2.27, 7e-3)
+addm("5b", 1000, 4.29, 4.3e-3)
+addm("5b", 4700, 5.5, 1.2e-3)
+addm("6a", 330, 1.69, 5.2e-3)
+addm("6a", 1000, 3.61, 3.6e-3)
+addm("6a", 4700, 3.9, 0.8e-3)
+addm("6b", 330, 2, 6.2e-3)
+addm("6b", 1000, 3.54, 3.5e-3)
+addm("6b", 4700,4.2, 0.9e-3)
+addm ('1a', 3300, 6.71, 2.0e-3)
+addm ('1b', 3300, 4.8, 1.4e-3)
+addm ('2a', 3300, 6.6, 1.9e-3)
+addm ('2b', 3300, 5.1, 1.5e-3)
+addm ('3a', 3300, 6.47, 1.9e-3)
+addm ('3b', 3300, 6.45, 1.9e-3)
+addm ('4a', 3300, 6.5, 1.9e-3)
+addm ('4b', 3300, 6.02, 1.8e-3)
+addm ('5a', 3300, 5.25, 1.5e-3)
+addm ('5b', 3300, 6.05, 1.8e-3)
+addm ('6a', 3300, 4.27, 1.2e-3)
+addm ('6b', 3300, 4.62, 1.4e-3)
+addm ('1a', 1500, 6.25, 4.1e-3)
+addm ('1b', 1500, 4.72, 3.1e-3)
+addm ('2a', 1500, 6.20, 4.1e-3)
+addm ('2b', 1500, 4.80, 3.2e-3)
+addm ('3a', 1500, 6.25, 4.1e-3)
+addm ('3b', 1500, 6.28, 4.2e-3)
+addm ('4a', 1500, 6.32, 4.2e-3)
+addm ('4b', 1500, 5.68, 3.8e-3)
+addm ('5a', 1500, 5.00, 3.3e-3)
+addm ('5b', 1500, 5.67, 3.8e-3)
+addm ('6a', 1500, 4.19, 2.8e-3)
+addm ('6b', 1500, 4.36, 2.9e-3)
+si = iter(subjects)
+addm(si.next(), 2200, 6.60, 3e-3)
+addm(si.next(), 2200, 4.57, 2.1e-3)
+addm(si.next(), 2200, 6.17,2.8e-3)
+addm(si.next(), 2200, 4.96, 2.2e-3)
+addm(si.next(), 2200, 6.1, 2.8e-3)
+addm(si.next(), 2200, 6.08, 2.75e-3)
+addm(si.next(), 2200, 6.16, 2.8e-3)
+addm(si.next(), 2200,5.77, 2.6e-3)
+addm(si.next(), 2200, 5.0, 2.25e-3)
+addm(si.next(), 2200, 5.75, 2.6e-3)
+addm(si.next(), 2200, 4.05, 1.8e-3)
+addm(si.next(), 2200, 4.34, 1.98e-3)
+si = iter(subjects)
+addm(si.next(), 1200, 5.6, 4.8e-3)
+addm(si.next(), 1200, 4.2, 3.6e-3)
+addm(si.next(), 1200, 5.5, 4.7e-3)
+addm(si.next(), 1200, 4.4, 3.7e-3)
+addm(si.next(), 1200, 5.8,5e-3)
+addm(si.next(), 1200, 5.4, 4.6e-3)
+addm(si.next(), 1200, 6.0, 5.1e-3)
+addm(si.next(), 1200, 5.35, 4.5e-3)
+addm(si.next(), 1200, 4.6, 3.9e-3)
+addm(si.next(), 1200, 5.1, 4.3e-3)
+addm(si.next(), 1200, 3.9, 3.3e-3)
+addm(si.next(), 1200, 4, 3.4e-3)
+addm("3a", 1800, 6.2, 3.4e-3)
+addm("3b", 1800, 6, 3.3e-3)
+addm("4a", 1800, 6.25, 3.5e-3)
+addm("4b", 1800, 5.7, 3.2e-3)
+
+#extra sun:
+#addm("3a_es", 1200, 6.7, 5.7e-3)
+
+#subjects = ["1a", "1b"]
+#subjects.remove("1b")
+
+pylab.figure(1)
+pylab.xlabel('Spannung [U]')
+pylab.ylabel('Strom [I]')
+pylab.grid(True)
+for subject in subjects:
+ (u, i) = getm_ui(subject)
+ pylab.plot(u,i, label=subject)
+ pylab.hold(True)
+pylab.legend()
+
+pylab.figure(2)
+pylab.xlabel('Widerstand [Ohm]')
+pylab.ylabel('Leistung [W]')
+pylab.xscale('log', basex=10)
+pylab.yscale('log', basey=10)
+pylab.grid(True)
+for subject in subjects:
+ (r, p) = getm_rp(subject)
+ pylab.plot(r,p, label=subject)
+ pylab.hold(True)
+pylab.legend()
+
+pylab.figure(3)
+pylab.xlabel('Spannung [U]')
+pylab.ylabel('Strom [I]')
+pylab.grid(True)
+for panelid in range(1,7):
+ (u, i) = getm_parallelAB_ui(panelid)
+ pylab.plot(u,i, label=str(panelid))
+ pylab.hold(True)
+pylab.legend()
+
+pylab.figure(4)
+pylab.xlabel('Widerstand [Ohm]')
+pylab.ylabel('Leistung [W]')
+pylab.xscale('log', basex=10)
+pylab.yscale('log', basey=10)
+pylab.grid(True)
+for panelid in range(1,7):
+ (r, p) = getm_parallelAB_rp(panelid)
+ pylab.plot(r,p, label=str(panelid))
+ pylab.hold(True)
+pylab.legend()
+
+pylab.show()