Current monitor for mini-solar panels (18V, ~20W)

Place your projects here
lyizb
Posts: 241
Joined: Fri Feb 12, 2021 8:23 pm
Has thanked: 121 times
Been thanked: 84 times

Current monitor for mini-solar panels (18V, ~20W)

Post by lyizb »

solar panel output 240829.jpg
In South Shore Nova Scotia, I'm interested in installing solar panels, but have no good south-facing roof or yard space. I'm considering mounting some about 22 degrees off of vertical on the front of my barn, which faces approximately West-Southwest (so not optimal for azimuth or tilt). I'm not sure how much the lower part of it would be shaded by the house in the winter.

I've mounted 4 nominal 18V 20W "car battery maintaining" solar panels and a 5th of lessor output and am monitoring them with an ESP32-S2Mini running Annex and 5 INA226 current monitor modules--all on a breadboard with small 12V LEDs providing some load. The ESP sends via UDP average voltage, wattage, and amperage every 6 minutes for each of the panels. Another ESP32-S2Mini receives the UDP messages, displays them on an LCD, and logs them with a timestamp in a daily log file. I plan to automate continuous updating of a graph like the one above, but at present I just download the daily log file to yet another ESP32-S2Mini and produce the graph for the day.
Barn mini solar panels.jpg
I am not confident that I have the INA226s properly calibrated for wattage, but for my present purpose, it doesn't matter, since shading by clouds is clearly shown, and also late afternoon shading by a tree. This should give me what I want to see over the winter.

The INA226 modules have 3 solder blobs which you can variously short out or not, giving in theory 4 I2C addresses, but no matter how they were shorted, I could not get more than three addresses--&h40, &h41, and &h45. I wanted to monitor at least 5 panels anyway, and found that in Annex I could just change the I2C.SETUP pins to access as many INA226 modules as I wanted.
INA226x5 breadboard.jpg
Breadboard in place pic:
INA226x5 breadboard in barn.jpg
Here's the[program to read INA226s

Code: [Local Link Removed for Guests]

' ina226x5.bas
' https://www.ti.com/lit/ds/symlink/ina226.pdf?ts=1719076066708 TI data sheet
' https://github.com/macgeorge/STM32-example-codes/blob/master/6%20-%20INA226/F7_INA226.c
' 
rConfig=0:rShuntV=1:rBaseV=2:rPower=3:rCurrent=4:rCalib=5:rMask=6:rAlert=7:rManuf=&hFE:rDieID=&hFF
iConfig=0:iShuntV=0:iBaseV=0:iPower=0:iCurrent=0:iCalib=0:iMask=0:iAlert=0:iManuf=0:iDieID=0
i=0:j=0:k=0:l=0:m=0:n=0:reg=0: flagI2C2=0:port=&h40:flagLog=0
rstReason=BAS.RESETREASON ' 0=poweron; 1=HW watchdog; 2=exception; 3=SW watchdog; 
' 4=REBOOT; 5=sleep; 6=HW reset
dim rst$(6)="poweron","HW watchdog","exception","SW watchdog","REBOOT","sleep","HW reset"
a$ = "Starting ina226x5.bas "+str$(rstReason)+" "+rst$(rstReason)
a$=a$+" "+date$+" "+time$
wlog a$
FILE.APPEND "/data/startup.log", a$+chr$(13)+chr$(10)

nReads=90 ' 60 is 2 minutes, 720/day; 30=1440/day;90=540/day;120=360/day
dim sumVolts(5)
dim sumWatts(5)
dim sumAmps(5)

dim ia(3) ' input buffer, 
dim ib(8) ' register values
dim sReg$(9)="Config","ShuntV","BaseV","Power","Current","Calib"," Mask","Alert","Manuf","DieID"
dim sLoc$(4)="Upper  ","Middle"," South "," Lower "," Side"
p$="           "
dim ports(5)=&h40,&h41,&h45,&h40,&h45

dim   wifi_APs$(2)="Omnibus_N_EXT","Omnibus_N"
currentWIFI=0 ' or 1
wlog "connected to "+wifi_APs$(currentWIFI)
'wifi_retry_timeout=DATEUNIX(date$)+TIMEUNIX(time$)+10*60 ' 10 minutes from now

'i2c.ReadRegArray port,rConfig,2,ia()
'ib(0)=ia(0)*256+ia(1)
'wlog hex$(ib(0)) ' returns '4127--power-on configuration reg value

'OPTION.WDT 240000 ' milliseconds -- every 4 minutes
udp.begin 39191

  a$="              "
  for i=0 to 7
    a$=a$+sReg$(i)+space$(10-len(sReg$(i)))
  next i
  wlog a$
  wlog p$+"  "+sLoc$(0)+p$+sLoc$(1)+p$+sLoc$(2)+p$+sLoc$(3)+p$+sLoc$(4)
  lastHr$=""

  iCalib = 0.00512 / ( 0.001 * 0.01 )
'  wlog "Calib: ";iCalib ' 512 for .010 Ohms, 1mv/LSB
  lastSec$=mid$(time$,8,1)
  cnt=0 ' sum for 60 2-second periods, then save values
  do
   if lastSec$<>mid$(time$,8,1) then
    lastSec$=mid$(time$,8,1)
    lstSec = val(lastSec$) mod 2
    flagOK=0 ' do we have at least one non-zero voltage
    if lstSec=0 then
      I2C.SETUP 33, 35  ' set I2C port on pins 33-sda and 35-scl--esp32-S2Mini
      for k=0 to 4
        if k=3 then ' switch I2C pins
          I2C.SETUP 17, 21  ' set I2C port on pins 17-sda and 21-scl--esp32-S2Mini
          pause 100
        endif
        port=ports(k)
        ia(0)=iCalib/256: ia(1)=iCalib-(ia(0)*256)
        i2c.WriteRegArray port,rCalib,2,ia()
        gosub outputvals
      next k
      cnt=cnt+1
      if cnt>(nReads-1) then
        cnt=0
        rec$=""
        rec2$=""
        ' save 3-minute sums
        for k=0 to 4
          fVolts=sumVolts(k)/nReads ' avg of 2min readings every 2 secons
          fWatts=sumWatts(k)/nReads*10
          fAmps=sumAmps(k)/nReads*10
          if fVolts<6 then ' not valid (or dark)
            fVolts=0
            fWatts=0
            fAmps=0
          endif
          rec$=rec$+str$(fVolts,"%4.1f")+" "+str$(int(fWatts))+" "+str$(int(fAmps))+" "
     '     rec2$=rec2$+str$(fVolts,"%04.1f")+"V "+str$(int(fWatts),"%5d",1)+" "+str$(int(fAmps),"%5d",1)+" "
             rec2$=rec2$+str$(fVolts,"%04.1f")+"V "+str$(int(fWatts),"%05d",1)+" "+str$(int(fAmps),"%05d",1)+" "
'          rec2$=rec2$+str$(fVolts,"%04.1f")+"V "+str$(fWatts,"%5f",1)+" "+str$(fAmps,"%5f",1)+" "
          sumVolts(k)=0
          sumWatts(k)=0
          sumAmps(k)=0
          if fVolts>5 then flagOK=1
        next k
        k=instr(rec$,"  ")
        do while k>0
          rec$=mid$(rec$,1,k)+mid$(rec$,k+2)
           k=instr(rec$,"  ")
        loop
        k=instr(rec2$,"  ")
        do while k>0
          rec2$=mid$(rec2$,1,k)+mid$(rec2$,k+2)
           k=instr(rec2$,"  ")
        loop
        if flagOK then
          dt$=mid$(date$,7,2)+mid$(date$,4,2)+mid$(date$,1,2)+mid$(time$,1,2)+mid$(time$,4,2)+mid$(time$,7,2)
          wlog dt$+" "+rec2$
          if lastHr$<>mid$(time$,2,1) then
            lastHr$=mid$(time$,2,1)
            wlog p$+"  "+sLoc$(0)+p$+sLoc$(1)+p$+sLoc$(2)+p$+sLoc$(3)+p$+sLoc$(4)
          endif
          if WIFI.STATUS<>3 then ' <>3=not ok
            while WIFI.STATUS<>3 ' disconnected
              if currentWIFI=0 then
                currentWIFI=1
             else
                currentWIFI=0
             endif
             WIFI.CONNECT wifi_APs$(currentWIFI), “amber1977”
             pause 2000
           wend
           wlog "connected to "+wifi_APs$(currentWIFI)
         endif
          
          udp.write "192.168.2.22", 39191, rec$
        endif
'        OPTION.WDTRESET ' reset watchdog timer
      endif
     endif
   endif
  loop  
  end

outputvals:
  a$ = "I2C  &h"+hex$(port)
  for i=0 to 7
    i2c.ReadRegArray port,i,2,ia()
    ib(i)=ia(0)*256+ia(1)
    select case i
      case rBaseV: fBaseV=int(ib(i)*0.00125*100)/100
        sumVolts(k)=sumVolts(k)+fBaseV    
        b$=str$(fBaseV,"%3.1f")+"V" ' to hundredths of a volt
      case rPower: fPower=ib(i)
        sumWatts(k)=sumWatts(k)+fPower
        b$=str$(fPower,"%4.1f")+"mW"
      case rCurrent: fCurrent=ib(i)/25
        sumAmps(k)=sumAmps(k)+fCurrent
        b$=str$(fCurrent,"%6.1f")+"mA"
      case else: b$=hex$(ib(i))
    end select
    a$=a$+space$(10-len(b$))+b$
  next i
'  wlog str$(cnt)+" "+str$(k)+" "+str$(sumVolts(k))+" "+str$(sumWatts(k))+" "+str$(sumAmps(k))
  if flagLog then wlog a$
return 
I slightly modified the great graphing example given by BeanieBots to graph either voltage or wattage [Local Link Removed for Guests]. The wattage graph is more informative. The 4 similar mini-panels are mounted on a single 1x4 board attached to my barn at an angle. 3 are at the orientation which large panels would have in lower, middle, and upper placements, of which the lower becomes unshaded by the side of the barn first. The 4th one is southerly facing at approximately the correct tilt to give optimized annual production. I had hoped to be able to figure out how much output I would lose by not having the optimal azimuth and tilt, but unfortunately, there is too much variation between these supposedly identical panels for the difference to be seen.

One other option for mounting additional panels is on the East-Southeast-facing roof of my barn. Whenever I can get someone here who can go up on a ladder for me I have another mini-panel prepared which can be screwed on to the roof trim to give me that orientation and height.

The graph should tell me what winter days look like, on average, and how they compare with summer days.

Graphing program:

Code: [Local Link Removed for Guests]

'****************************************************************************************
'*                                                                                      *
'*  Example of Chart.js persistant time graph with variable data sets                   *
'*  V1.0.0  16/06/2023 © BeanieBots.                                                    *
'*  Thanks to cicciocb for the help with html & jarva bits.                             *
'*  For more information on the use of Chart.js, please see https://www.chartjs.org/    *
'*  Tested on ESP8266 FW 1.44.2  &  ESP32 FW BLE CAN 1.48.22                            *
'*                                                                                      *
'****************************************************************************************

RAMspare = 60000      'The amount of RAM left spare after creating the datasets.
                      'Determines how long data will be stored before deleting.
                      'The ESP8266 can be as low 32000 but the ESP32 requires at
                      'least 60000 to be reliable.
                  
NumSets = 4           'The number of EXTRA datasets to be plotted.
Dim Value(NumSets)    'Create an array to hold the new values.
Dim DataSet$(NumSets) 'Create a string array to hold each dataset.
Dim DataSetLabel$(NumSets)="Upper","Middle","South","Lower","Left"
sMoAbbrev$="JanFebMarAprMayJunJulAugSepOctNovDec"
Angle = 0             'Starting value for  dummy data
TimeStamp$ = ""       'Declare empty timestamp.
lineNo=0              ' LB: line # of input file to read
flagDone=0            ' LB: end of input file
type$="Watts"          ' LB otherwise, Volts
if type$="Watts" then
voltswatts$="Watts"
else
voltswatts$="Volts"
endif
'fn$="/data/240820.txt"
fn$=""
do
  if fn$<>"" then
    mo=val(mid$(fn$,9,2))
    sMo$=mid$(sMoAbbrev$,(mo-1)*3+1,3)
    dt$=sMo$+" "+mid$(fn$,11,2)+", 20"+mid$(fn$,7,2)
    wlog dt$
    Gosub getData         ' LB: read file of data
'-----------------------------------------------------------------------------------------
    OnHtmlReload ReLoadPage'Re-Load page for new connections.
'-----------------------------------------------------------------------------------------
    Gosub LoadPage         'Load initial page
'Timer0 1000, NextData  'Do not set < 2000 (LB: was 3000)
    wlog "Graph Completed for "+voltswatts$+" on "+dt$
    fn$=""
  endif
loop
wait
'-----------------------------------------------------------------------------------------
NextData:
 if not flagDone then
  Gosub GetTimeStamp 'Each piece of data requires a timestamp in string format
  Gosub GetValue     'Generate some example data.
  Gosub UpdateChart  'Send data to page and update
 
  while ramfree < RAMspare  'When low on RAM start removing old data from the left.
  
    For Set = 0 to NumSets 'Remove data from the left
      DataSet$(Set) = right$(DataSet$(Set),(len(DataSet$(Set))-instr(DataSet$(Set),"}")-1))
    Next Set
    'An alternative (especially if datasets have different frame rates) would be to set
    'a maximun string length (possibly for each set individualy) and then trim accordingly.
  wend
 endif
Return
'-----------------------------------------------------------------------------------------
GetTimeStamp: '-1 hour (60*60*1000) for GB time.
  TimeStamp = (dateUNIX(date$)+timeunix(time$))*1000-(60*60*1000)
  Timestamp$ = str$(TimeStamp,"%0.0f")
Return
'-----------------------------------------------------------------------------------------
UpdateChart:
  For Set = 0 to NumSets 'Add the new data to the existing string for each dataset.
    DataSet$(Set) = DataSet$(Set) + "{x:"+TimeStamp$+",y:"+str$(Value(Set))+"},"
    jscall "mychart.data.datasets[" + str$(Set )+ "].data = [" + DataSet$(Set) + "];" 
    Pause 100 'wait for data to load
  Next Set  
  jscall "mychart.update();" 'now update the chart.
Return
'-----------------------------------------------------------------------------------------
GetData:
  lineNo=1
  line$=FILE.READ$(fn$,lineNo) ' 240805B
  wlog lineNo,mid$(line$,1,30)
  tmStamp$=mid$(line$,1,12)
  uDate$=mid$(tmStamp$,4,2)+"/"+mid$(tmStamp$,3,2)+"/"+mid$(tmStamp$,1,2)
  uTime$=mid$(tmStamp$,7,2)+":"+mid$(tmStamp$,9,2)+"/"+mid$(tmStamp$,11,2)
  TimeStamp = (dateUNIX(uDate$)+timeunix(uTime$)-3600)*1000 ' 3600 adjust for DST
  TimeStamp$ = str$(TimeStamp,"%0.0f")
  For Set = 0 to NumSets 'Add the new data
    DataSet$(Set) = DataSet$(Set) + "{x:"+TimeStamp$+",y:"+str$(Value(Set))+"},"
  Next Set  
  do while line$<>""
    tmStamp$=mid$(line$,1,12)
    uDate$=mid$(tmStamp$,4,2)+"/"+mid$(tmStamp$,3,2)+"/"+mid$(tmStamp$,1,2)
    uTime$=mid$(tmStamp$,7,2)+":"+mid$(tmStamp$,9,2)+"/"+mid$(tmStamp$,11,2)
    TimeStamp = (dateUNIX(uDate$)+timeunix(uTime$))*1000
    TimeStamp$ = str$(TimeStamp,"%0.0f")
    fst=14 ' beginning of data
    loc=instr(Fst,line$," ") ' point to end of first volts value
    if type$="Watts" then
      fst=loc+1 ' move to first Watts value
      loc=instr(Fst,line$," ") ' move past watts
    endif

    For Set = 0 to NumSets 'Add the new data
          Value(Set) = val(mid$(line$,fst,loc-fst))
          if type$="Watts" then
            Value(Set) = Value(Set)/1000 ' convert milliwatts to watts
          endif
          fst=loc+1
          loc=instr(Fst,line$," ") ' move past watts (or amps)
          fst=loc+1
          loc=instr(Fst,line$," ") ' move past amps (or volts)
          fst=loc+1                ' point to next target: volts or milliwats
          loc=instr(Fst,line$," ") ' end of next target
      DataSet$(Set) = DataSet$(Set) + "{x:"+TimeStamp$+",y:"+str$(Value(Set))+"},"
    Next Set
    if lineNo mod 50 = 0 then wlog lineNo,mid$(line$,1,30)
    lineNo=lineNo+1
    line$=FILE.READ$(fn$,lineNo)
'    if lineNo=51 then line$=""
  loop
  For Set = 0 to NumSets 'Add the new data
    DataSet$(Set) = DataSet$(Set) + "{x:"+TimeStamp$+",y:"+str$(0.0)+"},"
  Next Set  
  wlog "Finished reading File; "+str$(lineNo)+" records"
  file.write "/data/chartdata.txt",DataSet$(0)
  For Set = 1 to NumSets 'Add the new data
    file.append "/data/chartdata.txt",DataSet$(Set)
  Next Set  
  jscall "mychart.update();" 'now update the chart.
  return
'-----------------------------------------------------------------------------------------
LoadPage:
cls
jsexternal "https://cdn.jsdelivr.net/npm/chart.js@4.3.0/dist/chart.umd.min.js"
pause 500 'wait a little bit for the library to load
jsexternal "https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"
'Required for 'time' scale plots.
pause 100 'wait a little bit for the library to load
cls
A$=""
A$ = |<h><center> Solar Panel Output: |+dt$+| -- |+voltswatts$+| </center></h>|
A$ = A$ + |<div>|
A$ = A$ + |  <canvas id="myChart"></canvas>|
A$ = A$ + |<style> body {background-color: #cce;}</style>|
A$ = A$ + |</div>|
html a$
'Generate the chart
A$ = ||
A$ = A$ + |ctx = document.getElementById('myChart');|
A$ = A$ + ||
A$ = A$ + |   mychart = new Chart(ctx, {|
A$ = A$ + |    type: 'line',|
A$ = A$ + |    data: {|
'Add the first dataset
A$ = A$ + |      datasets: [{|
A$ = A$ + |        label: 'Upper',|
A$ = A$ + |        data: [],|
'Add subsequent datasets (if any)
For Set = 1 to NumSets
  Title$ = DataSetLabel$(Set)
  A$ = A$ + |    },{|
  A$ = A$ + |      label: '|+Title$+|',|
  A$ = A$ + |      data: [],|
Next Set
'Close off the datasets, set scales and add any options.
A$ = A$ + |      },]|
A$ = A$ + |    },|
A$ = A$ + |    options: {|
A$ = A$ + |      scales: {|
A$ = A$ + |        x: {|
A$ = A$ + |          type: 'time',|
A$ = A$ + |          time: {unit: 'minute'},|
A$ = A$ + |        }|
A$ = A$ + |      }|
A$ = A$ + |    }|
A$ = A$ + |  });|
jscript A$
A$ = ""
Pause 100
Return
'-----------------------------------------------------------------------------------------
ReLoadPage:
  Gosub LoadPage
  If TimeStamp$ <> "" then 'Don't update an empty graph.
    Gosub UpdateChart
  endif   
Return
'-----------------------------------------------------------------------------------------
End
You do not have the required permissions to view the files attached to this post.
Last edited by lyizb on Sun Sep 01, 2024 2:34 pm, edited 1 time in total.
lyizb
Posts: 241
Joined: Fri Feb 12, 2021 8:23 pm
Has thanked: 121 times
Been thanked: 84 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by lyizb »

The graph provides some interesting information.
solar panel output 240829.jpg
All the panels start to show some voltage at dawn, even though they are completely shaded. The wattage, though, is nominal until they are hit by the sun coming around the corner of the barn. The lower panel, drawn in yellow, is unshaded first. Then the south-facing panel picks up and quickly surpasses the others in wattage. It maintains this superior output until around 2:40 in the afternoon, when the angle of the sun becomes better for the panels which are aligned with the front of the barn.

I would have though that the lower, middle, and upper panels (represented by yellow, red, and blue) would have had similar peaks, but evidently there is too much variation in these apparently similar panels).

In the late afternoon, starting around 4:40, shading from a large ash tree comes into play, starting with the lower panel. Later there is also some cloud interaction.

Based on this chart, more than two months past the summer solstice, I might get decent production from panels with this orientation between noon and 5:30 from about mid-April to September at least. As I watch this chart over the winter, I will be able to compare the graphs to see what I might expect.

Unfortunately, this may all be moot. In the U.S., I might well be able to buy the panels, 120V/240V all-in-one inverter/charger, and batteries for a DIY installation that might eliminate 90% of my electric bill for maybe $9,000USD. But Canada has a tariff of 165% on imported panels and batteries, which would more than double the cost.

This tariff is baffling to me, since studies show that installed panels are far more beneficial financially for the country in which they are installed than for the country which produces them. Canada can never support a globally competitive industry producing solar panels and batteries--the market simply isn't large enough, and hydro and nuclear already produce about 73% of Canada's electrical generation.
You do not have the required permissions to view the files attached to this post.
User avatar
cicciocb
Site Admin
Posts: 2784
Joined: Mon Feb 03, 2020 1:15 pm
Location: Toulouse
Has thanked: 592 times
Been thanked: 1990 times
Contact:

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by cicciocb »

Thanks Lizby for your project and analysis.

It is still hard to understand if is really a valid economic solution to install solar panels considering the cost vs the efficiency.
lyizb
Posts: 241
Joined: Fri Feb 12, 2021 8:23 pm
Has thanked: 121 times
Been thanked: 84 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by lyizb »

[Local Link Removed for Guests] wrote: [Local Link Removed for Guests]Sun Sep 01, 2024 2:53 pmIt is still hard to understand if is really a valid economic solution to install solar panels considering the cost vs the efficiency.
I personally don't have any doubt--in a large number of instances. Panel and battery prices have plummeted in the past several years.

Here's an enthusiast: [In Australia] "Households will produce more energy than they use":

Australia again: "The Australia Energy Market Operator reports that operational demand on Australia’s main grid (the National Electricity Market) hit a new winter low of just 12,144 megawatts (MW) at 1pm on Saturday, as rooftop solar accounted for 46.5 per cent of the grid’s supply on a warm and sunny afternoon." https://reneweconomy.com.au/rooftop-pv- ... rtailment/

Of course, Australia is a special case--a wealthy country with an abundance of sun.

But the ability to reduce the power bill isn't the only reason to do it--I'm interested in resilience in the event the power goes out (as it may several times a year where I am). I looked at putting in a whole house propane generator, but the cost would have been $15,000 Canadian (about $12,000USD) and would have entailed an additional ongoing cost to rent the propane tanks (actual use of propane would have been minimal). But I didn't like the fact that the cost to me would increase, not decline, and I also didn't like introducing another fossil fuel source for my house.

I could probably deal with 90% of my outages with batteries alone, with no panels, but the panels would cover most of the remaining 10% (I've never in 20 years had an outage that wouldn't have been covered by 15kWh of batteries).

In Canada, the 165% tariffs are killing, and installation costs are also high. But in places where those are not such significant factors, prices are such that installing solar and batteries makes economic sense. And the price of grid electricity is not going down (unless we get fusion power).

I thought that Canada would be a poor place for solar, but 6 of Canada's 16 largest cities are south of Genoa, Italy, and all but three are more southerly than Paris.
BeanieBots
Posts: 522
Joined: Tue Jun 21, 2022 2:17 pm
Location: South coast UK
Has thanked: 292 times
Been thanked: 163 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by BeanieBots »

Thanks for sharing.
I'm south coast UK and have a 3kW panel installation.
Don't know about how things work in your country but in the UK everything depends on WHEN you make the installation.
The UK changes the deal every few months, so it is impossible to know if panels will be cost effective next week, only what the rates are today.
Mine have been installed for 20+ years now and the 25 year deal at the time made them a very good incentive even at the much higher cost of panels back then.
I get paid simply for generating, not what I put back on the grid. Obviously, I also save on consumption.
Any surplus is used to heat water, so nothing goes back on the grid (yet they ASSUME that 50% goes to grid) and I get paid over the odds.
Totally stupid on their part but great for me.
If I was to install them now, it would not be worthwhile because they only pay about 1/4 of the going rate for whatever is put back on the grid.
Are batteries worth it? Not looked into it recently but I've checked several times over the last few decades and always concluded that they are NOT worth the investment. This is based largely on the assumption that they would do a full charge/discharge cycle for at least 50% of the year and thus would need replacing every 8 years.

What are you using to load the panels. Is it true MPPT?
I've often considered using an ESP to extract maximum power from a panel but as I already have an off-the-shelf grid tied inverter it's never been high on my list.
lyizb
Posts: 241
Joined: Fri Feb 12, 2021 8:23 pm
Has thanked: 121 times
Been thanked: 84 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by lyizb »

Thanks for information about your system. 20 years now--wow, talk about your early adapters.

To your specific question, each mini-panel is directly loaded with a small 6-LED 12V module as shown in the photo above. There is no tracking and no battery--it is all measurement of instantaneous output. (I didn't have 5 identical 12V LEDs, so two if them are different, which no doubt accounts for some of the variation in level which the chart shows.)

In Nova Scotia, I'm happy to have been paying in my electric bill to support the early adapters here who were able to get an annual "net metering" rate, which has meant that they are able to get in October, November, and December electricity without charge in the amount of their excess generation over the summer. I have a friend who essentially pays nothing from about April through the end of the year.

But this means that the utility (Nova Scotia Power) is giving them free electricity in the Fall for which they would normally be paid $.16 per kWh--essentially in the summer they are paying these solar customers $.16 for electricity which only costs them 4 or 5 cents to generate. It's not a program which can be sustained if there is broad adaptation of solar panels.

So I personally want to make my payback calculations based on getting back no more than what the utility would pay if it had to generate that electricity itself--maybe 4 cents per kWh. And in fact, I don't really care if I give them any excess provided I am able to use the majority of what is generated even in the wintertime to satisfy most of my needs.

But tariffs of 165%, sheesh.
BeanieBots
Posts: 522
Joined: Tue Jun 21, 2022 2:17 pm
Location: South coast UK
Has thanked: 292 times
Been thanked: 163 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by BeanieBots »

[Local Link Removed for Guests] wrote: [Local Link Removed for Guests]Mon Sep 02, 2024 12:57 pm But tariffs of 165%, sheesh.
We have similar. I did some work for a solar company a few years back but they couldn't make anything profitable because export to the States was 150% back then. We now have a new government that is raising taxes on everything, so heaven knows what will come in their budget next month :twisted:
Only a few years left on my 25 year plan, so my 57p/kWhr will probably drop to the current rate of 3p/kWhr.
To be honest, the deal I got at that time was insane but they were desperate at the time for early adopters and I'd recently been made redundant so had a lump sum ready to invest. (it does nicely as a suplementary pension!, especially as They've just scrapped the winter fuel allowance for us old farts)

I think you might have a good excuse to try out the Annex PID system.
No need to go full-on MPPT, simply control the VOLTAGE of the panel output by varying the load (pwm into a resistor or even a battery) and monitor the load current to get power. There is only a slight droop of panel voltage for max power at low light, so no need to compensate but you could if you really wanted to by using a lookup table or maybe even a simple y=mx+c linear compensation.
lyizb
Posts: 241
Joined: Fri Feb 12, 2021 8:23 pm
Has thanked: 121 times
Been thanked: 84 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by lyizb »

57p/kWhr! That would certainly give me a short payback time. I hope that was a special feed-in tariff fo early adapters and not the normal retail rate for homeowners (which is what you would get in Nova Scotia--$.16CAN).

In the U.S. you could now buy 5.3kW in panels for $1,650USD (exclusive of tax and shipping):
https://signaturesolar.com/preorder-ada ... cial-gain/

I don't think it would be worth fiddling with a PID system on the tiny 20W panels I'm now monitoring, but it might be informative with regard to the two 100W paralleled panels I have mounted doing nothing--but I would have to be guided as to what I was attempting to do, and how to go about it. I could use it to monitor this nominal 72W 12V 4x6 LED automotive spotlight: https://www.aliexpress.com/item/1005006431960883.html

I have ordered a bunch of 4.8W 16-LED 12V G4 LEDs and will replace the varying LEDs which the panels I'm now monitoring use, so I'll have a better baseline. I'll also add another panel facing east and replace the one which is of a different type.

But so much to be done--I still have remainders from my May todo list.
User avatar
PeterN
Posts: 642
Joined: Mon Feb 08, 2021 7:56 pm
Location: Krefeld, Germany
Has thanked: 297 times
Been thanked: 360 times
Contact:

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by PeterN »

My experience with Solarpower is nowhere near as sophisticated as yours ... but maybe my report is a nice addition from a different region but from a similar latitude.

I initially experimented with a 50W panel for some time. This was used to buffer a 240W DIY power bank so that I could charge all my USB-powered battery devices independently of time. I charge the batteries to a maximum of 80%.
This worked surprisingly well and the iPads and iPhones are always reliably charged.

I had a little remarkable intermezzo with four 180W-Panels and a cheap Chinese no-name inverter that died with a power short circuit at high noon at the very first sunny spring day when the output power reached about 400W. I was not the only one with that inverter experience - I read later.

At the latest when VAT and customs duties on balcony power plants (i.e. solar panels, inverters and associated devices) were set to zero in Germany, these systems also became very interesting in terms of availability and price. Today, you can even buy ready-to-assemble 840W complete systems from €300 at DIY stores or discounters, which can be connected directly to the 240V power grid via a household socket.
You are allowed to generate a maximum of 800W yourself and then can feed all the unused power into the grid for 8ct/kWh. Of course, the meter balances the incoming and outgoing power on the three phases. Unfortunately, however, it has a backstop :-(, because the price for a kWh from the grid is around 33ct.

As I live on the fourth floor at 52 degrees latitude and only have a south-west facing balcony, I purchased 4 lightweight (2.5kg), flexible, slightly smaller 180W solar panels. These are mounted vertically on the screens on the balcony grille. This means easy installation, no wind load and no risk of heavy glass and metal panels falling down, etc.
The inverter now is an 800W type (AP-Systems EZ1M) with two separate MPPT controllers between 26V and 50V. So I connected two panels in series at each port. The inverter has a nice API, but I haven't used it productively yet, as the web interface actually tells me nearly everything I want to see.
I can see that I now get a little less power (around 350W) in summer when the sun is very high than in spring, as the solar panels are vertical. But that's good, as I can reliably get enough power from the system early in the day and also in spring to cover the household's basic consumption during the day. I gave away a maximum of 10% of the power to the public grid.

At the same time, I also draw a maximum of 25W to charge my power bank directly from the solar panels.
There is an Annex powered ESP32 in the power bank that wakes up briefly at the push of a button and time-controlled and then sends me the charge status of the batteries as an email. I use the built-in ADC for this and have experimentally corrected the ADC curve around 4V input (then resistor divided by 2 )

The whole thing is a lot of fun from a technical point of view and certainly makes ecological sense. The measurement data shows that the costs will be amortised after around 2.5 years, which is fine, but was not the main reason for the construction.
IMG_5725.jpeg
You do not have the required permissions to view the files attached to this post.
BeanieBots
Posts: 522
Joined: Tue Jun 21, 2022 2:17 pm
Location: South coast UK
Has thanked: 292 times
Been thanked: 163 times

Re: Current monitor for mini-solar panels (18V, ~20W)

Post by BeanieBots »

As everyone has posted a picture I felt left out. 8-)
So here's mine. Sorry, but it's the best I could get from Google Earth.
image.png
I too get less in summer than late winter/early spring.
Not so much due to angle but the skys are always clearer and colder panels produce more power.
You do not have the required permissions to view the files attached to this post.
Post Reply