首页 » 技术分享 » 简易线圈炮制作

简易线圈炮制作

 

大四还有最后一个课程设计,在暑假电赛的现场跟老师吹嘘了一下,就把H题的电磁炮拿来作课程设计,结果…所以说,没事不要吹牛,吹了就要负责任。因为大四时间比较紧张,各种事务杂乱繁忙,只能砍去打炮之外的其他功能。所以本文主要介绍如何制作一个简易的线圈炮。

读者须知

不知道读者阅读此文的目的是什么,都需要做到以下保证:
① 不伤害他人。科技是双刃剑,拿来害人终究会害了自己。
② 遵守中国法律法规。严格控制功率,不要做犯法的事情。
③ 不可售卖。本文的初衷是技术的记录与交流,而非支持第三方商业活动。
④ 注意安全!实验时可能会发生安全事故,请读者做好防护工作,本人不对任何安全事件负责。

电磁炮

制作一样工具都需要先了解这样工具是什么。电磁炮其实属于一个大类,细分之下还有轨道炮、线圈炮、电热炮、重接炮四大炮种。其原理都绕不开电磁感应。其高中物理学过:平行垂直磁场下,通电导线将做直线运动。这就是轨道炮的最基本原理。但本文不做轨道炮,而是第二种,线圈炮。形状如下图右上方。
来自百度百科电磁炮的截图
上图来自百度百科电磁炮的截图

线圈炮形如其名,通过给线圈通电的方式产生磁场,利用磁极同性相斥原理将磁性炮弹打出。所以,线圈炮的制作难点在于:
① 应该给线圈通什么电?
② 怎样给线圈通电?
③ 通电电压应该多大? 通电多长的时间?

线圈通直流电,只有直流电才有唯一的电流方向,才能产生唯一的磁场方向,这是根据右手定则确定的。给线圈通电的方式有很多种,但是需要思考明白的是,这个电肯定是一瞬间的事情,就像积攒了大量的雨水然后打开水坝水闸的样子,子弹才会瞬间获得力量喷射出去。而这个力量取决于电压的大小,电压越大,释放的电量越足,电流也就越大,瞬间磁场也就越强,子弹喷射的距离也就越远。这样子,给线圈通电的方式也就很明了,那就是用电容放电的方式给线圈进行通电。

电容

电容在电路中起着各式各样的作用,但是它最本质的作用是储能,它是一种能够存储电荷的元件。

电容充电

电容的两极只要产生压差就能进行充电。电容的充电电路十分简单,只要将电源正极接到电容正极,电源负极接到电容负极即可,最好外加一个开关。
在这里插入图片描述
需要注意的是,电容的正负极不要反接。在不明电容内部材料的情况下进行反接,短时间小电压接触下不会对电容器产生大的损害,但是长时间如此内部可能会发生氧化还原反应(高中化学),造成电容不可逆的损害,从而损坏电容。严重时还有可能发生爆炸(内部化学反应产生气体),造成安全事故。

或许你会疑惑,电源直接接上电容会不会瞬间产生爆炸,或者瞬间电流过大损害电容,或者电压过大造成人体触电。需要强调的是,这都是可能的事情。所以接电路之前,需要观察电容的极限电压与电容大小。以及千万要注意保证自身的安全。

为了方便观察电容的充电过程,上述电路的基础上,增加一个发光二极管。为了防止电流的倒流,增加一个二极管。为了防止电流过大而损坏元件,增加电阻。
在这里插入图片描述
这里R3的大小可根据实际需要进行更换。若VCC=50V,R3可取的范围是300~1K,电阻越小充电电流越大,充电速度越快,电阻损耗速度越快;电阻越大充电电流越小,充电速度越慢,电路安全性越高。由于充电过程对电阻来说是进行功率损耗,所以电阻需要选择支持高功耗的,如1/2W、1W。

电容放电

当LED熄灭的时候,说明此时电容的电压已经接近电源电压,可以近似理解为电容充满电。这时将电容两端的导线断开,换成如下的电路。
在这里插入图片描述
此时的电容相当于一个电源,当构成回路时,电容持续放电,直到电容两极的电压为零。

理解电容的充放电原理之后,可以降低内心对电容的恐惧。如果把电容放电的负载换成线圈,其实就已经是一个线圈炮了。只不过这样的结构十分简陋,充电放电的操作麻烦且不安全,所以需要对其进行改进。

原理图

充放电电路

在这里插入图片描述
上图就是线圈炮中电容的充放电电路,其基本原理已经在上文电容充放电作出解释,这里就其原理进行扩充与应用。观察此电路图,需要懂得基本的三极管开关电路,继电器工作原理的知识,这里为免累赘就不作解释了,可以自行百度或者留言本博客等待解答。

充电(charge)

在这里插入图片描述
充电的思路是,让高电压到达电容正极,低电压(地)到达电源的负极,从而构成充电回路,对电容进行充电。这里用两个继电器替代上文的两个自锁开关,继电器的通断取决于PNP三极管(S8550)基极的电压,而此电压取决于单片机GPIO引脚的输出电压。此时,单片机应该输出的是:

GPIO 输出电压
charge 0v
discharge 5v

因此,左边继电器没有电压,无法工作,开关5打在常闭触点2上,50v高压对电容正极进行充电。相反,右边继电器接收到工作电压,开关5跳到触点1上,电容负极与地连接,地对电容负极进行充电。此时LED灯发光。

继电器上电瞬间,开关5跳变的过程会发出声音,你将在听到滴答声后看到LED灯发光。

当LED灯熄灭时,电容趋于满电,准备放电。

放电(discharge)

在这里插入图片描述
放电的思路是,让电容的正极与负极相接,构成闭合电路。与充电相反,此时单片机的输出应该是:

GPIO 输出电压
charge 5v
discharge 0v

此时,左边继电器开始工作,开关5跳变打到触点1上,电容正极接入线圈一端。右边继电器停止工作,开关5回到常闭状态,与触点2连接,电容负极接入线圈另一端。线圈是一根长导线,将电容正负极相连。

在电容放电的一瞬间,线圈内部流过电流,产生磁场,此时若线圈前方有磁石,若磁石与线圈相对面是异极,那么磁石将被线圈吸引;若磁石与线圈相对面是同极,磁石被线圈排斥,瞬间巨大的排斥力将会把磁石击飞。

听闻导磁体也可以产生同样的效果,可当放入螺丝时,无论怎么放都会被线圈吸引。而放入磁石的效果比较良好。

升压电路

在这里插入图片描述
升压电路非常简单,因为是直接用的DCDC升压模块。这个模块可以在淘宝搜盛科电子搜到,性价比较高。输入电压5V,输出电压可以为6~50V,蓝色部分为滑动变阻器,改变阻值可以改变输出电压。当然也可以自己设计升压电路。
在这里插入图片描述

主控电路

在这里插入图片描述
主控还是采用51单片机,用到两个GPIO口,两个外部中断,串口通讯。

其他电路

在这里插入图片描述
通讯电路用到了蓝牙模块HC-06,配合App实现远程遥控打炮。

PCB设计

材料选购

单片机最小系统

材料 数量
单片机锁紧座 40脚 1
11.0592M晶振 1
22pF瓷片电容 2
四脚按键 2

电源

材料 数量
DC005-2.0插座 1
自锁开关 1
DCDC升压模块 1

控制

材料 数量
电容22000uF 2
继电器5V 2
三极管S8550 2

其他

材料 数量
接线端子2P 3
红色LED 1
电阻1K(1W) 2
电阻2.5K(1/4W) 1
1N4007二极管 1
排母4P 1

PCB之外

材料 数量
线圈400匝 1
PC圆管 1
磁铁 若干
HC-06 蓝牙模块 1

这里不赘述材料链接,具体型号尺寸的链接将会以清单形式放在压缩包中。

画板

PCB
上图就是线圈炮的PCB图。单片机插座由于丝印反向,所以焊接的时候需要把插座反向放置,但是单片机还是得保持正向放置才不会烧坏。其次,DCDC升压模块的两个焊盘需要穿螺丝,螺丝型号尽量选M2.5,以防空间不足。最后是继电器,继电器的封装也是偏小,焊接之前要掰一下引脚,上锡的时候多融点锡即可。希望读者能自己画一块PCB板,根据手头的材料重新画一下封装。

代码

单片机

单片机代码十分简单,仅用到外部中断与串口通讯,这里简单带过。

外部中断修改flag变量。

//充电
void Int0(void)	interrupt 0		
{
	DelayMs(300);
	flag = 1;	
}

//发射
void Int1(void)	interrupt 2
{
	DelayMs(300);
	flag = 0;
}

单片机串口接收来自蓝牙模块的串口数据,从而触发串口接收中断。不知道是何种原因,SBUF的数据直接传入变量会造成最后一位数据的丢失,所以采用先左移一位,再右移复原的方式保证数据的完整。当接收到的数据为 0x01 或者 0xff 时修改flag变量。

void Timer1_Usart(void) interrupt 4
{
	uchar rD;
	ES = 0;
	T0 = 0;
	if(RI)
	{                     
		receiveData = ((uint)SBUF)<<1;
		rD = (uchar)(receiveData>>1);

		while(RI == 0);
		RI=0;

		switch(rD)
		{
			case 0x01://发射
				flag = 0;
				break;

		 	case 0xff://充电
				flag = 1;
				break;
		}
	}
	T0 = 1;
	ES = 1;
} 

主函数不断扫描flag变量,flag为1时触发充电,为0时触发放电(发射)。

void main()
{
	External_Inter_Init();
	Usart_Init();
	charge = 1;
	discharge = 1;
	while(1)
	{
		if(flag)
		{
			charge = 0;
			discharge = 1;
		}else{
			charge = 1;
			discharge = 0;

		}
	}
}

设置定时器1产生波特率,波特率为4800。PS 置1是使串口接收中断的优先级更高。

void Usart_Init(void)
{
	SCON=0X70; //设置为工作方式1
	TMOD=0X20; //设置计数器1为工作方式2
	PCON=0X80; //波特率加倍
	TH1=0xf4;  //计数器初始值设置,注意波特率是4800的
	TL1=0xf4;
	ES=1;	   //打开接收中断
	PS=1;	   //设置串口中断的优先级更高
	TR1=1;	   //打开计数器
}

外部中断的配置以及延时函数在此不赘述。除此之外,还可以增加串口的发送函数,将蓝牙模块所需要的AT指令配置写入主函数当中。但这里没有写的原因是,蓝牙模块处在不同波特率下是无法通讯的,需要用电脑串口软件进行修改设置。与其如此,这里直接省去。

App

App的代码是基于蓝牙协议下,蓝牙串口软件修改而来。重点在于sendData(String)函数的理解与应用,按键监听函数OnClickListener()的修改。

首先是sendData(String)函数,需要传参为String字符串类型。传入的指将被截取传入ss变量,经过for循环的检索,如果内容不为空,即长度不为零,那么将变量以int型16进制形式传入bs变量,最终发送出去。

/*
** 发送指令函数
** 每次只能发送一个字节即八位,且以16进制发送
*/
private void sendData(String Send_code)
{
	if (mConnectService==null||mConnectService.getState()!=BluetoothService.CONNECTED) {
		Toast.makeText(this,"未连接到任何蓝牙设备", Toast.LENGTH_SHORT).show();
		return;
	}
	byte[] bs;
	String[] ss=Send_code.split(" ");
	bs=new byte[1];
	for(String s:ss){
		if(s.length()!=0){
			bs[0]=(byte)(int)Integer.valueOf(s, 16);
			mConnectService.write(bs);
		}
	}

}

然后是按键的监听。当btn_charge按键被按下,那么将code_number赋值为255(即0xff);code_number &= 0xff 这一步是必须的,按位相与,虽然看起来没什么变化,但是实际上内部发生了变化。之后调用 sendData(String) 函数,将255以String类传入。btn_discharge按键被按下后的代码大同小异,只不过把code_number的值替换成1(即0x01)即可。

private OnClickListener ButtonClickListener = new OnClickListener() {
	public void onClick(View v) {
		switch(v.getId()){
			case R.id.btn_charge:
				int code_number0 ;
				code_number0 = 255;
				code_number0 &= 0xff;
				sendData(Integer.toHexString( code_number0 ));
				Toast.makeText(getApplicationContext(),"充电中..",Toast.LENGTH_SHORT).show();
				//延时
				for(int b = 19;b > 0;b--)
				{
					for(int a = 130;a > 0;a--);
				}
				break;

			case R.id.btn_discharge:
				int code_number1;
				code_number1 = 1;
				code_number1 &= 0xff;
				sendData(Integer.toHexString( code_number1 ));
				Toast.makeText(getApplicationContext(),"已发射!",Toast.LENGTH_SHORT).show();
				//延时
				for(int b = 19;b > 0;b--)
				{
					for(int a = 130;a > 0;a--);
				}
				break;
		}
	}
};

实物

正面照

正面照

反面照

反面照

演示

按键触发

在这里插入图片描述

App触发

在这里插入图片描述

下载

原理图,PCB,代码,清单的压缩包下载:
https://download.csdn.net/download/qq_43419705/11932903

由于大四事物繁多,只能挤着时间更新,细节地方没有很深入讲解,在此对读者说一声抱歉。有任何问题,可以在下方评论留言,我会尽力解答。

转载自原文链接, 如需删除请联系管理员。

原文链接:简易线圈炮制作,转载请注明来源!

0