使用Arduino进行磁场强度测量

原文地址:https://circuitdigest.com/microcontroller-projects/arduino-magnetic-field-measurement

使用Arduino进行磁场强度测量

ARDUINO的

经过**迪利普·拉贾(Dilip Raja)** 2015年8月18日16
在这里插入图片描述

在这个项目中,我们使用ARDUINO UNO中ADC(模数转换)概念。我们将使用霍尔效应传感器Arduino uno测量磁体的场强。我们在这里使用的传感器是UGN3503U。这是一个霍尔传感器,可感应磁场强度并在输出端提供与磁场强度成比例的变化电压。该传感器以“ GAUSS ”为单位拾取场强。
在这里插入图片描述

因此,使用此传感器,我们将获得随着电压变化而产生的场强。通过使用ADC功能,我们可以将该电压转换为数字。此数字代表场强,并显示在LCD上。[也检查:与Arduino的16x2 LCD接口]

Arduino具有六个ADC通道。在这些情况下,它们中的任何一个或全部都可用作模拟电压的输入。UNO ADC的分辨率为10位(因此(0-(2 ^ 10)1023中的整数值))。这意味着它将把0到5伏之间的输入电压映射为0到1023之间的整数。因此,每单位(5/1024 = 4.9mV)。

所有这些我们都将电位计或电位计连接到“ A0”通道,并且将以简单的显示方式显示ADC结果。简单的显示是16x1和16x2显示单元。16x1显示单元将包含16个字符,并在一行中。的16×2将具有16英寸的总1 32个字符第一线和另一条16在2次线。在此必须理解,每个字符中都有5x10 = 50像素,因此要显示一个字符,所有50像素必须一起工作,但是我们不必担心,因为人机界面中还有另一个控制器(HD44780)可以执行此操作。控制像素的工作(您可以在LCD单元中看到它,它是背面的黑眼圈)。

所需组件

硬件: ARDUINO UNO,电源(5v),JHD_162ALCD(16x2LCD),100uF电容器(2个),UGn3503U。

软体: arduino IDE(Arduino每晚)

电路图和说明

在这里插入图片描述
上图显示了 使用arduino uno进行磁场测量的电路图

在16x2 LCD中,如果有背光,则全部有16个引脚,如果没有背光,则有14个引脚。一个人可以给背光灯插针供电或离开。现在,在14个引脚中,有8个数据引脚(7-14或D0-D7),2个电源引脚(1&2或VSS&VDD或GND&+ 5v),第三个用于对比度控制的引脚(VEE控制字符的粗细)如图所示)和3个控制引脚(RS&RW&E)。

在上面的电路中,您可以观察到我只用了两个控制引脚,不经常使用对比度位和READ / WRITE,因此它们可以接地。这使LCD处于最高对比度和读取模式。我们只需要控制ENABLE和RS引脚即可相应地发送字符和数据。

LCD的连接如下所示:

  • PIN1 or VSS to ground
  • PIN2 or VDD or VCC to +5v power
  • PIN3 or VEE to ground (gives maximum contrast best for a beginner)
  • PIN4 or RS (Register Selection) to PIN8 of ARDUINO UNO
  • PIN5 or RW (Read/Write) to ground (puts LCD in read mode eases the communication for user)
  • PIN6 or E (Enable) to PIN9 of ARDUINO UNO
  • PIN11 or D4 to PIN10 of ARDUINO UNO
  • PIN12 or D5 to PIN11 of ARDUINO UNO
  • PIN13 or D6 to PIN12 of ARDUINO UNO
  • PIN14 or D7 to PIN13 of ARDUINO UNO

ARDUINO IDE允许用户以4位模式使用LCD。这种通信类型使用户可以减少ARDUINO上的引脚使用,这与其他ARDUINO无需单独编程以在4 it模式下使用有关,因为默认情况下,ARDUINO设置为以4位模式进行通信。在电路中,您可以看到我们使用了4位通信(D4-D7)。因此,仅从上表的观察,我们就将LCD的6个引脚连接到控制器,其中4个引脚是数据引脚,另外2个是控制引脚。

在职的

要将LCD连接到ARDUINO UNO,我们需要了解一些事情。


 AnalogRead(pin);
 AnalogReference();
 AnalogReadResolution(bits);

首先,UNO ADC通道的默认参考值为5V。这意味着我们可以在任何输入通道上为ADC转换提供5V的最大输入电压。由于某些传感器提供的电压范围为0-2.5V,使用5V基准电压时,我们获得的精度较低,因此我们有一条指令使我们能够更改该基准值。因此,为了更改参考值,我们可以使用(“ analogReference();”)

默认情况下,我们获得的最大板载ADC分辨率为10位,可以使用指令(“ analogReadResolution(bits);”)更改此分辨率。在某些情况下,此分辨率更改可能会派上用场。

现在,如果上述条件设置为默认值,我们可以通过直接调用函数“ analogRead(pin);”从通道“ 0”的ADC读取值,这里的“ pin”代表我们连接模拟信号的引脚,在这种情况下,它将为“ A0”。来自ADC的值可以取为一个整数,例如“ int ADCVALUE = AnalogRead(A0); ”,则该指令会将ADC之后的值存储在整数“ ADCVALUE”中。

现在让我们谈谈16x2 LCD。首先,我们需要启用头文件(’#include <LiquidCrystal.h>’),该头文件中写入了指令,这使用户能够以4位模式将LCD连接到UNO,而不会产生任何绒毛。使用此头文件,我们不必将数据一点一点地发送到LCD,这一切都将得到解决,我们也不必编写用于向LCD发送数据或命令的程序。

其次,我们需要告诉主板我们在这里使用哪种类型的LCD。由于我们有许多不同类型的LCD(例如20x4、16x2、16x1等)。在这里,我们将16x2 LCD连接到UNO,因此得到“ lcd.begin(16,2);”。对于16x1,我们得到’lcd.begin(16,1);’。

在此说明中,我们将告诉主板我们引脚的连接位置,所连接的引脚应按“ RS,En,D4,D5,D6,D7”的顺序表示。这些针脚必须正确表示。由于我们已将RS连接到PIN0等,如电路图所示,我们将板上的引脚号表示为“ LiquidCrystal lcd(0,1,8,9,9,10,11);”。

在此之后,剩下的就是发送数据了,需要在LCD上显示的数据应写为“ cd.print(“ hello,world!”);“。使用此命令,LCD会显示“ hello,world!”。如您所见,我们不必担心其他任何事情,我们只需要初始化即可,UNO将准备显示数据。我们不必在此处编写程序循环来通过BYTE发送数据BYTE。

一旦将磁铁放到传感器附近,传感器就会在输出端代表与磁场成比例的电压,该值由Uno

吸收并显示在LCD中。通过下面的C代码进一步解释了该磁场测量项目的工作。

Code

#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);/// REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
char ADCSHOW[5];//initializing a character of size 5 for showing the ADC result
void setup()
{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
}

void loop()
{
  lcd.print("FluxDensity");//showing name
  lcd.setCursor(0, 1);//move to second line
  lcd.print("(in Gauss):");// showing units
  String ADCVALUE = String((analogRead(A0) - 515) / 3.76);

  /* Now since the default reference if 5V and resolution is 10bit so for every 5/1024 = 5mV, we get one increment is count, The sensor provides increment voltage of 1.3V for every 1Gauss increment if field. So we need to divide ADC value by 3.76 for getting the gauss value, now the 0 gauss output of sensor is 2.5V so we need to subtract that first. To hold a 0V read at 0Gauss field. */
  // Convert the reading to a char array

  ADCVALUE.toCharArray(ADCSHOW, 5);
  lcd.print(ADCSHOW);//showing the field strength value
  lcd.print("G   ");
  lcd.setCursor(0, 0);// set the cursor to column 0, line 0
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值