Monday 18 November 2019

Back to Python

This post was for year 6 and 7 students taking a short Python class in late 2019.

(For more Python, see an earlier blog post.)
Dec 3rd 

For the last lesson of this short course, let's draw a Christmas tree!  Without any graphics, we might just use the '*' symbol.   For example:

# almost a Xmas tree!! 
height = 10
for wid in range(1,10):
    print((height-wid)*' '+wid*'*') 

gives .... 
a very simple Xmas Tree


Can you understand how this program works?  Can you improve this code?  eg a better shape, add a tree trunk,  add a snowman! or snow!!  There might be a prize for the best solution.








Nov 25th
After the class today, hopefully everybody can run the Python Editor/Compiler app on their Chromebook and save files to their Google Drive - let us know if you can not do this!

Today we discussed summing integers from 1 to N in a "for loop" and we also showed the Maths trick that gives the formula N*(N+1)/2 as the summation result.   Lastly we looked at the bottom right-hand example in my handout from last week, that finds factors of a number.   eg

# find the factors of a number
num = 12
for j in range(2, num-1):
    if int(num/j) * j == num:
    print j, ' is a factor of ', num

…. 
2 is a factor of 12
3 is a factor of 12
4 is a factor of 12
6 is a factor of 12

The key statement here is the test that divides two numbers, chops off any remainder from the division, and then multiplies by the second number (the divisor) to check if the result is equal to what we started with!   If you don't follow this, just try it out, eg 


int(12/5)*5
10
int(12/4)*4

12

int(12/5)*5 == 12
False


Now, instead of using the test "int(num/j) * j == num",  how about using Python's % (remainder) operator?   For example:
12%5
2
12%4

0

OK - so try to change the code so that it uses a remainder test to check if the second number is a factor of the first number.  You might also edit the code so that it will give an extra message when there are no factors (i.e. variable "num" is a prime).   We will look at this in the next lesson.


Nov 18th
After further investigation, it seems that the best approach with Chromebooks might be to use the Python Compiler Editor app (which should now be installed on your laptops).

This app should allow Python 2 code to be edited and saved on your Google drive.  Initially you might start with a very simple program stored on my drive at this location:
https://drive.google.com/drive/folders/146FxzhtjIbP4KeEtpPEG1KX49HQwO_h4?usp=sharing

From the menu items at the bottom of the app screen, try to open the file listed above (copy and paste the long address), or you might start a new file and copy the code from below.)   Try running the code - does it work?  Do you understand how it works?  Make some changes (e.g. can you use a "for" or "while" loop to repeat the last 4 statements many times?


# maths drill
import random

n1 = random.randint(1,10)
n2 = random.randint(1,10)
prod = n1 * n2
print(str(n1)+" * "+str(n2)+" = "+str(prod))

Save the final program on your own Google drive, using the SaveAs button.  Hopefully this approach will let you edit, run and save Python programs!

If the above works, here's nice homework problem.  Please write a program to add up all the (whole) numbers from 1 to 100 and print the result.  We will discuss this next week.

Dr Bill

Tuesday 21 May 2019

Climate Change: Time to Act


Surprisingly, the dangers associated with Climate Change are still poorly appreciated by the general public. Some media outlets and internet sites continue to provide little (or biased) information on this topic. This post tries to very briefly clarify why we need to take urgent action and provides links to some reliable sources.

Carbon Diode Concentration, from ice-core records and recent observations. 
Greenhouse Effects

First, let's just look at the change in CO2 concentration, say during the last 1000 years.  The recent increase to over 400 parts per million is dramatic.  Increased concentrations of this (and other) greenhouse gases since the Industrial Revolution have resulted in average temperature increases of about 1.1 degrees C.  This rise continues at about 0.2 degrees per decade.  The IPCC has recommended trying to limit the temperature rise to 1.5 degrees.  



We are already observing the effects of climate change in rainfall patterns, extreme weather events, sea-level rise, forest fires, etc and these will obviously get worse at the greenhouse gas levels rise.  IPCC points out that the effects are significantly worse when the temperature rise reaches 2 degrees.  Their models indicate that a 45% reduction in emissions is required by 2030, (from 2010 levels), to limit warming to about 1.5 degrees, with net 0% emissions by 2050.  To limit the average rise to 2 degrees requires a 25% reduction in emissions by 2030, increasing to zero emissions by 2050.  Furthermore, the general climate models can not accurately predict various tipping points that may cause abrupt worsening of global warming effects. At present it seems that some indicators of climate change(e.g. reduction in Arctic ice cover)  are developing more rapidly than IPCC models predict.  Beyond 1.5 degrees it's increasingly difficult to predict the socio-economic effects of climate change, but they are likely to be dire.   

On the present trajectory, within one generation (about 20 years) we will reach the 1.5 degree limit.  A huge effort is required in many areas, including energy generation, transport, agriculture and manufacturing, to cut greenhouse gas emissions.  Even more effort is needed if we delay.  Solutions do exist!

To quote from a recent TAI report:  
Immediate and sustained action to reduce greenhouse gas emissions is needed is to avoid the most dangerous climate impacts. The cost of action should not be exaggerated to try to distract from the large and increasing cost of inaction. 

Climate Science

I'm not a climate scientist but I understand the scientific method (e.g. my previous posts on this site).  Please understand that climate science uses exactly the same approach that characterises all our technical progress since ancient history.  Hence if (say) you use a smart phone and don't believe it works by magic, you should believe in climate science!

Useful Links 



Tuesday 12 February 2019

Measuring Upper Atmosphere Radiation

Aims

Last Saturday AREG flew another high altitude balloon for the SHSSP19 program  As well as two imaging payloads using the Wenet downlink, this year we decided to measure ionising radiation during the balloon flight.  Cosmic radiation levels increase as we ascend from sea level, losing the protection of our atmosphere.  Cosmic rays (mainly high energy particles from our sun and beyond) and gamma rays (high energy photons) present significant hazards to humans (and electronics) in space.  Our experiment was designed to repeat measurements of charged particle distribution in the atmosphere first carried out by Georg Pfotzer in the 1930s.

We used two radiation detectors on the Horus-52 flight.  The RD2014 solid state (SS) detector uses a set of PIN diodes (plus amplifier and limiter) that are shielded from visible light but respond to high energy photons or particles.  This product has now been superseded  but the manufacturer has very similar modules.  A Geiger Muller tube was also used to measure ionising radiation.   This requires a high voltage power supply, but fortunately uses minimal power.

Hardware

The GM schematic is a synthesis of various circuits from the web and was fairly easy to build.  An oscillator drives the transistor used in the charge pump.  The basic operation is easy to describe. Current starts to flow through the 10 mH inductor when the transistor is turned on.  But inductors don't like sudden changes in current.  The voltage across the inductor is proportional to the derivative of the current (V = L dI/dt), so when the transistor turns off we get a large voltage spike. This turns on the first diode and current flows into the high voltage capacitor.   A couple more diodes and capacitors make a voltage doubler.  Since the regulation of this power supply is poor, a series of zener diodes are used to stabilise the voltage (before doubling).  The voltage applied to the detector is a little over 450V.

The GM tube itself is filled with an inert gas and normally acts like a good insulator.  However a high energy particle or photon ionises some gas molecules and initiates a discharge from anode to cathode.  In our circuit this small current is amplified by a transistor and allows current to flow briefly from the (raspberry pi) 3V supply to flash a LED and drive a falling edge to an IO pin of the RPI, causing a interrupt.  The solid state detector output was connected to another GPIO pin of the RPI.


 The left hand figure shows the overall arrangement.  The "radiation" payload in the upper half of the figure communicates via WiFi with the Wenet payload in the lower half.  High energy particles detected by either of the sensors are counted by the radiation RPI zero. Cumulative counts are stored locally on the uSD card, and also downlinked in the Wenet telemetry stream (with the camera images).






Software

Existing Wenet code, allowed a fairly simple python script to be used on the radiation payload to count interrupts and send the current count values each few seconds via a UDP packet.  The Wenet RPI was configured to act as a WiFi Access Point (AP), collecting these secondary payload packets for inclusion in the downlink telemetry within the amateur radio 70 cm band.   On the ground, the secondary packets can be readily extracted and stored for real-time processing and display.

The two payloads are separated by some metres on the balloon train so WiFi seemed like a good method for these boxes to communicate.  We only found late in the testing that the RPI AP software was not very reliable. In addition the Wenet RPI is already heavily loaded and the AP processing can cause the processor to overhead.  Some last-minute code (mainly from Mark, VK5QI) for AP suspension and restarting overcame these issues.





Results 


The final payload is shown on the right.  From the left, the GM tube, HT supply and RPI zero are mounted on a baseboard, with the RD2014 near the bottom edge.   Three Lithium AA cells provide power to a small up convertor, as the RD2014 needs to run at 5V and this also suits the RPI. All of this fits in a foam box to provide insulation.



The first figure below shows the results from data collected on the uSD card and recovered after Horus 52 had landed.  The blue and green plots are cumulative radiation counts from the GM tube and SS detectors respectively.  The GM tube is more sensitive (much larger number of counts), probably due to its larger area. 
























Real-Time Radiation Counts versus Altitude
PostScript:    RadioLab has a podcast in May 2019 on how an election count in Belgium was increased by 4096 due to a bit flip caused by cosmic ray. 

To understand the variations in radiation during the flight, the plots on the right show counts each 2 minute period. It can be seen that the radiation levels  vary significantly during the flight.









To get the best picture of radiation versus altitude we can use data collected in real-time during the flight.   While the stored data in the payload didn't contain any altitude information, the ground station software stored altitude readings from the Wenet GPS, as it collected radiation data packets.  This allows the radiation counts per 120 seconds to be plotted versus altitude.  Now the characteristic "Pfotzer Maximum" can be seen more clearly around 15 to 20 km.