地震是不可预测的自然灾害,会造成生命和财产损失。它突然发生,我们无法停止它,但可以从中得到警告。在当今时代,有许多技术可用于检测微小的震动和撞击,因此我们可以在地球发生一些重大振动之前采取预防措施。在这里,我们使用加速度计ADXL335来检测地震前的振动。加速度计ADXL335对所有三个轴的震动和振动非常敏感。在这里,我们使用Accelerometer构建基于Arduino的地震检测器。
我们在这里将这种地震检测器构建为PCB上的Arduino Shield,还将使用Processing在计算机上显示振动图。
所需组件:
- Arduino UNO
- 加速度计ADXL335
- 16x2 LCD
- 蜂鸣器
- BC547晶体管
- 1k电阻
- 10K锅
- LED
- 电源9v / 12v
- 冰山棍男/女
加速度计:
加速度计的引脚说明:
- Vcc 5伏电源应连接到此引脚。
- X-OUT此引脚在x方向上提供模拟输出
- Y-OUT该引脚在y方向提供模拟输出
- Z-OUT此引脚在z方向上提供模拟输出
- GND地
- ST该引脚用于设置传感器的灵敏度
另请使用Accelerometer检查我们的其他项目:
- 使用Arduino的Ping Pong游戏
- 基于加速度计的手势控制机器人。
- 使用GPS,GSM和加速度计的基于Arduino的车辆事故警报系统
工作说明:
这个地震探测器的工作很简单。正如我们前面提到的,我们已经使用加速度计来检测三个轴上任何一个方向的地震振动,以便无论何时发生振动,加速度计都会检测到该振动并将其转换为等效的ADC值。然后,这些ADC值将由Arduino读取并显示在16x2 LCD上。我们还使用Processing在Graph上显示了这些值。通过在这里浏览其他加速度计项目,了解有关加速度计的更多信息。
首先,每当Arduino通电时,我们就需要通过采样周围振动来校准加速度计。然后,我们需要从实际读数中减去这些样本值以获得真实读数。需要进行此校准,以使其不会显示有关其正常周围振动的警报。找到真实的读数后,Arduino将这些值与预定义的最大值和最小值进行比较。如果Arduino发现任何变化值大于或小于两个方向(负向和正向)上任何轴的预定义值,则Arduino触发蜂鸣器并在16x2 LCD上显示警报状态,同时LED也会亮起。我们可以通过更改Arduino代码中的预定义值来调整地震探测器的灵敏度。
文章末尾提供了演示视频和Arduino代码。
电路说明:
该地震探测器Arduino Shield PCB的电路也很简单在这个项目中,我们使用了Arduino来读取加速度计的模拟电压并将其转换为数字值。 Arduino还驱动蜂鸣器,LED,16x2 LCD并计算和比较值并采取适当的措施。下一部分是加速度计,它可以检测地球的振动并在3个轴(X,Y和Z)上生成模拟电压。 LCD用于显示X,Y和Z轴值的变化,并在其上显示警报消息。该LCD以4位模式连接到Arduino。 RS,GND和EN引脚直接连接到Arduino的9,GND和8引脚,LCD的其余4个数据引脚,即D4,D5,D6和D7直接连接到Arduino的数字引脚7、6、5和4 。蜂鸣器通过NPN BC547晶体管连接到Arduino的引脚12。一个10k的电位器也用于控制LCD的亮度。
编程说明:
在此地震检测器Arduino Shield中,我们编写了两个代码:一个用于Arduino来检测地震,另一个用于处理IDE以在计算机上的图形上绘制地震振动。我们将一一了解这两种代码:
Arduino代码:
首先,我们根据加速度传感器的放置表面对其进行校准,以使加速度传感器不会对周围的正常振动显示警报。在此校准中,我们获取一些样本,然后取它们的平均值并存储在变量中。
for(int i = 0; i
现在,每当加速度计获取读数时,我们都会从读数中减去这些样本值,从而可以忽略周围的振动。
int value1 = analogRead(x); //读取x int int value2 = analogRead(y); //读取y int value3 = analogRead(z); //将z读取为int xValue = xsample-value1; //查找x int的变化yValue = ysample-value2; //在y int中查找变化int zValue = zsample-value3; //查找z的变化/ *在lcd * / lcd上显示x,y和z轴值的变化.setCursor(0,1); lcd.print(zValue); lcd.setCursor(6,1); lcd.print(yValue); lcd.setCursor(12,1); lcd.print(zValue); 延迟(100)
然后,Arduino将那些校准(减去)后的值与预定义的限制进行比较。并采取相应的措施。如果这些值高于预定义的值,它将发出蜂鸣声并使用“处理”在计算机上绘制振动图。
/ *比较更改与预定义的限制* / if(xValue <minVal-xValue> maxVal-yValue <minVal-yValue> maxVal-zValue <minVal-zValue> maxVal){if(buz == 0)start = millis(); //计时器启动buz = 1; //激活蜂鸣器/ led标记}否则if(buz == 1)//激活蜂鸣器标记,然后提醒地震{lcd.setCursor(0,0); lcd.print(“地震警报”); if(millis()> = start + buzTime)buz = 0; }
处理代码:
以下是附加的处理代码,您可以从下面的链接下载代码:
地震检测器处理代码
我们使用处理针对地震的震动设计了一个图表,其中定义了窗口的大小,单位,字体大小,背景,读取和显示串行端口,打开选定的串行端口等。
//设置窗口大小:和字体大小f6 = createFont(“ Arial”,6,true); f8 = createFont(“ Arial”,8,true); f10 = createFont(“ Arial”,10,true); f12 = createFont(“ Arial”,12,true); f24 = createFont(“ Arial”,24,true); 大小(1200,700); //列出所有可用的串行端口println(Serial.list()); myPort =新序列号(this,“ COM43”,9600); println(myPort); myPort.bufferUntil('\ n'); 背景(80)
在下面的函数中,我们从串行端口接收数据并提取所需的数据,然后将其与图形的大小进行映射。
//提取所有三个轴的所有必需值:int l1 = inString.indexOf(“ x =”)+ 2; 字符串temp1 = inString.substring(l1,l1 + 3); l1 = inString.indexOf(“ y =”)+ 2; 字符串temp2 = inString.substring(l1,l1 + 3); l1 = inString.indexOf(“ z =”)+ 2; 字符串temp3 = inString.substring(l1,l1 + 3); //用图形尺寸映射x,y和z值float inByte1 = float(temp1 +(char)9); inByte1 = map(inByte1,-80,80,0,height-80); 浮点数inByte2 = float(temp2 +(char)9); inByte2 = map(inByte2,-80,80,0,height-80); float inByte3 = float(temp3 +(char)9); inByte3 = map(inByte3,-80,80,0,height-80); float x = map(xPos,0,1120,40,width-40);
此后,我们绘制了单位空间,最大和最小限制,x,y和z轴的值。
//绘制图形窗口,单位strokeWeight(2); 行程(175); 行(0,0,0,100); textFont(f24); 填充(0,00,255); textAlign(RIGHT); xmargin(“电路摘要的地球地震图”,200,100);填充(100); strokeWeight(100); 线(1050,80,1200,80);………………
此后,我们通过使用3种不同的颜色在图形上绘制值,例如x轴值为蓝色,y轴为绿色,z用红色表示。
笔画(0,0,255); 如果(y1 == 0)y1 = height-inByte1-shift; line(x,y1,x + 2,height-inByte1-shift); y1 = height-inByte1-shift; 笔画(0,255,0); 如果(y2 == 0)y2 = height-inByte2-shift; line(x,y2,x + 2,height-inByte2-shift); y2 = height-inByte2-shift; 笔画(255,0,0); if(y2 == 0)y3 =高度inByte3-shift; line(x,y3,x + 2,height-inByte3-shift); y3 = height-inByte3-shift;
还可以通过其他处理项目来了解有关处理的更多信息。
使用EasyEDA的电路和PCB设计:
EasyEDA不仅是原理图捕获,电路仿真和PCB设计的一站式解决方案,而且还提供低成本的PCB原型和元件采购服务。他们最近启动了组件采购服务,在那里他们拥有大量电子组件,用户可以与PCB订单一起订购所需的组件。
在设计电路和PCB时,您还可以公开电路和PCB设计,以便其他用户可以复制或编辑它们并从中受益,我们还为该地震指示器屏蔽罩公开了整个电路和PCB布局 , Arduino UNO,请检查以下链接:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
以下是EasyEDA的PCB布局顶层快照,您可以通过选择“层”窗口中的层来查看PCB的任何层(顶层,底层,顶层丝绸,底层丝绸等)。
您还可以 使用EasyEDA看到 PCB的照片视图:
在线计算和订购样品:
完成PCB设计之后,您可以单击 Fabrication output 图标 ,这将带您进入PCB订购页面。在这里,您可以在Gerber Viewer中查看PCB或下载PCB的Gerber文件。在这里,您可以选择要订购的PCB数量,所需的铜层数,PCB的厚度,铜的重量,甚至PCB的颜色。选择所有选项后,单击“保存到购物车”并完成您的订单。最近,他们大幅降低了PCB速率,现在您只需2美元即可订购10片10cm x 10cm尺寸的2层PCB。
这是我从EasyEDA获得的PCB:
下面是将元件焊接到PCB上后最终Shield的 图片: