Great Deal! Get Instant $10 FREE in Account on First Order + 10% Cashback on Every Order Order Now

Fall 2021 EEE 465/591: Photovoltaic Energy Conversion C. Honsberg, M. Goryll The four “Mini Projects” are designed to lead you toward being able to analyze and evaluate the performance of a...

1 answer below »
Fall 2021 EEE 465/591: Photovoltaic Energy Conversion C. Honsberg, M. Goryll
The four “Mini Projects” are designed to lead you toward being able to analyze and evaluate the performance of a stand-alone Photovoltaic installation and enable you to make design choices based on customer input. The Mini Projects will help you in developing your Final Project idea and you can fall back on the calculations you performed for those Mini Projects.
Mini Project 1 will help you to answer the question “What about the amount of energy we can harvest at a specific point on Earth on a given day of the year?”
The goal of this project is to become familiar with several aspects of solar radiation needed to calculate the performance of a solar cell and to calculate and design a PV system. In addition, Project 1 is intended make sure that you can set up a viable programming approach for later projects, in particular for the final project. For these reasons, Project 1 is a little different than the others, focused more on programming. The project will read in a solar radiation file, perform some calculations from a library file with the data you read in, and then plot the data in various ways.
All the programs in the mini projects are cumulative, so while the first project appears fairly straight forward – read an input file, use a library file, and different types of plots – the code will be used for all the later projects, so it is very much in your interest to comment your code and make it user friendly. You absolutely do not want to be hunting through all the details of your code 3 months from now trying to find the name of a variable to pass to a function for your final project.
Any programming language is acceptable for the projects. If you are familiar with a programming language, by all means use it. We will be providing programming templates and basic support for Python. By some metrics, Python has become the most taught and used programming language. There are many programming routines and support for Python. Importantly, there is substantial graphing and user interface support. Nevertheless, all the projects have been successfully done in everything from assembly language to Excel, and there are a few more detailed notes about more common programing approaches below.
All of the projects, including the final project can be done in Excel. Excel is very useful in providing a check and quick calculations. However, several of the later mini-projects involve optimization, something that is often inconvenient in Excel. Often, I have found that students using Excel end up doing the optimizations by “hand”, changing values in Excel manually. This becomes increasingly cumbersome for the final project. Overall, while the Excel “calculators” are useful, I recommend that Excel is a check and a supplement rather than the full program.
Excel, in addition to the formula-based calculations that are most commonly used, also has programing in Visual Basic. Visual Basic in Excel is a fully functioning programming language, and if you are familiar with Visual Basic in Excel, then this is a perfectly acceptable route, and one that makes graphing results relatively easy and very portable.
Matlab is among the most commonly student-used programming languages. However, it is often less commonly used after graduation, as the licenses for non-students are relatively high. Nevertheless, I would estimate that historically many of the student projects are submitted in Matlab. We will not provide
Fall 2021 EEE 465/591: Photovoltaic Energy Conversion C. Honsberg, M. Goryll
programming templates for solar radiation for Matlab, but there are many available, and Matlab is perfectly acceptable for programming all the projects.
The decision of which programming approach is often revolving around the support for graphing and other input/output functions. This is the reason Excel is commonly used; it is fairly easy and straightforward to graphically examine the outputs. Python has extensive support for graphs and I/O, as does Matlab. In the end, it is not uncommon to spend more time on the graphing, reading files, exporting data, etc, so this should factor very heavily in your decision.
A final note is that you do not have to use the same programming language in all the projects or even portions of the projects. Historically, some students have made programming languages read output Excel files, or other combinations. I have found that there is quite a bit of fiddling in this approach to get the formats to match. It is a very flexible approach but be warned that it is typically been very “buggy” and fairly time intensive to get different parts of the code to talk to each other.
You should prepare a report in which you briefly describe your approach to the problem and include your outputs (numeric calculations, plots). In addition, submit the source code of your programs (Excel sheets, Python code).
The goal of the first mini-project is to read a solar radiation file for a particular location containing at least hourly solar radiation data as well as other location information, such as temperature. Your program should:
(1) Read a data file with solar radiation data in it (see later notes on solar radiation data sets).
(2) Calculate the position of the sun for every hour of the year (or whatever time period matched the solar radiation data).
(3) From (1) and (2) above and the angles of a PV module, calculate the power normal to the module for every hour of the year
(4) Integrate over a given time period to find the energy produced in a year (or month, or day, or whatever time period).
Nearly every PV system calculation starts with a solar radiation data set. As such, there are several places to get the data. For the US (and also includes other countries such as India and Vietnam). The types and details of solar radiation datasets are covered more in other classes (PV Systems); here we use a dataset called TMY3 which uses ground-based measurements for 273 locations in the US. We have already downloaded all the TMY3 data and have it in .csv files, so you don’t have query the solar radiation database. However, depending on your final project choice, you may want to use the radiation database. European data is given at: https://ec.europa.eu/jrc/en/pvgis . They also have a TMY tool and other ways to get solar radiation data.
Fall 2021 EEE 465/591: Photovoltaic Energy Conversion C. Honsberg, M. Goryll
1. Read the TMY data for a location of your choice from the given file and demonstrate that your program reads the data correctly by plotting the direct, diffuse and global radiation for every hour of the year. Make sure to label the location. In order to get credit for this part, you need to change something in the plot compared to the plot from the shell code. (3 pts)
2. Calculate the position of the sun (azimuth and elevation angle) for every hour of the year.
a. Write down the equations for azimuth and elevation and do a hand calculation for the location of your TMY data at one hour. (2 pts)
b. Demonstrate your code calculates the azimuth and elevation by plotting the path of the sun across the sky for one day of the year (note this is a polar plot). In order to get credit for this part, you need to change something in the plot compared to the plot from the shell code. (2 pts)
We have given you some of the calculations in Python shell codes and library. (You do not need to use these; sometimes using someone else’s program is harder than programming it yourself. However, the equations require attention to details – you need pay attention to signs, if the angles are in the correct quadrant when you take inverse trig functions and the difference between radians and degrees.)
3. In your code,
a. Calculate the normally incident solar radiation a tilted surface for every hour of the year. You can use whatever tilt angle you like; good default values in the Northern Hemisphere are module tilt = latitude of your location, azimuth = XXXXXXXXXXpt)
b. Calculate the total power density on your tilted surface over the year. (1 pt)
c. Plot the solar radiation power density on your module for every hour of the year and put the total over the year in the graph heading. (1 pt)
4. Choose one of the following calculations or plots. (5 pts).
i. Surface color map of solar radiation on a polar plot with azimuth and elevation.
ii. “Heat map” of solar radiation vs day of year and hour of the day that is different from the provide Python shell code.
iii. Calculate and plot the total solar radiation in each month or day of the year rather than each hour for three different tilt angles on the same plot.
iv. Calculate and give the capacity factor for each month of the year.
v. Calculate and plot the fraction diffuse radiation for each month of the year.
vi. Trace the path of the sun on a polar plot (azimuth, elevation) for the same time of day for every day of the year.
vii. Query the national solar radiation database and get data directly from it.
viii. Number of days in a row that have
ix. Difference between calculated “ideal” radiation and measured radiation
Fall 2021 EEE 465/591: Photovoltaic Energy Conversion C. Honsberg, M. Goryll
If you do not already have Python, you will need to download it. You can download a basic version at:
https://www.python.org/ Install version 3.9.6, but other versions 3.6 or higher work as well.
If you are looking for an Integrated Development Environment (IDE), there are several options for example Spyder https://www.spyder-ide.org/. Installation can be quite involved and students in the past have used Anaconda to install the IDE of their choice. https://www.anaconda.com/
Another option is to use Jupyter Notebooks https://jupyter.org/ for you python code. This also you to combine readable text and executable code in a document. Google Colab is another option if you like Google Docs. https://colab.research.google.com/notebooks/intro.ipynb
We have noticed some rare cases in which code will work on one platform and not the other; I will keep a computer with the Spyder editor and a Linux computer with command-line Python. I will accept Jupyter files as well (they are ideal for reports, etc).
After you have installed python, you will need to download the sample files and add the library file photovoltaic. I recommend putting all the python code (libraries, etc) all in the same directory for simplicity.
To install the library file, go to the command prompt (cmd) and type:
pip install photovoltaic
If you don’t want to install the library file, we don’t need that many functions from it for this assignment.
You can also paste them into you code from the code snippet on canvas.
Answered 4 days After Sep 12, 2021

Solution

Karthi answered on Sep 17 2021
144 Votes
updated/solar_radiation.pdf
The ultimate aim of this assignment is tracking the position of the over a period of time at a given time
ange in the csv file. The position of the sun and all other extra information are given in the csv file. We
need to individually assign a variable as list to row in the csv file.
So all the columns in the csv file are assigned to a variable as follows,
station, GMT_offset, latitude, longitude, altitude = np.genfromtxt(fname, max_rows=1, delimiter=",",
usecols=(0, 3, 4, 5, 6))
location_name, location_state = np.genfromtxt(fname, max_rows=1, delimiter=",", usecols=(1,2),
dtype= np.str)
ETR, GHI, DNI, DHI, ambient_temperature = np.genfromtxt(fname, skip_header=2, delimiter=",",
usecols=(2,4,7, 10,31), unpack=True)
From the above code, only few variables are assigned, so not all the columns are called.
Date, Time, ETR, ETRN, GHI, GHI_source, GHI_uncert, DNI, DNI_source, DNI_uncert, DHI, DHI_source,
DHI_uncert, GH_illum, GH_illum_source, Global_illum_uncert, DN_illum, DN_illum_source,
DN_illum_uncert, DH_illum, DH_illum_source, DH_illum_uncert, Zenith_lum, Zenith_lum_source,
Zenith_lum_uncert, TotCld, TotCld_source, TotCld_uncert, OpqCld, OpqCld_source, OpqCld_uncert,
Dry_bulb, Dry_bulb_source, Dry_bulb_uncert, Dew_point, Dew_point_source, Dew_point_uncert,
RHum, RHum_source, RHum_uncert, Pressure, Pressure_source, Pressure_uncert, Wdir, Wdir_source,
Wdir_uncert, Wspd, Wspd_source, Wspd_uncert, Hvis, Hvis_source, Hvis_uncert, CeilHgt,
CeilHgt_source, CeilHgt_uncert, Pwat, Pwat_source, Pwat_uncert, AOD, AOD_source, AOD_uncert ,Alb
,Alb_source, Alb_uncert, Lprecip_depth, Lprecip_quantity, Lprecip_source, Lprecip_uncert, PresWth,
PresWth_source, PresWth_uncert = np.genfromtxt(fname, skip_header=2, delimiter=",", unpack=True)
All the columns are called and assigned to unique variable.
Simple graph of DNI from TMY
Solar path normal generated valued
Heat map generated from the path of the sun observed from the above solar path
All these above graphs are generated with from csv file values combination with the auto generated
andom values using numpy
Following graphs are generated with the values from the csv file.
updated/solution.ipyn
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import photovoltaic as pv\n",
"from numpy import radians as rad\n",
"import pandas as pd\n",
"import csv"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 3,
"source": [
"module_azimuth = 180\n",
"module_elevation = 33"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 4,
"source": [
"def elev_azi(declination, latitude, local_solar_time):\n",
" \"\"\"Return the elevation (degrees) and azimuth (degrees)\"\"\"\n",
" hour_angle = 15.0 * (local_solar_time - 12.0)\n",
" elevation = arcsind(sind(declination) * sind(latitude) + cosd(declination) * cosd(latitude) * cosd(hour_angle))\n",
" azimuth = arccosd(\n",
" (cosd(latitude) * sind(declination) - cosd(declination) * sind(latitude) * cosd(hour_angle)) / cosd(elevation))\n",
" # the multiplication by 1.0 causes a single value return for single inputs, otherwise it returns an a
ay of one element\n",
" azimuth = np.where(hour_angle > 0, 360.0 - azimuth, azimuth) * 1.0\n",
" return elevation, azimuth"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 5,
"source": [
"def sun_position(dayNo, latitude, longitude, GMTOffset, H, M):\n",
" \"\"\" return the position of the sun as a elevation and azimuth given\n",
" latitude, logitude and the GMTOffset, \"\"\"\n",
" EoT = equation_of_time(dayNo)\n",
" TimeCo
ection = time_co
ection(EoT, longitude, GMTOffset)\n",
" local_solar_time = H + (TimeCo
ection + M) / 60.0\n",
" elevation, azimuth = elev_azi(declination(dayNo), latitude, local_solar_time)\n",
" return elevation, azimuth"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 6,
"source": [
"def equation_of_time(day_no):\n",
" \"\"\"return the equation of time (minutes)\n",
" given the day number \"\"\"\n",
" B = 360.0 / 365.0 * (day_no - 81.0)\n",
" EoT = 9.87 * sind(2 * B) - 7.53 * cosd(B) - 1.5 * sind(B)\n",
" # print('EoT', EoT)\n",
" return EoT"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 7,
"source": [
"def time_co
ection(EoT, longitude, GMTOffset):\n",
" \"\"\" Return the time co
ection in minutes\n",
" given the location longitude and the GMT offset (hours)\"\"\"\n",
" LSTM = 15.0 * GMTOffset\n",
" TimeCo
ection = 4.0 * (longitude - LSTM) + EoT\n",
" return TimeCo
ection"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 8,
"source": [
"def elevation(declination, latitude, local_solar_time):\n",
" \"\"\" Return the elevation angle of the sun (degrees)\n",
" given declination (degrees), latitude (degrees) and hour angle of sun (hours) \"\"\"\n",
" hra = 15.0 * (local_solar_time - 12.0)\n",
" return arcsind(sind(declination) * sind(latitude) + cosd(declination) * cosd(latitude) * cosd(hra))"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 9,
"source": [
"fname = '724460tya.csv'\n",
"print(fname)"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"724460tya.csv\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 10,
"source": [
"station, GMT_offset, latitude, longitude, altitude = np.genfromtxt(fname, max_rows=1, delimiter=\",\", usecols=(0, 3, 4, 5, 6))\n",
"location_name, location_state = np.genfromtxt(fname, max_rows=1, delimiter=\",\", usecols=(1,2), dtype= np.str)\n",
"ETR, GHI, DNI, DHI, ambient_temperature = np.genfromtxt(fname, skip_header=2, delimiter=\",\", usecols=(2,4,7, 10,31), unpack=True)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 11,
"source": [
"# Print Information about the TMY Data\n",
"print('Location information:')\n",
"print(' station number: ', station)\n",
"print(' Station Name and State: ', location_name, \" \", location_state)\n",
"print(' GMT: ', GMT_offset)\n",
"print('Latitude (degrees): ', latitude)\n",
"print('Longitude (degreees): ', longitude)\n",
"print('Altitude (m): ', altitude)\n",
"print('DNI', DNI)\n",
"print('\\n')"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Location information:\n",
" station number: 724460.0\n",
" Station Name and State: KANSAS CITY INT'L ARPT MO\n",
" GMT: -6.0\n",
"Latitude (degrees): 39.3\n",
"Longitude (degreees): -94.717\n",
"Altitude (m): 298.0\n",
"DNI [0. 0. 0. ... 0. 0. 0.]\n",
"\n",
"\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 12,
"source": [
"print(' Latitude : {:.1f}°, Longitude: {:.1f}°, \\n Module tilt angle: {}°, Module azimuth: {}°'.format(\n",
" latitude, longitude, module_elevation, module_azimuth)) "
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Latitude : 39.3°, Longitude: -94.7°, \n",
" Module tilt angle: 33°, Module azimuth: 180°\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 13,
"source": [
"# details for the plots\n",
"details4plot = ' lat: {:.1f}°, long: {:.1f}°, Module el: {}°, az: {}°'.format(\n",
" latitude, longitude, module_elevation, module_azimuth)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 14,
"source": [
"# plot the TMY data. Note we cheated and didn't specify an x-axis, since it is just numbered from 0 to 8760.\n",
"# Can't do this if time interval other than 1 hour\n",
"plt.figure('DNI from TMY')\n",
"plt.title('DNI from TMY')\n",
"plt.xlabel('hours in the year')\n",
"plt.ylabel('direct normal i
adiance')\n",
"plt.plot(DNI)"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[]"
]
},
"metadata": {},
"execution_count": 14
},
{
"output_type": "display_data",
"data": {
"image/png": "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
d67Pms27qT/gOHM3L2mtjzqpZ
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
2kiotC4upxIvdupP
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",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 15,
"source": [
"module_elevation = latitude"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 16,
"source": [
"# ********************* Calculating solar angles ********************************\n",
"# The big part of these calculations is getting the day and hour co
ect.\n",
"\n",
"# Some ways to get the day and hours into an a
ay (1) read date and time from data file into an a
ay that has day number and then hour of the day;\n",
"# (2) Generate an a
ay with day number and hour of the year. \n",
"\n",
"# The following generates two a
ays, each with 8760 data points. The hours of the day a
ay has a repeating sequence of hours\n",
"# We generate the hours 1 to 24 365 times. So the a
ay goes 1,2, ... 24, 1, 2, 3, ... 24, Total 8760 data points.\n",
"hours = np.arange(1,25) # Generate an a
ay with the values 1 to 24\n",
"hour_of_day = np.tile(hours,365) # Generate an a
ay with the hours 1 to 24 repeated 365 times\n",
"\n",
"# Create an a
ay day 1 is repeated 24 times, day2 is repeated 24 times etc, so have 1 24 times, then 2 24 times,etc.\n",
"days = np.arange(1,366)\n",
"day_no = np.repeat(days,24)\n",
"\n",
"print(hour_of_day)\n",
"print(day_no)"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[ 1 2 3 ... 22 23 24]\n",
"[ 1 1 1 ... 365 365 365]\n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 17,
"source": [
"elevations, azimuths = pv.sun.sun_position(day_no, latitude, longitude, GMT_offset, hour_of_day, 0)\n",
"fraction_normal_to_module = pv.sun.module_direct(azimuths,elevations,module_azimuth,module_elevation)\n",
"DNI_module = DNI * fraction_normal_to_module\n",
"diffuse_module = DHI * (180 - module_elevation) / 180\n",
"total_module = diffuse_module + DNI_module"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 18,
"source": [
"plt.figure('solar_path_' + str(latitude), figsize=(10, 10))\n",
"ax = plt.subplot(111, projection='polar')\n",
"ax.plot(rad(azimuths),90.0-elevations, marker='.', linestyle='None')\n",
"ax.set_theta_zero_location('N')\n",
"ax.set_theta_direction(-1)\n",
"ax.set_rmax(90)\n",
"ax.grid(True)"
],
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here