Modeling a Spinning Sprinkler

Subtitle: “You don’t really understand something until you model it”

Here is the video. It’s great. Watch it.

The basic idea is to predict the path of water that is shot from a spinning sprinkler. In the first case, the water is shot straight out of the spinning pipe. The second case is a little bit trickier with the water shot towards the center of the sprinkler. OK, it’s not actually a sprinkler.

Of course, once a drop of water leaves the sprinkler, it will only have the gravitational force acting on it. So, if you view this from the top—a drop of water should travel in a straight line with a constant velocity. But there is a problem that makes this difficult to predict. It’s that we don’t see the path of one drop of water, we see the path of a water stream.

A water stream is a collection of water drops. Even though one drop might travel in a straight line, the next drop will be “launched” at a different location with a different velocity. This makes it look weird.

OK, so let’s get to a model. I’m going to go over the steps to build this model in VPython.

Build a bar

Don’t try to do everything at once. Let’s just make a spinning bar—I’ll add water balls later. Here is what that spinning bar looks like.

And here is the code (along with a link to the code – https://trinket.io/glowscript/d6545ddfca

Let me go over some of the important parts of this code.

  • The bar is an object of type “box”—this is a prebuilt object in VPython. It has two important attributes. The position (pos) is the location of the center of the box. The size is the vector with length, width, and height.
  • I added a ball so you can see the center (it’s not needed).
  • The variable “omega” is the angular velocity of the rotation. You can change this if you like.
  • The variable “theta” is the angular position of the bar—this is used for something later.
  • In the loop, the rate(100) tells the code to not do any more than 100 loops per second. Since I have a time step of 0.01 seconds, this means 100 loop would take one second—it would run in “real time”.
  • Don’t worry about line 16 (update theta)—at least not for now.
  • Line 18 is the important part. There is a rotate function in Vpython. You need to pick the angle (in this case it’s dtheta which is the angular velocity times the time step), the axis of rotation (the z-axis) and the origin of rotation (the origin).

But it works.

Add a single water

The next step is to add a single ball of water to the end of the sprinkler bar. It’s not going to do anything except to “ride around”. Here’s what that looks like. It’s really the same thing except with that ball of water.

Here is the code—https://trinket.io/glowscript/14e1ecbb7d. Let me just point out the important parts.

If I know the angular position of the sprinkler, I can find the vector from the center of the sprinkler to the end of the sprinkler. It looks like this:

\vec{r} = \left(\frac{L}{2}\right) <\cos\theta,\sin\theta,0>

For each iteration of the loop, I can calculate theta and then use that to calculate “r”. This r is now the new vector position of the ball.

List of balls

Now for the magic. Lists are your friend. I feel like I could write a whole post on just lists—but I want to get right to the good stuff.

In short, a list is a group of things in python. Let me start with an example program.

balls=[]
x=-5
dx=1

while x<3:
  balls=balls+[x]
  x=x+dx

print("balls = ",balls)
print("balls 3 = ",balls[2])

Here are some notes on this code.

  • balls = [] makes an empty list. The name of this list is balls.
  • In the loop, I add a new x value to the list and then update x.
  • At the end, I print the list of balls and the 3rd item in the list (the first item would be balls[0]).

Here’s the output.

But wait! You don’t just have to make a list of numbers. I can make a list with objects too. Check out this version of the code.

balls=[]
x=-5
dx=1

while x<3:
  balls=balls+[sphere(pos=vector(x,0,0), radius=0.1,color=color.cyan)]
  x=x+dx


print("balls 3 position = ",balls[2].pos)

Here is the output.

Boom. Check that out. It’s 8 balls—but in just one list. You can even print out the position of one of the balls (you can’t print the whole list because a sphere() isn’t printable).

Water balls in a list

OK, I think we are ready. Oh, you might not be ready—maybe you need some more practice with lists. Just start playing around and see what happens. Anyway, here is the plan.

  • Make a list of water balls (actually two lists—one for each side).
  • Start the time (t = 0) and a time step of dt.
  • Set a ball time counter. If the time gets to some specified value, then create a ball and add it to the list (both lists).
  • When you create a water ball, set its properties: mass, size, add a trail…oh, and initial velocity. Yup. You can do that.
  • Now let stuff run. I will need to go through each ball list and update the water ball positions, but that’s not too difficult.

Let’s just get to the code. Here it is (also on trinket.io)

GlowScript 2.9 VPython

#Length of sprinkler - just leave this
L=0.1
stick=box(pos=vector(0,0,0), size=vector(L,.05*L,.05*L),color=color.yellow)
cent=sphere(pos=vector(0,0,0), radius=0.03*L, color=color.red)


#CHANGE THIS - rotation rate of sprinkler
omega=2*pi/2


theta=0

#CHANGE THIS to -1 to make balls shoot IN
a=1 

t=0
dt=0.01

#this is just a spacer to make the scene look nice
space=sphere(pos=vector(4*L,0,0),radius=0.001)


#water stuff
water=[]
water2=[]
vwater=.3
tint=0 #this is the "clock" for shooting water

#CHANGE THIS - this is the water ball production rate
f=15 #water per second rate that balls are made


while t<10:
  rate(100)
  r=(L/2)*vector(cos(theta),sin(theta),0)
  r2=-r
  

  if tint>=1/f:
    
    water=water+[sphere(pos=r,radius=0.04*L, color=color.cyan, v=(-1*cross(r,vector(0,0,omega))+a*vwater*r.hat),
    make_trail=False)]
    water2=water2 +[sphere(pos=r2,radius=0.04*L, color=color.cyan, v=(-1*cross(r2,vector(0,0,omega))+a*vwater*r2.hat),
    make_trail=False)]
    tint=0
  for ball in water:
    ball.pos=ball.pos+ball.v*dt
    if ball.pos.mag>3*L:
      ball.v=vector(0,0,0)
      ball.visible=False
      del ball
  for ball2 in water2:
    ball2.pos=ball2.pos+ball2.v*dt
    if ball2.pos.mag>3*L:
      ball2.v=vector(0,0,0)
      ball2.visible=False
      del ball2  
    
  theta=theta+omega*dt
  
  stick.rotate(angle=dt*omega,axis=vector(0,0,1), origin=vector(0,0,0))
  t=t+dt
  tint=tint+dt

This is what the output looks like. Actually, this is an animation for the case of the water shooting inward (since I already had the gif).

Now for some comments on the code.

  • When the water ball gets a certain distance away (I think I set it to 3*L), I change the water ball velocity to vector(0,0,0) and then I make it invisible. Otherwise the view would just keep expanding and it would look weird.
  • I don’t have any other important comments, but I can’t have a one bullet list.

I think that’s good enough. Hope that helps.

Finding the Electric Field from the Electric Potential (difference)

I’m way behind on this one. My plan was to write up something when this question came up in the summer section of algebra-based physics. It was a great question and deserved a full answer. Also, I wanted to make this a tutorial on trinket.io—but maybe I will do that after I write about it here.

So, here’s how it goes. We start off the semester calculating the electric field due to a point charge and then due to multiple point charges (you know—like 2). After that we get into the electric potential difference. Both the potential and the field follow the superposition principle. If you calculate the value due to two charges individually, you can add these together to get the total field or potential.

But there is a big difference. The electric potential difference is a scalar value where as the electric field is a vector. That means that when using the superposition with electric fields, you have to add vectors. Students would prefer to just add scalars—I’m mean, that seems obvious. Does that means that you could just find the electric potential difference for some set of point charges and then use that potential to find the electric field? Yup. You can. And we will.

Let me start with the definition of the electric potential difference. Since it’s really just based on the work done by a conservative force (the electric field), this looks a lot like the definition of work.

\Delta V = -\int_a^b \vec{E}\cdot d\vec{r}

Yes, that’s an integral. Yes, I know I said this was for an algebra-based course. But you can’t deny the truth. The “a” and “b” on the limits of integration are the starting and ending points—because remember, it’s really an integral. Also, the “dr” is in the direction of the path from a to b. It doesn’t technically have to be a straight line.

What about an algebra-based course? Really, there are only two options. The most common approach gives the following two equations for electric potential.

V = k\frac{q}{r}

\Delta V = -E\Delta r \cos \theta

The first expression is the electric potential of a point charge with respect to infinity (so the starting point for the integral is an infinite distance away). The second expression is the change in electric potential due to a constant electric field when there is an angle between the field and the displacement.

Oh wait! I forgot to list the value of k. This is the Coulomb constant.

k = 9\times 10^9\text{ N*m}^2\text{/C}^2

Students can understand the second expression because it’s pretty much the same as the definition of work (for a constant force). The first equation is mostly magic. The one way you can show students where it comes from is to do a numerical calculation of the electric potential difference since they can’t integrate. Did I write about that before? I feel like I did.

Ok, that’s a good start. Now for a problem.

Electric potential due to two point charges

Suppose I have two charges that are both located on the x-axis. Charge 1 is at the origin with a charge of 6 nC. Charge 2 is at x = 0.02 meters with a charge of -2 nC. Here’s a diagram—just for fun.

Let’s start off with the electric potential—as a warm up. What is the value of the electric potential (with respect to infinity) at the location of x = 0.02 meters? Using the equation above for the electric potential due to a point charge, I need to find the potential due to point 1 and then the potential due to point 2—then just add them together (superposition).

First for point 1.

r_1 = 0.02\text{ m} - 0\text{ m} = 0.02

V_1 = k\frac{q_1}{r_1}

Now for point 2.

r_2 = 0.02\text{ m} - 0.01\text{ m} = 0.01

V_2 = k\frac{q_2}{r_2}

This gives a total electric potential:

V = V_1 + V_2 = k\left(\frac{q_1}{r_1} + \frac{q_2}{r_2}\right) = 175.3\text{ Volts}

Finding the Electric Field

Now to find the electric field at that same point. I don’t know how to say this in a nice way, so I will just say it. Since the electric potential is calculated based on an integral of the electric field, the electric field would be an anti-integral. Yes, this means it’s a derivative. But wait! The electric field is a vector and the electric potential is a scalar? How do you get a vector from a scalar? Well, in short—it looks like this.

\vec{E} =-\nabla V

That upside delta symbol is the del operator. It also looks like this:

\nabla V = \frac{\partial V}{\partial x}\hat{x} + \frac{\partial V}{\partial y}\hat{y} + \frac{\partial V}{\partial z}\hat{z}

Yes, those are partial derivatives. Sorry about that. But you do get a vector in the end. But how can we do this without taking a derivative? The answer is a numerical derivative. Here’s how it works.

Suppose I find the electric potential at three points on the x-axis. The first point is where I want to calculate the electric field. I will call this x_0. The next point is going to be a little bit higher on the x-axis at a location of x_0+dx. The final point will be a little bit lower on the x-axis at x_0-dx. Maybe this diagram will help.

When I take these two end points (not the middle one), I can find the slope. That means the x-component of the electric field will be:

E_x(x_0) = -\frac{V(x_0+dx)-V(x_0-dx)}{2dx}

Let’s do this. I’m going to find the x-component of the electric field at that same location (x = 0.02 meters). I don’t want to write it out, so I’m going to do it in python. Here is the link (I wish I could just embed the trinket right into this blog post).

Umm..wow. It worked. Notice that I printed the electric field twice. The first one is from the slope and the second one is by just using the superposition for the electric field. Yes, I knew it SHOULD work—but it actually worked. I’m excited.

Also, just for fun—here is a plot of the electric potential as a function of x. The negative of this slope should give you the x-component of the electric field.

Here you can see something useful. Where on this plot is the electric field (the x-component) equal to zero? Answer: it’s where the slope of this plot is zero (yes, it’s there). Remember, just because the electric field is zero that doesn’t mean the electric potential is zero.

Homework

How about this? See if you can find the electric field due to these two charges at a location y = 0.01 and x = 0.0 meters. This is right on the y-axis, but now the electric field clearly has both an x and a y-component. That means you are going to have to do this twice.

Jump Start Guide for Computational Physics

It’s the beginning of a new school year—and I’ve got you covered. You want to do something with coding in your physics class, but you don’t know where to start? I’m going to give you a jump start.

I know you are nervous, but don’t worry. You don’t need to be a ‘l33t h4x0rz’ (that’s cool-speak for elite hacker). You just need to get started. Just remember, everyone had to start programing at some point. They all did it—so can you.

What the heck do you call it?

I like to call this stuff “numerical calculations”. I think this is the best name for it because it sort of describes what’s going on. Here’s the general idea:

  • Take a physics problem (or any problem, really).
  • Break the problem into a bunch of small and easier problems.
  • Maybe make some approximations.
  • Solve all the small problems by using numbers.

Numbers are the key. You have to use numbers in a numerical calculation. The other solution is an analytical calculation. This is the process of solving a problem in terms of known functions—like the trig functions. For an analytic solution, you don’t really have to put in the numbers until the end.

Of course, there isn’t a huge difference in these two solutions (analytical vs. numerical). A great example from Bruce Sherwood (in a discussion at the recent AAPT meeting in Utah) points out the following:

Suppose you get a solution for a mass oscillating on a spring. The analytical solution will be in terms of the cosine function. But then, how do you get values for something like cos(0.33) = ? Well, you put it in your calculator or you look it up in a table. Oh, you could find the value for cosine by summing an infinite series. But you see—we are back to a numerical calculation.

That’s not exactly what Bruce said, but that’s the basic idea.

Here are some other names for numerical calculations that you might see:

  • Computational physics
  • Coding in physics
  • I’m drawing a blank here—there must be some other words.

But I also like numerical calculations because it doesn’t explicitly say “computer” in it.

Why do numerical calculations in physics?

Solving for the motion of a mass on a spring

Let me be brief and just list some points.

  • Numerical calculations are just part of physics. There are countless physics problems that can only be solved numerically.
  • Once students get the idea of numerical calculations, they can solve more interesting problems that would otherwise be inaccessible to them.
  • What about other fields? Meteorology, digital animations, protein folding, economics…the list goes on.
  • Tools. The tools for numerical calculations are both free and easy to access. You don’t need to install anything and you could even do it on a smart phone (not recommend—but possible).
  • Finally, numerical calculations helps student understand physics. I’ve always been surprised that when working on a problem with students on a computer, they ask questions. But these questions are rarely about computer syntax. They are usually things about vectors or forces. It’s awesome.

Who is this for?

I’m going to get you started—so this tutorial is geared towards very introductory classes. I use this same stuff in a physics lab for an algebra-based physics course at that college level. I think this would be fine for high school classes also.

If you want more advanced stuff—this might also work as an introduction. For my calculus-based physics course, I start with more complicated stuff.

Also, I am careful to emphasize that students (and faculty) don’t need any prior experience with coding.

Where to start

I like to have a workshop format for my lab or class. I use a projector at the front of the room to go over some points and then stop and let the students work on code either individually or in groups (here is a version of my presentation—feel free to use it). I tell students to bring a computer or tablet if possible. Otherwise they will be in groups of 4 per computer (which is not ideal). Of course some students don’t want to get involved, so a 4 person group is what they want.

Here is the general outline of the workshop format lesson.

  • Give an overview of numerical calculations (motivation).
  • Start with an object moving at a constant velocity in one dimension. Let them solve it analytically (hopefully, this is a review).
  • Next have them take this SAME PROBLEM but solve it by breaking into 7 time steps—but still solving it on paper. NO COMPUTERS YET.
  • I actually give them a table to fill out. It has 7 rows with columns for time, time step, and position. After a short time, I stop them and go over the calculation for the first row (and maybe the second). Some students can finish this table very quickly, and others not so quick.

Next, they do this same set of calculations with some python code. I give them this program that runs as it is and I go over each line.

The two parts that might be new for students:

After going over the code, I send them to this page (https://trinket.io/rhettallain_gmail_com/courses/physics-python-for-mere-mortals#/beginning-numerical-calculations/using-small-pieces). It’s a trinket.io page with the code right in the browser. They don’t even need to log in or anything. It even has all the instructions there too so that they could do this on their own. The trinket site is the BEST. Oh, I also made this shortened-url (http://bit.ly/trinket-physics). That page includes everything. I make sure to tell them to click on the “using small pieces” tab on the left to get to the code.

So, the students run the code and then modify the code to answer some questions such as:

  • Where will the car be at a different time? Say 2.2 seconds.
  • What if you change the velocity the 0.62 m/s, where will it be after 2.2 seconds?
  • What if the car starts at -0.5 meters?

Stuff like that. Really, I just want them to be able to run the code, read the output, and change the code. It’s sort of a coding ice-breaker.

I’m not going to go over the rest of the workshop—but it’s all there (and more) on the trinket.io site along with the instructor slides. After that first small activity, the students do the following:

  • A similar problem but with a constant (non-zero) acceleration. This is great because you get a different final answer for the numerical calculation that depends on the size of the time step.
  • How to make graphs (or at least print out values) so you can get more data.
  • Solving a problem with two cars—one moving at a constant velocity and one accelerating. This is the classic “police chase” problem. I set up the program (not all the way) but I let them figure out how to change the while loop to get it to run. It’s great because students come up with their own ways of making it work. Sometimes, this is where I stop the class.
  • Projectile motion.
  • Mass oscillating on a spring.

What do you need?

If you want to do this in class, you need some computers or tablets and some time. You could probably do this in sections, just break it into 30 minute activities if you like.

Some other things to consider:

  • Make sure you work through the material first. It’s important to really know what’s going on so that you can easily help students when they get stuck.
  • If a group has a program that’s not running right, I really try to get them unstuck. If it’s a silly syntax error, I try to find that right away so they don’t get frustrated.
  • If you have any questions or need help. let me know.

Notes and Comments on AAPT Summer Meeting 2019

Here are some things I need to share regarding this meeting. Overall, it was great to see everyone. As usual, the conversations were the best. I regret that there were some people I did not get to meet or talk to—maybe next time we will meet up.

Blog vs. WIRED

One question that came up multiple times was about this blog vs. my posts at WIRED. How do I decide where a post goes? OK, here is my explanation.

In the beginning, there was a blog. A blog was super informal and free form and alive with comments. It was like the 60s and I was a hippie. A physics hippie. I don’t know if this early blogging era was like the 60’s or maybe the wild-wild west. Well, the comments eventually turned into the wild west with a shoot out at the O.K. Corral.

When I moved to WIRED, everything was the same except it was at a different site. But I’ve been there for a LONG time (9 years?) and things evolve. My posts at WIRED are more edited and geared for a specific audience. That’s not bad, it’s just different. I don’t think I can just write whatever I want like I did in the old days. No more random posts that just talk about my cat (I don’t even have a cat).

So, that’s where this blog comes in. It’s a place where I can post whatever I want and no one can stop me. These are the kinds of things you will find here.

  • Random posts (like this one) that are just an outlet for me to write stuff and tell stories.
  • Explicit educational material. If a post needs too many equations, I would rather put it here. Many WIRED readers (while very education) don’t really get into all the equations. Also, since WIRED is paywalled it makes it more difficult for educators to access the stuff (in the off chance that they might find it useful).
  • MacGyver science notes. Oh sure, I post some MacGyver stuff on WIRED—but I really don’t think they want to see 50 posts on different episodes. So, those are here.
  • I think that pretty much covers it, so I don’t even need this last point.

In the end, I apologize for the confusion with the two blogs. Oh, actually there are three. I recently wrote a post on OneZero Medium (analysis of a car crash from Stranger Things) also. Not sure how much I will write there—but it’s still me.

What’s up with all the drone videos?

Yes, I have a drone. I love my drone. I can only hope my drone loves me as much as I love it. Honestly, I am honored that you even noticed my drone videos.

Oh, wait. You haven’t seen them? I can fix that.

In case you are curious. This is a DJI Spark. Great drone.

More Comments

Here are some more short comments.

  • Meeting with Bruce Sherwood and Ruth Chabay was great. I wish I had a picture with both of them (I did get one with Bruce though).
  • Bruce made this epic comment in regards to numerical vs. analytical calculations. People claim that analytical solutions are better because you can solve a problem in terms of known functions like sine and cosine. But how do you find the value of the cosine function? YUP – numerically or in a table or in an infinite series. So, in a way all solutions are numerical. Win for numerical.
  • The other deep thought by Bruce was a discussion on his AJP on energy. Read that paper. This sums it up. You can not find the work done by friction. Friction is crazy hard. I think I might write a WIRED post on this.
  • Eric Ayars had an excellent presentation on chaotic systems. One system was a bouncing ball on a moving floor. I wonder if there is a case where the ball just stops—this could happen if the relative collision speed of the ball and floor is zero.
  • The 30 demos in 60 minutes was pretty good. I love these things. Even though I’ve seen many of these demos before, I always find something new. Here is their site http://30demosin60minutes.com/
  • I went hiking. It was super hot, but I had a great time.

Using video games to build models. AAPT AD05

Here are the resources and links for my AAPT talk at the Summer Meeting. These are probably in chronological mass (unless I change my mind at the last minute).

How Do you Put Python in your Introductory Course? EN 01

This is just a resource page for my talk at AAPT. Here are some links (in order of appearance)

The physics of Michael Jackson’s moonwalk

Note: Originally posted on June 2009

Was the moonwalk fake? No, not the Apollo landings. I am talking about Michael Jackson’s moonwalk. You got to admit, he had a big impact on a lot of stuff and this is my way to give him respect – physics.

I am sure you know about the moonwalk. Maybe you can even do the dance move yourself, but how does it work? First, here is a clip of MJ doing his stuff.

As a side note, I can’t remember where I saw it but there was a great discussion of the history of the moonwalk. If I recall correctly, some were saying Michael didn’t create this move. One thing is for sure, he made it popular. Now for the physics.

The key concept here is friction. Friction is actually uber-complicated, but a simple model works for many cases. Static friction is a force exerted on an object when it is in contact with some surface but those two surfaces do not move relative to each other. Kinetic friction is a force exerted on an object when the two surfaces are moving. Suppose I have a block at rest on a table and I pull it with a slowly increasing force. This is what it would look like:

Two key things from this graph. As you pull on the stationary block, the block doesn’t move. If I pull with 1 Newton, and it doesn’t move then the frictional force is 1 Newton. If I then pull with 2 Newtons and it still doesn’t move, the frictional force is 2 Newtons. The static frictional force does what it can to make the thing not move – but not more than it can. This leads to the static friction model of:

F_\text{static} \le \mu_s N

In this model, the force is less than or equal to the product of some coefficient (that depends on the two types of surfaces) and the normal force (how hard the two surfaces are pushed together). The direction of this frictional force is parallel to the surface in the direction that prevents the object from sliding.

The other key feature in the graph is the small jump down when the thing starts to slide. This is because the coefficient of kinetic friction is typically smaller than that for static friction. Also, if the object is sliding, the frictional force is constant.

F_\text{kinetic} = \mu_k N

Back to Michael and the moonwalk. The key here is: how do you make one foot slide and the other not slide? If both feet are stationary, then this is dealing with static friction. I could make the frictional forces on these two feet different by changing my center of mass. Here is a free body diagram:

Since he is not accelerating up and down, the following must be true:

N_1 +N_2 = mg

These are the forces in the y-direction. They must all add up to zero so that:

F_\text{net-y} = ma_y = 0

There is another condition that must be satisfied. Since he is not rotating, the total torque about any point must also add up to zero. If you want more info on torque, check out this post (Note: link doesn’t work). But for this post I will just say that torque is like the ‘rotational force’. It depends on the point about which you want to rotate and is essentially the force applied times the perpendicular distance to the point of rotation. For the free body diagram of Michael, I have chosen one of his feet to be the point about which he is not rotating (I could chose any point). This makes 3 of the forces have zero torque (N2, F2 and F1 have zero torque because the perpendicular distance to point O is zero). Here I labeled the other important distances:

The only two forces that exert torque about O are the weight and the N1 force. They have opposite directions of torque because they would cause rotation in different directions. This along with the previous equation gives:

mgr_1 = N_1r_2

N_1+N_2 = mg

Eliminating mg, and solving for N1, I get: (I know the indices for the forces and distances don’t match)

N_1 = N_2\left(\frac{r_1}{r_2-r_1}\right)

If his center of mass is in the middle, then r2 – r1 = r1 and the two normal forces would be equal (as you would expect). If the center of mass is more towards the foot on the right, then r2 – r1 is less than r1 and N1 will be larger than N2. This will make the frictional force on the foot to the right greater and the other foot slide.

Well, what if r1 is greater than r2? One of two things would happen. Either he would fall over, or there would have to be a force pulling the foot on the left down. This is similar to Michael Jackson’s trick in “Smooth Criminal”.

Here he used special shoes that connect to the floor so that he could do this. More details on this page.

Ok. So that is how Michael gets one foot moving. How does he keep one foot sliding and the other not sliding? It is really the same thing as above except that he can increase the force on the moving foot a little bit more since it is sliding. Sounds easy, but Michael could really make it look cool.

Finally, I just want to show another demo that is essentially the same idea.

You can find more details on the meterstick demo in this blog post.

Back of the Envelope Estimation Problem for Faraday’s Law

I told my students I would solve this problem for them. It’s a real life problem too.

Is it possible to use a Neodymium magnet and a coil of wire to get an LED to light up?

That’s the real version. But because I was afraid students would be overwhelmed, I added the following:

  • The magnet has a maximum magnetic field of 0.2 Tesla.
  • The LED requires 1.5 Volts and 10 mA to light.

I like this problem because I don’t know the answer. Also, the answer is useful. If you want to do a physics demo showing the voltage induced by a changing magnetic field—what better way than with a hand-held magnet and a small light?

But will it even work? Let’s get started. Here is a diagram.

By changing the magnetic flux through the coil, this will create a curly electric field and an electromotive force (a change in electric potential). The magnetic flux is defined as:

\Phi = N|\vec{B}|A\cos\theta

Where N is the number of turns in the loop, A is the area of the loop and \theta is the angle between the magnetic field and a vector perpendicular to the area. In the diagram above, \theta = 0 since the magnetic field is perpendicular to the coil.

A change in flux produces a voltage according to Faraday’s Law:

\Delta V = \frac{\Delta \Phi}{\Delta t}

Note: yes, I’m different. I think that the number of loops (N) is part of the magnetic flux and that the minus sign in Faraday’s Law doesn’t really mean anything.

Putting the flux into Faraday’s Law, I get (assuming \theta = 0):

\Delta V = \frac{NBA}{\Delta t}

Now for some estimates. I could just estimate everything and then calculate the voltage—but instead I’m going to estimate everything except the number of turns. I can then solve for N and see if it’s reasonable.

Here’s what I have.

  • B = 0.2 T
  • A: radius = 0.01 m
  • Time interval = 1 second
  • Voltage = 1.5 V

Solving for N:

N = \frac{\Delta V \Delta t}{BA}

This is the perfect case to use python for your calculator. You can put your estimates as variables so that you can easily change things up. Here is my code. I get the following output.

Umm….yeah. That’s 23 thousand turns. I’m not going to do that. Even if decreased the time to 0.1 seconds, I would still need 2000 turns. Arg.

Oh, what if I just make a HUGE loop? Nope. That wouldn’t work. In my estimation for the change in flux, I assumed a constant magnetic field—this is obviously not true, but good enough for a small loop. With a big loop, you would have some of the magnetic field creating a negative flux. It would just make things worse.

What if I put the magnet on a spinning stick (run by a motor)?

Numerical Calculation for Work Done Near a Dipole

I’ll be honest. This connection between the electric potential (change in electric potential) and the electric field can get sort of crazy. But let’s just start with a problem and then solve it in more ways than you wanted.

Here is the problem.

Let’s start with the energy to bring an electron to point B. The energy needed would be equal to the change in electric potential energy which is equal to:

\Delta U_E = q\Delta V

That means I just need to calculate the change in electric potential from infinity to point B. Yes, you could also calculate the work needed to move the charge—I’ll do that also.

Since I am dealing with two point charges, I can use the following expression for the potential due to a point charge (with respect to infinity):

V = k\frac{q}{r}

Where k is the Coulomb constant (k = 9 \times 10^9 \text{ Nm}^2\text{/C}^2 and r is the distance from the point charge to the final location. Since there are two point charges, the total potential will just be the sum of the two potentials. Let me call the positive charge “1” and the negative charge “2”. That means the total potential will be:

V = V_1 + V_2 = k\frac{q_1}{r_1} +k\frac{q_2}{r_2}

From the original problem, q_1 = 2 \times 10^{-9}\text{ C} and q_2 = -2 \times 10^{-9}\text{ C} . The distance r_1 will be 6 mm and the distance r_2 will be 4 mm (need to convert these to meters).

Putting this all together, I get the following. I will do my calculations in python. Here is the code.

Running gives the following output.

Boom. There is your first answer. What about point A instead of B? Well, in this case, I just have different distances. The distance for both r_1 AND r_2 are the same. Since they have the same distances but equal and opposite charges, the two potentials will be opposite. When added together, the total potential is zero volts. Yes, the energy needed to put a point charge at A from infinity is zero Joules.

What? Yes. How about this? Suppose you take the electron from infinity on the positive y-axis. As you move down the axis to point A, the electric field is in the x-direction. That means the electric force is in the negative x-direction. You would have to push it in the positive x-direction and move in the y-direction. But that requires ZERO work since the force and displacement are perpendicular.

Oh. You want to get to A from a point of infinity on the positive x-axis? OK. That still works. Remember that for electric potential, the path doesn’t matter—only the change in position (path independent). I can take whatever path I like. I’m going to move in a circle from positive infinity x to positive infinity y. The electric field is zero out there, so that requires zero work. Now I’m at positive infinity y—and I just did that problem. Zero work.

Another way—by calculating the work

Remember that work-energy principle? It says this:

W = \Delta E

And the work can be defined as the following (if the force and displacement are constant):

W = F\Delta s \cos \theta

Oh, and the force will be the opposite of the electric force where:

\vec{F} = q\vec{E}

So, as you push a charge towards point B (point A is boring—for now) the electric field changes. That means we have a problem. We can’t use the above formula to calculate the work—unless we cheat. Let’s cheat.

Instead of calculating the total work to move the charge to point B, I’m just going to move it a tiny bit. During this tiny move, the electric field (and thus the force) will be approximately constant. Then I can do another tiny move. Keep repeating this until I get to point B. Here is a diagram.

If this distance is short (\Delta \vec{s}) then the force is approximately constant. That means the tiny amount of work (which I will call \Delta W) would be equal to:

\Delta W = eE\Delta s

OK, just to be clear. This is the force needed to PUSH the electron (with a charge e)—it’s not the electric force on the electron (which is in the opposite direction). Also, the angle between F and the displacement is zero. That means the cosine term is just one. I wrote the force and displacement as scalars because it’s just the magnitude that matters.

Now we are ready for some stuff. Here are the steps I am going to use.

  • Start at some position far away (but not actually infinity because that would be crazy). It just needs to be far enough away such that the electric force is negligible.
  • Calculate the total electric field and the force needed to push the electron at this point.
  • Move some short distance towards point B.
  • Over this distance, assume the force is constant and calculate the small work done—add this to the total work.
  • Repeat until you get to point B.

Before making this one program, I’m going to just make a program to plot the electric field from some value up to point B. Here is the plot from that program. (here is the code)

Note that I started from just 5 cm away from the origin—which is TOTALLY not infinity. However, it makes the graph look nice. But still, this is good because it looks like the calculation is working. Now I can use this same calculation go find the work needed to move the electron. Here is the code.

And the output:

Notice that gives a close, but wrong answer (compared to my previous calculation). Why is it wrong? Is it because I started at y = 0.5 meters (I just realized I’ve been using the variable y instead of x—but it should be fine). Or is it wrong because my step size is too big?

The answer can be found by just changing up some stuff. If you move the starting point to 1 meter, you get about the same answer. However, if you change dy to 0.0001, you get the following output.

That works. Oh, I added some more stuff to the output.

Non-straight Path

One more thing (and then I will look at the electric field in another post). What if I use a different path to get to point B? Instead of coming along the x-axis (which I previously called “y”), I come parallel to the axis a distance of 2 mm above it. Once I get right over point B, I turn down.

Like this.

This introduces some “special” problems.

  • I can break this path into two straight pieces (path 1 is parallel to x-axis and path 2 is parallel to y-axis).
  • Along path 1, the force needed to push the electron is NOT parallel to the path. So, the angle is not zero in \cos \theta. This means I’m going to have to calculate the actual vector value of the electric field at every step along this path.
  • The same is true along path 2.
  • But in the end, I should get the same work required—right?

OK, hold on because this is going to get a little more complicated. Let me just include one sketch and then I will share the code for this new path. Here is how to calculate the electric field and work for a particular step in path 1.

Here’s what needs to happen to calculate the electric field (and force) for each step:

  • Find the vector from the positive charge to step location.
  • Use this vector to find a unit vector (to give the electric field a direction).
  • Use that vector to also find the magnitude of the electric field.
  • Calculate the electric field due to the positive charge (as a vector).
  • Repeat this for the negative charge.
  • Add the two vector values for the electric field to get the total electric field.
  • Multiply by the charge to get the force (which would be in the opposite direction).

Now, to calculate the work done during each small step, I could use the angle between the force and displacement. But I don’t know that. Instead, I can use the vector definition of work:

W = \vec{F} \cdot \Delta \vec{s}

Yes, that is the dot product. Fortunately, the dot product is already built into VPython (Glowscript). So, once I get a vector value for the force and the displacement I can just use the “dot()” function.

OK, let’s do it. Here is the code (warning—vector stuff in the code) and the output.

Wow. I didn’t think that would work the first time. I’m pumped.

OK, the real reason for this post was to look at the connection between the electric field and the change in electric potential. I’ll make that in a follow up post.

Magnetic Field due to a Long Straight Wire

It seems that most of the second semester algebra-based physics is magic. Since you need calculus to derive many of the expressions, the students just get them magically instead.

NOT TODAY. Well, I hope not. Today I am going to use python and the Biot-Savart Law to find the magnetic field due to a wire. Here is the expression I want to show:

B = \frac{\mu_0 I}{2 \pi r}

Where I is the current in a wire and r is the distance from the wire. I guess I should start with the magnetic field due to a moving point charge.

\vec{B} = \frac{\mu_0}{4 \pi} \frac{ q\vec{v} \times \vec{r}}{r^3}

Yes, that’s sort of a crazy equation. The weird part is the cross product. Here are some notes:

  • The “times” symbol is the cross product.
  • The cross product is an operation between two vectors that returns a vector as the resultant (unlike the dot-product that returns a scalar).
  • The resultant of this vector is perpendicular to both of the products—that makes this only work in 3D.
  • The magnitude of the resultant depends on the magnitude of the products and the sine of the angle between them.

OK, that’s enough of that. Fortunately, we don’t really need to compute cross products since it’s built into VPython (Glowscript). Let me do one more thing before calculating stuff. Suppose I have a charge q moving with a velocity v over some short length of wire, L. I can write qv as:

q\vec{v}=q\frac{\vec{L}}{\Delta t} = \frac{q}{\Delta t} \vec{L} = I\vec{L}

So, instead of dealing with qv, I can use IL. Note that L is a vector in the direction of motion for the current. Now my magnetic field looks like this:

\vec{B} = \frac{\mu_0}{4 \pi} \frac{ Id\vec{L} \times \vec{r}}{r^3}

I changed from L to dL since it has to be a short wire. So, dL is just a way to emphasize that the wire is super short.

Let’s do this. Here is my first calculation. Let’s say I have a super short wire (0.01 m) with a current of 0.1 Amps. What is the magnetic field a distance of 0.02 meters from the wire? I left off something important—but I will show you that in a second. Here is the code to calculate this magnetic field.

It looks like this (this is just an image—you need to go to the trinket site to actually run this code).

If you run this, you get an output of <-2.5e-7,0,0> T. I think that’s correct. But let’s make this better. Let’s make a visual representation of the magnetic field. Really, that is the power of VPython anyway. Here is the new code and this is what it looks like when you run it.

I rotated the camera angle a little bit so you could see the wire and the magnetic field. OK, now for MORE VECTORS. Here is the sloppy code.

Oh. I like that. It’s pretty. But you can see that the magnetic field makes a circular pattern around the wire. But what about a long wire? Here comes the part where we NEED python. I want to be able to represent a long wire as a series of a bunch of small wires. Then I can calculate the magnetic field due to each of the small wires and then add them up to get the total magnetic field.

In order to simulate a “long wire” I need to have the “observation” location in the center of the series of short wires. Maybe this diagram will help. Here is a side view of 8 small wires together along with the observation location.

Each of these parts of a wire will have a magnetic field at the “obs” location. So, here is how this will work.

  • Pick some distance from the wire (r) and create the observation location as a vector.
  • Take the wire and break it into pieces. The more pieces, the better the answer.
  • For each piece in the wire, calculate the vector r to the observation location.
  • Calculate the magnetic field due to this piece and add it to the total.

Let’s do this. Here is the code. Oh, I am going to use the same wire as before but I will make it 1 meter long. Also note—I’m not going to display an image of the magnetic field (or even the wire). I’m going to try to make this as simple as possible.

Using 8 pieces, I get the following output.

Where the theoretical B is the value calculated from the scalar equation up top (magnetic field due to a long wire). So, this is the scalar value (ignore the negative sign). Also, it looks quite a bit off—but there are a couple of points.

  • This calculation only uses 8 points.
  • There is a slight error. I put the first I*dL at the position x = -L/N. That assumes a super tiny dL—and that’s not true when N = 8.
  • The magnetic field due to a long wire equation (above) is for an infinite length wire.

Still, it’s pretty good. What happens as I increase the number of pieces? For that, I’m going to make this whole calculation a function. That way I can run it a bunch of times. Here is a refresher course on functions in python.

Here is the code that calculates the magnetic field using 10 pieces up to 50 pieces.

Check out this plot.

So, with 50 pieces you get a pretty good agreement with the theory. I like that.

But wait! The theoretical value says the magnitude of the magnetic field decreases as 1/r. Does that work for this model too? Let’s test it. Here is the code.

Surprising that the two calculations don’t quite agree at very close distances. I suspect that is because I have an even number of wire pieces (50) which puts the observation location between two wires segments. Or something like that. But otherwise, this works.

It’s too bad I can’t embed trinket.io right into this blog. I guess I will have to upgrade my wordpress at some point.