tag:blogger.com,1999:blog-59523201916154967302024-03-18T17:55:23.943+00:00The Beginner ProgrammerShared thoughts, experiments, simulations and simple ideas with Python, R and other languagesMichttp://www.blogger.com/profile/18151225177833588981noreply@blogger.comBlogger133125tag:blogger.com,1999:blog-5952320191615496730.post-53775846851417646702019-12-23T10:07:00.000+00:002019-12-23T11:27:01.087+00:00Electromagnetic forces between busbars<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
In some engineering applications, be it electrical energy transmission, distribution or even in the simple case of use of electrical energy, copper busbars are used in place of cables.<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
<a name='more'></a><br />
Typically, copper busbars are used when high currents at (relatively) low frequency need to be delivered to some load. Their use is favoured maily by the possibility of having a large conductor section and/or lower stray capacitance compared to an insulated cable. Typically insulation is ensured by air in these cases. The use in the 50/60 Hz AC range is acceptable due to skin depth being about 9 mm @60 Hz.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
During the design phase of an electrical system using cables and/or busbars carrying high currents, it may be of interest, for mechanical reasons, to calculate the maximum force acting between two busbars placed near each other. Indeed, when two conductors carry current, due to Lorentz's force, they experience a force acting on them. If we consider two raw copper cables parallel to each other on a given plane and carrying a constant current I, the force acting on them is equal to:<br />
<br />
$$F' = \frac{\mu_0}{4 \pi}\frac{I^2}{d}$$<br />
<br />
Where<br />
<ul>
<li>$F'$ is the force per unit length [N/m]</li>
<li>$\mu_0$ is the magnetic permeability of vacuum [H/m]</li>
<li>$I$ is the current flowing in each conductor [A]</li>
<li>$d$ is the distance between the conductors [m]</li>
</ul>
The force will be repulsive or attractive depending on whether the current direction is opposite or the same, respectively.<br />
<br />
In the general case, the conductor will not necessarily have a circular section, such as in the case of busbars. As a consequence, a corrective coefficient $k$ can be used to take into account the different geometry and obtaining the following formula<br />
<br />
$$F' = k \frac{\mu_0}{4 \pi}\frac{I^2}{d}$$<br />
<br />
This corrective coefficient depends on the geometry of the conductors and in the case of rectangular section copper bars can be obtained from Dwight's chart<br />
<br />
<img alt="" height="320" src="data:image/png;base64,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" width="302" /><br />
<br />
This chart (or similar ones) are usually found in application notes given by manufacturers.<br />
<br />
The combined use of the formula and the chart allows to calculate the maximum electrodynamic stress that could occur in the system. However, if a better picture of the system is needed, finite element simulation can be used to get an even better picture. In the following, both paths are illustrated.<br />
<br />
Consider, for instance, the case presented in the picture below<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
In this case we have<br />
<ul>
<li>A peak current of 800 A in each copper busbar</li>
<li>Width (a) of 6 mm</li>
<li>Height (b) of 60 mm</li>
<li>Depth (L) into the page of 1000 mm</li>
<li>A distance between the centers of the copper busbars of 12 mm</li>
</ul>
Therefore, following Dwight's chart<br />
<ul>
<li> b/a = 10</li>
<li>d/a = 2</li>
</ul>
Which leads to k=0.43 and a force of $0.43*2*10^{-7}*\frac{800^2}{0.012}=4.59\frac{N}{m}$.<br />
<br />
If a finite element simulation is performed using FEMM, a very close result of 4.63 N/m is obtained.<br />
The result can be obtained by simulating the steady state magnetic field when 800 A circulate on each busbar and then integrating J and B over the busbar surface (note that FEMM gives you a result in N, but by setting a depth of 1000 mm it is possible to obtain the force per unit meter, alternatively you can simply divide by the depth of the busbars).<br />
<br />
<img alt="" height="358" src="data:image/png;base64,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" width="640" /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<br />
It may also be of interest to check out the H field from one busbar center to the other (the B field is the same since copper and air have a similar behaviour when it comes to magnetic permeability and B is simply proportional to H through $\mu_0$).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<img alt="" border="0" height="243" src="data:image/png;base64,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" style="cursor: move;" width="400" /></div>
<br />
<br />
<br />
This example was reproduced from [1].<br />
<br />
If you are curious and want to learn more on the topic, I suggest you these two readings<br />
<br />
[1] M. C. Petrescu, L. Petrescu, <i>Electrodynamic forces between two DC busbars distribution systems conductors, </i>2016, U.P.B. Sci. Bull., Series C, Vol. 78, Issue 2.<br />
<br />
[2] J.P. Thierry, C. Kilindjian, <i>Electrodynamic forces on busbars in LV systems</i>, 1996, E/CT, Cahier Technique Merlin Gerin n° 162/p2.Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.comtag:blogger.com,1999:blog-5952320191615496730.post-82395601805126110632019-10-19T22:37:00.000+01:002019-10-19T23:15:24.290+01:00Shaded pole motor magnetic field simulation in FEMMFor a long time I wanted to simulate the electric and magnetic quantities in a shaded pole motor and last week I finally found 10 minutes to dedicate to this activity. I find these motors fascinating for their simplicity and for how they work by using the laws of electromagnetism.
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr54ZdGKyQjCjxr6E2WpT0Ok2LYAlTwutK16kGWZXDelm_mIoL7oyqZycB6Yg8Ob1JsSE8wFRFm8DhURIqTDzD7D_C4xMSI_WN7a7qzRH_4Kj14qXgREgpUDWemog4zgjnwOBGzO00vxc/s1600/ezgif-4-c8c61c6bbba4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr54ZdGKyQjCjxr6E2WpT0Ok2LYAlTwutK16kGWZXDelm_mIoL7oyqZycB6Yg8Ob1JsSE8wFRFm8DhURIqTDzD7D_C4xMSI_WN7a7qzRH_4Kj14qXgREgpUDWemog4zgjnwOBGzO00vxc/s1600/ezgif-4-c8c61c6bbba4.gif" /></a></div>
<br />
Shaded pole motors are a variety of induction motors. They are quite the cheap type of motors: you can usually find them in old washing machines (powering the water pump for example) or even in new white goods where they may be used for periodic (but not frequent) tasks, for instance every 30s for turning a wheel. It is extremely rare to find a shaded pole motor that runs continuously. In the picture below (from Wikipedia) you can find an example of such motors.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcyk4SdnGxtWgL7Og8QCL2OrfGr91fhMvo_WmOjrKOlTDKn0vpshzLwaiJ03mUctm8Iqkwy1gH6l_l-xzVYFiizvNM9lGuwx6JvKzTJNTwTMlwQMsw6C2m78CeK86kRTirrsvKwjRigoY/s1600/images.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcyk4SdnGxtWgL7Og8QCL2OrfGr91fhMvo_WmOjrKOlTDKn0vpshzLwaiJ03mUctm8Iqkwy1gH6l_l-xzVYFiizvNM9lGuwx6JvKzTJNTwTMlwQMsw6C2m78CeK86kRTirrsvKwjRigoY/s1600/images.jpg" /></a></div>
<br />
<a name='more'></a><br />
The advantages of these kind of motors reside mainly in that they are<br />
<ul>
<li>Simple (and hence reliable)</li>
<li>Cheap</li>
<li>Easy to build</li>
</ul>
However, the main disadvantages are that<br />
<ul>
<li>They are quite inefficient. Indeed they waste a lot of energy in the shaded poles (auxiliary) windings which get pretty hot.</li>
<li>They are a bit bulky due to the need of having an iron core.</li>
<li>They generally have low starting torque.</li>
<li>The power factor is generally low contributing to higher copper losses and lower overall efficiency.</li>
</ul>
Before proceeding any further, it is important to lay down the hypothesis of my analysis. The analysis is performed in <a href="http://www.femm.info/wiki/HomePage">FEMM</a> on an actual shaded pole motor. The main hypothesis are those that you can find in most electromagnetics problems, i.e.<br />
<ul>
<li>No saturation of the iron core</li>
<li>Planar geometry</li>
<li>Rotor is blocked</li>
</ul>
As far as the motor rated quantities, in general, the following should be given by the motor manufacturer although it is common for some motor data to be either missing or unknown<br />
<ul>
<li>Rated power $P_n = 16 W$</li>
<li>Rated RMS current $I_n = 0.15 A$</li>
<li>Rated RMS voltage $V_n = 230 V$</li>
<li>Rated speed $\Omega_n = 246 \frac{rad}{s} = 2350 RPM$</li>
<li>Rated frequency $f = 50 Hz$</li>
</ul>
It might be of interest to calculate also other quantities such as<br />
<ul>
<li>Rated torque $C_n = \frac{P_n}{\Omega_n}=0.065 Nm = 65 g cm$</li>
<li>Rated power factor $\cos(\phi_n) = \frac{P_n}{V_n I_n} = 0.46$. <u>Pretty bad </u>(by the way).</li>
<li>Rated peak current $\sqrt{2} * 0.15 = 0.21 A$</li>
</ul>
The geometry of the motor is illustrated in the following figure. The depth is 12 mm.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8phhYBI-fZAL_Y6lNHiHY4fpYqemuyUQJQ9lWR35hp2WN4XTa7yhyphenhyphenZn4OX8BsXRZKTQDdl8Tf8P4QXY49x_JiEUrNQymo4zw4nNrM79CX8j0FP7GdcDIBp5LkVf2kcvho1ubdzzjcxU/s1600/Image+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="467" data-original-width="578" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8phhYBI-fZAL_Y6lNHiHY4fpYqemuyUQJQ9lWR35hp2WN4XTa7yhyphenhyphenZn4OX8BsXRZKTQDdl8Tf8P4QXY49x_JiEUrNQymo4zw4nNrM79CX8j0FP7GdcDIBp5LkVf2kcvho1ubdzzjcxU/s320/Image+2.png" width="320" /></a></div>
<br />
By inspecting the motor, it is possible to calculate the number of turns and other geometrical quantities that may be useful in later calculations<br />
<ul>
<li>Number of turns in the main winding $N = 4500$</li>
<li>Number of turns in each auxiliary winding $N_1 = N_2 = 5$</li>
<li>Rated magnetomotive force $fmm = N I_n \approx 951 A$ (peak value)</li>
<li>Area of iron cross section $A = 22.4*12=268.8 mm^2 = 2.26 * 10^{-4} m^2$</li>
<li>Area of each auxiliary windings cross section $A_1 = \frac{\pi D^2}{4} = 62.3 mm^2 = 0.623 * 10^{-4} m^2$</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/$Image%202[4].png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/$images[3].jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq6cMRrXTuaPcmjzIlmAjPP8k5n2OB1YPunkeZEZgW5iu8E-1Vlu7xokX_P_lDbI_00TzMBb0PB1mbLezd0DqANRl8neb-43YiNbbYpxkDVqMtAbr1i3C8-SNG6gzNVuvEYPxmeo565OI/s1600/motor_shaded_pole.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="496" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq6cMRrXTuaPcmjzIlmAjPP8k5n2OB1YPunkeZEZgW5iu8E-1Vlu7xokX_P_lDbI_00TzMBb0PB1mbLezd0DqANRl8neb-43YiNbbYpxkDVqMtAbr1i3C8-SNG6gzNVuvEYPxmeo565OI/s320/motor_shaded_pole.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
It can be noted that $\frac{A_1}{A} \approx \frac{1}{5}$. Since $V = \omega N \phi$ the flux through the iron core can be calculated easily assuming that no saturation occurs. Indeed<br />
$\hat \phi = \frac{V}{\omega N} = \frac{\sqrt{2} V_n}{2 \pi f N} = \frac{\sqrt{2} * 230}{2 \pi 50 * 4500}=228 mWb$<br />
as a consequence, we have that the peak induction (B) field value is $B_{peak} = \frac{\hat \phi}{A}=1.02 T$ which is a reasonable value for peak B field in iron (still below a typical saturation value of 1.2 T).<br />
The peak value of the emf induced in the auxiliary windings is $V_{1 peak}= \sqrt{2} N_1 \omega \hat \phi = \sqrt{2} N_1 \omega B_{peak} A_1 = V_{2 peak} = 0.1 V$.<br />
<br />
Given the winding resistance of $R_1 = R_2 = N_1 \rho \frac{l}{A_1} = 5*(1.68*10^{-8})\frac{6.28*6.3*10^{-3}}{4*10^{-6}} = 83*10^{-5} \Omega$ we can expect an induced current of about $I_{1 peak} = I_{2 peak}=\frac{V_{1 peak}}{R_1} = 120 A$<br />
<br />
If we assume that no saturation occurs in the iron, then given a sinusoidal voltage applied to the main windings, the current will be sinusoidal as well. Since the magnetomotive force is sinusoidal, the flux is going to be sinusoidal too. Therefore, we have<br />
<ul>
<li>Current in the main winding $i(t) = \sqrt{2} I_n \cos(\omega t) $</li>
<li>Flux in the main iron column $\phi (t) = \hat \phi \cos(\omega t)$</li>
<li>Induced emf $v_1(t) = v_2(t) = – \frac{d}{dt} \phi _1 = V_{1 peak} \sin(\omega t)$</li>
</ul>
It is possible to calculate the value of the currents in the windings at different times. In the following table this is performed for some key time instants. The obtained values can then be inserted in the FEMM software to calculate the actual flux and induction field in the motor as well as the starting torque.
<br />
<table border="1" cellpadding="2" cellspacing="0">
<tbody>
<tr>
<td valign="top">$\omega t$</td>
<td valign="top">$i(\omega t)$</td>
<td valign="top">$i_2(\omega t)$</td>
</tr>
<tr><td valign="top">0</td><td valign="top">$i_{max}$</td><td valign="top">0</td></tr>
<tr>
<td valign="top">$\frac{\pi}{4}$</td>
<td valign="top">$\frac{\sqrt{2}}{2} i_{max}$</td>
<td valign="top">$\frac{\sqrt{2}}{2} i_{2 max}$</td>
</tr>
<tr>
<td valign="top">$\frac{\pi}{2}$</td>
<td valign="top">0</td>
<td valign="top">$i_{2 max}$</td>
</tr>
<tr>
<td valign="top">$\frac{3 \pi}{4}$</td>
<td valign="top">$- \frac{1}{\sqrt{2}} i_{max}$</td>
<td valign="top">$\frac{1}{\sqrt{2}} i_{2 max}$</td>
</tr>
<tr>
<td valign="top">$\pi$</td>
<td valign="top">$-i_{max}$</td>
<td valign="top">0</td>
</tr>
<tr>
<td valign="top">$\frac{5 \pi}{4}$</td>
<td valign="top">$- \frac{1}{\sqrt{2}} i_{max}$</td>
<td valign="top">$- \frac{1}{\sqrt{2}} i_{2 max}$</td>
</tr>
<tr>
<td valign="top">$\frac{3 \pi}{2}$</td>
<td valign="top">0</td>
<td valign="top">$- i_{2 max}$</td>
</tr>
<tr>
<td valign="top">$\frac{7 \pi}{4}$</td>
<td valign="top">$\frac{1}{\sqrt{2}} i_{max}$</td>
<td valign="top">$- \frac{1}{\sqrt{2}} i_{2 max}$</td>
</tr>
</tbody>
</table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/$images[3].jpg" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/$Image%202[4].png" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?rinli=1&pli=1&blogID=5952320191615496730" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
The results of the FEMM simulation for an entire cycle are reported below. As you can see, a rotating magnetic field is generated in the rotor area and during a cycle the field makes a complete revolution. This behaviour can be observed in the GIF I made by using the different simulations accordin to the values in the table. The arrows represent the direction of the B field. Cyan coloured regions indicate 0 T while the light purple regions are close to 1 T (sometimes higher). As it can be seen this design has a tight iron spot (below the rightmost shaded pole) where saturation is likely to occur. A good remedy is to make the motor exactly simmetric with respect to the left shaded pole.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr54ZdGKyQjCjxr6E2WpT0Ok2LYAlTwutK16kGWZXDelm_mIoL7oyqZycB6Yg8Ob1JsSE8wFRFm8DhURIqTDzD7D_C4xMSI_WN7a7qzRH_4Kj14qXgREgpUDWemog4zgjnwOBGzO00vxc/s1600/ezgif-4-c8c61c6bbba4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr54ZdGKyQjCjxr6E2WpT0Ok2LYAlTwutK16kGWZXDelm_mIoL7oyqZycB6Yg8Ob1JsSE8wFRFm8DhURIqTDzD7D_C4xMSI_WN7a7qzRH_4Kj14qXgREgpUDWemog4zgjnwOBGzO00vxc/s1600/ezgif-4-c8c61c6bbba4.gif" /></a></div>
<br />Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com29tag:blogger.com,1999:blog-5952320191615496730.post-49400225750167421692018-08-16T11:22:00.002+01:002018-08-16T13:00:03.493+01:00Linear programming in R<p>Linear programming is a technique to solve optimization problems whose constraints and outcome are represented by linear relationships.</p><p><a href="https://lh3.googleusercontent.com/-wAw_VgW_Zn4/W3VmwpKWNjI/AAAAAAAACFk/nUdO0-LYPxQYsqmL2LXZVrTM5p5LsPiXwCHMYCw/s1600-h/aaa%255B2%255D"><img width="244" height="244" title="aaa" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="aaa" src="https://lh3.googleusercontent.com/-DQij6IYNm8Q/W3VmxTOJHbI/AAAAAAAACFo/5aDKza1VR90uBV49zFWLt4rWC11xhY2KACHMYCw/aaa_thumb?imgmax=800" border="0"></a></p><p>Simply put, linear programming allows to solve problems of the following kind:</p><ul><li>Maximize/minimize $\hat C^T \hat X$</li><li>Under the constraint $\hat A \hat X \leq \hat B$</li><li>And the constraint $\hat X \geq 0$</li></ul><a name='more'></a><p>This doesn’t seem much when you glance at it but in practice it is a powerful tool that can be used to make decisions in practical life scenarios.</p><p>It is often the case that we need to make decisions based on constraints. Often the invisible and most harsh constraint is time, but generally speaking there are a lot of other constraints that we need to take into account. A simple set of examples would be:</p><ul><li>I want to change my heating system. I want to minimize the cost of the system and the bills, what kind of heating system should I install? A pellet stove? Electric radiators?</li><li>I want to obtain the maximum profit from the sale of these two products I produce. In what quantities should I produce each product?</li><li>And so on…</li></ul><p>Linear programming can help you with these kind of decisions where:</p><ol><li>The function you are trying to optimize is a linear combination of the decision variables (this might not always be the case).</li><li><p>The constraints you have are a linear combination of the decision variables.</p></li></ol><h2>An example of linear optimization</h2><p>I’m going to implement in R an example of linear optimization that I found in the book “Modeling and Solving Linear Programming with R” by Jose M. Sallan, Oriol Lordan and Vincenc Fernandez. The example is named “Production of two models of chairs” and can be found at page 57, section 3.5. I’m going to solve only the first point.</p><p>The problem text is the following</p><blockquote><p>A company produces two models of chairs: 4P and 3P. The model 4P needs 4 legs, 1 seat and 1 back. On the other hand, the model 3P needs 3 legs and 1 seat. The company has a initial stock of 200 legs, 500 seats and 100 backs. If the company needs more legs, seats and backs, it can buy standard wood blocks, whose cost is 80 euro per block. The company can produce 10 seats, 20 legs and 2 backs from a standard wood block. The cost of producing the model 4P is 30 euro/chair, meanwhile the cost of the model 3P is 40 euro/chair. Finally, the company informs that the
minimum number of chairs to produce is 1000 units per month. Define a linear programming model, which minimizes the total cost (the production costs of the two chairs, plus the buying of new wood blocks).</p></blockquote><h2>Problem definition</h2><p>First, we need to translate the problem in a mathematical way. Let’s define the following variables</p><ul><li>$x_{4p}$ is the number of 4P chairs to be produced.</li><li>$x_{3p}$ is the number of 3P chairs to be produced.</li><li>$x_w$ is the number of wood blocks to be bought.</li></ul><p>Now we can define $\hat X = \begin{pmatrix} x_{4p} \\ x_{3p} \\ x_w \end{pmatrix}$ as the decision variable vector. Note that it must be $\hat X \geq 0$.</p><p>We would like to minimize the total cost so we must set our objective function as follows</p><p>$$cost(x_{4p}, x_{3p}, x_w) = 30 x_{4p} + 40 x_{3p} + 80 x_w = MIN(cost) $$</p><p>which means that $\hat C = \begin{pmatrix} 30 \\ 40 \\ 80 \end{pmatrix}$.</p><p>The constraints can be set in the following way</p><ol><li>For the seats $$ x_{4p} + x_{3p} \leq 500 + 10 x_w $$</li><li>For the legs $$ 4 x_{4p} + 3 x_{3p} \leq 200 + 20 x_w $$</li><li>For the backs $$ x_{4p} \leq 100 + 2 x_w $$</li><li>Minimum number of chairs produced $$ x_{4p} + x_{3p} \geq 1000 $$</li></ol><p>We can now define the coefficient matrix $A = \begin{pmatrix} 1 & 1 & -10 & \\ 4 & 3 & -20 & \\ 1 & 0 & -2 & \\ - 1 & - 1 & 0 & \end{pmatrix} $ and $B = \begin{pmatrix} 500 \\ 200 \\ 100 \\ -1000 \end{pmatrix}$.</p><h2>R implementation and solution</h2><p>We are now ready to implement this is in R. There are many different packages which can solve this kind of problems but my favourites are<strong> lpSolve</strong> and <strong>lpSolveAPI</strong> which is a kind of API built on top of <strong>lpSolve</strong>. I will use both. </p><p>A nice feature about the <strong>lpSolve</strong> package is that you can specify the direction of the constraints. Indeed in our case the last constraint of minimum number of chairs produced does not fit in with the mathematical definiton of the problem that we gave in the previous paragraph. Here we can either change the signs (and therefore the inequality direction) or specify the inequality direction in <strong>lpSolve</strong>. I’ll do this second way.</p><p>We can set that all the variables should be integers by setting the argument “all.int=TRUE” in the <strong>lpSolve::lp</strong> function. Of course, <strong>lpSolve</strong> can work with both integers and real numbers.</p><p>It’s also particularly important to check the status at the end of the execution: if it is 0, then a solution has been found but if it is 2 then this means that there is no feasible solution.</p><script src="https://gist.github.com/mick001/e11ba157c3f7ca620c7625c807d725fe.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com19tag:blogger.com,1999:blog-5952320191615496730.post-83432111516270392612018-08-16T10:30:00.000+01:002018-08-16T13:10:17.360+01:00Automate your garden lights DIY style: getting practical!<p>This post is a follow up of <a href="https://firsttimeprogrammer.blogspot.com/2017/05/lighting-your-garden-with-led-lights.html">this</a> project.</p><p>After a lot of fiddling around, I finally built up the circuit for automating the turn on and off of my garden lights. It was about time wasn’it? Yeah, I know, it took me some time, but it was worth it since I think the end result is particularly nice and I enjoyed the process of building the circuit.</p><h2>Goals of this project</h2><p>The objectives of this DIY project are the following:</p><ol><li>Automate the turn on and off of garden lights: 4 LED lights powered from a battery which is recharged every day through an appropriately sized solar panel. The lights should turn on in the evening and turn off in the morning. Ideally turn on and turn off should be adjustable with ambient light.</li><li>Improve my basic knowledge on how to design a proper circuit, a PCB, source components and debug analog circuitry.</li><li>Keep the project relatively cheap.</li></ol><h2>The circuit in LTSpice</h2><p>Below you can find a picture of the circuit simulated in LTSpice with all my notes following testing and a close up of the circuit. </p><p><a href="https://lh3.googleusercontent.com/-KUyU7xWszew/W3VIJq2t_oI/AAAAAAAACEM/r9Q3OPkvYh44PJi9D9SKiGYigg8_YP9DACHMYCw/s1600-h/Image%2B2%255B4%255D"><img width="573" height="317" title="Image 2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 2" src="https://lh3.googleusercontent.com/-OuX1n_lZK28/W3VIK3kgJkI/AAAAAAAACEQ/zJDt5RXccMMF8WL3agtWIIhEtGHpUzyMACHMYCw/Image%2B2_thumb%255B2%255D?imgmax=800" border="0"></a></p><h2><a href="https://lh3.googleusercontent.com/-a9R3hT5qgqk/W3VILeBTpYI/AAAAAAAACEU/pvZOgrkjLe0EELLqct1GAQZcfY25em4sgCHMYCw/s1600-h/Image%2B3%255B4%255D"><img width="567" height="359" title="Image 3" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 3" src="https://lh3.googleusercontent.com/-etbBQSsnE8E/W3VIMuCKzQI/AAAAAAAACEY/3chQ-iVN9WYz88dzf57FKoVWsDA9Zf9YwCHMYCw/Image%2B3_thumb%255B2%255D?imgmax=800" border="0"></a></h2><p><br></p><a name='more'></a><p>As you can see, the circuit is pretty simple</p><ul><li>The source is a 12V battery with a voltage that generally can range from 11.50 to 12.5 V.</li><li>At node B a voltage reference is generated and through a buffer (U2) this reference is fed to a comparator with hysteresis (U1) which compares the reference with the voltage at bus A. Note that the reference voltage at bus B is adjustable through the potentiometer POT1.</li><li>At bus A a voltage divider made by a potentiometer (POT2) and a photoresistor feeds a voltage to the comparator U1. From my measurements, the resistance of the photoresistor varies from 2k Ohm when it is full daylight, to about 600k Ohm in full dark. When it is dark outside, voltage at bus A goes up and it turns on the comparator U1 which in turn turns on Q1 and the relay and the load. When it is bright outside, voltage at bus A goes down and U1 turns off thereby turning off Q1, the relay and the load.</li><li>The load is an LED light which draws 375 mA at 12 V (it consumes nominally 4.5 W) so it can be modelled as a 32 Ohm resistor (at steady state). </li></ul><p>A couple of notes on the LTSpice model:</p><ul><li>Don’t mind the exact mode of the operational amplifiers: the ideal op-amp model tends to behave rather oddly so I decided to use these two which seem to behave like actual op-amps.</li><li>If you want to simulate a change in brightness from full dark to full brightness to full dark again, simply connect V3 to bus A. </li><li>The relay inductance is not the correct one (since it is not provided in the datasheet) but I did not bother to measure it since it does not matter in this case as long as a freewheeling diode is used.</li><li>POT1 changes the reference voltage at bus A (and therefore the “reference sun light brightness”):
by lowering POT1 we increase the brightness required to turn (and keep) op amp U1 on.
By increasing POT1 we decrease the brigthness required to turn (and keep) op amp U1 on.</li><li>POT2 changes the dependency of voltage at bus A with respect to the photoresistor: $V_A(P) = 12 P/(P + POT2)$. The derivative of $V(A)$ with respect to POT2 is: $dV_A(P)/dPOT2 = POT2/(P + POT2)$.
$P$ is the resistance of the photoresistor
- For low P (less than 10k Ohm): increasing POT2 decreases the speed of the change in voltage at bus A due to a change of resistance of P (and therefore a change of brightness). Decreasing POT2 increases the speed of the change in voltage at bus A due to a change of resistance of P (and therefore a change of brightness)
- For high P (higher than 10k Ohm):<br>
P does not influence the behaviour of $V_A$ that much. There is included in the schematic a chunk of R code that simulates this behaviour.<br> </li></ul><p>I connected V3 to bus A to simulate the behaviour of the circuit. V3 simulates a change from full dark (night) to full brightness (day) to full dark (night) again. In the following plot you can see the voltage changing at bus A V(n004) and the voltage on the load V(n010). The hysteresis is needed since once the light turns on, the brightness captured by the photoresistor increases and you want to avoid the circuit becoming unstable and turning on and off again (it happened during one of the first tests without hysteresis).</p><p><a href="https://lh3.googleusercontent.com/-JXOA9Ov1dHg/W3VppTHOeYI/AAAAAAAACGA/aGDrj-piCrU3IBEfTZQeXuyE_5ycAg5hQCHMYCw/s1600-h/Image-4%255B3%255D"><img width="572" height="153" title="Image 4" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 4" src="https://lh3.googleusercontent.com/-pJAPEYQqrmA/W3VpqGFSS1I/AAAAAAAACGE/YQdm7hZy6ekR5PIkrOVJ6k9CkfMKFRnlgCHMYCw/Image-4_thumb%255B2%255D?imgmax=800" border="0"></a></p><h2>The circuit in Eagle</h2><p>After having simulated the circuit, I designed the PCB in Eagle. The components I used are the following</p><ul><li>1 photoresistor.</li><li>2 potentiometers ACP SPAIN 20k Ohm.</li><li>1 IC LM358N which has 2 operational amplifiers.</li><li>1 NPN transistor BC337-40.</li><li>1 diode 1N4148.</li><li>1 connector for the wires.</li><li>4 10k Ohm 1/4 W, 5% resistors.</li><li>1 1k Ohm 1/4 W, 5% resistor.</li><li>1 blue LED.</li><li>1 relay SRSZ-12VDC with 5 pins.</li><li>A 1uF capacitor.</li></ul><p>A couple of notes on my design and components choices</p><ul><li>I decided to use a single IC which had 2 operational amplifiers. The LM358N was available at my local store and fitted my requirements. I know a comparator would have been a better choice for U1 but I did not want to use 2 ICs and this one works good enough.</li><li>The diode does not need to be this specific one, it can be a generic diode. It is operated pretty rarely (2 times a day).</li><li>It is particularly important to set the base resistor (R9) of the transistor to 1k Ohm. Since the negative pin of the LM358N is pinned to GND, when the output of the IC is off, the actual output is around 0.6 V. R9 should be high enough to ensure that the transistor does not turn on when the output of the IC is low.</li><li>The actual capacitance can be different from the one stated above. 1uF is more than enough for stabilizing the output of the battery which is already pretty stable.</li></ul><p>The schematic is drawn below. I went through a few revisions of the schematic mainly for the following reasons:</p><ul><li>The footprints of the connector, the potentiometer and of the relay were not available in Eagle so I had to draw them on my own. You can find them <a href="https://github.com/mick001/Custom-Eagle-Libraries">here</a>.</li><li>The schematic of the relay given by the manufacturer in the datasheet is <strong>WRONG</strong>! I had to correct it when drawing the footprint!!! Always double check with the actual part before putting your component in your PCB design.</li><li>I used the default and the SparkFun rule check routines.</li><li>I added a blue LED to signal if power is applied to the board.</li></ul><p><a href="https://lh3.googleusercontent.com/-3jqFU0lLeRI/W3VIO08LtsI/AAAAAAAACEk/BZJGPfvjTh816O449UDmQVKaUKUF-KpdgCHMYCw/s1600-h/Image%2B5%255B3%255D"><img width="504" height="335" title="Image 5" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 5" src="https://lh3.googleusercontent.com/-onnYpZy5uAE/W3VIQaE4RWI/AAAAAAAACEo/jEUzLg-l2_kod_aDA7dpekRYD0rdImq8ACHMYCw/Image%2B5_thumb%255B1%255D?imgmax=800" border="0"></a></p><p><a href="https://lh3.googleusercontent.com/-J1mmJPzVxoU/W3VIRjHCQ7I/AAAAAAAACEs/Z0M51khon2EpR8LiP2lVQMiruAbt8RU-gCHMYCw/s1600-h/Image%2B6%255B3%255D"><img width="503" height="258" title="Image 6" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 6" src="https://lh3.googleusercontent.com/-zRxougJu5ss/W3VISyNrUhI/AAAAAAAACEw/CRzFhMDD0vAdV0A1eSHohloeZxwgLwKPgCHMYCw/Image%2B6_thumb%255B1%255D?imgmax=800" border="0"></a></p><h2>The final result: PCB</h2><p>For the manufacturing of the PCB I decided to go with JLCPCB. They’re prices are amazingly low for prototypes. The PCB I received is perfectly polished and exactly as I expected it. There were no problems in processing my order. Excellent service, I would recommend it to every hobbyst.</p><p><a href="https://lh3.googleusercontent.com/-lVBpSrjpTTE/W3VIT3kR8vI/AAAAAAAACE0/ijx5_kvUVpMcJYpRcxFVSIQDMPCJ_JfFgCHMYCw/s1600-h/IMG_20180813_133749%255B5%255D"><img width="350" height="170" title="IMG_20180813_133749" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="IMG_20180813_133749" src="https://lh3.googleusercontent.com/-N_MlA1PhA7o/W3VIUeQYhjI/AAAAAAAACE4/_v03WJwIIVEVLl66RlJrLXVNvKr4GD_xwCHMYCw/IMG_20180813_133749_thumb%255B2%255D?imgmax=800" border="0"></a></p><p><br></p><p>A couple of notes on the PCB:</p><ul><li>This PCB was obtained from an earlier version of the Eagle drawing. This is why you see a few different details. Namely I corrected the footprint of the silkscreen drawing of transistor T1 (which is reversed) and its position. I also added a few notes on the silkscreen.</li><li>The PCB worked perfectly from the beginning, I was pleasantly surprised. </li><li>12 V from the battery is applied to the pads: pad 1 is positive and pad 2 is negative (GND).</li><li>The load is connected to the connector.</li></ul><p>The final product mounted and operational looks like this</p><p><a href="https://lh3.googleusercontent.com/-NfmF200_3gs/W3VIV3tSSxI/AAAAAAAACE8/BiKOPcoLRBgk-wvhTXLhKl_Yy66jZcDEgCHMYCw/s1600-h/IMG_20180816_083401%255B3%255D"><img width="312" height="238" title="IMG_20180816_083401" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="IMG_20180816_083401" src="https://lh3.googleusercontent.com/-xwCK8hbuSf8/W3VIWsm-ovI/AAAAAAAACFA/Qgcd1jwYiSYcQJ8amSRw6hxTzIUH8q4YwCHMYCw/IMG_20180816_083401_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>Please don’t mind the unordered arrangement of the resistors, this was one of the earliest prototypes.</p><p>After a few tests I found out that the circuit has the following power consumption:</p><ul><li>40 mW during the night, i.e. when operational.</li><li>0.5 W during the day, i.e. when non operational.</li></ul><p>The consumption during the day is a bit high and is mainly due to the relay. This is partially ok since the panel is charging the battery during the day but still this is not the best in terms of efficiency of the whole package. During the night it is crucial that the power consumption of the control circuit be low since you want the battery to last as long as possible and spend its energy to power the load.</p><h2>Operational notes</h2><p>I would suggest not to fiddle around too much with the potentiometers before testing the working of the circuit. The circuit is designed to work with both the potentiometers in their middle position. When first assemblying the circuit, please make sure that the potentiometers are as in figure. Then you can try tweaking the potentiometers around. </p><p>You can use the device to control 12 V loads other than lights.</p><h2>Future improvements</h2><p>There are a couple of improvements I’d like to make in the future, namely</p><ol><li>Replace the relay with a transistor to save power during the day.</li><li>Add a “battery save” feature that disconnects the load when the battery is discharged and disconnects the solar panel when the battery is fully charged.</li></ol><h2>How can I build this?</h2><p>You can find the LTSpice simulation, the Eagle schematic and PCB <a href="https://github.com/mick001/garden-lights-V1">here</a>. If you want to build this project you simply need to:</p><ol><li>Make the gerber files from Eagle.</li><li>Send them to your PCB manufacturer.</li><li>Buy and then solder the components.</li></ol><h2>Conclusions</h2><p>The conclusions I drew from the making of this project can be summarised as below</p><ol><li>Hardware projects require time and patience. But they are worth it in the end. If you break a part you need to wait at least 3-4 days to get the replacement.</li><li>Spare parts available on the shelf which are not the exact match may work too for a quick test.</li><li>Circuit behaviour can be simulated to a very fine degree but the practice is always the final test.</li><li>Do not overkill using parts that are not needed. In my example, the relay is overkill, an NPN transistor would have suffice and even improved the power consumption of the board. Lesson learned.</li><li>Always double check the footprint of components with the actual thing if you can. Trust datasheets but double check crucial things.</li></ol>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com3tag:blogger.com,1999:blog-5952320191615496730.post-28698824108115492572018-08-13T23:03:00.000+01:002018-08-14T20:15:04.238+01:00PCA revisited: using principal components for classification of faces<p>This is a short post following the previous one (<a href="https://firsttimeprogrammer.blogspot.com/2018/08/pca-revisited.html">PCA revisited</a>).</p><p>In this post I’m going to apply PCA to a toy problem: the classification of faces. Again I’ll be working on the Olivetti faces dataset. Please visit the previous post <a href="https://firsttimeprogrammer.blogspot.com/2018/08/pca-revisited.html">PCA revisited</a> to read how to download it.</p><p>The goal of this post is to fit a simple classification model to predict, given an image, the label to which it belongs. I’m goint to fit two support vector machine models and then compare their accuracy.</p><p>The</p><ol><li>The first model uses as input data the raw (scaled) pixels (all 4096 of them). Let’s call this model “the data model”.</li><li>The second model uses as input data only some principal components. Let’s call this model “the PCA model”.</li></ol><p><br></p>
<a name='more'></a>
<p>This will not be an in-depth and detailed fit and subsequent evaluation of the model, but rather a simple proof of concept to prove that a limited number of principal components can be used to perform a classification task instead of using the actual data.</p><h2>The setup of the two models</h2><p>In order to get an idea of what accuracy our models can achieve, I decided to do a simple 20 fold crossvalidation of each model.</p><p>The data model is a simple support vector machine that is fitted using all the faces in the training set: it’s input data is a vector of 4096 components.</p><p>The PCA model is again the same support vector machine (with the same hyperparameters, which however may need some tweaking) fitted using 30 PCs.</p><p>By performing PCA on the dataset I transformed the data and, according to the analysis, 30 PCs account for about 82% of the total variance in the dataset. Indeed you can see from the plots below that the first 30 eigenvalues are those with the highest magnitude.</p><p><a href="https://lh3.googleusercontent.com/-qHv6tmhzfuU/W3MqKmZX0mI/AAAAAAAACDk/yvoe662b3ngkTX5KASoVrLlf-H76RTKPACHMYCw/s1600-h/Rplot01%255B3%255D"><img width="337" height="263" title="Rplot01" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Rplot01" src="https://lh3.googleusercontent.com/-2AlA71rr2MI/W3MqLQ8qDLI/AAAAAAAACDo/tKpWtxymDIcDHNgfvt_J6IZOeuP8_uNVQCHMYCw/Rplot01_thumb%255B1%255D?imgmax=800" border="0"></a> </p><p><a href="https://lh3.googleusercontent.com/-HSW155BaYvo/W3MqL3O4UFI/AAAAAAAACDs/jS97IN0NpRYgpdl5Rpo4hQ5_L7FTszWuACHMYCw/s1600-h/Rplot%255B4%255D"><img width="335" height="274" title="Rplot" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Rplot" src="https://lh3.googleusercontent.com/-ltq5aYsOIlk/W3MqMlQIPzI/AAAAAAAACDw/40U5069xx781uAXbN6KbVr8C7oxJ-Q9qQCHMYCw/Rplot_thumb%255B2%255D?imgmax=800" border="0"></a></p><h2>Results</h2><p>After running the two crossvalidations on the two different models, the main results I found are the following:</p><ol><li>The average accuracy of the two models is about the same (PCA model has a slightly better average accuracy): 93% vs 94%. Standard deviation seems to be again in favour of the PCA model: 3.2% vs 2.3%. The accuracy isn’t great, I obtained 98% on this dataset using other models, but of course this is just a test “out of the box” with no hyperparameter tuning and all the other fine tuning operations.</li><li>The second model fits the data much faster than the first one.</li></ol><p>The results are summarised in the boxplot below</p><p><a href="https://lh3.googleusercontent.com/-MJ3qbp7Fan4/W3MqNCkzTxI/AAAAAAAACD0/wx1BM7j71SwZTf1y3qJFp0utMCOmXegKwCHMYCw/s1600-h/boxplot%255B4%255D"><img width="369" height="296" title="boxplot" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="boxplot" src="https://lh3.googleusercontent.com/-mtdFjX2dsNY/W3MqNtVYo_I/AAAAAAAACD4/0vjzwpGaqNgGFEAAWt2owYhReFKD0wqMQCHMYCw/boxplot_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>Note that the PCA model has less information available compared to the model using the original data. However, the information is condensed in a fewer variables (the 30 PCs) in a more compact way. This technique is great when you are using models sensitive to correlation in the data: since the PCs are not correlated, you can transform your original data (which might be correlated and causing problems in the model) and use the principal components instead.</p><p>Another nice advantage is that since the PCA model uses fewer variables it is faster. Note that I decided to apply PCA to the whole dataset and not only to the training set of each round of crossvalidation. It could have been argued that in practice you have access to only the training set (of course). Then I used the eigenvectors to obtain the PCs for both the training and testing set of each crossvalidation iteration. </p><p>The code I used is here below</p><script src="https://gist.github.com/mick001/d5786de2788245c606cc77abac273c50.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com7tag:blogger.com,1999:blog-5952320191615496730.post-73743307362116770172018-08-12T22:39:00.002+01:002018-08-13T16:38:27.602+01:00PCA revisited<p>Principal component analysis (PCA) is a dimensionality reduction technique which might come handy when building a predictive model or in the exploratory phase of your data analysis. It is often the case that when it is most handy you might have forgot it exists but let’s neglect this aspect for now ;)</p><p><a href="https://lh3.googleusercontent.com/-DdmzCEjGycQ/W3Gl2ki71UI/AAAAAAAACDQ/lRTwTmuZ0NYWB8sQxX8hCpqYeJGm-5KFQCHMYCw/s1600-h/eig2%255B5%255D"><img width="244" height="210" title="eig2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="eig2" src="https://lh3.googleusercontent.com/-iUpMaeRmcs0/W3Gl3fBaE5I/AAAAAAAACDU/zokiTnZUY7g0HJsg1UZ3IAUAVsX6bU6DACHMYCw/eig2_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>I decided to write this post mainly for two reasons:</p><ol><li>I had to make order in my mind about the terminology used and complain about a few things.</li><li>I wanted to try to use PCA in a meaningful example.</li></ol><a name='more'></a><h2>What does it do?</h2><p>There are a lot of ways to try to explain what PCA does and there are a lot of good explanations online. I highly suggest you to google around a bit on the topic.</p><p>PCA looks for a new the reference system to describe your data. This new reference system is designed in such a way to maximize the variance of the data across the new axis. The first principal component accounts for as much variance as possible, as does the second and so on. PCA transforms a set of (tipically) correlated variables into a set of uncorrelated variables called principal components. By design, each principal component will account for as much variance as possible. The hope is that a fewer number of PCs can be used to summarise the whole dataset. Note that PCs are a linear combination of the original data.</p><p>The procedure simply boils down to the following steps</p><ol><li>Scale (normalize) the data (not necessary but suggested especially when variables are not homogeneous).</li><li>Calculate the covariance matrix of the data.</li><li>Calculate eigenvectors (also, perhaps confusingly, called “loadings”) and eigenvalues of the covariance matrix.</li><li>Choose only the first N biggest eigenvalues according to one of the many criteria available in the literature.</li><li>Project your data in the new frame of reference by multipliying your data matrix by a matrix whose columns are the N eigenvectors associated with the N biggest eigenvalues.</li><li>Use the projected data (very confusingly called “scores”) as your new variables for further analysis.</li></ol><p>Everything clear? No? Ok don’t worry, it takes a bit of time to sink in. Check the practical example below.</p><h2>Use case: why should you use it?</h2><p>The best use cases I can find at the top of my mind are the following:</p><ol><li><strong>Redundant</strong> data: you have gathered a lot of data on a system and you suspect that most of that data is not necessary to describe it. Example: a point moving on a straight line with some noise, say X axis, but you somehow have collected data also on Y and Z axis. Note that PCA doesn’t get rid of the redundant data, it simply costructs new variables that summarise the original data.</li><li><strong>Noise</strong> in your data: the data you have collected is noisy and there are some correlations that might annoy you later</li><li>The data is <strong>heavily redundant and correlated</strong>. You think out of the 300 variables you have, 3 might be enough to describe your system.</li></ol><p>In all these 3 cases PCA might help you getting closer to your goal of improving the results of your analysis.</p><h2>Use case: when should you use it?</h2><p>PCA is a technique used in the exploratory phase of data analysis. Personally, I would use it only in one of the 3 circumstances above, at the beginning of my analisis, after having confirmed through the basic descriptive statistics tools and some field knowledge, that I am indeed in one of the use cases mentioned. I would also probably use it when trying to improve a model that relies on independence of the variables.</p><h2>Not use case: when should you not use it?</h2><p>PCA is useless when your data is mostly indipendent or even when you have very few variables I would argue. Personally, I would not use it when a clean and direct interpretation of the model is required either. PCA is not a black box but its output is difficult to a) explain to non technical people and, in general, b) not easy to interpret.</p><h2>Example of application: the Olivetti faces dataset</h2><p>The Olivetti faces dataset is a collection of 64x64 greyscale pixel images of 40 faces, there are 10 images for each face. It is available in Scikit-learn and it is a good example dataset for showing what PCA can do. I think it is a better cheap example than the iris dataset since it can show you why you would use PCA.</p><p>First, we need to download the data using Python and Scikit-Learn.</p><script src="https://gist.github.com/mick001/e22582b1d67e02396dcbd199d60d117e.js"></script><p>Then, we need to shape the data in a way that is acceptable for our analysis, that is, features (also known as variables) should be columns, and samples (also known as observations) should be the rows. In our case the data matrix should have size 399x4096. Row 1 would represent image 1, row 2 image 2, and so on… To achieve this, I used this simple R script with a for loop</p><script src="https://gist.github.com/mick001/e859743772c76a5683d96946368b9cd6.js"></script><p>The images in the dataset are all head shots with mostly no angle. This is an example of the first face (label 0)</p><p><a href="https://lh3.googleusercontent.com/-iCtyKJd0uuI/W3GlJCal5nI/AAAAAAAACCU/nKwZDHYx0L00bG1uhWosawMG7NN9HzPZwCHMYCw/s1600-h/face1%255B6%255D"><img width="228" height="244" title="face1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="face1" src="https://lh3.googleusercontent.com/-VvJiY12e1Vc/W3GlJ7sKFdI/AAAAAAAACCY/uCPQe-zjERg60NxwroeGvO_JzheKvVqBACHMYCw/face1_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>A very simple thing to do would be to look what the average face looks like. We can do this by using dplyr, grouping by label and then taking the average of each pixel. Below you can see the average face for labels 0, 1 and 2</p><script src="https://gist.github.com/mick001/b137fc30b87ffb4c2850e37af1953a12.js"></script><p><a href="https://lh3.googleusercontent.com/-Thq-C45twUk/W3GlKk2UxTI/AAAAAAAACCc/LpW3RyOFPz4i8zjGayZ-gGEQc1awy8QvACHMYCw/s1600-h/avg_faces%255B5%255D"><img width="525" height="187" title="avg_faces" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="avg_faces" src="https://lh3.googleusercontent.com/-lznBHB9rlRw/W3GlLRyVH5I/AAAAAAAACCg/39yjTBrCxhQSFnz_6R5yVZrdNGDHyhPlwCHMYCw/avg_faces_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>Then it is time to actually applying PCA on the dataset</p><script src="https://gist.github.com/mick001/fc9dbec00bc9a76708814ba468bef590.js"></script><p>Since the covariance matrix has dimensions 4096x4096 and it is real and symmetric, we get 4096 eigenvalues and 4096 corresponding eigenvectors. I decided (after a few trials) to keep only the first 20 which account roughly for 76.5 % of the total variance in the dataset. As you can see from the plot below, the magnitude of the eigenvalues goes down pretty quickly.</p><p><a href="https://lh3.googleusercontent.com/-UV0vm_XNQbA/W3GlL2hSC7I/AAAAAAAACCk/PD2o5f7AyIAy1mGtz1IY96r8zqLiLaLbgCHMYCw/s1600-h/magnitude_eigenvalues%255B4%255D"><img width="348" height="305" title="magnitude_eigenvalues" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="magnitude_eigenvalues" src="https://lh3.googleusercontent.com/-hXvQ0s7COEY/W3GlMnA8bMI/AAAAAAAACCo/IZ0UUdpbgHoyMxfPCwCcpaSXrtBzP5XcQCHMYCw/magnitude_eigenvalues_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>A few notes:</p><ol><li>The eigenvalues of the covariance matrix represent the variance of the principal components. </li><li>Total variance is preserved after a rotation (i.e. what PCA is at its core).</li><li>The variable <em>D_new</em> contains the new variables in the reduced feature space. Note that <strong><u>by using only 20 variables (the 20 principal components) we can capture 76.5 % of the total variance in the dataset</u></strong>. This is quite remarkable since we can probably avoid using all the 4096 pixels for every image. This is good news and it means that PCA application in this case might be useful! If I had to use 4000 principal components to capture a decent amount of variance, that would have been a hint that PCA wasn’t probably the right tool for the job. This point is perhaps trivial, but particularly important. One must not forget what each tool is designed to accomplish. </li><li>There are several methods for choosing how many principal components should be kept. I simply chose 20 since it seems to work out fine. In a real application you might want to research a more scientific criterion or make a few trials.</li></ol><h2>The eigenfaces</h2><p>What is an eigenface? The eigenvectors of the covariance matrix are the eigenfaces of our dataset. These face images form a set of basis features that can be linearly combined to reconstruct images in the dataset. They are the basic characteristic of a face (a face contained in this dataset of course) and every face in this dataset can be considered to be a combination of these standard faces. Of course this concept can be applied also to images other than faces. Have a look at the first 4 (and the 20th) eigenfaces. Note that the 20th eigenface is a bit less detailed than the first 4. If you were to look at the 4000 eigenface, you would find that it is almost white noise.</p><script src="https://gist.github.com/mick001/375cb927ca42cbd196191c80f8643063.js"></script><p><a href="https://lh3.googleusercontent.com/-sc8Ua53XRcY/W3GlOHOTF8I/AAAAAAAACCs/D7mFBJ0KrUYU6qv2JY9eGc73BD5__aL9ACHMYCw/s1600-h/eigenfaces%255B4%255D"><img width="521" height="261" title="eigenfaces" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="eigenfaces" src="https://lh3.googleusercontent.com/-7bogu_re1_s/W3GlPIYxUwI/AAAAAAAACCw/E9HwvgKrSVsiNx_IdGtZLEezPLnwqb6QQCHMYCw/eigenfaces_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>Then we can project the average face onto the eigenvector space. We can do this also for a new image and use this new data, for instance, to do a classification task.</p><script src="https://gist.github.com/mick001/415f54adc4593eeb031f1e268f992bf0.js"></script><p>This is the plot we obtain</p><p><a href="https://lh3.googleusercontent.com/-kE4LV6ckof8/W3GlP--CoJI/AAAAAAAACC0/XybRxDuk1b8nxjvdE2ueqFlSu0teeuYigCHMYCw/s1600-h/avg_faces_projection%255B4%255D"><img width="515" height="256" title="avg_faces_projection" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="avg_faces_projection" src="https://lh3.googleusercontent.com/-qtVMYRmsPpM/W3GlQoUsbaI/AAAAAAAACC4/gfo4s2yjvwIuovFA6Fu1v4scX3B4Wbi0gCHMYCw/avg_faces_projection_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>As you can see, the 3 average faces rank quite differently in the eigenvectors' space. We could use the projections of a new image to perform a classification task on an algorithm trained on a database of images transformed according to PCA. By using only a few principal components we could save computational time and speed up our face recognition (or other) algorithm.</p><h2>Using R built-in prcomp function</h2><p>For the first few times, I would highly suggest you to do PCA manually, as I did above, in order to get a firm grasp at what you are actually doing with your data. Then, once you are familiar with the procedure, you can simply use R built-in <em><strong>prcomp</strong></em> function (or any other that you like) which, however, has the downside of calculating all the eigenvalues and eigenvectors and therefore can be a bit slow on a large dataset. Below you can find how it can be done.</p><p><br></p><script src="https://gist.github.com/mick001/9b8058dbd8ac410cab9a1d4e63aafdef.js"></script><p>I hope this post was useful.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com8tag:blogger.com,1999:blog-5952320191615496730.post-83956128380382030162018-08-10T22:23:00.000+01:002018-08-11T23:17:09.042+01:00IV characteristics of diodes<p>This week I finally got to play around a little with some electronic components I ordered and test them before using them on side projects. My goal was to find the IV curve of a 3V 0.5W zener diode I need to use on a project. Since I had all the instruments set up, as a bonus I decided to find the IV curve of a blue LED as well.</p><h2>Test circuit and instruments setup.</h2><p>The test circuit I used for the measurements is the following</p><p><a href="https://lh3.googleusercontent.com/-skHO3h7J-Ek/W29gS1bh5rI/AAAAAAAACBY/HhTsYE9oY7Y_JMokoom6eANvmM5NLHhLwCHMYCw/s1600-h/Image%2B1%255B2%255D"><img width="244" height="180" title="Image 1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 1" src="https://lh3.googleusercontent.com/-OTOZWZZ9fPM/W29gTfybYkI/AAAAAAAACBc/VYfyq9jtgX87L33jDb7pvjUkuwssrBF9gCHMYCw/Image%2B1_thumb?imgmax=800" border="0"></a></p><a name='more'></a><p><a href="https://lh3.googleusercontent.com/-zb-aBOok87A/W29gUN6Y9JI/AAAAAAAACBg/6qjh4cquEfgskM22q6cFhtyyfzAhtcD1wCHMYCw/s1600-h/IMG_20180811_235753%255B7%255D"><img width="216" height="244" title="IMG_20180811_235753" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="IMG_20180811_235753" src="https://lh3.googleusercontent.com/-wsgw7akrhZ4/W29gUyCtvNI/AAAAAAAACBk/kWZQIrVX_kwY9xc8lNiLnbw-Bu__8AF7wCHMYCw/IMG_20180811_235753_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>Since my voltage source V1 can only output positive voltage (it’s a unipolar voltage source), to measure the characteristic of the diode I had to put it in reverse in the circuit. Of course to measure the direct characteristic I simply reversed the diode again. Generally speaking, the reverse characteristic is the one that matters for zener diodes.</p><p>The circuit was also used for measuring the IV characteristic of the LED but I considered only the direct characteristic since the LED is not used in the negative part of the characteristic.</p><p>The test circuit is made of the following:</p><ol><li>A unipolar voltage source.</li><li>A 1k Ohm 0.5 W 5% resistor.</li><li>The device under test.</li><li>The voltmeter (not shown in figure) is set to measure the voltage drop across the diode.</li><li>The current meter (not shown in figure) is in series with the power supply.</li></ol><h2>Test conditions</h2><p>The test was performed at an ambient temperature of about 30 °C.</p><h2>Devices under test</h2><p>The devices tested where the following:</p><ol><li>3V 0.5W zener diode BZX55C3V0.</li><li>3mm blue LED.</li></ol><p><a href="https://lh3.googleusercontent.com/-oJGOCMrkoIc/W29gV1UJcxI/AAAAAAAACBo/FZFge615ffMvvllfQ6gpBZeCkNoHF7Q4gCHMYCw/s1600-h/IMG_20180811_235532%255B2%255D"><img width="244" height="141" title="IMG_20180811_235532" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="IMG_20180811_235532" src="https://lh3.googleusercontent.com/-UCxNLkEnIHU/W29gWXB7OsI/AAAAAAAACBs/W9F1vJE9k_4vViYyWC_i-jswO-faH2cygCHMYCw/IMG_20180811_235532_thumb?imgmax=800" border="0"></a></p><h2>Test results</h2><p>This is the IV curve of the zener diode</p><p><a href="https://lh3.googleusercontent.com/-2OWlJzQ5s1k/W29gW_PL1VI/AAAAAAAACBw/XPxqlnBmmEA903u2g8F-5ajVMTc_BdOQQCHMYCw/s1600-h/zener%255B4%255D"><img width="387" height="317" title="zener" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="zener" src="https://lh3.googleusercontent.com/-wB9h0qW8zxk/W29gXsIggXI/AAAAAAAACB0/_SUu_GjY1t89J-zhrIGOOgJcsec2w-lUgCHMYCw/zener_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>The dotted points are actual measurements while the line is an interpolation. This diode should provide a 3V more or less stable reverse breakdown voltage but as you can see this is true only at a specific value of current. My idea was to use this diode as a voltage reference to an operational amplifier and by using this curve I can size the resistor in series with the diode to the appropriate value. It can be noted than when forward biased, the diode shows a pretty stable forward voltage drop.</p><p>For the blue LED, the direct characteristic is the following</p><p><a href="https://lh3.googleusercontent.com/-S0Xsi2rtzMk/W29gYARhe2I/AAAAAAAACB4/8ah3a9wtbkQ9YMAOdaPX1IjiqzyH3oYmQCHMYCw/s1600-h/blue%2BLED%255B10%255D"><img width="372" height="325" title="blue LED" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="blue LED" src="https://lh3.googleusercontent.com/-rsU3wd1oyGw/W29gY8UDkSI/AAAAAAAACB8/Lg4l-k6Do1gnJ0rK_ijELOLbsMTmTU3pwCHMYCw/blue%2BLED_thumb%255B6%255D?imgmax=800" border="0"></a></p><p>It can be seen that the LED starts to turn on at about 2.5 V (at 2.47 V it is very dim, to be precise). Then at around 5 mA the LED is almost at full brightness. It might be interesting to do a comparison with LEDs of other colors.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com5tag:blogger.com,1999:blog-5952320191615496730.post-53669390020380076132018-03-04T11:13:00.000+00:002018-03-04T12:03:45.367+00:00Calculating the DFT in C++<p>When you learn about the <strong>Fourier transform</strong> and what it can show you about a signal, you immediately start thinking about its possible applications. The Fourier transform, however, deals with <strong>continuous time signals</strong> while, in practice, computers deal with <strong>discrete time signals</strong> (i.e. a sampled version of the original continuous time signal). When it comes to discrete time signal, you can calculate a discrete Fourier transform to get the frequency content of the signal.</p><p><a href="https://lh3.googleusercontent.com/-abZ9D6Pp1tk/WpvgnsCW3uI/AAAAAAAACAs/iVvRGovToiEHwlrCMZXA0snIzRdf4LOXwCHMYCw/s1600-h/Figure_2%255B4%255D"><img width="507" height="199" title="Figure_2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Figure_2" src="https://lh3.googleusercontent.com/-mJle8wUqqkc/WpvgoLXgUZI/AAAAAAAACAw/KpZe9wenTnoZFzMbZPihfp0c8cJJfC-3wCHMYCw/Figure_2_thumb%255B2%255D?imgmax=800" border="0"></a></p>
<a name='more'></a>
<p align="center">Frequency and time domain representation of a 1 Hz sampled sine wave (sampling frequency is 8 Hz).</p><p>Typically, one should use a well known and tested library to perform this calculation for a number of reasons including accuracy and speed. However, it can be useful, for the sake of refreshing or improving one’s coding skills to try and code from scratch the algorithm for calculating the discrete Fourier transform. I decided to go this route to refresh and improve my C++ basic coding skills.</p><p>The DFT calculation is often implemented (for the sake of speed and efficiency) through the <strong>radix-2 algorithm </strong>or other forms of such algorithm. This allows to bring down the computation time to O(<i>N</i> log <i>N</i>) which makes a significant difference with respect to using the definition of the DFT, as N grows larger.</p><p>In my simple example, I will implement the definition of the DFT instead, that is, given a sequence of N samples $X$ the following formula is the definition of its DFT:</p><p>$$X_{k} = \sum_{n=0}^{N-1}x_{n}e^{-j2\pi k n/N}$$</p><p>Along with that, I implemented a lot of auxiliary functions used for printing vectors, saving data and output log information.</p><p>Let’s dive into the specifics of the program. The program is made of 2 files <em>dft_main.cpp</em> and <em>dft_module.hpp</em>: <em>dft_main.cpp</em> contains a set of variables that can be edited in order to obtain the desired output.</p><h2>1. Input signal</h2><p>As for the input, you can choose to use either a dummy signal (a 1 Hz sinewave) or an external signal which should be contained in a text file and be in the following format:</p><p>Header<br>sample1<br>sample2<br>…</p><p>Note that you can also have no header, provided that the variable “INPUT_FILE_HAS_HEADER” is set to false. By default it is assumed that the input file has a header. You can choose which input signal to use by changing the value of the variables “USE_EXTERNAL_DATA” and “INPUT_FILE_PATH”.</p><h2>2. Output signal</h2><p>If you want the output to be saved to a file, you should provide a path in “OUTPUT_FILE_PATH” and set “SAVE_TO_FILE” equal to true, otherwise the output will be simply printed to the console.</p><h2>3. Sampling frequency</h2><p>The sampling frequency can be set in Hz by changing the variable “FS”.</p><p>To run the program, simply compile it and then run it. You can use an IDE such as <strong>Code::Blocks.</strong> Finally, here is the code:</p><p><br></p>
<script src="https://gist.github.com/mick001/8c1c28b9071177b5a6638538f4991b19.js"></script><script src="https://gist.github.com/mick001/b1669d97a70c1bcf2ab96900fd1e39c3.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com4tag:blogger.com,1999:blog-5952320191615496730.post-47500550443118412822017-09-18T16:26:00.000+01:002018-10-18T11:21:26.983+01:00Putting some of my Python knowledge to a good use: a Reddit reading bot!<p>One of the perks of knowing a programming language is that you can build your own tools and applications. Depending on what you need, it may even be a fast process since you usually do not need to write production grade code and a detailed documentation (although it might still be helpful in the future).</p><p>I’ve got used to read news stuff on Reddit, however, it sometimes can be a bit time consuming since it tends to keep you wandering through every and each rabbit hole that pops up. This is fine if you are commuting and have just some spare time to spend on browsing the web but sometimes I just need a quick glance at what’s new and relevant to my interests.</p><p>In order to automate this search process, I’ve written a bot that takes as input a list of subreddits, a list of keywords and flags and browses each subreddit looking for the given keywords.</p><p>If a keyword is found inside either the body or in the title of a post which has been submitted in one of the selected subreddits, the post title and the links are either printed in the console or saved in a file (in this case the file name must be supplied when starting the search).</p><p>The bot is written using <strong>praw</strong>.</p> <a name='more'></a> <p><br></p><h2>What do I need to use the bot?</h2><p>In order to use the bot you’ll need to set up an app using your Reddit account and save the client_id, client_secret, username and password in a file named config_data.py which should be stored in the same folder as the reddit_browsing_bot_main.py script. </p><h2>How does the bot work?</h2><p>The bot is designed to be a command line application and can be used either in Linux terminal or in the PowerShell if you are the Windows type ;)</p><p>This choice of adopting a CLI was undoubtebly a bad choice if I wanted to make other people use the application but in my case I am the end user, and I like command line tools, a lot.</p><p>For each subreddit entered, the bot checks if that subreddit exists, if it doesn’t the subreddit is discarded. Then, within each subreddit, the bot searches the first –l posts and returns the posts that contained at least a keyword.</p><p>This is an example of use:</p><pre><code>reddit_browsing_bot_main.py -s python -k pycon -l 80 -f new -o output.txt –v</code></pre><pre><font face="Calibri">In the example above I am searching the first 80 posts in the “new” section of the python <br></font><font face="Calibri">subreddit for posts that mention pycon. The –o flag tells the program to output the results <br>of the search to the output.txt file. The –v flag makes the program print the output to the<br>console.</font></pre><pre><font face="Calibri">You can search in more subreddits and/or use more keywords, just separate each new<br>subreddit/keyword with a comma. If you did not supply an output file, the program will<br>just output the results to the console.</font></pre><pre><font face="Calibri">Type:</font></pre><pre><code>reddit_browsing_bot_main.py -h</code></pre><pre><font face="Calibri">for a help menu. Maybe in the future I’ll add some features but for now this is pretty much it. </font></pre><h2>Is it ok to use the bot?</h2><pre><font face="Calibri">As far as I know, the bot is not violating any of the terms written in the Reddit’s API. Also,<br>the API calls are already limited by the <strong>praw</strong> module in order to comply with the Reddit’s<br>API limits. The bot is not downvoting nor upvoting any post, it just reads what is online.</font></pre><pre><font face="Calibri">Anyway, should you want to check the code yourself, it is available on its dedicated <br><font face="Calibri"><a href="https://github.com/mick001/Reddit_Browsing_Bot">GitHub repository</a> or on the <a href="https://mick001.github.io/Reddit-Browsing-Bot/">project page</a>.</font></font></pre><pre><font face="Calibri">I’ve also copied and pasted a gist below so that you can have a look at the code here:</font></pre><pre><font face="Calibri"><br></font></pre>
<script src="https://gist.github.com/mick001/a24e63a4244cd018c2e61310194b512e.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com16tag:blogger.com,1999:blog-5952320191615496730.post-32096662813925056302017-09-03T21:48:00.000+01:002017-09-03T22:31:36.660+01:00Let Python do the job for you: AutoCAD drawings printing bot<p>Recently I’ve been getting familiar with AutoCAD and at the same time I’m trying to improve my Python skills. Odd mix, huh?!</p><p>While trying to improve my Python skills I thought I could exercise myself on automating boring tasks. I remembered that a few years ago I was given a boring job which involved printing a lot of drawings directly in PDF format from Autocad. I was too lazy to print the drawings one by one and I knew the process could be automated. At the time I put together a Python script that did the job fine, but it was a bit messy. I thought I could make an improved version.</p><p>When nice APIs are not available, such as in the case of AutoCAD (at least that was the case a few years ago, nowdays things may have changed), using Pyautogui may help in the task of automating boring tasks.</p><a name='more'></a><p>The logic of the program is simple:</p><ol><li>Look for all the .dwg files in a directory given by the user.</li><li>For each file, open the file using the default program, then emulate the sequence of keys the user would need to press in order to print out the file in .pdf format.</li><li>Check if file has been printed.</li><li>Save log at all the steps in a log file.</li></ol><p>Other than the fail safe provided by Pyautogui, some other checks have been added.</p><p>A small disadvantage of this program is that it assumes that the drawings are ready to be printed and that the selected printer can be chosen by pressing “am” on the printing menu. These assumptions come basically from the choice of automating the process using Pyautogui and making the program do every single step as a human would do using the computer’s GUI. On the other hand, by going through the printing procedure on your machine and by editing the Pyautogui steps on the code, you can easily fit the code to your needs.</p><p>If anything, this is another example of how Python can help in everyday tasks too. The program is shown in a gist below.</p><p><br></p>
<script src="https://gist.github.com/mick001/c41958fceca7f4d3c4f1d90fea0534c0.js"></script>
<p> Thanks for reading this post.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com35tag:blogger.com,1999:blog-5952320191615496730.post-70446096357603421682017-09-02T17:51:00.000+01:002017-09-02T22:59:57.947+01:00How would you make a very simple and rotating magnetic field starting from a three phase power supply?<p>Recently I had a brilliant idea :D why not make a rotating magnetic field that can rotate a needle of a compass? (or any other magnetic needle for that matter).</p><p>Ok but the design must be very basic. One possible option would be the following:</p><p><a href="https://lh3.googleusercontent.com/-JsSZIUtrt5U/WaspzPoiXiI/AAAAAAAAB_c/K7IA_ZZwWEQBjYI5v3ZMPd-ZvJZ0cN2nACHMYCw/s1600-h/Image%2B34%255B4%255D"><img width="491" height="341" title="Image 34" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 34" src="https://lh3.googleusercontent.com/-UXgxjFooY9w/WaspzhbP-tI/AAAAAAAAB_g/XOUBqHIiEcECkFEm7gGrCl2_IBhEbLIywCHMYCw/Image%2B34_thumb%255B2%255D?imgmax=800" border="0"></a></p><a name='more'></a><p>This is, probably, one of the easiest analog choices for a very low power and easy three phase power supply. </p><p>How does it work?</p><p>At the x1-1 terminal a sinusoidal voltage must be applied. Ideally a 1 V sinusoidal voltage. Let’s call this voltage V1 </p><ol><li>The first branch (C1 + R6 plus all the other series components) applies a 120° phase shift (60° + 60°) through the use of two carefully tuned RC filters. In order to compensate for the loss in amplitude, two non-inverting op amps are added after each RC filter. Then a buffer ensures is used to apply the voltage to the load and two transistors in a push and pull configuration supply all the current needed. The voltage applied to the load, let’s call it V2 is shifted 120° with respect to V1.</li><li>The second branch (C3 + R11 plus all the other series components) applies a –120° phase shift (60° -180°). The voltage applied to the load, let’s call it V3, is shifted -120° with respect to V1.</li><li>The third branch simply applies V1 to the output.</li></ol><p>And there we have it. It’s worth noting that this circuit is very low power. The inductors L1, L2 and L3 are home made using copper wire. The resistors R7, R9 and R16 are used to limit the current absorbed by the inductors. You can choose the current through the inductors by dimensioning these resistors. Just be sure to not overload the transistor pair. After having built the circuit, all that is left is to postion the three inductors in a star configuration at 120° one from the other and there you have a two pole rotating magnetic field.</p><p>Below is the simulation with LTspice that I’ve run. Please don’t mind the name of the components which are different from the ones in the drawing above. Also, in the example below, the limiting resistors are set to a value of 2.5 Ohms letting through the inductors a current of 400 mA peak to peak. The resistance of the inductors is assumed to be negligible. The inductance values assigned are just for reference, they will depend on how you build the inductors, for example, if you build a simple coil of wire the inductance will be approximately equal to $L =\frac{\mu N^2 S}{l}$ where $S$ is the section of the coil, $l$ its length, $N$ the number of turns and $\mu$ the magnetic permeability of the air.</p><p><a href="https://lh3.googleusercontent.com/-TjZHCUofqJA/Wasp0EV4C8I/AAAAAAAAB_k/fujR0jJjqW4st5lAos1ezG_S1k8S6GfZQCHMYCw/s1600-h/Image%2B32%255B4%255D"><img width="568" height="253" title="Image 32" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 32" src="https://lh3.googleusercontent.com/-kkIUQ6ufEB4/Wasp0v9ZswI/AAAAAAAAB_o/KK7roiS5J3wH-q67oBwCR-R4akxrbKldQCHMYCw/Image%2B32_thumb%255B2%255D?imgmax=800" border="0"></a></p><p><a href="https://lh3.googleusercontent.com/-ixK3-Ml48VA/Wasp2tfZp9I/AAAAAAAAB_s/YG3Ez0Xi2HISSIaxPWiRgiayOJJmgsDTgCHMYCw/s1600-h/Image%2B33%255B4%255D"><img width="437" height="244" title="Image 33" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 33" src="https://lh3.googleusercontent.com/-KbUuEPtVcTo/Wasp3SQfk6I/AAAAAAAAB_w/A95oD16MWJIjHgM97ac12k4aB2gRSsKsACHMYCw/Image%2B33_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>Pros:</p><ul><li>Easy to set up.</li><li>Easy to understand.</li><li>Uses common components. No special requirements for the op amps.</li></ul><p>Cons:</p><ul><li>Dual supply rails and low power.</li><li>Requires sinusoidal voltage input. However, this can be either built using an oscillator, or a mobile phone app can be used to generate a sinusoidal wave.</li></ul><p>All in all I like this circuit. It’s analog and very simple. I hope you like it and had fun reading this post. If you have any suggestion or you’d like to show me your circuits, then leave a comment below.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com0tag:blogger.com,1999:blog-5952320191615496730.post-63574209967924995932017-09-02T16:40:00.000+01:002017-12-24T01:50:51.065+00:00Simulation of the electric field of a three phase cable using FEMMFinding analytical solutions to physical problems is always nice and rewarding, however it can be a bit of a pain when the geometry of the problem (just to mention one possible hustle) becomes more complex than just a sphere, a cylinder or any other basic shape.<br />
If you think of a simple cable, with a copper core and a PVC insulation, calculating the electric field generated in the insulation layer using pen and paper may still be feasible, however, using FEMM greatly improves your life when doing calculations as an engineer, student, or “just” curious person. <br />
This simple cable can be modelled using FEMM as follows<br />
<br />
<a href="https://lh3.googleusercontent.com/-NNfkiEAdF9M/WasXmbLhpTI/AAAAAAAAB-A/SD7b3o4sJHgL018QXphNJQIAvp1AJDpgQCHMYCw/s1600-h/Image%2B20%255B2%255D"><img alt="Image 20" border="0" height="231" src="https://lh3.googleusercontent.com/-BQYc9tOVFUQ/WasXmz6ykQI/AAAAAAAAB-E/NF5VBeOBOc4x0k4QCgzpSvpZmZ7FchssQCHMYCw/Image%2B20_thumb?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 20" width="244" /></a><br />
<br />
The cable has a total diameter of 7 cm, with a first PVC insulation with a radius of 2.6 cm, a 0.05cm air gap and another PVC insulation layer.<br />
<a name='more'></a>The permittivity of air is 1 while PVC has a permittivity of 3. The inner copper conductor is assumed to be at a potential of 22 kV while the outer boundary condition is set to 0 V. By running the simulation this is the obtained result<br />
<br />
<a href="https://lh3.googleusercontent.com/-GskxVYCZDkY/WasXnm52S0I/AAAAAAAAB-I/xgzWh8l2mzo7_yS_-8BC4N1BeeC-fiKNwCHMYCw/s1600-h/Image%2B21%255B6%255D"><img alt="Image 21" border="0" height="284" src="https://lh3.googleusercontent.com/-RRd8Xesqa_s/WasXosvnE_I/AAAAAAAAB-M/w2BrO_ccyEIdPN3Tal2GkKRiy4NEg-vVwCHMYCw/Image%2B21_thumb%255B4%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 21" width="474" /></a><br />
<a href="https://lh3.googleusercontent.com/-CroBCx6PrGo/WasXpF1d75I/AAAAAAAAB-Q/IXjINjudHpcDbZV9MhNUtbPTgJe74CsSwCHMYCw/s1600-h/Image%2B22%255B3%255D"><img alt="Image 22" border="0" height="220" src="https://lh3.googleusercontent.com/-dIojWNbhtvk/WasXplHI78I/AAAAAAAAB-U/18Sc5-2xSUkEWB4z2-pTQLxud3s8n0OyACHMYCw/Image%2B22_thumb%255B1%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 22" width="471" /></a><br />
<a href="https://lh3.googleusercontent.com/-7R2-2ZDwKzQ/WasXqmf_j5I/AAAAAAAAB-Y/ErQ5SXkkfYss--7hTSPRCn30BI8UQkF_wCHMYCw/s1600-h/Image%2B23%255B4%255D"><img alt="Image 23" border="0" height="226" src="https://lh3.googleusercontent.com/-S8zv3c1PiAY/WasXq6zm3sI/AAAAAAAAB-c/aISZnozv7yUzrq4p1PsXY2p5syUpFM1yQCHMYCw/Image%2B23_thumb%255B2%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 23" width="471" /></a><br />
<br />
As expected the voltage goes down as we approach the external boundary. What about the electric field? The electric field goes down as well, however, close when we approach the air gap it suddenly jumps up and then down again as soon as we re-enter the PVC insulation layer. This behaviour can be explained because air has a permittivity 3 times lower than PVC.<br />
Enough games now. Let’s bring out the big guns: a three phase cable!<br />
<br />
<a href="https://lh3.googleusercontent.com/-3IGts5Ie-6c/WasXrj1D3NI/AAAAAAAAB-g/hyUPhIPYsuEh4NvVsKV13coKRxhTO9FzgCHMYCw/s1600-h/Image%2B24%255B2%255D"><img alt="Image 24" border="0" height="242" src="https://lh3.googleusercontent.com/-ZvvLIbmmDvM/WasXsY3fFNI/AAAAAAAAB-k/4mOOaaA1onoFBWG_-7vP6WBTT9Dq2C77ACHMYCw/Image%2B24_thumb?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 24" width="244" /></a><br />
<br />
This is a more realistic three phase cable that can be described as follows:<br />
<ul>
<li>Each conductor is insulated using rubber as a primary insulator.</li>
<li>The second insulation layer is made out of PVC.</li>
<li>We are going to assume that the upper conductor is at a potential of 9.8 kV while the other two sit at –4.9 kV. The outer boundary is at 0 V as usual.</li>
</ul>
Let’s start the simulation. The results are portraied below<br />
<br />
<a href="https://lh3.googleusercontent.com/-0Dvrrumh3DQ/WasXtfBuIMI/AAAAAAAAB-o/MgZEiZ_24P4qunDvMNynS9UXnfXvqPgiwCHMYCw/s1600-h/Image%2B25%255B7%255D"><img alt="Image 25" border="0" height="282" src="https://lh3.googleusercontent.com/-PqHllu5gU8g/WasXuB_VUmI/AAAAAAAAB-s/3UoeiqSQ33o1UjPKHH7EXlXMVSbg4rfGwCHMYCw/Image%2B25_thumb%255B5%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 25" width="472" /></a><br />
<br />
The absolute value of the electric field and of the potential on the outer edge of the primary insulator of the upper conductor, are represented below<br />
<br />
<a href="https://lh3.googleusercontent.com/-Zs78jiONlaw/WasXu16Ya0I/AAAAAAAAB-w/AvYWzrD7G2g-t0cqzAaFDxvxCnG3AcN4ACHMYCw/s1600-h/Image%2B30%255B3%255D"><img alt="Image 30" border="0" height="218" src="https://lh3.googleusercontent.com/-HJ_JuzCfm7I/WasXvbJ_XII/AAAAAAAAB-0/N86rN-bPc1MvLco6A0yTi8ovOdvK7K6_gCHMYCw/Image%2B30_thumb%255B1%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 30" width="476" /></a><br />
<a href="https://lh3.googleusercontent.com/-y7szMVkvJGM/WasXv7Pz9GI/AAAAAAAAB-4/OQ_IF0IWZzUZN7kwkPOxdyn4Rvh2dXIIACHMYCw/s1600-h/voltage_outer_border_1st_insulator_layer_upper_conductor%255B3%255D"><img alt="voltage_outer_border_1st_insulator_layer_upper_conductor" border="0" height="220" src="https://lh3.googleusercontent.com/-dHCCchiZ3ow/WasXwHSTvYI/AAAAAAAAB-8/tJtAxBXRMkQQVC6GnqVmhtlq6hR3kaSHgCHMYCw/voltage_outer_border_1st_insulator_layer_upper_conductor_thumb%255B1%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="voltage_outer_border_1st_insulator_layer_upper_conductor" width="479" /></a><br />
<br />
The absolute value of the electric field and of the potential on the outer edge of the primary insulator of the conductor on the lower left side, are represented below.<br />
<br />
<a href="https://lh3.googleusercontent.com/-PRoY7IV0kak/WasXwmmg5hI/AAAAAAAAB_A/Xe1zafStjSAGcDGmPV_lapkXFauM5YXOgCHMYCw/s1600-h/Image%2B28%255B3%255D"><img alt="Image 28" border="0" height="224" src="https://lh3.googleusercontent.com/-OMiS1vZWttQ/WasXxOGMfAI/AAAAAAAAB_E/5I8UA0J6zwwKkYzj2jkGG7bhCjLg9vj-ACHMYCw/Image%2B28_thumb%255B1%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 28" width="485" /></a><a href="https://lh3.googleusercontent.com/-_a_bgEGOP_Y/WasXxtVWlOI/AAAAAAAAB_I/tj5_-VUeb786FaqXPuYlOX6hWJZTwvg2gCHMYCw/s1600-h/Image%2B29%255B4%255D"><img alt="Image 29" border="0" height="232" src="https://lh3.googleusercontent.com/-SbglprpEWnc/WasXyBZ5fvI/AAAAAAAAB_M/WLyN3UF9NtIyA7PndufPOAQls11igmcmACHMYCw/Image%2B29_thumb%255B2%255D?imgmax=800" style="background-image: none; display: block; float: none; margin-left: auto; margin-right: auto;" title="Image 29" width="486" /></a><br />
<br />
As you can see, the three conductors are influenced by the presence of the other two and the electric field and the potential reflect these influences. I hope you enjoyed this quick simulation, if you’d like to take a closer look you can download the files <a href="https://www.dropbox.com/s/bjvjc18izc5ub1q/FEMM_cables.zip?dl=0" target="_blank">here</a>.<br />
Thanks for reading this post.Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com3tag:blogger.com,1999:blog-5952320191615496730.post-77725976443944550012017-09-01T21:52:00.001+01:002017-09-03T22:41:07.483+01:00Magnetics simulation with FEMM<p>FEMM stands for Finite Element Method Magnetics, and it is a nice software for solving magnetics and electrostatics problems.</p><p>I’ve known FEMM for at least a couple of years but I’ve never tried it out and used it at its full power! Now the time has come to do that!</p><p><a href="https://lh3.googleusercontent.com/-keKDvM04ev0/WarsybDkWLI/AAAAAAAAB7Q/_k2lLdfq--oCIXGl_JW65pjL7-sitn9JwCHMYCw/s1600-h/Image%2B1%255B6%255D"><img width="541" height="307" title="Image 1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 1" src="https://lh3.googleusercontent.com/-NU4UW7FIOvs/WarsziHBJTI/AAAAAAAAB7U/5Pb_UchhhXsqUc9-tHeUibkfJQvZ_ZAaQCHMYCw/Image%2B1_thumb%255B4%255D?imgmax=800" border="0"></a></p><p>In this post I’m going to present the results of the following simulations:</p><ol><li>A C shaped electromagnet (detailed results).</li><li>The magnetic field of the rotor of a 4 poles synchronous machine (brief overview).</li></ol><a name='more'></a><h2>C shaped electromagnet</h2><p>A C shaped electromagnet is pretty much what the name says: a C shaped bloc of iron or other ferromagnetic material with a coil wrapped around the body of the C. A C shaped electromagnet can be found, for instance, in a shaded pole motor. In FEMM we can easily model such simple geometry as follows</p><p><a href="https://lh3.googleusercontent.com/-2nBuIggJ30k/Wars0FLDuUI/AAAAAAAAB7Y/MVYXjoLyevArFbU9nZ5TZUApEEbKcTf1ACHMYCw/s1600-h/c_magnet%255B13%255D"><img width="277" height="270" title="c_magnet" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="c_magnet" src="https://lh3.googleusercontent.com/-7aj0C37JXpo/Wars0vIKgMI/AAAAAAAAB7c/aCb1RsGXo40hKEEeAm0B2coU1_F2Hv8zgCHMYCw/c_magnet_thumb%255B11%255D?imgmax=800" border="0"></a><a href="https://lh3.googleusercontent.com/-u0NRN8cOVHA/Wars1Zv6GbI/AAAAAAAAB7g/SJVrsWMzuvk2QhAj8_PZU1O3XMCzbDa-gCHMYCw/s1600-h/electro_mesh%255B5%255D"><img width="278" height="273" title="electro_mesh" style="margin-right: auto; margin-left: auto; float: none; display: block;" alt="electro_mesh" src="https://lh3.googleusercontent.com/-OmRD2DVJj-U/Wars2D_asbI/AAAAAAAAB7k/dF6FWi0_gTQ9UNBYEX3w2FpmI5sErF1DQCHMYCw/electro_mesh_thumb%255B3%255D?imgmax=800"></a></p><p>I’ve assumed that the core is made of pure iron and that the windings of the coil consist of 500 turns of 18 AWG copper. Both these parameters can be changed according to the materials available in the materials library of the program. After running the mesh generator, if everything is fine, we should obtain a full mesh. The circle represents the boundary condition I’ve set for this example. Setting a boundary condition is not required (the program runs anyway) but strongly suggested for better resutls.</p><p>From the theory, we would expect the following: </p><p>The magnetic circuit associated with the problem at hand can be obtained using the following equation:</p><p>$$\oint_{c}^{ }\vec{H}d\vec{l}= \sum_{i}^{n}R_i \phi_i =M=NI$$</p><p>Where:</p><ul><li>$c$ is the contour of integration (think of it as a flux line).</li><li>$\vec{H}$ is the magnetic field along that flux line.</li><li>$R_i$ is the reluctance of the flux tube we are considering. Note that $R_i = \frac{l_i}{\mu A_i}$ with $\mu$ being the magnetic permeability of the material, $l_i$ the length and $A_i$ the area of the chunk f material permeated by the magnetic flux. We have 4 different flux tube to account for, so $n = 4$.</li><li>$M = N I$ is the magnetomotive force and it is equal to the sum of the current concatenated to the contour of integration that is equal to the number of turns of the coil multiplied by the current flowing in the coil.</li></ul><p>Note that the following magnetic circuit (assuming no flux leakage) can be obtained from the equation stated above:</p><p><a href="https://lh3.googleusercontent.com/-nhxznoTUrPM/Wars2nqOA1I/AAAAAAAAB7o/0TFO7eo32g4bUoXE_r-Ja6vSty2cFTenACHMYCw/s1600-h/Image%2B5%255B4%255D"><img width="350" height="272" title="Image 5" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 5" src="https://lh3.googleusercontent.com/-DTW5Qr9zylc/Wars3BwtB7I/AAAAAAAAB7s/pQp4vQtB9kMYhkEoIJn7ygidpuCjG6RJACHMYCw/Image%2B5_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>The relationship between the magnetic induction $B$ and the magnetic field $H$ depends on the material used:</p><p>$$B = \mu H$$</p><p>In the case of ferromagnetic materials, this relationship is non-linear, while in the case of the air it is. Furthermore $\mu_{air} << \mu_{iron}$.</p><p>The magnetic flux is equal to:</p><p>$$\phi = B A$$</p><p>and the energy stored in a chunk of material is equal to $\frac{1}{2} l_i A_i \mu_{air} H^2$.</p><p>Usually, since $\mu_{air} << \mu_{iron}$, in a school problem scenario the reluctances of the iron core are neglected because the drop of magnetic tension in the iron core is very small compared to the drop in the air gap. If you make this assumption, then all the magnetic energy stored in the system is concentrated in the air gap. We will see that this is not the case in this simulation. This simplifying assumption is fine for getting a rough idea of how the system behaves though.</p><p>We could expect the following:</p><ul><li>The magnetic flux $\phi$ should be within the same order of magnitude at all points which means that also the magnetic induction $B$ should vary within the same order of magnitude.</li><li>The magnetic field $H$ should be much stronger in the air gap then in the core since $$B = \mu H$$ and $\mu_{air} << \mu_{iron}$.</li><li>The magnetic tension drop should be higher in the air gap compared than in the iron core.</li><li>The magnetic tension drop around the system perimeter should equal the magnetomotive force.</li></ul><p>Let’s run the simulation and analyse the results:</p><p><a href="https://lh3.googleusercontent.com/-X6RhP_JD4_E/Wars4iSIC_I/AAAAAAAAB7w/L5U0-11hoIgTbonOFrSb39FKW0VKSB1eQCHMYCw/s1600-h/induction%255B4%255D"><img width="533" height="242" title="induction" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="induction" src="https://lh3.googleusercontent.com/-fcyUR1hihio/Wars5_DdKAI/AAAAAAAAB70/Jz-Y8LlZ4noCS3drQ82jokuNHd-2loyEQCHMYCw/induction_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>First off, we can note that some flux lines are outside the magnetic core. These flux is called <strong>leakage flux</strong>. The induction field is stronger in the core and becomes weaker near the air gap, however, the induction field varies between 1.8 and 0.9 T. The magnetic flux is 0.000378472 Wb where the induction is strongest and 0.000220786 Wb where the induction is weaker. Again, note that the flux can be reasonably assumed to be constant. The flux can be calculated by using the integration function of FEMM.</p><p>If we plot the magnetic field $H$ we obtain the following contour</p><p><a href="https://lh3.googleusercontent.com/-MFm1YgoVIyw/Wars9bKR3zI/AAAAAAAAB74/_eM1IO9KXy0wlGNnPyLWbouHZlJ2MrxdwCHMYCw/s1600-h/hfield%255B3%255D"><img width="520" height="253" title="hfield" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="hfield" src="https://lh3.googleusercontent.com/-M2ocTiA9jYM/Wars-uybxXI/AAAAAAAAB78/0EZNSVMEPDQkZXNApkxcBxNe4H_MB0UCgCHMYCw/hfield_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>Bingo, $H$ is much much stronger in the airgap then anywhere else. How much stronger you may ask. Well, at the center of the air gap, the absolute value of $H$ is about 850 000 A/m while in the iron core, at its best, it is close to 20 000 A/m. Not bad, huh?</p><p>The magnetic voltage drop can be found by integrating the magnetic field over the desired contour. The magnetic tension drop in the air gap is about 3400 A while in the whole iron core it is about 1500 A. Again our expectations are met by the simulation. The sum of the tension drops around the magnetic circuit isn’t exactly equal to the magnetomotive force, although it is close.</p><p><a href="https://lh3.googleusercontent.com/-pCE1i-NofLA/Wars_vDZZwI/AAAAAAAAB8A/rVEWSpurSzMB4JiBKXGy_TlPLkjL1F8ywCHMYCw/s1600-h/elettromagnete%255B4%255D"><img width="515" height="317" title="elettromagnete" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="elettromagnete" src="https://lh3.googleusercontent.com/-jLW6_H0Pkmw/WartAVxVaZI/AAAAAAAAB8E/I0sQRs5t-JMQ8AldJuOff5RomAtCLnEFQCHMYCw/elettromagnete_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>If we plot the strength (absolute value) of $B$ from A to F we find the following pattern</p><p><a href="https://lh3.googleusercontent.com/-1Tz6521lDfI/WartA0lodfI/AAAAAAAAB8I/unEY4FHu_YURZ3BZ3NzNgf3RSP84F0OCwCHMYCw/s1600-h/Image%2B9%255B3%255D"><img width="510" height="251" title="Image 9" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 9" src="https://lh3.googleusercontent.com/-o_tbjMu5lFk/WartBfBh2vI/AAAAAAAAB8M/ytklpwj7j1cuSRra8FhwYPRj-TytAGfZgCHMYCw/Image%2B9_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>The induction field is at its lowest in the air gap, while the magnetic field is mostly concentrated in the air gap as expected</p><p><a href="https://lh3.googleusercontent.com/-f_NeXTIDes0/WartB671J9I/AAAAAAAAB8Q/uh25EpI4KK0ro5Z97pDp8pKHDpziPxXigCHMYCw/s1600-h/Image%2B10%255B3%255D"><img width="508" height="237" title="Image 10" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 10" src="https://lh3.googleusercontent.com/-G22fGalfv9w/WartCWUB0II/AAAAAAAAB8U/7fNDRdSHbYk32tKROhFwsnlioleewchrQCHMYCw/Image%2B10_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>If we plot the strengh of the normal component (with respect to the cross section of the iron core) of the $B$ field at the mid point of the A and B we find out that the induction is roughly constant within the cross section of the iron core (look at the scale!).</p><p><a href="https://lh3.googleusercontent.com/-tbCOzvXHdng/WartC0MmSoI/AAAAAAAAB8Y/wJ4kS46jn2QvmYfM6fFVKmxWQlSxyEx3wCHMYCw/s1600-h/Image%2B12%255B5%255D"><img width="526" height="272" title="Image 12" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 12" src="https://lh3.googleusercontent.com/-BGfUHcshg-g/WartDcon01I/AAAAAAAAB8c/Ue76dz2AKEUrISNWxhyuP24db9RKjzWGwCHMYCw/Image%2B12_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>Since in this case there is just one coil and no moving parts, we can interpret the ration $\frac{\phi}{I}$ as the inductance of the electrical circuit. According to FEMM the inductance of the electrical circuit is about 19mH.</p><p><a href="https://lh3.googleusercontent.com/-QAPeH0mWjkI/WartD6ReGWI/AAAAAAAAB8g/RrGP-SLvnwM4-vrfepigNESnQtWyZ994QCHMYCw/s1600-h/Image%2B11%255B3%255D"><img width="337" height="245" title="Image 11" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 11" src="https://lh3.googleusercontent.com/-oR25kwHoc8o/WartERtspbI/AAAAAAAAB8k/EI-9jHsS1MoWFexxQ6s7btb30Q9pJGnZwCHMYCw/Image%2B11_thumb%255B1%255D?imgmax=800" border="0"></a></p><h2>Stepping up the geometry: field windings of a synchronous machine</h2><p>So far I’ve simply scratched the surface of what FEMM can do. It can help you calculate electromagnetic forces, induced currents and much more. As a simple example, below you can find the results of the simulation of the induction field of a 4 poles synchronous machine. Usually, the induction field is generated using a constant current (or permanent magnets). This simulation applies , for example, to a synchronous generator that is rotating with the stator windings open (in that case, no magnetic field is generated by the stator since no current is flowing through those windings).</p><p>This is the FEMM schematics</p><p align="center"><a href="https://lh3.googleusercontent.com/-kHbePS2yDGk/WartE_DXv6I/AAAAAAAAB8o/vV9XbiIDsm4agRzZxzle1LiiGAEoPLVYgCHMYCw/s1600-h/Image%2B19%255B3%255D"><img width="320" height="327" title="Image 19" style="display: inline; background-image: none;" alt="Image 19" src="https://lh3.googleusercontent.com/-baUS4qkN7xs/WartFrQhhSI/AAAAAAAAB8s/VAvGdMtEMwEsGDAPj0-i54_kQl5DaR1BgCHMYCw/Image%2B19_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>The generator is modelled using M22 steel. The following pictures represent a 90 degree turn of a synchronous generator with no load attached</p><p align="center"><a href="https://lh3.googleusercontent.com/-xriuc5PcPFc/WartHsmzLcI/AAAAAAAAB8w/Yu3Y-TDCTe4A0LP5lU1bC7n0oQ-hbbwgwCHMYCw/s1600-h/Image%2B001%255B4%255D"><img width="439" height="256" title="Image 001" style="display: inline; background-image: none;" alt="Image 001" src="https://lh3.googleusercontent.com/-4zbZIDVbBBw/WartIjR5ETI/AAAAAAAAB80/Vkm3rOjui24jUKLQJwZcDC-rdLsnP-1BACHMYCw/Image%2B001_thumb%255B2%255D?imgmax=800" border="0"></a></p><p align="center"><a href="https://lh3.googleusercontent.com/-IMbg-IKSKBM/WartKZ21CPI/AAAAAAAAB84/QN_bbAioFZoA0_T3FCh0GGryZ8YHFUGwACHMYCw/s1600-h/Image%2B002%255B3%255D"><img width="442" height="256" title="Image 002" style="display: inline; background-image: none;" alt="Image 002" src="https://lh3.googleusercontent.com/-Ko70gpuiGwQ/WartLfTYEwI/AAAAAAAAB88/UGLznVwXRx85PXiw-eG5j44iams-SqqtACHMYCw/Image%2B002_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center"><a href="https://lh3.googleusercontent.com/-Sh81Uq2Vg0g/WartM3gv5fI/AAAAAAAAB9A/7yubN7JUMiAQiSOAiAw1zhrl1tVjNH_GwCHMYCw/s1600-h/Image%2B003%255B8%255D"><img width="443" height="260" title="Image 003" style="display: inline; background-image: none;" alt="Image 003" src="https://lh3.googleusercontent.com/-GXBYwmqng1A/WartOBqZdCI/AAAAAAAAB9E/Wyjh61G6YB0ARIR2Dnj3_-I7qOI0d03DQCHMYCw/Image%2B003_thumb%255B4%255D?imgmax=800" border="0"></a></p><p align="center"><a href="https://lh3.googleusercontent.com/-4Eyf8DYeBu4/WartPvIqY4I/AAAAAAAAB9I/5wRJy3mJQXY9cVps_M0yeSDseLMwM5nbACHMYCw/s1600-h/Image%2B004%255B3%255D"><img width="438" height="261" title="Image 004" style="display: inline; background-image: none;" alt="Image 004" src="https://lh3.googleusercontent.com/-b0dK3MWf_nM/WartQ6X1ZrI/AAAAAAAAB9M/4IIQ9sWjypUpXl7fpe_nVTq7MHpZAcDJgCHMYCw/Image%2B004_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center"><a href="https://lh3.googleusercontent.com/-Y9hM1TUhgM4/WartSFeEkVI/AAAAAAAAB9Q/0u4G44pgdQcytQKreRFct3hvlZdDyz_iQCHMYCw/s1600-h/Image%2B005%255B3%255D"><img width="438" height="259" title="Image 005" style="display: inline; background-image: none;" alt="Image 005" src="https://lh3.googleusercontent.com/-cw0aIp5vLg0/WartTFF5slI/AAAAAAAAB9U/AlDg0PM-TVwWIB5lVDEulaEWOM6XjuctgCHMYCw/Image%2B005_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center"><a href="https://lh3.googleusercontent.com/-k0XjbADKu4I/WartUiqKqJI/AAAAAAAAB9Y/d6SmlIqEjCkIQ_sLyUFyOrn0eSfepLXnQCHMYCw/s1600-h/Image%2B006%255B4%255D"><img width="435" height="256" title="Image 006" style="display: inline; background-image: none;" alt="Image 006" src="https://lh3.googleusercontent.com/-h4yDTnqTLNs/WartVYQmtKI/AAAAAAAAB9c/XIp_eXLax6oJcSWvscCUlEh5Nz88l_fagCHMYCw/Image%2B006_thumb%255B2%255D?imgmax=800" border="0"></a></p><p align="left">Note how the field lines change. The head of the poles tend to be saturated much faster than the air gap.</p><p align="left">I hope you enjoyed this overview of some of the functions of FEMM for magnetics simulations. The files of the simulations can be downloaded <a href="https://www.dropbox.com/s/fmabav36e1hq6ij/FEMM_magnetics.zip?dl=0">here</a>. Please do share this post if you have found it useful or interesting or even in the case you liked the pretty pictures :D.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com4tag:blogger.com,1999:blog-5952320191615496730.post-30249035455406768902017-08-30T22:49:00.001+01:002017-09-02T20:48:02.508+01:00Another typical control problem: balancing a ball on a beam<p>Balancing a ball on a beam is not a common problem you may face during your everyday life, however, this simple example of engineering can be extended to more complex problems and, in general, to other more interesting control problems such as</p><ul><li>Control of temperature in a room</li><li>Control of robots</li><li>Control of automated cars</li><li>Control of industrial processes</li></ul><p>The main problem tackled in this article is the design and implementation of a basic PID based controller to control the position of a ping pong ball on a beam. Ideally the controller should be able to set the position to whatever value of the x axis the user decides to apply. This is a simple scheme of the physical system</p><p align="center"><a href="https://lh3.googleusercontent.com/-x9z0FL1l3Co/WadMp2iQitI/AAAAAAAAB5c/whqivV6cwiI7BsYQsYhFvaerD3BBmsA2gCHMYCw/s1600-h/schema1%255B10%255D"><img width="365" height="204" title="schema1" style="display: inline; background-image: none;" alt="schema1" src="https://lh3.googleusercontent.com/-K1rp-fIMMpE/WadMqhbSS-I/AAAAAAAAB5g/DvqtIfNtOe4CRmBNVhxasJ4IhhwBk5g-ACHMYCw/schema1_thumb%255B4%255D?imgmax=800" border="0"></a></p><a name='more'></a><p>The aim of the project is to design a digital controller that can set the position of the ping pong ball and reject noise. I am going to use a controller of the PID family since it is simple and widely used in the industry.</p><h2>The physical system</h2><p>First of all comes the study of the physical system. The problem can be generalized to other dimensions however, for the sake of simplicity it is limited to one spatial dimension. Note that we are using a rotating reference frame which is joint to the moving stick. Below is the sketch of the free body diagram:</p><p align="center"><a href="https://lh3.googleusercontent.com/-e4uz8fulllg/WadMrM1dVFI/AAAAAAAAB5k/wt1zV2UZ6s4TKhWsVR5mJo1cJq1Ldx2_ACHMYCw/s1600-h/schema2%255B13%255D"><img width="377" height="267" title="schema2" style="display: inline; background-image: none;" alt="schema2" src="https://lh3.googleusercontent.com/-re_S9lXTELM/WadMrvB5uSI/AAAAAAAAB5o/oyq5QGHJku88IdiKSvb6Qj8PXJtMZuvaQCHMYCw/schema2_thumb%255B9%255D?imgmax=800" border="0"></a></p><p>As you can see, there is basically only gravity as major force at play, the other forces will be used to write down the equations needed to determine the relationship between the angle of the support and the acceleration of the ball.</p>
<p>At this point, we can label our variables as follows:</p>
<p>1. The **controlled variable** is the $x$ position of the ball.<br>
2. The **control variable** is the angle of the stick $\theta$. This is going to be the variable directly affected by the controller through the servomotor.</p>
<p>We can now write the equilibrium equations for the ball and solve for the acceleration</p><p>$$<br>
\left\{\begin{matrix}<br>
N - mg\cos \theta = 0<br>
\\<br>
mg\sin \theta + m\ddot{x} + T = 0<br>
\\ <br>
RT - J_d \dot{\omega_d} = 0<br>
\end{matrix}\right.<br>
$$</p><p>where:</p>
<p>the angular velocity:<br>
$$\dot{\omega_d} = \ddot{\theta} = \frac{\ddot{x}}{R}$$</p><p>$J_d$ is the moment of inertia of the ball (which has no mass inside of it):<br>
$$J_d = \frac{2}{5}mR^2$$</p><p>By solving the equation we find out that the acceleration on the x axis is equal to:</p>
<p>$$\ddot{x} = -\frac{5}{7}g\sin \theta$$</p><p>Now we need to approximate theta since the $\sin$ function is not very manageable.<br>
For small $\theta$, angles we can approximate $\sin theta$ to be equal to $\theta$. This approximation is usually good, however, we might want to remember this when designing the controller later.</p>
<h2>The continuous transfer function of the system</h2>
<p>The continuous transfer function of the system can be found by applying the Laplace transform to both sides of the last equation and dividing the output variable by the input variable:</p>
<p>$$s^2 X(s) = \frac{5}{7} g \Theta (s)$$</p><p>$$\frac{X(s)}{\Theta(s)} = G(s) = \frac{5}{7}g\frac{1}{s^2} = \frac{k}{s^2}$$</p><p>We ended up with a very simple transfer function with two poles in the origin. This function can be studied in MATLAB although it is not that interesting:</p><p><a href="https://lh3.googleusercontent.com/-ITnY11dnXIw/WadMsOWkjSI/AAAAAAAAB5s/J3Oh-NBCPmQV80Fjs6Wpch7yGDz1YPyugCHMYCw/s1600-h/bode_g%255B3%255D"><img width="412" height="310" title="bode_g" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="bode_g" src="https://lh3.googleusercontent.com/-8BKGhLGP8_o/WadMskdLvhI/AAAAAAAAB5w/80SGV8hbMrc_49V2eDnD1O7UsHAajRUMgCHMYCw/bode_g_thumb%255B1%255D?imgmax=800" border="0"></a></p><h2><br></h2><h2>Finding the appropriate controller in a closed loop</h2>
<p>By putting the transfer function in a closed negative feedback loop we need a controller to be used to steer our system towards the desired goal.</p><p><a href="https://lh3.googleusercontent.com/-24YMku9qIbg/WadMs8KVQwI/AAAAAAAAB50/JZc5RZ6QkvQZAHbkeywEs9-Ft6j7XVEPwCHMYCw/s1600-h/cloop%255B3%255D"><img width="407" height="147" title="cloop" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="cloop" src="https://lh3.googleusercontent.com/-SNyWElV4GSA/WadMtRyK-cI/AAAAAAAAB54/NpiD1g4obPkJF11K0OIZy_fyGALtVClbwCHMYCw/cloop_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>The system, on its own, is unstable. A controller is needed. Since there are already two poles in the origin, without a controller (ie with R(s) = 1) the phase margin is zero and the system is unstable. While a proportional controller is not enough and a PI controller would worsen the problems, a PD controller is perfect for the task at hand. A pure PD controller though does not exist in practice therefore, an approximated version is needed:</p><p>$$ R(s) = k_p + D \frac{N}{1+\frac{N}{s}}$$</p><p>The closed loop function $L(s) = N(s)/D(s)$ becomes</p>
<p>$$L(s) = R(s)G(s)</p><p>Since the transfer function from $\theta$ to $x$ in a closed loop is given by $\frac{L(s)}{1+L(s)}$ The closed loop poles are given by the following equation</p>
<p>$$1 + L(s) = N(s) + D(s) = 0$$</p><p>The closed loop poles depend on the parameters of the controller. We can now tweak those parameters in order to modify the response of the system. By using the *pidTuner* function in MATLAB you can easily choose the best parameters according to the needs of your project. The <strong>pidTuner function</strong> is awesome since it lets you easily visualize crucial parameters such as overshoot, rise time and settling time.</p><p>In this case, the following values were chosen: $k_p = 0.38$, $D=0.5$ and $N=50$.</p><p><br></p>
<script src="https://gist.github.com/mick001/4965b621a4763ecc809b6670a61b4392.js"></script><p>It is possible to calculate the phase margin directly by using the <strong>margin function</strong> in MATLAB:</p><p><a href="https://lh3.googleusercontent.com/-SdJQ-igPspg/WadMt9mw3_I/AAAAAAAAB58/X3ljP_QZ6vAKjmiOxkXFUhGyvmAp72BLwCHMYCw/s1600-h/phase_margin%255B4%255D"><img width="357" height="269" title="phase_margin" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="phase_margin" src="https://lh3.googleusercontent.com/-P3vxJPZDBzs/WadMu6ODVHI/AAAAAAAAB6A/Vi2ueO0e9YEwz9f2i6-JB2GewAv8AncbgCHMYCw/phase_margin_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>the phase margin appears to be about 73 degrees which is nice to see. The gain of the system is 1 as expected and confirmed by the step response:</p><p><a href="https://lh3.googleusercontent.com/-FZ4n4jaj6pM/WadMvopKpDI/AAAAAAAAB6E/h5Oof62eIQw63G5S6Ewqs9k3refkrL2qQCHMYCw/s1600-h/step_sys%255B3%255D"><img width="357" height="269" title="step_sys" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="step_sys" src="https://lh3.googleusercontent.com/-hmNGVRalI8g/WadMwcJRgvI/AAAAAAAAB6I/shSF3ztpTyIccz3o_5S9GdJuNrT5Ho2HgCHMYCw/step_sys_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>The root locus shows how poles move in the complex plane by varying the gain of the closed loop function from 0 to infinity:</p><p><a href="https://lh3.googleusercontent.com/-1IFbKPHxHlk/WadMxTpCeJI/AAAAAAAAB6M/1lxs1_HOKJQ0a2l7_HRi4kjn3eoWCGBfACHMYCw/s1600-h/rlocus%255B5%255D"><img width="408" height="195" title="rlocus" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="rlocus" src="https://lh3.googleusercontent.com/-_h0DMS7NdBc/WadMx-sfMGI/AAAAAAAAB6Q/5Np9zdM_PgU7Z5NAogxbEgR5R46iBxXuwCHMYCw/rlocus_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>As the gain tends to infinity, the closed loop poles tend to the zeros of the closed loop function (or infinity if there are less poles than zeros). Note that the zero of the controller is exactly -9.09 which is also a zero of the L function.</p><h2>Simulink, a nice shortcut to model a system and design a controller</h2><p>Using Simulink, one could have avoided most of the trouble of simplifying the system or why not compare the simplified and the complete system. Below you can find the schematics of the complete system. The minus sign in the transfer function of the system is needed since I switched the x axis.</p><p><a href="https://lh3.googleusercontent.com/-zo46aoPn7TU/WadMyVHivqI/AAAAAAAAB6U/IqhUFiUi3LEFrntwbabeptP3IdopULa1gCHMYCw/s1600-h/simulink1%255B5%255D"><img width="434" height="93" title="simulink1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="simulink1" src="https://lh3.googleusercontent.com/-Q6gBxljeupI/WadMy9hlYzI/AAAAAAAAB6Y/7D2syQQlcRErXwsbru7CgRm2Rwq-ByVQwCHMYCw/simulink1_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>Detail of the Subsystem modelling the physical system</p><p><a href="https://lh3.googleusercontent.com/-ghnQH2OaSxM/WadMzklsriI/AAAAAAAAB6c/OOTaaqrhqVkNxIiaDBnZBkDhjYhdmk-RQCHMYCw/s1600-h/simulink2%255B3%255D"><img width="438" height="181" title="simulink2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="simulink2" src="https://lh3.googleusercontent.com/-J8qMqKr4oAs/WadM0DqeziI/AAAAAAAAB6g/jj6zFwBxWDUMgxqR3pUt05NEx2uSfo6jACHMYCw/simulink2_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>Complete Simulink schematics</p><p>Note that a saturation bloc is needed since it is probably best to limit the output of the PD controller. In case that the simplified system is used, a saturation bloc is needed to ensure that $\theta < \frac{\pi}{6}$. It is worth noting that by limiting $\theta$, the differences between the simplified and the complete model are very small if noticeable at all. </p><p>Tuning of the controller can be done directly within Simulink </p><p><a href="https://lh3.googleusercontent.com/-danOzXNxSyY/WadM0lk-QLI/AAAAAAAAB6k/z7drtv6T6b8lAxsWAog3BGeoIgpZx_rRgCHMYCw/s1600-h/PID%255B3%255D"><img width="394" height="306" title="PID" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="PID" src="https://lh3.googleusercontent.com/-uJLgEWRRSE0/WadM1dVKi2I/AAAAAAAAB6o/wPw736vms3EavOJopDH6b8htB1jnuAhrwCHMYCw/PID_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>The results of the simulation are displayed in the graph below</p><p align="center"><a href="https://lh3.googleusercontent.com/-KLVVYAOASFo/WadM19ChT5I/AAAAAAAAB6s/wR5xDFfb8BESeFSoeKEFBHRJk766Mq5kwCHMYCw/s1600-h/untitled%255B7%255D"><img width="438" height="205" title="untitled" style="display: inline; background-image: none;" alt="untitled" src="https://lh3.googleusercontent.com/-E1xIMWmel68/WadM2fipIxI/AAAAAAAAB6w/TDXUFjbJLOMiML-X9DhLucU5xTtth8QdgCHMYCw/untitled_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>In orange is displayed the set point, in blue the position on the x axis of the ball and in yellow the output of the PD controller (in radians). The settling time is about 4 seconds.</p><p>Note that the output of the PD controller has been restrained</p><p align="center"><a href="https://lh3.googleusercontent.com/-jOZFqNL7wAQ/WadM2zSk6wI/AAAAAAAAB60/t5it5-IgIbE2GQG7y6RRG1rsuIvmJrhYgCHMYCw/s1600-h/PID_OUT%255B3%255D"><img width="449" height="215" title="PID_OUT" style="display: inline; background-image: none;" alt="PID_OUT" src="https://lh3.googleusercontent.com/-jW_UslU9PA0/WadM3cnTvvI/AAAAAAAAB64/UF1caAl5MgsmV3xGGkWFOCSSnhRMpRozwCHMYCw/PID_OUT_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">PD output</p><h2>How would I go to make such controller though?</h2><p>Well, an old school option is to use old fashioned op amps!</p><p><a href="https://lh3.googleusercontent.com/-vSAaju8a_JA/WadM4cixfDI/AAAAAAAAB68/7bkKXejY7PYvY96ozq5TliABQzo5ZUergCHMYCw/s1600-h/Image%2B15%255B5%255D"><img width="537" height="231" title="Image 15" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 15" src="https://lh3.googleusercontent.com/-zT8FLJ61PNw/WadM42cPHyI/AAAAAAAAB7A/WqiSazCHFtoCEmxwNzXvzyvOjocr1pmKQCHMYCw/Image%2B15_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>You can find the Simulink and LTspice files <a href="https://www.dropbox.com/s/k5veyypb77k15h4/balancing_ball_on_beam.zip?dl=0">here</a>. I hope you enjoyed this article! Have fun!</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com1tag:blogger.com,1999:blog-5952320191615496730.post-65825253184099836562017-08-30T17:54:00.001+01:002017-09-02T20:48:26.501+01:00Modelling a DC motor using LTspice, Simulink and Matlab<p>Electrically speaking, a permanent magnet DC motor can be modelled as follows:</p><p><a href="https://lh3.googleusercontent.com/-tN81wEkuNgs/WacjZw-q_KI/AAAAAAAAB1s/P796fdAj8-kEvQonL9o9tBloIq9NjhrAgCHMYCw/s1600-h/Image%2B1%255B9%255D"><img width="300" height="181" title="Image 1" style="border: 0px currentcolor; border-image: none; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Image 1" src="https://lh3.googleusercontent.com/-FZ1EiVf2xR4/WacjaeyGTvI/AAAAAAAAB1w/n1EetFrREoUnosRwwQFqFD3A95RcrQHggCHMYCw/Image%2B1_thumb%255B7%255D?imgmax=800" border="0"></a></p><p>applying LKT we obtain the following differential equation</p><p>$$v = Ri+L\frac{di}{dt}+e$$</p><p>where $R$ is the equivalent resistance of the brushes plus the windings, $L$ is the inductance as seen from the external terminals of the motor and $e$ is the back EMF. Usually R is very small and can be difficult to measure with a multimeter. The back EMF can be expressed as a function of the speed of the motor $e = k\phi\omega$.</p><a name='more'></a><p>Mechanically speaking, the motor can be modelled by considering the following equation:</p><p>$$J\frac{d\omega}{dt}=C_e-C_r=k_1\phi i - C_r(\omega)$$</p><p><br></p><p>The torque of the motor $C_e$ depends linearly with the current since the flux is constant (permanent magnet generate a constant flux). The opposing torque usually is constant, but in general may be a function of the angular speed of the rotor (think of friction for instance). If we put together these two differential equation, we find the following system:</p><p>$$\left\{\begin{matrix}<br>
\frac{di}{dt} = -\frac{R}{L}i- \frac{k \phi}{L}\omega + \frac{v}{L}<br>
\\<br>
\frac{d\omega}{dt}=\frac{k_1\phi}{J}i - \frac{C_r(\omega)}{J}<br>
\end{matrix}\right.$$</p><p>then, assuming the relationship between $C_r$ and $\omega$ is linear, the following system can be built</p><p>$$\frac{d}{dt}\begin{pmatrix}<br>
i<br>
\\ <br>
\omega<br>
\end{pmatrix}=\begin{pmatrix}<br>
-\frac{R}L{} & -\frac{k \phi}{L}\\ <br>
\frac{k_1 \phi}{J} & -k_f<br>
\end{pmatrix}<br>
\begin{pmatrix}<br>
i<br>
\\ <br>
\omega<br>
\end{pmatrix} + \begin{pmatrix}<br>
\frac{v}{L}<br>
\\ <br>
-C_{r_0}<br>
\end{pmatrix}$$</p><p>The variable of interest is the angular speed of the motor, therefore</p><p>$$y = \begin{pmatrix}<br>
0 & 1<br>
\end{pmatrix}\begin{pmatrix}<br> i<br>
\\ <br> \omega<br> \end{pmatrix}= \omega$$</p><p>Now the system has been transformed in the canonical state</p><p>$$\frac{d}{dt}\bar{x} = \bar{A} \bar{x}+ \bar{B}\bar{u}$$</p><p>$$\bar{y} = \bar{C}\bar{x} + \bar{D}\bar{u}$$</p><p>Using Matlab we can simulate the system response to a unit voltage step. Note that I’m assuming the torque of the mechanical load is constant in this case.</p><p><br></p>
<script src="https://gist.github.com/mick001/ad875d82e981fd149a19885993622f59.js"></script>
<p>As you can see in the comments in the code, the final state of the system can be calculated just by setting every derivative to zero and then solving for the state variables. In this case it turns out that by applying a unit voltage step, the motor is absorbing 0.2 A and turning at a speed of 45.8 rad/s. You can take a look at the transient of the angular speed variable in the graph below</p><p><a href="https://lh3.googleusercontent.com/-gE_SRws4w-8/Wacjav0oDhI/AAAAAAAAB10/774ovor0KTAAH2G9l8-0ORlIy_wJ2uoeACHMYCw/s1600-h/untitled%255B5%255D"><img width="376" height="284" title="untitled" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="untitled" src="https://lh3.googleusercontent.com/-XoWqhnbFyoQ/WacjbYCNfwI/AAAAAAAAB14/qpPcR66EeIQUF0Gcs4hB8rShPW_h60NvwCHMYCw/untitled_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>This is a nice result but we can’t really control the motor. I mean, we can vary the voltage and then get a certain speed as output but in most cases we need a certain speed regardless of the voltage (provided it is within the nominal voltage). In the second part of the code, I decided to put a PI regulator in series with the system and then use negative feedback to control the speed of the motor. Now we can set as an input a certain speed and see how the motor behaves in the transient. By requiring the motor to reach a speed of 1 rad/s, this is the transient that follows:</p><p><a href="https://lh3.googleusercontent.com/-e0ErmqYEjh8/Wacjbmdh43I/AAAAAAAAB18/x2jee4UEj74dHhX3xGKOPlmF58wA8woDwCHMYCw/s1600-h/untitled_%255B6%255D"><img width="377" height="284" title="untitled_" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="untitled_" src="https://lh3.googleusercontent.com/-K2FqlpbdeRk/WacjcDei7fI/AAAAAAAAB2A/0JvrGKdXWnoQy22_CrIfxPjH5Bw_PPA6gCHMYCw/untitled__thumb%255B4%255D?imgmax=800" border="0"></a></p><p>You can immediately notice that the motor took less time to get up to the required speed compared to the previous case. Why is this happeing? This is happening because by inserting a regulator and negative feedback the poles of the system (and therefore its dynamic behaviour) have been changed.</p><h2>Modelling a DC motor with Simulink</h2><p>Simulink, quote, “is a graphical programming environment for modeling, simulating and analyzing multidomain dynamic systems”. Simulink was made for simulating dynamic systems and it is particularly useful whenever you need to simulate models described by differential equations. You may, legitimately, ask why use Simulink? A DC motor is very simple, I can use other tools or even just pen and paper to find out the solution to my questions. I think the advantage of using Simulink is that it allows you to simulate different scenarios and complex models in a very short time. In our example we are simulating a DC motor, but think of a parallel of synchronous generatos, what if you’d like to simulate what happens in case of a short circuit at a specific point in a branch of the transmission line? Let’s see some more interesting simulations on the DC motor. The raw model of the DC motor can be modelled as follows</p><p align="center"><a href="https://lh3.googleusercontent.com/-75phkZDVVjk/WacjcnA4dYI/AAAAAAAAB2E/EBClCifgRRAZqIeGuFEu0vMGsqUYGshngCHMYCw/s1600-h/DC%2Bmotor%2Bmodelling%255B2%255D"><img width="244" height="241" title="DC motor modelling" style="display: inline; background-image: none;" alt="DC motor modelling" src="https://lh3.googleusercontent.com/-W8_cSjGqfps/WacjdEw9svI/AAAAAAAAB2I/fxPtAsoHlmkdpz2Y0OXjFqycN1VbM0rpgCHMYCw/DC%2Bmotor%2Bmodelling_thumb?imgmax=800" border="0"></a></p><p>The model can then be wrapped in a subsystem and then used within other models. For example, let’s simulate a short circuit. In the following example the motor is started at time 0 with a 24 V step. At 60 seconds, a short circuit happens, the voltage on the motor terminals becomes zero. What would you expect the current to do? Let’s find out. We apply a 24 V step voltage to the motor, let it reach the equilibrium and then apply a short circuit! This is the Simulink model</p><p><a href="https://lh3.googleusercontent.com/-CjImf69oc2A/WasLBZPX2nI/AAAAAAAAB9s/8MXRTZKNz-QJ2qq7MGSx7t-3AdOqWZTUgCHMYCw/s1600-h/schema12"><br></a></p><p><a href="https://lh3.googleusercontent.com/-AG0nGf7rvn8/WasLCZN_ZVI/AAAAAAAAB9w/bmZ3-8fKn1oXhOLydiTSUBG1Ms4PoEQXQCHMYCw/s1600-h/schema14"><img width="515" height="260" title="schema1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="schema1" src="https://lh3.googleusercontent.com/-K4MtreqTxJU/WacjenSQggI/AAAAAAAAB2U/FA5AcCm_RAwuYOj3Vt7HRLhcE6g9LOSOQCHMYCw/schema1_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>If we take a look at the first scope, we find out that the current has the following behaviour:</p><p><a href="https://lh3.googleusercontent.com/-zCDpaudXMGI/WacjfJNnboI/AAAAAAAAB2Y/qbezRGN93xwFNIZB3HrGw0kJdINB8qegwCHMYCw/s1600-h/c1%255B3%255D"><img width="414" height="294" title="c1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="c1" src="https://lh3.googleusercontent.com/-FZsIWtcYtVM/WacjfwtRZqI/AAAAAAAAB2c/oBsDcy63SBAip1uT3iB18g0eS7oIGr_egCHMYCw/c1_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">Current as a function of time [A]</p><p>Note that initially the current is limited only by the resistance of the windings which is very low, therefore a big current spike of about 4.36 A (which is exactly equal to 24V / 5.5 Ohms) follows the application of the voltage. If you were powering this motor directly from a solar panel for instance, you might run into trouble at the startup since the panel may not be able to supply the current required at startup. Batteries can usually do that but always check the data sheet to be sure. Then, as the speed increases, the back EMF increases as well reducing the current through the windings. For everyone that is familiar with RL circuits, this overall behaviour might seem odd at a first glance: at 60 seconds the short circuit occurs and the current seems to jump immediately to a minimum negative value. However, if we zoom in the milliseconds range, we can easily find out the typical behaviour of an RL circuit. The current changes accordingly to the time constant of the motor which is about 0.5 ms. This means that the current will be practically constant after about 2 ms. This is exactly the behaviour we find out in the graph below.</p><p><a href="https://lh3.googleusercontent.com/-OuDoUQTlMTU/WacjgqvnjXI/AAAAAAAAB2g/afUdDM1qROkWaORjNE4g3OeNu4H7nOClwCHMYCw/s1600-h/untitled2%255B4%255D"><img width="504" height="235" title="untitled2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="untitled2" src="https://lh3.googleusercontent.com/-WPUiKmjdYRc/WacjhfrDHSI/AAAAAAAAB2k/itPIK35oL9kHNQYQ6cyLxmQiW_fuXVUUwCHMYCw/untitled2_thumb%255B2%255D?imgmax=800" border="0"></a> </p><p align="center">Detail of the current behaviour in the millisecond time scale [A]</p><p>What is the reason behind this behaviour? The first graph shows the current’s behaviour for times much larger than the L/R time constant. Since the mechanical time constant is much larger than the electrical one (the mechanical time constant should be about 10 seconds, judging from the graph) in the first milliseconds of the transient, we could assume that the angular speed is constant and neglect completely the mechanical behaviour. Another interesting thing to notice is that when the short circuit happens the current becomes negative, this means that the current starts to flow in the opposite direction. This is understandable since now there is nothing opposing the back EMF which depends only on the angular speed. If you look closely at the end of the transient, the current becomes positive again: since the resistant torque is supposed constant, when the motor reaches a speed of zero, it continues to accelerate until the electromagnetic torque equals the resistant torque (0.1 Nm). The back EMF changes sign (it becomes negative) and therefore the current changes sign as well (it becomes positive again). In practice this behaviour can be found, for example, in a DC motor used for pulling an object up to a structure. As soon as the short circuit happens the force of gravity pulls the object back to earth and the “resistant torque” applied is almost constant. This is obviously not the case of an electric motor of a car: in that case the motor will simply stop due to friction and other losses which basically depend, to some extent, on the speed.</p><p>In our example, at the equilibrium after the short circuit, the current is 0.2 A and the speed is 2.2 rad/s (in the opposite direction with respect to the initial speed). The terminals of the motor are shorted, no current is pumped into the supply, but the mechanical load is supplying 0.1 * 2.2 = 0.22 W of power. Where is that power going? Simple, it is being dissipated as heat by the windings since 5.5 * 0.2^2 = 0.22 W exactly as expected. </p><h2>Controlling the motor with a PI controller in Simulink</h2><p>What if we’d like to control the motor speed directly as we did in the Matlab code in the introduction? Well we’ll just implement the control loop in Simulink then:</p><p><a href="https://lh3.googleusercontent.com/-6Mb8SJlccb0/Wacj_7ACZrI/AAAAAAAAB4A/azokisMRaO4rxl6W0ateyy78IbJ4liO3gCHMYCw/s1600-h/control_loop%255B9%255D"><img width="551" height="244" title="control_loop" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="control_loop" src="https://lh3.googleusercontent.com/-DS-EO1PD4NI/WackAXmd5eI/AAAAAAAAB4E/5aTYnsfOtrkHcNryhy5iRoaGNOOTwB0nACHMYCw/control_loop_thumb%255B5%255D?imgmax=800" border="0"></a></p><p>Note that:</p><ol><li>A PI controller has been connected in series to the system. The PI controller takes as input the error (the difference between the set point and the actual angular speed) and outputs the voltage to apply to the motor.</li><li>In order to make the simulation more realistic, the output of the PI regulator has been constrained to the 0-24V range.</li><li>The set point changes as follows: at time 0s the set point equals 10 rad/s, at time 20s it jumps to 5 rad/s.</li></ol><p>If we take a look at the physical quantities we find the following behaviour:</p><p><a href="https://lh3.googleusercontent.com/-QOH7Q5s6dlU/Wacjj4RnrxI/AAAAAAAAB2w/40I2r1F3M8UyG4igRiVuDbRX0nQnSVH8gCHMYCw/s1600-h/angular_speed%255B3%255D"><img width="342" height="314" title="angular_speed" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="angular_speed" src="https://lh3.googleusercontent.com/-Wq_JRDHf_ec/WacjktHH8sI/AAAAAAAAB20/pBa3vuZFPtA7HYx2ySefBButtRCV-oIVQCHMYCw/angular_speed_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">Angular speed [rad/s]</p><p><a href="https://lh3.googleusercontent.com/-bDleSZVRkeY/Wacjkyot4AI/AAAAAAAAB24/Eq6ODlsvsM0jqX1mCxMEIAu03xvY8CW6wCHMYCw/s1600-h/backemf%255B4%255D"><img width="360" height="257" title="backemf" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="backemf" src="https://lh3.googleusercontent.com/-pOyR6uojqrU/WacjlYyUPBI/AAAAAAAAB28/4jmqptjV3o8jhW00FdjEuOJbHRiwi4VxwCHMYCw/backemf_thumb%255B2%255D?imgmax=800" border="0"></a></p><p align="center">Back EMF [V]</p><p><a href="https://lh3.googleusercontent.com/-gTC7LnrlP6U/Wacjl3RiwpI/AAAAAAAAB3A/caEfDUSioAos3jXrB2aeA6rTYriq-di4QCHMYCw/s1600-h/current%255B4%255D"><img width="373" height="265" title="current" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="current" src="https://lh3.googleusercontent.com/-e6Q83D95wI0/WacjmSD8TGI/AAAAAAAAB3E/Dwo8iw7xgwY3x1IzzY9C8yLqTksohiZKQCHMYCw/current_thumb%255B2%255D?imgmax=800" border="0"></a></p><p align="center">Current [A]</p><p>As you can see from the first graph, the system is now much quicker in its response, the equilibrium is reached in about 15 seconds (previously, 60 seconds were needed). This increase of response time, however, is characterized by a bit of overshoot, in fact the speed exceeds the set point and then gets back to it. This can be avoided by fine tuning the PI controller further. This overshoot is reflected in the current’s behaviour.</p><p><a href="https://lh3.googleusercontent.com/-VehC_EPCPC8/WacjmlnpVJI/AAAAAAAAB3I/rd3KIP40tYwX_Tn_IyJBx3wgZY_Oyv6GwCHMYCw/s1600-h/PID_applied%255B6%255D"><img width="383" height="351" title="PID_applied" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="PID_applied" src="https://lh3.googleusercontent.com/-mMMygXD-XvE/WacjnLdhNHI/AAAAAAAAB3M/SCQGnCmrIkg-ksRnP86cjw8IZ3_9JBxXACHMYCw/PID_applied_thumb%255B2%255D?imgmax=800" border="0"></a></p><p align="center">PID: actual applied output voltage [V]</p><p><a href="https://lh3.googleusercontent.com/-Laus9LP5ZtI/WacjnvNKncI/AAAAAAAAB3Q/BZD_kcpJOiQuurRilgNeecIUH1wUJbgfQCHMYCw/s1600-h/PID_out%255B8%255D"><img width="406" height="372" title="PID_out" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="PID_out" src="https://lh3.googleusercontent.com/-QNFbHdSP_4c/WacjoP_LOCI/AAAAAAAAB3U/kZDA5htMYhIeBPxR52gOx9HMxYTh0pYKgCHMYCw/PID_out_thumb%255B4%255D?imgmax=800" border="0"></a></p><p align="center">PID: theoretical applied voltage [V]</p><p>Perhaps the output of the PI controller is more interesting. Initially, and at the time the set point is changed, the PI controller would like to apply a very high voltage, as high as about 55 V. Assuming the supply is capable of applying such a voltage, this could damage the motor, a saturation block is used to prevent this problem.</p><h2>Adding a PWM control to the control loop</h2><p>It is often the case that many hobby projects use PWM control for DC motors. Say no more, we can simply add a PWM block to our simulation. Well, in this case the “simply” part is not true. I had to think a bit on how to make this subsystem, but it was worth it. The PWM subsystem is shown below above the new control loop</p><p align="center"><a href="https://lh3.googleusercontent.com/-wo5gVBdbbrU/WacjohSJ1WI/AAAAAAAAB3Y/tlVinZuIAgwUx8vRR--BI1q-XqV5-VvDQCHMYCw/s1600-h/PWM%2Bsubsystem%255B3%255D"><img width="506" height="268" title="PWM subsystem" style="display: inline; background-image: none;" alt="PWM subsystem" src="https://lh3.googleusercontent.com/-vMbLW5GLpkg/WacjpAb2CTI/AAAAAAAAB3c/mQpDVqwmOJAN-LGJ7ZBMmUNTSl09Civ5ACHMYCw/PWM%2Bsubsystem_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">PWM Subsystem</p><p align="center"><a href="https://lh3.googleusercontent.com/-f-SPYjuO6Yk/WacjpaHXzfI/AAAAAAAAB3g/-L_OoVsmUpsONrUSR_Q0IxXckvhRP-sxQCHMYCw/s1600-h/pwm%2Bcontrol%2Bloop%255B6%255D"><img width="506" height="240" title="pwm control loop" style="display: inline; background-image: none;" alt="pwm control loop" src="https://lh3.googleusercontent.com/-ioHltuYvhIE/Wacjp3nNdxI/AAAAAAAAB3k/QzMVNptQEGE7yQl7nLNnPb-S1F7_ssxhQCHMYCw/pwm%2Bcontrol%2Bloop_thumb%255B4%255D?imgmax=800" border="0"></a></p><p align="center">Control loop of a DC motor with a PI controller and PWM</p><p>The angular speed seems smooth as you would expect, while the PWM output is fine except that it is, obviously, a bit messy to look at</p><p align="center"><a href="https://lh3.googleusercontent.com/-pcUw4FhkTgI/Wacjqb2pM9I/AAAAAAAAB3o/wHcO1DpLdHYdoy3aO7bwGfqappvjiEsogCHMYCw/s1600-h/angular_speed_PWM%255B3%255D"><img width="477" height="223" title="angular_speed_PWM" style="display: inline; background-image: none;" alt="angular_speed_PWM" src="https://lh3.googleusercontent.com/-inNCKSK_8xM/Wacjq9cXuVI/AAAAAAAAB3s/3OMkS9mNDKoi7m1fAT9_q4IOAnYJvoQ9wCHMYCw/angular_speed_PWM_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">Angular speed [rad/s]</p><p align="center"><a href="https://lh3.googleusercontent.com/-l6kBtF8jc74/WacjrZY-5bI/AAAAAAAAB3w/vy-2N5ckhMUXAJRfL8n801KhPribl6meACHMYCw/s1600-h/PID%2Bapplied%2Bpwm%255B3%255D"><img width="494" height="231" title="PID applied pwm" style="display: inline; background-image: none;" alt="PID applied pwm" src="https://lh3.googleusercontent.com/-ThY3L32Wq6A/WacjrzgIoGI/AAAAAAAAB30/iT-V0esimAso795JqmaG7M11KrbcJv_5wCHMYCw/PID%2Bapplied%2Bpwm_thumb%255B1%255D?imgmax=800" border="0"></a></p><p align="center">PWM voltage applied to the motor [V]</p><p>I hope you enjoyed this overview of control loops and DC motors. I had these models in my computer for a long time. You can download all the Simulink files <a href="https://www.dropbox.com/s/dus4o64y8ymxn85/DC_motor_matlab_simulink.zip?dl=0">here</a> if you wish to tweak and tinkle with them.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com21tag:blogger.com,1999:blog-5952320191615496730.post-9310673620345408482017-08-04T18:05:00.000+01:002017-08-04T18:36:56.444+01:00Taylor series with Python and Sympy: Revised<p>More than 2 years ago I wrote a short <a href="http://firsttimeprogrammer.blogspot.com/2015/03/taylor-series-with-python-and-sympy.html">post</a> on Taylor series. The post featured a simple script that took a single variable function (a sine in the example), printed out the Taylor expansion up to the nth term and plotted the approximation along with the original function. As you can see on the right on the “Popular posts” bar, that post is one of the most popular and I’m told it appears among the first results on Google. </p><p><a href="https://lh3.googleusercontent.com/-nHLU6jcHwVE/WYSwr6TdfFI/AAAAAAAAB1I/scwkHHB5GGc-Lc6FVfx515kiVOvteUz6QCHMYCw/s1600-h/Figure_1-1%255B5%255D"><img width="397" height="294" title="Figure_1-1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Figure_1-1" src="https://lh3.googleusercontent.com/-xHBCutuCQ4w/WYSwsSOD5rI/AAAAAAAAB1M/RTI-3GbLeQYnxo6TPnWHj8Z6wTNek4KTACHMYCw/Figure_1-1_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>The script I wrote originally was a bit clunky, and there surely was room for improvement. Last week I received an email from a reader, Josh, who sent me an improved version of the original post.</p>
<a name='more'></a>
<p>What has changed compared to the original post? Here is a short summary of the changes:</p><blockquote><p>- Lambdify (from the sympy package) is used to speed up the computation.</p><p>- The plot function can now handle generic single variable functions and accepts arguments for more customized plotting behaviour.</p></blockquote><p>I also made some improvements to the formatting, which was a bit horrible to say the least : )</p><p>Here is an approximation of the function log(x + 1) from the 1st up to the 9th order by steps of 2.</p><p><a href="https://lh3.googleusercontent.com/-WASWqPFw41I/WYSws2-QY6I/AAAAAAAAB1Q/0Nsrf09ZArQr3Tk_7fqJa-h4BHYPleRsACHMYCw/s1600-h/Figure_1%255B3%255D"><img width="402" height="299" title="Figure_1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Figure_1" src="https://lh3.googleusercontent.com/-IHxivi6kpOc/WYSwt3wwtCI/AAAAAAAAB1U/I-Gi01G-U00ujes9diA1_IswIDP3QHXpQCHMYCw/Figure_1_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>Note that the approximation is evaluated also for x <= 1 which does not make sense and should not be considered. Anyway, as expected, the farther you go from x0, the worse the approximation becomes. If you look closely in the output you’ll also see a warning since the evaluation of log(x + 1) in the region x <= 1 can not be done, but this doesn’t prevent the plot to be drawn.</p><p>You can find the improved version of the script here below. Thanks to Josh for taking the time to making it and sending it to me! You can find more about him at <a href="https://github.com/josbys1">his GitHub profile</a>.</p>
<script src="https://gist.github.com/mick001/7c4741961a72d69f880d0c602c833fcf.js"></script><p>Thanks for reading this post!</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com5tag:blogger.com,1999:blog-5952320191615496730.post-8968012506453955942017-05-18T19:03:00.002+01:002017-05-19T19:59:18.671+01:00Lighting your garden with LED lights and the sun: a DIY project, part 2.<p>Some time ago I wrote a <a href="http://firsttimeprogrammer.blogspot.com/2015/08/controlling-lights-according-to.html">short article</a> on a small circuit I made to power on and off my garden lights using only a handful of components and some patience. Since then, however, I’ve dug deeper and found out some other good solutions to the problem.</p> <p>A quick recap of the problem: At dusk and dawn I’d like my garden lights (powered by 12V DC batteries) to switch themselves on and off without me doing anything: a first step towards total automation ;)</p> <p><a href="https://lh3.googleusercontent.com/-DZbnbmklye0/WR8_oUgrOtI/AAAAAAAAB0k/cFEy-KjlqLoNiaA4WrG5ALK4HTnj4_tAACHM/s1600-h/Image%2B2%255B3%255D"><img title="Image 2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Image 2" src="https://lh3.googleusercontent.com/-v_ZLLK4IAbk/WR8_o5c2R3I/AAAAAAAAB0o/9OqhephU7FAPpjmBeY6crv90oeUivPouQCHM/Image%2B2_thumb%255B1%255D?imgmax=800" width="474" height="327"></a></p> <p>My first try at accomplishing this task was using a simple BJT with a voltage divider specifically design to allow a certain bias current when it gets dark. See here for more information on this first raw trial.</p> <a name='more'></a> <p>The circuit mentioned above works fine. It’s pretty raw but it definitely does its job. A couple of problems however have emerged:</p> <p>1) I’d like to regulate the electronic switch to turn on and off at different ambient light brightness</p> <p>2) If the photoresistor is not far away enough from the lights, once it gets dark and the circuit turns the light on, the LED light shines upon the photoresistor making it think that it’s bright outside and therefore it turns the lights off, and then the cycle repeats in an endless loop that stops only in the morning.</p> <p>Since the <a href="https://en.wikipedia.org/wiki/Bipolar_junction_transistor">BJT</a> is a current controlled switch, it can be a little bit trickier to use when designing a circuit. Not to mention that when in saturation mode, it drops about 0.3V between emitter and collector, dissipating some more power. <a href="https://en.wikipedia.org/wiki/MOSFET">N-channel mosfets</a> are voltage controlled switch. If you apply a certain voltage between the gate and the source of a N-channel mosfet, it starts conducting. But the best thing when designing for a N-mosfet in such simple circuits in my opinion, is that you can basically assume that the gate does not absorb any current. Given this information and the Vgs value, in order to decide when to turn on and off the switch you just need to set up a simple voltage divider..</p> <p>This is the new circuit with a N-channel mosfet (don’t mind the exact model, it’s just for reference):</p> <p><a href="https://lh3.googleusercontent.com/-fxT23s-hAc0/WR817pUeshI/AAAAAAAABz4/U74YpyL8wAY-6dJoRDG034lfn9jhd3jggCHM/s1600-h/Image-14"><img title="Image 1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 1" src="https://lh3.googleusercontent.com/-2X-tuOG0Gxw/WR818aILThI/AAAAAAAABz8/C2aABZJYVrUJ1uwEEOFRnAVeaMMuMmBtQCHM/Image-1_thumb2?imgmax=800" width="396" height="287"></a></p> <p>As a bonus point, the N-channel mosfet will dissipate very little power when it’s fully on.</p> <p>As far as the problem 1) is concerned, a small 0-10k potentiometer below the photoresistor will surely do the job. I set it to 4k in the picture above. By regulating the potentiometer you change the behaviour of the voltage divider and, for instance, you can make sure that the lights switch on and off approximately within a given time window (or account for changes in ambient light during the year).</p> <p>This is the behaviour of the gate voltage and of the drain-source voltage depending on the photoresistor value.</p> <p><a href="https://lh3.googleusercontent.com/-Cgy2rwUr9o0/WR8188vQnsI/AAAAAAAAB0A/cCdbb8FK_MQurKo_rYxBsr0Y7g95WHv8gCHM/s1600-h/plot13"><img title="plot1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="plot1" src="https://lh3.googleusercontent.com/-XQub6dUxMkI/WR819aqgsjI/AAAAAAAAB0E/hZOSc3o9p8sm0J83kSwOumC_4aApcE8nACHM/plot1_thumb1?imgmax=800" width="558" height="122"></a></p> <p>Problem 2) is a bit more difficult to solve. Of course, the best solution would be to somehow hide the photoresistor from the LED light, for instance by putting it on top of the garden light’s housing. However, if you cannot do this, you can try to add a bit of hysteresis to the circuit:</p> <p><a href="https://lh3.googleusercontent.com/-mOZ7VboipX0/WR8197u93NI/AAAAAAAAB0I/IXuKi-Ye6KoZqK6SxlVwM1q0nZiI_gLjQCHM/s1600-h/Image-33"><img title="Image 3" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 3" src="https://lh3.googleusercontent.com/-Db6ctOZb2H4/WR81-T96sLI/AAAAAAAAB0M/_Pt6tQE4I1ItCoQ8we9igKZ09W_jjGacACHM/Image-3_thumb1?imgmax=800" width="522" height="317"></a></p> <p>Ignore V3 which is left open and will be used later to simulate the change in voltage due to the chaning sunlight. </p> <p>As you can see, aside from switching the position of the potentiometer and the photoresistor, there are 2 major changes:</p> <p>- A<strong> <a href="https://en.wikipedia.org/wiki/Schmitt_trigger">Schmitt trigger</a></strong> (U1) which takes an input at node A and drives the mosfet (a resistor might be needed here).</p> <p>- A voltage divider by R3 and R4 and a buffer (U2)</p> <p>The Schmitt trigger has been specifically designed to turn on the mosfet at about 2.5V and turn it off at 6V.</p> <p><a href="https://lh3.googleusercontent.com/-SuHEdMaECzs/WR81-wVsPQI/AAAAAAAAB0Q/9uInfTtsqbgcMxnPNgnHPdypDdiHxKrbACHM/s1600-h/Image-43"><img title="Image 4" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 4" src="https://lh3.googleusercontent.com/-9oFHbyUiVjo/WR81_biTPEI/AAAAAAAAB0U/I_CaK7ImEoU0GYDGWi-TLIRcgtDJR9V7gCHM/Image-4_thumb1?imgmax=800" width="572" height="125"></a></p> <p>Now, suppose that the sun goes down, the photoresistor becomes less conductive, V6 goes up and when it crosses 6V the comparator goes high (V7) driving the mosfet (drain voltage on V8) on which in turn switches on the LED light. The LED light now contributes to lowering the resistance of the photoresistor but if it is far away enough from the light, V6 does not go below 2.5V and the light stays on!!!</p> <p>The voltage divider R3, R4 and the buffer is needed to shift the hysteresis cycle of the comparator. </p> <p>The biggest advantages are that:</p> <p>1) We probably have solved problem 2) stated above.</p> <p>2) The mosfet (V4) now turns on and off much quicker due to the comparator (V7) action.</p> <p><a href="https://lh3.googleusercontent.com/-fnHwiojPVR0/WR81_1UzVnI/AAAAAAAAB0Y/tYgLdxpnoCUHNrEywLFVBgKFDWh5geCsACHM/s1600-h/Image-53"><img title="Image 5" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 5" src="https://lh3.googleusercontent.com/-MiPoyphx88Q/WR82AUOzVDI/AAAAAAAAB0c/GV7B0Njx9MMnIz7PDlix10xU8j3fgXJngCHM/Image-5_thumb1?imgmax=800" width="562" height="123"></a></p> <p>This new more sophisticated circuit has some advantages and a draw back as well: power consumption of about 100mW (in the worst case). On the plus side, we might have solved problem 2). Is it worth it? I don’t know but it surely was fun to play with.</p> <p>The first LTspice circuit can be found at <a href="https://www.dropbox.com/s/uwurbk36gzrjg9f/12V_LED_lights_circuit1.asc?dl=0">this link</a>, while <a href="https://www.dropbox.com/s/tugs0ajxoxq0qea/main.sch?dl=0">here</a> you find the CAD drawing done with Eagle.</p> <p>The second LTspice circuit can be found at <a href="https://www.dropbox.com/s/8rb46tap8msg196/12V_LED_lights_circuit2.asc?dl=0">this other link</a>, while its CAD drawing is <a href="https://www.dropbox.com/s/016fqccvpqyw3qd/main_2.sch?dl=0">here</a>. </p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com8tag:blogger.com,1999:blog-5952320191615496730.post-80348592807380571242017-05-02T02:52:00.000+01:002017-05-03T19:42:43.242+01:00Current sink: one of my first experiences with Eagle<p>I’ve learnt a few things the hard way while messing around with electronic circuits, here is a basic summary:<br></p> <a name='more'></a> <p><br>1. When designing a circuit for a basic task, keep it SIMPLE! The less components the less risk of component failure.<br>2. Complicated stuff either looks complicated but it isn’t or it isn’t working as it should.<br>3. Real capacitors and inductors are nothing like I expected them.<br>4. Simulators are simulators (this point should not be under estimated).<br>5. Gained experience seems to be proportional to the volume of black smoke you produce at ambient pressure and temperature from components overheating (read: from burned transistors).</p> <p>Keeping in mind these points that I collected step by step in my electronics adventures, the main goal of this project was to make myself comfortable using Eagle. </p> <p>On the plus side, Eagle seems to be a really nice piece of software to work with, although lately it was a bit under internet fire due to the subscription service announced by the new owner, Autodesk.</p> <p>Why did I decide to design a current sink? Well, if you have studied any electrical circuit theory, there will come a time when you will be asking yourself what about current sources? I would like to make 2mA flow across my load, let me put a current source in series with it. Yeah, sure, first you’d have to make one! But do current sources even exist?</p> <p>Whether they exist or not I cannot really tell you, what I can tell you is that, in practice, you can build something that closely resembles it!</p> <p>For instance, take this beautiful CAD drawing</p> <p><a href="https://lh3.googleusercontent.com/-SfZL4PdbsgM/WQfzbYU8D1I/AAAAAAAABy4/NE_ANfjkwSAals3lwHew28bRXJlDA3iSACHM/s1600-h/Image%2B2%255B3%255D"><img title="Image 2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 2" src="https://lh3.googleusercontent.com/-KM90tlPxhWQ/WQfzb0Ynl2I/AAAAAAAABy8/HbPSU_zgwBcdvorxSl86QP9O6lOygBphACHM/Image%2B2_thumb%255B1%255D?imgmax=800" width="305" height="289"></a></p> <p>Assuming your current source should be able to output a constant current between 2 and 8 mA the circuit above should work. If you know your opamp rules, the opamp will do whatever it can in order to set V+ equal to V- (assuming Vos is negligible) and if you can put a 2-8V voltage on R1 then by Ohm’s law a nice 2 to 8 mA of current will flow through it.</p> <p>But will it though?</p> <p>Well, assuming Vcc is 10V the circuit should operate fine within the specs, however R1 should be exactly 1k Ohm. At this point you can either look for a precision resistor, or put a decent multimeter in series with R1, look for a nice adjustable potentiometer and fine tune V+ until you get exactly the desired current through R1.</p> <p>At this point, you may have realized that the darlington pair was useless and you could have got away with just a single 2N3904 NPN. Oh well, what have I just said above? Keep it simple. <img class="wlEmoticon wlEmoticon-openmouthedsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Open-mouthed smile" src="https://lh3.googleusercontent.com/--zTzsIBWeks/WQfzcENaSUI/AAAAAAAABzA/YTUCEG731sI5czZ4grC4t_7keA-1rWoOwCHM/wlEmoticon-openmouthedsmile%255B2%255D?imgmax=800"></p> <p>The final final Eagle drawing looks nice though. Next I’m going to try and make a PCB out of it.</p> <p><a href="https://lh3.googleusercontent.com/-G7d31aa7a9A/WQfzcuON_fI/AAAAAAAABzE/b1tJEHyuASo2k32auknfCbmLDL1nqE1mwCHM/s1600-h/Image%2B1%255B13%255D"><img title="Image 1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 1" src="https://lh3.googleusercontent.com/-p_YzYxEczok/WQfzdImFolI/AAAAAAAABzI/cHEmnMEQvV0JkK43lBUATZRt-QJyyZptACHM/Image%2B1_thumb%255B5%255D?imgmax=800" width="476" height="339"></a></p> <p>If you’d like to download my drawing for this project, then you can find it <a href="https://www.dropbox.com/s/31lnf32ay87hp4h/current_sink.zip?dl=0">here</a>.</p> <p>Thanks for reading!</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com2tag:blogger.com,1999:blog-5952320191615496730.post-81453627751336812712017-03-05T08:22:00.000+00:002017-03-05T08:37:15.863+00:00Resizing spatial data in RHere I am after a short break, writing again about R!<br />
<br />
In december I worked on a project that required me to work on <b>spatial data</b>. This led me to learn about how R deals with this kind of data and to look around for ways to make my “spatial data experience” less painful. I discovered that R is, as always, full of options.<br />
<br />
I’m used to <b>dplyr</b> for exploring data and manipulating it, however when it comes to spatial data, I think that <b>gstat</b>, <b>raster</b> and <b>rasterVis</b> are just some of the useful packages that will make your life a lot easier.<br />
<a href="https://lh3.googleusercontent.com/-yPs-Imx1A8c/WLvM47vuHWI/AAAAAAAABxU/ZJrjRyrLGdc/s1600-h/Rplot011.jpg"><img alt="Rplot01" border="0" height="253" src="https://lh3.googleusercontent.com/-a0qOAbUWdyE/WLvM5eunV0I/AAAAAAAABxY/qNgrEFrrIVQ/Rplot01_thumb1.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot01" width="320" /></a><br />
<br />
<a name='more'></a>For instance, suppose you would like to analyse, among the other variables, the <b>net heat flux</b> ($\frac{w}{m^2}$) data (from here on referred as “qnet”). The data can be found on the website of the <a href="http://oaflux.whoi.edu/index.html">WHOI OAFlux Project</a><sup>1</sup>, which has a lot of available satellite observations dating as back as 1985. These observations come in nice <b>netcdf</b> files and can be monthly or daily, as far as I know. <br />
<br />
When doing your analysis, it will almost surely happen that <b>qnet</b> is not the only variable you are considering, and in that case, if you have gathered spatial data from many different sources, not all of it may have the same resolution! This can be a bit of a problem since if you would like to use almost any model that R offers, you need the same number of features and less NAs as possible!<br />
<br />
<a href="https://lh3.googleusercontent.com/-84WkWbrdeGI/WLvM57EiH4I/AAAAAAAABxc/YMRySeMu-aM/s1600-h/plot_2008_13.png"><img alt="plot_2008_1" border="0" height="306" src="https://lh3.googleusercontent.com/-gGc2hGRq3ew/WLvM6bt6JrI/AAAAAAAABxg/q1rWNkpW0vA/plot_2008_1_thumb1.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="plot_2008_1" width="300" /></a><br />
<br />
Qnet has a resolution (longitude x latitude) of 180 x 360 pixels. This means that for each year (read: file) you will find 365 grids of 64800 observations each. Or if you prefer, each netcdf file will offer 23652000 observations of the qnet variable. In reality, a good sized part of these pixels, as you can see from the picture above, represent land, therefore they are just NAs to be ignored.<br />
<br />
If you are interested in a particular region, you can use the <b>raster::crop</b> function on the raster object in order to select the area you need. For this example, I wanted to focus my attention on a 40x20 pixel region in the north of the Atlantic Ocean. This is the plot of the selected region:<br />
<br />
<a href="https://lh3.googleusercontent.com/-JgFXfB2AQ9Y/WLvM6v_-04I/AAAAAAAABxk/gKF2bJwJxMA/s1600-h/Rplot082.jpg"><img alt="Rplot08" border="0" height="316" src="https://lh3.googleusercontent.com/-wqFiBnElWaw/WLvM7Ps0T5I/AAAAAAAABxo/I06Z0JdJzdM/Rplot08_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot08" width="514" /></a><br />
<br />
Now suppose that all your other datapoints are in a different resolution, say 161x81 pixels. The gstat package is the solution to the problem! By choosing the appropriate algorithm you can easily resize any spatial grid you like. I chose to use the <a href="https://en.wikipedia.org/wiki/Inverse_distance_weighting"><b>inverse distance weighting</b></a><b> interpolation</b> since I wanted to obtain a smooth surface, but keep in mind that in the <a href="https://cran.r-project.org/web/packages/gstat/gstat.pdf">docs</a> there are a lot of other methods for interpolating a surface and, depending on your particular problem, another method may be a better fit. Inverse distance weighting is a technique that estimates the unknown points by taking an average of the points near by. As the name suggests, the points closer to the ones to be estimated have greater impact on the estimate. I think this method is suited to this task since by just changing the resolution I do not expect (and would like to avoid) significant changes in the distribution of qnet.<br />
<br />
The result of the procedure is showed below:<br />
<br />
<a href="https://lh3.googleusercontent.com/-pQyIqlqG4w8/WLvM7eicfiI/AAAAAAAABxs/B0hQCG9Tp-4/s1600-h/Rplot061.jpg"><img alt="Rplot06" border="0" height="281" src="https://lh3.googleusercontent.com/-WNWpDgY_2Lo/WLvM74gMUxI/AAAAAAAABxw/kR7r8CybwRk/Rplot06_thumb1.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot06" width="382" /></a><br />
<br />
As a comparison, you can check the pictures before and after the change in resolution by putting them side to side. Just be sure to set the colorbar at the same level for both of the pictures, otherwise it would be pretty hard to tell what has changed and what not. I think you can tell that the picture on the right is the one with the higher resolution.<br />
<br />
<a href="https://lh3.googleusercontent.com/--m_wZPJvfiY/WLvM8VK528I/AAAAAAAABx0/-kX9f-H5kGI/s1600-h/Rplot033.jpg"><img align="left" alt="Rplot03" border="0" height="216" src="https://lh3.googleusercontent.com/-5I1JhOYPeXg/WLvM8o6hvFI/AAAAAAAABx4/swtItxgKCDk/Rplot03_thumb3.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot03" width="276" /></a><a href="https://lh3.googleusercontent.com/-0fOLVi_Z9iQ/WLvM9DNv2lI/AAAAAAAABx8/sBo6kpQ1svg/s1600-h/Rplot064.jpg"><img alt="Rplot06" border="0" height="212" src="https://lh3.googleusercontent.com/-aqUlZXcED5k/WLvM9QQNjRI/AAAAAAAAByA/cJyS5DnRips/Rplot06_thumb4.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot06" width="280" /></a><br />
<a href="https://lh3.googleusercontent.com/-Zwl8djsMhEM/WLvM91BVJAI/AAAAAAAAByE/rYqLiRTJCLg/s1600-h/Rplot084.jpg"><img alt="Rplot08" border="0" height="172" src="https://lh3.googleusercontent.com/-LWJSmZxtTS8/WLvM-Fuod1I/AAAAAAAAByI/fwRnWOUW_DU/Rplot08_thumb4.jpg?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot08" width="284" /></a><a href="https://lh3.googleusercontent.com/-ON1-f8rs6sk/WLvM-goqYQI/AAAAAAAAByM/INsKWLoHTS8/s1600-h/Rplot072.jpg"><img alt="Rplot07" border="0" height="171" src="https://lh3.googleusercontent.com/-JxtBlnorMsg/WLvM_A3EZEI/AAAAAAAAByQ/2XtlT4M9Wqc/Rplot07_thumb2.jpg?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Rplot07" width="274" /></a><br />
<br />
By using the <b>rasterVis::levelplot</b> function, you can check a perhaps more insightful plot with the <b>marginal distributions</b> of the qnet variable. As you can see, the overall distribution and the marginals of the variable have not been altered significantly, however now we have more datapoints and we can match the qnet data to the other data for the analysis. I would suggest playing around with the parameters in the <b>gstat::idw</b> function, depending on the resolution you would like to achieve, they can make some difference in the outcome. Below you can find the code I used for this example. This is not exactly the code I used in the project but the basic concept is the same.<br />
<script src="https://gist.github.com/mick001/d24a68a37618ca5685781fcdcf4c75e1.js"></script> <br />
<br />
Then you might have the weird idea to make a short video of the observations over the years 2008 and 2009 to have a look at how the qnet evolved as times passed by. Nothing easier in R, just use a for loop for saving each picture and you’re almost done:<br />
<script src="https://gist.github.com/mick001/88c0242356e21963f1ca5d7ce94134b7.js"></script> <br />
<br />
Then use your video editor of choice and you’re done! I have to admit though, making the video was the first thing I thought when I made the first plot <img alt="Open-mouthed smile" class="wlEmoticon wlEmoticon-openmouthedsmile" src="https://lh3.googleusercontent.com/-2mCRKzsVG-E/WLvM_XUroHI/AAAAAAAAByU/D5t0I-OfTxg/wlEmoticon-openmouthedsmile2.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" />.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/izDVRy9BLb8/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/izDVRy9BLb8?feature=player_embedded" width="320"></iframe></div>
<br />
Thank you for reading this post. Leave a comment if you have any suggestion and if you have found it useful please share it.<br />
<br />
<hr />
<sup>1 </sup>Global ocean heat flux and evaporation products were provided by the WHOI OAFlux project (<a href="http://oaflux.whoi.edu/">http://oaflux.whoi.edu</a>) funded by the NOAA Climate Observations and Monitoring (COM) program.Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com4tag:blogger.com,1999:blog-5952320191615496730.post-71686298739613308552016-11-30T11:21:00.001+00:002016-11-30T12:48:27.219+00:00Short circuit currents calculation on high voltage lines<p>Short circuits are one of the most common failures that can happen when dealing with electrical circuits. </p> <p><a href="https://lh3.googleusercontent.com/-AemPxLnomZE/WD7GUuIqvMI/AAAAAAAABwI/O0kvRrzd5Ko/s1600-h/international-symbols---warning-53670-lg%25255B3%25255D.png"><img title="international-symbols---warning-53670-lg" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="international-symbols---warning-53670-lg" src="https://lh3.googleusercontent.com/-63HU6Y8aR0Q/WD7GVa6mClI/AAAAAAAABwM/-hoZ8elndp4/international-symbols---warning-53670-lg_thumb%25255B1%25255D.png?imgmax=800" width="133" height="136"></a></p> <p>Short circuits can be accidental, think of a tree branch leaning onto a high voltage powerline or due to the breakdown of the isolating material (this is often the case as it gets older and loses its isolating property). Whatever the cause, short circuits are, for sure, an enemy of your electrical systems mainly because the following effects:</p> <a name='more'></a> <p>1) Much higher heat conversion due to the Joule effect in the power lines. If this effect lasts long enough, it can severely shorten the lifespan of the electrical cables.<br>2) Higher electrodynamic forces (roughly, proportional to the peak of the current squared).</p> <p>Due to the potential damage, a lot of protections are in place, especially in high voltage power lines where the problem is much more critical than, for instance, in a low voltage system. </p> <p>In this article I am going to share a simple program I wrote to calculate the short circuit current of a 132 kV three phase power line. The simulation starts from the following assumptions:</p> <p>1) The line is not under load and no current is actually flowing through it.<br>2) The line capacitance can be neglected and the whole system can be modelled as a RL circuit.<br>3) Even under a short circuit, the system is balanced and symmetrical (this is not true usually).</p> <p>Under these simple assumptions, the power line’s concentrated parameter circuit (single phase equivalent) becomes the following:</p> <p><a href="https://lh3.googleusercontent.com/-kLkAdXZp11Y/WD7FWYXmeyI/AAAAAAAABv0/cXQJjl7pLn8/s1600-h/RL%25255B2%25255D.png"><img title="RL" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="RL" src="https://lh3.googleusercontent.com/-B1gKJJ2WFPM/WD7FWr4MNRI/AAAAAAAABv4/7modRo5fIKM/RL_thumb.png?imgmax=800" width="175" height="151"></a></p> <p>The short circuit current can be divided in two parts as follows:</p> <p>$$i_{cc} = \frac{V_m}{Z}\sin (\omega t + \alpha - \phi) - \frac{V_m}{Z}e^{(-\frac{t}{\tau})} \sin (\alpha - \phi)$$</p> <p>Where $V_m$ is the peak voltage, $\alpha$ is the phase of the voltage at the time the short circuit happened, $\phi$ is the characteristic angle of the impedance of the circuit and $\tau = \frac{R}{L}$ is the time constant of the circuit.</p> <p>Note that it is almost intuitive to make this decomposition since the current in a RL circuit is a state variable therefore it must vary continuously. The exponential term is called unidirectional component of the short circuit current and ensures that at time $t = 0$ the current starts exactly from 0. The sinusoidal part is called sinusoidal component, and represents the behaviour of the current after the transient is over (usually about after 4-5 times $\tau$ for most engineering applications).</p> <p>But you may ask yourself, ok, what are looking for here? The answer is: peak currents. And as you might have already noticed, peak currents depends on the value of $\alpha – \phi$ part of the formula. Both $\alpha$ and $\phi$ cannot be predicted, since being able to predict $\alpha$ would mean that you know exactly when the short circuit happens, while knowing $\phi$ would mean that you know exactly where it happens! Not that easy in theory, impossible in practice. In these cases, worst case scenario is assumed: $\alpha – \phi = \frac{\pi}{2}$ .</p> <p>If you plug in the parameters for a 132 kV 80 km line, this is the result you get:</p> <p><a href="https://lh3.googleusercontent.com/-HXakiXZVMCk/WD7FXFesyrI/AAAAAAAABv8/yoXxqqQy37Q/s1600-h/short_circuit_current_plot%25255B3%25255D.png"><img title="short_circuit_current_plot" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="short_circuit_current_plot" src="https://lh3.googleusercontent.com/-ufXApcYUjs8/WD7FY50LKbI/AAAAAAAABwA/MA5OSOT8V3E/short_circuit_current_plot_thumb%25255B1%25255D.png?imgmax=800" width="434" height="348"></a></p> <p>Note how the sinusoidal wave is skewed at the beginning of the fault. This is the effect of the exponential term in the formula. If you look closely at the maximum value of the current, you will see that it is higher than the pure sinusoidal peak value. The peak current value obtained is about 14 kA and the time constant is about 6.3 ms. Below you can find the script I used and the full output. </p><script src="https://gist.github.com/mick001/2f718f8ae373fd0c30202b93d723582d.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com0tag:blogger.com,1999:blog-5952320191615496730.post-83617331461300073192016-11-23T17:23:00.001+00:002016-11-30T10:52:46.502+00:00Solving electrical radial lines with Python<p>Electrical transmission systems are something we all take for granted. They work in a reliable manner ensuring high quality of service and as few minutes lost per year as possible. </p> <p>Low voltage lines and most of medium voltage lines are radial lines, that is they are like a branch of a tree with a unique power supply location. Radial lines are relatively easy to work with, you can solve a radial line problem (ie you can get currents and voltages) by applying Boucherot’s theorem to each section of the line. This is a good news for a Python enthusiast as myself, since repetitive tasks lends themselves to be automated with programming.</p> <p>Since Boucherot’s theorem uses the absolute values of electrical quantities, it is useful when you are working with AC lines and you would like to know the magnitude (rms) of currents and voltages while at the same time you do not really care about the phase differences. The rms values are used, for instance, when you need to choose the protection systems to install and what kind of electrical wires to use.</p> <p>Suppose you are given the following three phase balanced radial line:</p> <p><a href="https://lh3.googleusercontent.com/-fbakYp1uKrU/WD6vSGN64KI/AAAAAAAABvY/5jGHKy0t2wY/s1600-h/Image%2525202%25255B5%25255D.png"><img title="Image 2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 2" src="https://lh3.googleusercontent.com/-uxPZdC5TzD0/WD6vSo0GLhI/AAAAAAAABvc/SuUk-qxI7Wk/Image%2525202_thumb%25255B3%25255D.png?imgmax=800" width="552" height="130"></a></p> <p>You can think of C1, C2 and C3 as industrial motors or any other kind of three phased balanced loads.</p> <a name='more'></a> <p> </p> <p>We can make the following assumptions:<br>- The system is 3 phase, symmetrical and balanced.<br>- The loads are R – L loads (most loads are Ohmic inductive loads).<br>- The lines capacity can be neglected (this assumption is reasonable for overhead medium power lines).<br>- The load at the end of the line is working at nominal voltage.</p> <p>These assumptions are reasonable and they mostly hold since three phase systems are designed to be as symmetrical as possible.</p> <p>Under these assumptions, the following python script applies Bocherot’s theorem to calculate voltage and current rms at each section of the line.</p> <p>The script contains 3 classes one for each element:<br>1) Electric load class. This class models an electric RL load assuming that the load is operated at nominal voltage.<br>2) The transformer class models a real transformer.<br>3) The transmission line class models a typical short power line.</p> <p>Once the classes have been written, a few lines are required for solving the problem. The results are shown in the plot below.</p> <p><a href="https://lh3.googleusercontent.com/-tsMsJwTzbaA/WD6vTKYKm8I/AAAAAAAABvg/tpZsgTK4d-o/s1600-h/figure_1%25255B3%25255D.png"><img title="figure_1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="figure_1" src="https://lh3.googleusercontent.com/-HA5yNe-avpA/WD6vTU_j6vI/AAAAAAAABvk/vN0k8PK56pA/figure_1_thumb%25255B1%25255D.png?imgmax=800" width="446" height="343"></a></p> <p>As expected the results show a voltage drop across all sections (typical for RL loads) and, lower current on the primary side of the transformer. This is to be expected due to the voltage/current relationship of the transformer. As a next step, we could proceed to choose the appropriate security sistems to install at the beginning of each line and the electrical wires. Maybe this could be the next step in this project. </p> <p>The code I used is shown below. I tried to make it as modular as possible so that it could be applied to almost every radial line. You can add as many loads, transformers and transmission lines as you like and then compute the values for each section. Originally this is how I checked my assignments but I thought it could be an interesting mini-project to share. I feel like the code is pretty self explanatory but feel free to leave a comment if you are not sure on what the code is doing!</p><script src="https://gist.github.com/mick001/72c5cd6dd12b6a26fcfb7facfad1b248.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com2tag:blogger.com,1999:blog-5952320191615496730.post-66889016274077111362016-10-26T00:08:00.000+01:002016-10-26T00:11:30.696+01:007th MilanoR meeting + talks live streaming<p>On 27th of October I’m going to attend the <a href="http://www.milanor.net/blog/7th-milanor-meeting-october-27/">7th MilanoR meeting</a> featuring the following two talks:</p> <p>1. <strong>Interactive big data analysis with R: SparkR and MongoDB: a friendly walkthrough </strong>by Thimoty Barbieri and Marco Biglieri</p> <p>2. <strong>Power consumption prediction based on statistical learning techniques </strong>by Davide Pandini</p> <p>This is my first official R event and I’m very much looking forward to it. There has been a strong positive reply from a growing number of people interested in R confirmed by the fact that the tickets were sold out pretty much a few hours after the event was announced.</p> <p>However, due to this unexpected sudden success in the allocation of the tickets, many people will not be able to attend. Fear not though, the MilanoR staff has just decided to live stream the event on its brand new <a href="https://www.facebook.com/MilanoRcommunity/?fref=ts">Facebook page</a>. The event will start around 6.30 PM local time. Feel free to leave a comment and share any thoughts you may have on the topic.</p> <p>If you would like to know more about the event, the talks and the speakers, check out the following articles:</p> <p>1. <a href="http://www.milanor.net/blog/7th-milanor-meeting-october-27/">7th MilanoR Meeting: October 27</a></p> <p>2. <a href="http://www.milanor.net/blog/7th-milanor-meeting-live-on-facebook/">7h MilanoR Meeting live on Facebook</a></p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com2tag:blogger.com,1999:blog-5952320191615496730.post-86718234591804930992016-09-24T07:59:00.001+01:002016-09-26T18:20:12.883+01:00My first Shiny App: control charts<p>After having carefully followed the online <a href="http://shiny.rstudio.com/tutorial/">official Shiny tutorial</a>, I decided to make a quick try at making my very first Shiny App. I should say that I found myself very well with the explanation given and Shiny was definitely one of the libraries that took the less time for me to start using it. Of course I’m still not a master of Shiny by no means, but I feel more confident on how to use it and on what can be done with it.</p> <p><a href="https://lh3.googleusercontent.com/-4SaQyBlZGs0/V-Y6jImWEpI/AAAAAAAABu0/v_Xrxsir1ZQ/s1600-h/Image%2525201%25255B3%25255D.jpg"><img title="Image 1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Image 1" src="https://lh3.googleusercontent.com/-QXWGJuypOoI/V-Y6jwk2qAI/AAAAAAAABu4/DT4CgvWL9Do/Image%2525201_thumb%25255B1%25255D.jpg?imgmax=800" width="505" height="240"></a></p> <p>I’m working on an R project related to <strong>control charts</strong> and I was hinted to get to know Shiny, since it is very likely that the project will involve an interactive interface and Shiny fits the bill perfectly for this assignment. For this reason I took an afternoon for getting familiar with Shiny and build this App. Enough talk, let’s get to the App.</p> <a name='more'></a> <h2></h2> <h2>App description</h2> <p>The App is designed with one objective only: let me learn <strong>Shiny</strong> :D. I think this goal is quite obvious to the expert developer, however, the main idea is to allow the user to upload a .csv file of ungrouped observations, select the control chart to plot, group size, variable to plot, and then display the control chart and the results of the calculation as a data table.</p> <h2>Input data structure</h2> <p>The input file must be a .csv. So far I have not allowed other formats. The .csv can contain as many variables as you like, there is no limit, but bear in mind that Shiny (the free version at least) limits the size of files that can be uploaded to 5 MB. The file should have no row names, however, in case row names are present, do not reserve a free spot (“ ”) in the columns name row at the beginning of the file and everything should work fine. The data should be a series of consecutive measurements at a given constant frequency. For instance, if you took 2 measures of a certain variable y each day for 3 days, your data should be in the following format:</p> <p>day_id,y_measurement<br>1,1000<br>1,1001<br>2,1002<br>2, 1003<br>3,1004<br>3,1005</p> <p>Of course, the day_id variable is not necessary. In this case the group size would be 2. For more information and an example of the allowed .csv format please check the <a href="https://github.com/mick001/control_charts_shiny/blob/master/README.md">readme</a>.</p> <h2>Available charts</h2> <p>Only charts for quantitative variables are available. So far, the <strong>xbar-s</strong> and <strong>s</strong> charts are the only two supported. You can choose how many $\sigma$ you would like your control limits to be wide, 3 is the default but you can choose a higher or lower margin. The parameters of the control chart are showed in a table below the graph for further inspection.</p> <h2>Where to find the App</h2> <p>The App is available <a href="https://michy-apps.shinyapps.io/control_charts/">here</a>. By default, the mtcars dataset is used, although it is not the exact fit it is needed just for show until you upload your data.</p> <p>The application seems to run smoothly and overall I’m quite happy with how it turned out. This was just a test application for myself, so I did not take that much care of the graphical side of the application. </p> <p>If you’d like to check out the source code, it is available on <a href="https://github.com/mick001/control_charts_shiny">GitHub</a>. Any comment is welcomed, thank you.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com1tag:blogger.com,1999:blog-5952320191615496730.post-19863125910431760202016-09-13T12:30:00.001+01:002016-09-13T12:33:29.545+01:00Some physical considerations on the dynamics of a skydiver<p>Recently, a friend went skydiving and, me being me, the first thing I could think about was making some physical considerations on his adventure :)</p> <p>If you think of a falling object, at first you would think of it as falling with a constant acceleration of g. That is, you would neglect air drag. However, if you think of it, air drag is not exactly neglectable when describing the fall of a skydiver. If you neglect air drag, you would get an ever increasing speed which is not at all the case.</p> <p>Let’s make some physical considerations:</p> <h2></h2> <h2></h2> <p>We’ll assume that the only two forces acting on the skydiver are the force of gravity and the air drag. This is the resulting free body diagram:</p> <p><a href="https://lh3.googleusercontent.com/-QobGD4OSqKw/V9fjlrMR4MI/AAAAAAAABuM/vE_-JJhXDOk/s1600-h/Image%2525201%25255B3%25255D.jpg"><img title="Image 1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Image 1" src="https://lh3.googleusercontent.com/-tsNOX_r6hok/V9fjmORvgyI/AAAAAAAABuQ/TEJolxe-N5Y/Image%2525201_thumb%25255B4%25255D.jpg?imgmax=800" width="154" height="172"></a></p> <p> </p> <a name='more'></a> <p>If we apply Newton’s Law, we obtain the following equation:</p> <p>$$m\overrightarrow{a} = m\overrightarrow{g} + \overrightarrow{F}_{drag}$$</p> <p>which could be simplified, considering the $y$ direction only</p> <p>$$m\ddot{y} = mg - \frac{1}{2}\rho A C \dot{y}^2$$</p> <p>where $rho$ is the air density, $A$ is the surface of the skydiver facing the stream of air, $C$ is the drag coefficient, $\ddot{y}$ is the acceleration on the $y$ axis and $\dot{y}$ is the speed on the $y$ axis.</p> <p>Of course this is not an entirely accurate description of what is actually happening either. For instance, air density and drag coefficient are not constant (I’ll assume both to be constant though for simplicity). In particular, as far as the drag coefficient is concerned, we’ll assume that the skydiver is facing the earth and approximate them as a flat surface.</p> <p>First of all, note that acceleration is not constant. In fact, it gets smaller and smaller up until the drag force is equal to the force of gravity. At that point the acceleration is zero and our skydiver is falling at a constant speed. If we had neglected air friction, we would have reached a very different conclusion.</p> <p>What terminal speed can we expect? Well, just set the acceleration to be zero and solve for the constant $\dot{y}_{eq}$:</p> <p>$$\dot{y} _{eq}= \sqrt{\frac{2mg}{\rho AC}}$$</p> <p>which evaluates to about 47.86 m/s (or about 172.29 km/h) when using the data showed further down, in the code. This result seems plausible and indeed it is very close to the actual value of about 180 km/h for a free falling skydiver. </p> <p>What about the solution to this differential equation though? Using <a href="https://www.wolframalpha.com/">Wolfram Alpha</a> one finds out the solution:</p> <p>$$y = \frac{2m}{\rho AC}\ln \left [ {\cosh{\sqrt{ \left ( \frac{\rho ACg}{2m} \right )} t}} \right ]$$</p> <p>which, by the way, would have been a little painful to find out by hand.</p> <p>Using the power of <strong>Python</strong> we can find the speed by calculating (numerically) the derivative of the position, then we can use the first equation to find the acceleration, as follows:</p> <p>$$ \ddot{y} = g - \frac{1}{2}\frac{\rho AC}{m}\dot{y}^2 $$</p> <p>Using the values found on Wikipedia for the air density etc, this is the result of the simulation of a free fall of 20 seconds:</p> <p><a href="https://lh3.googleusercontent.com/-Y379g7Te__E/V9fjmY55WXI/AAAAAAAABuU/dUKPc7aZcME/s1600-h/figure_1%25255B3%25255D.png"><img title="figure_1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="figure_1" src="https://lh3.googleusercontent.com/-Q1_syyv-G9o/V9fjm9z7ZRI/AAAAAAAABuY/ai8WzNi-mb4/figure_1_thumb%25255B1%25255D.png?imgmax=800" width="378" height="291"></a></p> <p>As you can see, most of the action is happening around the first 10 seconds, then the acceleration goes almost to zero, the speed becomes constant and the position becomes proportional to time. By the way, another way of assessing that indeed speed becomes constant is by checking that $\lim_{t \rightarrow \infty } \frac{y(t)}{t}$ is constant.</p> <p>If we zoom in the first 5 seconds, we can get a better view of the transient phase</p> <p><a href="https://lh3.googleusercontent.com/-8X21dZFHy1U/V9fjnEFtFxI/AAAAAAAABuc/43LJD_6f6K0/s1600-h/figure_2%25255B4%25255D.png"><img title="figure_2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="figure_2" src="https://lh3.googleusercontent.com/-7Gsbd9lKa4s/V9fjnUJlEpI/AAAAAAAABug/-DA6kPGouV4/figure_2_thumb%25255B3%25255D.png?imgmax=800" width="381" height="298"></a></p> <p>Note how the simulation is consistent with the assumptions of initial acceleration of g, initial vertical speed equal to 0. Then note how the position starts out with a parabola-shaped curve but then tends to a line (since the acceleration tends to zero).</p> <p>This model is not that accurate when increasing the mass of the diver. For instance when skydiving in tandem, two people, usually an instructor and a student, skydive together. In that case the total mass approximately doubles and the maximum speed achievable should be around 320 km/h. If you try to plug in the numbers for this scenario you get about 270 km/h which is short of about 50 km/h. Nevertheless, the model is quite accurate for modelling a single skydiver and could be refined for describing the tandem skydivers by taking into account other relevant details.</p> <p>Below you can find the code I used for the simulation:</p><script src="https://gist.github.com/mick001/97d2b1d38e93b24765677b22a2ca8fdd.js"></script>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com3tag:blogger.com,1999:blog-5952320191615496730.post-39932716170440899162016-09-12T11:08:00.000+01:002017-09-13T20:21:30.330+01:00Getting AI smarter with Q-learning: a simple first step in Python<p>Yesterday I found an “old” script I wrote during a morning in the last semester. I remember being a little bored and interested in the concept of <strong>Q-learning</strong>. That was about the time <strong>Alpha-Go</strong> had beaten the world champion of Go and by reading here and there I found out that a bit of Q-learning mixed with deep learning might have been involved. </p> <p><a href="https://lh3.googleusercontent.com/-lwLKjnM1mY4/Wbl6C6AimAI/AAAAAAAACAA/UclZjAoqFfQgmrCs8j-BYjO7DTatE_wZwCHMYCw/s1600-h/qlearning%255B3%255D%255B3%255D"><img width="311" height="283" title="qlearning[3]" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="qlearning[3]" src="https://lh3.googleusercontent.com/-wnnga8n7l84/Wbl6DTtyM7I/AAAAAAAACAE/FIQrBwpxGWA_gxqKSObQ2N03jKDTVQpUACHMYCw/qlearning%255B3%255D_thumb%255B1%255D?imgmax=800" border="0"></a></p> <a name="more"></a> <a name='more'></a> <p>Indeed Q-learning seems an interesting concept, perhaps even more fascinating than traditional supervised machine learning since in this case the machine is basically learning from scratch how to perform a certain task in oder to optimize future rewards. </p> <p>If you would like to read a, quote, “Painless Q-learning tutorial”, I suggest you to read the following explanation: <a href="http://mnemstudio.org/path-finding-q-learning-tutorial.htm">A Painless Q-learning Tutorial</a>. In this article the concept of Q-learning is explained through a simple example and a clear walk-through. After having read the article I decided to put into code the example shown. The example shows a maze through which the agent should go and find its way up to the goal stage (stage 5). Basically, the idea is to train an algorithm to find the optimal path, given an (often random) initial condition, in order to maximize a certain outcome. In this simple example, as you can see from the picture shown in the article, the possible choices are all known and the outcome of each choice is deterministic. A best path exists and can be found easily regardless of the initial condition. Furthemore, the maze is time invariant. These nice theoretical hypothesis are usually not true when dealing when real world problems and this makes using Q-learning hard in practice, even though the concept behind it is relatively simple. </p> <p>Before taking a look at the code, I suggest to read the article mentioned above, where you will get familiar with the problem tackled below. I’m not going deep in explaining what is going on since the author of that article has already done a pretty good job doing it and my work is just a (probably horribly inefficient) translation in Python of the algorithm.</p> <p>Given an initial condition of, say, state 2, the optimal sequence path is clearly 2 - 3 – 1 - 5. Let’s see if the algorithm finds it!</p><script src="https://gist.github.com/mick001/f53dcd51ff59817783a4b505a4835453.js"></script> <p>And sure enough there it is! Bear in mind this is a very simplified problem. At the same time though, keep in mind that Alpha Go is powered in part by a similar concept. I wonder what other application will come from Q-learning. </p> <p>The concept of Q-learning is more vast than what I showed here, nevertheless I hope my post was an interesting insight.</p>Michttp://www.blogger.com/profile/18151225177833588981noreply@blogger.com127