Search
Kan vi bruke en railgun til å akselerere et tog i Oslo t-banen?

Railgun train

Skrevet av Fridtjof Gjengset og Isak Kvanneid

I denne oppgaven har vi tatt konseptet av en railgun og anvendt det for å se på hvor mye energi som kreves for å akselerere ett t-bane med en gitt akselerasjon opp til en gitt hastighet. Vi skal se om dette er en effektiv måte å akselerere et t-bane på og sammenligne det med tradisjonelle t-baner.

Koden er skrevet som en funksjon railgun(distance,speed,acceleration,mass), slik at vi lett kan endre på relevante variable som akselerasjon, fart, avstand og masse. Funksjonen lager flere lister som inneholder posisjon, tid, fart, akselerasjon og strøm, som funksjonen deretter retunrnerer. Dette er gjort slik at vi rask kan endre det vi ønsker å plotte uten å kjøre hele funksjonen på nytt igjen.

import numpy as np
import matplotlib.pyplot as plt
def railgun(distance,speed,acceleration,mass):
	D = 3 #separation of the rails and width of the cart. Set to 3m
	w = 0.2 #width of the rails. Set to 20cm each
	L = distance #length of the rails.
	m = mass #defines mass
	fric = 0.001
	dt=.00001 #initial timestep 0.00001s
	Muover2pi = 2e-7 #magnetic constant


	barpos = 0 #initial position of bar
	v=0 #initial velocity set to 0
	t=0 #initial time
	I = 0 #starting current. Set to 0 Amps
	a_tol = acceleration*0.01 #acceleration tolerance


	Fnet = 2*Muover2pi*(I**2)*(np.log(D+w/2)-np.log(w/2)) - fric*m*9.81#initial force
	a = Fnet/m #initial acceleration

	v_list = [float(v)]#defines lists with initial values
	t_list = [float(t)]
	barpos_list =[float(barpos)]
	I_list = [float(I)]
	a_list = [float(a)]

	while barpos < L: #while the desired distance is less than current distance
		Fnet = 2*Muover2pi*(I**2)*(np.log(D+w/2)-np.log(w/2)) - fric*m*9.81#Based on our calculated expression for the force on the bar minus frictional force
		a = Fnet/m #calculated acceleration based on Fnet

		while a-a_tol>acceleration and v<speed: #while a is too big adjusts current
			I = I - 1#adjusts current down
			Fnet = 2*Muover2pi*(I**2)*(np.log(D+w/2)-np.log(w/2)) - fric*m*9.81#finds new force
			a = Fnet/m #finds acceleration

		while a+a_tol<acceleration and v<speed: #while a is too small adjusts current
			I = I + 1#adjusts current up
			Fnet = 2*Muover2pi*(I**2)*(np.log(D+w/2)-np.log(w/2)) - fric*m*9.81 #new force
			a = Fnet/m #finds acceleration

		if v>speed: 
			while Fnet>0: #calculates I to get Fnet=0
				I = I - 1
				Fnet = 2*Muover2pi*(I**2)*(np.log(D+w/2)-np.log(w/2)) - fric*m*9.81

		v = v + a*dt #Update the velocity
		barpos = barpos + v*dt #Use velocity to update position

		t = t+dt#add to total time
		barpos_list.append(float(barpos)) #updates all lists
		v_list.append(float(v))
		t_list.append(float(t))
		I_list.append(float(I))
		a_list.append(float(a))
    
	return([barpos_list,v_list,t_list,I_list,a_list]) #returns complete lists
[barpos_list,v_list,t_list,I_list,a_list]=railgun(100,11,1.3,125*10**3) #distance,speed,acceleration,mass
plt.plot(barpos_list,I_list)
plt.grid(True)
plt.title("Current required")
plt.xlabel('position(m)')
plt.ylabel('current(Amp)')




plt.show()
plt.plot(t_list,I_list)
plt.grid(True)
plt.title("Current required")
plt.xlabel('time(s)')
plt.ylabel('current(Amp)')




plt.show()
plt.subplot(1,2,1)
plt.plot(barpos_list,v_list)
plt.grid(True)
plt.title("Speed of cart")
plt.xlabel('position(m)')
plt.ylabel('speed(m/s)')

plt.subplot(1,2,2)
plt.plot(t_list,v_list)
plt.grid(True)
plt.title("Speed of cart")
plt.xlabel('time(s)')

plt.show()

I følge den engelse wiki siden om de norske tbanene bruker et fullastet togsett omtret 5000amper for å akslerere fra 0 til 40 $\frac{km}{t}$. Vårt tog bruker 300 KAmp for å akselerere med 1.3 $\frac{m}{s^2}$ til samme fatren. Med andre ord er ikke elekromagnetisme beste måten å akselerere et tog.

[barpos_list,v_list,t_list,I_list,a_list]=railgun(10,400,10000,10)
plt.subplot(1,2,1)
plt.plot(barpos_list,v_list)
plt.grid(True)
plt.title("Speed of projectile")
plt.xlabel('position(m)')
plt.ylabel('speed(m/s)')

plt.subplot(1,2,2)
plt.plot(t_list,v_list)
plt.grid(True)
plt.title("Speed of projectile")
plt.xlabel('time(s)')

plt.show()
plt.plot(t_list,I_list)
plt.grid(True)
plt.title("Current required")
plt.xlabel('time(s)')
plt.ylabel('current(Amp)')




plt.show()

Selvom vår oppgave nå er spesielt anvendt for tog og ikke mindre prosjektiler så kan vi sammenligne svarene vi får hvis vi bruker det samme programmet. Hvis vi akselerere et 10kg prosjektil til 400$\frac{m}{s}$ med en akselerasjon på 10000$\frac{m}{s^2}$ over 10m så trekkes en strøm på 250 kAmp over et tidsintervall på 0.04s. Hvis vi sammenligner dette med resultatet vi fikk for toget hvor akselerasjonen krevde en strøm på omtrent 350 kAmp over et tidsintervall på litt over 8s så trekker toget ekstremt mye mer strøm.

Etter å ha sammenlignet svarene så kan vi se at å akselerere et tog ved hjelp av en railgun krever veldig mye energi i forhold til hva et vanelig tog vil trenge. Hvis vi prøver å sammenligne med en mindre masse så krever det åpenbart mindre energi, men det kan ha andre praktiske anvendelser hvor det faktisk kan lønne seg å bruke en railgun.