在这个项目中,我们通过使用 Arduino 使用蓝牙将速度广播到我们使用处理创建的 Android 应用程序,为自行车或任何汽车制作了一个很酷的速度计。
因此,让我们看看我们需要什么材料来构建这个项目并计划我们的预算。所有这些组件都很容易获得;如果您在购买这些产品时遇到问题,请在评论部分告诉我。
它可能看起来像一些组件和材料,但相信我,一旦你完成了这个项目,你就会觉得它们是值得花时间和精力的。
在我们接触硬件之前,让我们知道我们实际上将如何使用 Arduino 测量速度。使用 Arduino 测量车辆速度的方法有很多,但使用霍尔传感器是最经济、最简单的方法。霍尔传感器是检测磁铁极性的组件。例如,只要将磁铁的一个特定磁极靠近传感器,传感器就会改变其状态。有多种类型的霍尔传感器可用;你可以在这个项目中使用其中的任何一个,但要确保它是一个数字霍尔传感器。
为了测量速度,我们必须将一小块磁铁粘在车辆的车轮上。每次磁铁越过霍尔传感器时,它都会检测到并将信息发送给 Arduino。
每次检测到磁铁时,Arduino 都会收到一个中断。我们使用
millis()
使用以下公式计算并计算车轮完成两圈旋转所需的时间(以尽量减少误差):
Timetaken = millis() – pevtime;
一旦我们知道所花费的时间,我们就可以使用以下公式计算转速:
rpm = (1000/timetaken) * 60;
其中 (1000/timetaken) 给出 rps(每秒转数)并将其乘以 60 以将 rps 转换为 rpm(每分钟转数)。
计算出转速后,我们可以使用下面提供的公式计算车辆的速度(我们知道车轮的半径)。
v= radius_of_wheel * rpm * 0.37699;
Arduino 在计算速度后,将使用蓝牙模块广播它。完整的代码已在下面的代码部分给出。此外,请在此处查看我们涉及蓝牙模块 HC-05的其他项目。
该项目的完整威廉希尔官方网站 图如下:
在这里,硬件部分分为两部分;一个是包含所有主要文件的主板。另一块板只包含一个霍尔传感器和一个安装在车轮附近的电阻器。让我们开始构建主板。
建立连接后,让我们使用我们的18650 锂电池测试设置。锂电池本质上是高度易爆的,因此必须格外小心处理。这就是为什么我们使用TP4056 锂电池充电模块的原因。该模块具有过充电/放电保护和反极性保护。因此,电池可以使用普通的微型 USB 充电器轻松充电,并且可以安全放电,直到达到欠压切断限值。下表给出了 TP4056 充电模块的一些重要细节。
参数 ----- 每个单元格的值
欠压切断----- 2.4V
过压切断----- 4.2V
充电电流----- 1A
保护:过电压和反极性保护
IC的存在:TP4056(充电器IC)和DW01保护IC
指示 LED:
现在,让我们从霍尔传感器板开始。该板仅包含两个组件:一个是 10K 电阻,另一个是霍尔传感器。可以按照上面的示意图所示进行连接。威廉希尔官方网站 板准备就绪后,根据原理图使用跳线连接它们。一旦完成,它应该看起来像这样。
该项目的另一个关键步骤是使用电线将 18650 电池连接到 TP4056 模块的 B+ 和 B- 端子。由于 Li+ 电池易爆,因此强烈不建议在这些电池上使用烙铁。人们虽然做到了,但风险很大,很容易落得个大烂摊子。所以最简单的方法是使用磁铁,如下所示:
只需将电线焊接到一小块磁铁上,然后将磁铁粘到电池的端子上(它们会很好地吸引到端子上),如上所示。您可以使用一些鸭嘴来进一步固定磁铁的位置。
这个项目的程序非常简单。我们只需使用霍尔传感器中断输入来计算旋转轮的速度,并使用蓝牙模块通过无线方式广播计算出的速度。完整的程序在下面的代码部分给出,并使用注释行进行解释。
每当霍尔传感器检测到磁铁时,它都会触发中断。该中断函数由magnet_detect()
函数调用。这是计算车辆转速的地方。
一旦计算出转速,就可以在函数中计算出车轮的速度。
该项目的 Android 应用程序是使用名为 Processing 的软件制作的。如果您对制作自己的 Android 应用程序不感兴趣,只想安装此处使用的应用程序,您可以下载 APK 文件并按照以下步骤将其直接安装到您的智能手机上。
1. 您可以直接 从下面的链接下载APK文件。 此 APK 文件适用于 Android 版本 4.4.2 及更高版本(Kitkat 及更高版本)。从 zip 文件中提取 APK 文件。
2. 将 .APK 文件从您的计算机传输到您的手机。
3. 在您的 Android 设置中启用从未知来源安装应用程序。
4. 安装应用程序。
如果安装成功,你会发现手机上安装了名为“ Processing_code ”的应用程序,如下图:
使用 Processing 开发您自己的应用程序:
您可以使用上面给出的 .APK 文件,也可以按照此处的说明使用 Processing 构建您自己的应用程序。您可以从这里下载所有处理 Android 应用程序代码。该程序使用注释行进行自我解释。但是,如果您有任何问题或者想稍微修改您的应用程序,请使用评论部分,我会帮助您。
Android 程序在应用程序启动期间与我们的蓝牙模块建立连接,并接收由 Arduino Pro Mini 计算和广播的车辆速度。我还创建了一个小图形来显示使用模拟速度计的速度,使其看起来有点吸引人。您可以提出自己的想法并调整代码以根据您的需要对其进行个性化设置。另外,查看我们的其他处理项目以了解更多信息:
将应用程序安装到手机后,就可以测试我们的项目了。但是我们还没有将我们的套件安装到车辆上。我们开始做吧。
我已将此套件安装在我的自行车上并进行了测试,它非常有效。安装套件由您发挥创意,您可以从商店购买自己的小盒子,为电线和连接钻孔,然后将其安装到您的车辆上。一件需要注意的重要事项是,磁铁应粘在车轮的边缘,霍尔传感器应安装在尽可能靠近磁铁的位置,以便每次磁铁穿过霍尔传感器时,它都应该能够检测到它。安排如下图。
因为我有一台 3D 打印机,所以我设计了自己的外壳,使它们看起来不错,并且可以很容易地安装和断开与我们的自行车的连接,以便为电池充电。因此,如果您有一台 3D 打印机,或者如果您可以使用它来打印一些材料,请继续阅读,否则请跳过这一部分并使用您自己的创造力来安装这些东西。在这里学习使用 3D 打印机。
如果您决定使用我的设计文件并打印您的外壳,请确保您的主要穿孔板接近以下尺寸
可从此处下载用于 3D 打印的完整设计和 STL 文件。如果威廉希尔官方网站 板与此处制作的威廉希尔官方网站 板相似,那么您可以使用给定的 STL 文件直接 3D 打印您的外壳,或者您可以使用设计文件并根据您的威廉希尔官方网站 板进行修改。
让我们从将用于霍尔传感器模块的 3D 打印小型外壳开始。打印外壳,将威廉希尔官方网站 放入其中并通过提供的孔连接电线,然后将其安装到您的车辆上,使霍尔传感器靠近磁铁,如下所示。
建议在为其设计外壳之前对主板进行建模,以便我们可以确保它正确安装,因为相信我,当您长时间打印外壳 6 小时并且最终它不会时,这将是一场噩梦。不适合您的性能板。我的主要性能板的模型板如下所示。
现在设计主围箱就很容易了。我将主箱设计成两个文件,这样箱子的一部分将容纳电子设备,另一部分将使用夹具和螺栓永久固定在脚踏车上。这两个部分可以很容易地固定在一起形成一个完整的外壳,然后在我们需要为锂电池充电或处理电子设备时将其分开。
外壳的第一部分设计和打印完成后,让我们将所有组件放入其中,如下所示,它应该看起来像这样:
如您所见,盒子前面有两个开口;一个用于USB,我们可以通过它为手机充电。另一个是微型 USB,我们可以使用它为锂电池充电。
现在让我们打印主外壳的第二部分并检查它是否符合预期的第一部分。
一旦我们对零件感到满意,我们就可以使用 C 型夹和一些螺母和螺栓安装外壳的第二部分,如下所示:
现在让我们使用上面讨论的磁铁和胶带将电池连接到我们的主威廉希尔官方网站 ,并将其永久保存在我们的外壳内。
这就对了!我们的硬件已准备好进行最终安装。只需将霍尔传感器模块与主板连接并将活动外壳滑入固定外壳,即可开始使用。
确保您的锂电池已充电后,只需使用拨动开关打开套件并打开您的 Android 应用程序即可。如果一切顺利,您应该会看到下面的屏幕,它应该显示您的应用程序已连接到蓝牙模块 HC-05,如下所示。请记住在打开应用程序之前将您的蓝牙模块与手机配对。
现在只需驾驶您的车辆,您就会注意到速度表显示了您车辆的当前速度。
代码:
/*Arduino Code for measuring speed of the Vechile using Hall Sensor
* Coded by Circuitdigest.com
* On 14-04-2017
*/
/*CONNECTION DETIALS
* Arduino D11 -> RX of BT Module
* Arduino D12 -> Tx of BT
* Arduino D2 -> Hall sensor 3rd pin
*/
#include // import the serial library
SoftwareSerial Cycle_BT(11, 12); // RX, TX
int ledpin=13; // led on D13 will show blink on / off
int BluetoothData; // the data given from Computer
float radius_of_wheel = 0.33; //Measure the radius of your wheel and enter it here
volatile byte rotation; // variale for interrupt fun must be volatile
float timetaken,rpm,dtime;
int v;
unsigned long pevtime;
void setup()
{
Cycle_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate
//pinMode(ledpin,OUTPUT); //LED pin aoutput for debugging
attachInterrupt(0, magnet_detect, RISING); //secound pin of arduino used as interrupt and magnet_detect will be called for each interrupt
rotation = rpm = pevtime = 0; //Initialize all variable to zero
}
void loop()
{
/*To drop to zero if vehicle stopped*/
if(millis()-dtime>1500) //no magnet found for 1500ms
{
rpm= v = 0; // make rpm and velocity as zero
Cycle_BT.write(v);
dtime=millis();
}
v = radius_of_wheel * rpm * 0.37699; //0.33 is the radius of the wheel in meter
}
void magnet_detect() //Called whenever a magnet is detected
{
rotation++;
dtime=millis();
if(rotation>=2)
{
timetaken = millis()-pevtime; //time in millisec for two rotations
rpm=(1000/timetaken)*60; //formulae to calculate rpm
pevtime = millis();
rotation=0;
Cycle_BT.write(v);
//Cycle_BT.println("Magnet detected...."); //enable while testing the hardware
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !