0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于鉆井深度顯示器和帶有Arduino支持的7段顯示器設(shè)計

電子設(shè)計 ? 來源:電路城 ? 作者:電路城 ? 2021-05-20 17:14 ? 次閱讀

在這個Arduino項目中,通過陀螺傳感器的鉆井深度顯示器和帶有Arduino支持的7段顯示器,來讀取所需位置的深度。

概念:

指定鉆孔深度時,用鉆頭刮擦表面,記下坐標(biāo),然后添加所需的鉆孔深度,最后進(jìn)行鉆孔,直到達(dá)到該深度為止。為了防止鉆孔過深,當(dāng)?shù)竭_(dá)孔深度時,會收到消息。

按鈕功能:當(dāng)按下它時,Arduino會將當(dāng)前鉆孔位置保存為停止值,并在以后到達(dá)時隨時提醒。

鉆頭的軸具有SW17六角螺母。因此,只需一個3D打印的組件即可安轉(zhuǎn)傳感器,并可以將其插入六角螺母上。

所需組件:

Arduino Nano

陀螺傳感器GY-521

7位模塊,帶8位數(shù)字(SPI版本,帶有MAX7219 IC

按鍵

開/關(guān)

電源:AA或AAA電池的電池夾或移動電源

3D打印外殼

釹磁鐵

原理圖:

連接:

1、陀螺儀傳感器通過I2C連接。因此,對于Nano,必須使用A5和A4。

VCC-》 5V

地線-》地線

SCL-》 A5

SDA-》 A4

XDA-》未連接

XCL-》未連接

ADO-》未連接

INT-》未連接

2、7段模塊:

連接7段模塊時,可以使用任何數(shù)字引腳。使用Arduino草圖設(shè)置引腳。

VCC-》 3.3V

地線-》地線

DIN-》 D12

CS-》 D10

時鐘-》 D11

3、按鈕:

可以自由選擇按鈕的輸入引腳。該項目使用D9針。

4、電源供應(yīng):

對于電源,使用6節(jié)AA電池。在打開/關(guān)閉開關(guān)后,它們?yōu)檎麄€系統(tǒng)供電。

5、套管:

使用Autodesk Fusion 360設(shè)計了機殼、使用Anycubic i3 Mega創(chuàng)建了3D打印。

代碼:

/ *程序:rilling-depth.ino

*作者:托馬斯·安吉爾斯基

*版本:2021 -03-20

*

* https://techpluscode.de/

* https://techpluscode.de/bohrtiefenanzeige-mit-gyro-sensor/

*

*此草圖測量臺式鉆孔的鉆孔深度

*使用GY-521陀螺儀傳感器數(shù)據(jù)

*通過7段顯示

查看深度

*

*來自electronicoobs.com的calc誤差補償?shù)南敕?謝謝!

*

* /

#include 《Wire.h》

#include 《math.h》

#include “LedControl.h”

#define MPU 0x68

char txt[8];

String s;

float currentPos,stopPos;

float rad_to_deg;

float AccX, AccY, AccZ;

float AccAngleX, AccAngleY;

float AccAngleErrorX, AccAngleErrorY;

float TotalAngleX, TotalAngleY;

float DrillingMachineAngle, delta;

//初始化LED :引腳D12,引腳D11,引腳D10、1個模塊

LedControl lc=LedControl(12,11,10,1);

void setup() {

//準(zhǔn)備串行連接

//Serial.begin(9600);

//開始值

stopPos=0.0;

currentPos=0.0;

rad_to_deg = 180/PI;

//準(zhǔn)備GY-521傳感器

//我們僅使用加速器數(shù)據(jù)

Wire.begin();

Wire.beginTransmission(MPU);

Wire.write(0x6B);

Wire.write(0x00); // wake up MPU

Wire.endTransmission(true);

//delay(1000)

Wire.beginTransmission(MPU);

Wire.write(0x1C); //注冊 ACCEL_CONFIG

Wire.write(0x10); //設(shè)置00010000 來實習(xí) +/- 8g 滿量程范圍

Wire.endTransmission(true);

//計算加速器數(shù)據(jù)錯誤

//進(jìn)行100次測量

for(int a=0; a《100; a++) {

Wire.beginTransmission(MPU);

Wire.write(0x3B);

Wire.endTransmission(false);

Wire.requestFrom(MPU,6,true);

AccX=(Wire.read()《《8|Wire.read())/4096.0 ;

AccY=(Wire.read()《《8|Wire.read())/4096.0 ;

AccZ=(Wire.read()《《8|Wire.read())/4096.0 ;

AccAngleErrorX=AccAngleErrorX+((atan((AccY)/sqrt(pow((AccX),2)+pow((AccZ),2)))*rad_to_deg));

//AccAngleErrorY=AccAngleErrorY+((atan(-1*(AccX)/sqrt(pow((AccY),2)+pow((AccZ),2)))*rad_to_deg));

}

AccAngleErrorX=AccAngleErrorX/100;

//AccAngleErrorY=AccAngleErrorY/100;

//準(zhǔn)備按鈕:D9針

pinMode(9,INPUT_PULLUP);

//準(zhǔn)備7段顯示

lc.shutdown(0,false);

lc.setIntensity(0,8);

lc.clearDisplay(0);

}

void loop() {

Wire.beginTransmission(MPU);

Wire.write(0x3B);

Wire.endTransmission(false);

Wire.requestFrom(MPU,6,true);

AccX=(Wire.read()《《8|Wire.read())/4096.0;

AccY=(Wire.read()《《8|Wire.read())/4096.0;

AccZ=(Wire.read()《《8|Wire.read())/4096.0;

AccAngleX=(atan((AccY)/sqrt(pow((AccX),2)+pow((AccZ),2)))*rad_to_deg)-AccAngleErrorX;

//AccAngleY=(atan(-1*(AccX)/sqrt(pow((AccY),2)+pow((AccZ),2)))*rad_to_deg)-AccAngleErrorY;

//平均值

TotalAngleX=0.5*(TotalAngleX)+0.5*AccAngleX;

//TotalAngleY=0.5*(TotalAngleY)+0.5*AccAngleY;

//使用X,Y,Z的+/-將x角度計算為360,增量= 0;

if ((AccZ《0)) {

delta=180.0-TotalAngleX*2.0;

}

if ((AccZ》0)&&(AccY《0)) {

delta=360.0;

}

DrillingMachineAngle=TotalAngleX+delta;

//如果接近360,則顯示效果更好0

if (DrillingMachineAngle》350) {DrillingMachineAngle=0;}

//計算鉆孔深度

//最大鉆孔深度:50 mm(在機器上測量)

//手輪最大角度:316(使用Serial.print數(shù)據(jù)測量)

currentPos=50.0/316.0*DrillingMachineAngle;

/*

Serial.print(“X / X / Y / Z / E : BOHRTIEFE”);

Serial.print(TotalAngleX);

Serial.print(“ ”);

Serial.print(AccX);

Serial.print(“ ”);

Serial.print(AccY);

Serial.print(“ ”);

Serial.print(AccZ);

Serial.print(“ 》》 ”);

Serial.print(DrillingMachineAngle);

Serial.print(“ 》》 ”);

Serial.print(currentPos);

Serial.println(“ ”);

*/

//按下按鈕?

if (digitalRead(9)==LOW) {

//儲存停止位置

stopPos=currentPos;

lc.setChar(0,3,‘8’,false);

lc.setChar(0,2,‘8’,false);

lc.setChar(0,1,‘8’,false);

lc.setChar(0,0,‘8’,false);

//Serial.println(“按下按鈕”);

delay(1000);

}

if (stopPos》0) {

//到達(dá)停止位置?

if (currentPos》=stopPos) {

//是:在右側(cè)顯示STOP

lc.setChar(0,3,‘5’,false);

lc.setRow(0,2,B00001111);

lc.setChar(0,1,‘0’,false);

lc.setChar(0,0,‘P’,false);

} else {

//否:顯示到停止位置的距離

dtostrf(stopPos-currentPos,4,1,txt);

s=‘ ’+String(txt);

lc.setChar(0,0,s.charAt(s.length()-1),false);

lc.setChar(0,1,s.charAt(s.length()-3),true);

lc.setChar(0,2,s.charAt(s.length()-4),false);

lc.setChar(0,3,s.charAt(s.length()-5),false);

}

} else {

//不顯示任何內(nèi)容

lc.setChar(0,3,‘ ’,false);

lc.setChar(0,2,‘ ’,false);

lc.setChar(0,1,‘ ’,false);

lc.setChar(0,0,‘ ’,false);

}

//在左側(cè)顯示當(dāng)前鉆孔深度

//格式化為字符串

dtostrf(currentPos,4,1,txt);

s=‘ ’+String(txt);

lc.setChar(0,4,s.charAt(s.length()-1),false);

lc.setChar(0,5,s.charAt(s.length()-3),true);

lc.setChar(0,6,s.charAt(s.length()-4),false);

lc.setChar(0,7,s.charAt(s.length()-5),false);

delay(200);

}

代碼講解:

1、使用LedControl.h庫來控制7段顯示。如未安裝,則必須使用庫管理器進(jìn)行安裝。

2、陀螺傳感器通過I2C總線連接。通過Wire.h進(jìn)行通信

3、使用Led Control控制7段顯示。

4、引腳進(jìn)行初始化后,設(shè)置過程僅需要進(jìn)行一些準(zhǔn)備工作即可喚醒顯示并調(diào)整強度。

5、在循環(huán)部分中,顯示屏僅顯示當(dāng)前鉆孔深度,如果已設(shè)置,則顯示停止位置,顯示為數(shù)字。

6、函數(shù)dtostrf將浮點數(shù)轉(zhuǎn)換為字符數(shù)組。然后輸入一個字符串,以在顯示屏上按字符顯示它。

基于鉆井深度顯示器和帶有Arduino支持的7段顯示器設(shè)計

當(dāng)?shù)竭_(dá)停止位置時,“ StOP”出現(xiàn)在顯示屏上??梢允褂胹etRow過程和適當(dāng)?shù)奈荒J紹00001111生成小的“ t” 。

8、通過線庫的功能讀取陀螺傳感器的功能。使用加速度計來確定角度位置。

9、當(dāng)USB連接到Arduino IDE時,一切運行正常。拔下插頭并連接到外部電源后,傳感器未提供任何數(shù)據(jù)。它僅在Arduino復(fù)位后才能再次工作。經(jīng)過長時間的搜索,解決方案是在喚醒傳感器后安裝等待時間。這使延遲(1000)在整個源代碼中成為最重要的命令。

基于鉆井深度顯示器和帶有Arduino支持的7段顯示器設(shè)計

必須在開始時為傳感器確定偏移值,否則值會波動。在設(shè)置部分中,測量100個值并將偏差平均。

X角度(度)使用以下公式計算:

AccAngleX = (atan ((AccY) / sqrt (pow ((AccX), 2) + pow ((AccZ), 2))) * rad_to_deg);

加速度傳感器的值波動很大。因此,將當(dāng)前計算的值與先前的值分別取50%的平均值。

TotalAngleX = 0.5 * TotalAngleX + 0.5 * AccAngleX;

傳感器從-90°到+ 90°輸出角度值。但是需要從0°到360°的角度才能轉(zhuǎn)換成鉆孔深度。

但是,對于該程序,查看傳感器數(shù)據(jù)Z和Y是正還是負(fù)就足夠了。并相應(yīng)地轉(zhuǎn)換角度。

基于鉆井深度顯示器和帶有Arduino支持的7段顯示器設(shè)計

通過Serial.print輸出確定角度,并記下旋轉(zhuǎn)角度的最大值。

當(dāng)旋轉(zhuǎn)角度為316°, 最大鉆孔深度為50mm時,當(dāng)前位置的計算方式:

currentPos=50.0/316.0*DrillingMachineAngle;

如果按下該按鈕,則Arduino將保存當(dāng)前的鉆孔位置。顯示屏上顯示8888,短等待1秒。

如果設(shè)置了停止位置,則在右側(cè)顯示屏上會顯示直到停止為止的剩余鉆削深度。

組裝:

陀螺儀傳感器最好用熱膠點固定。將連接電纜穿過蓋子。這部分就是這樣。

在第一個測試中,陀螺儀傳感器必須首先對準(zhǔn)。我是水平安裝的。由于支架設(shè)計為可旋轉(zhuǎn)的,因此可以輕松進(jìn)行調(diào)整,直到顯示屏上顯示0.0。

測試:

傳感器反應(yīng)非常迅速,計算出的值與鉆孔深度完全匹配。而且由于采用了大型LED顯示屏,可讀取準(zhǔn)確的鉆削深度。
責(zé)任編輯:pj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2545

    文章

    50445

    瀏覽量

    751049
  • 顯示器
    +關(guān)注

    關(guān)注

    21

    文章

    4927

    瀏覽量

    139736
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6457

    瀏覽量

    186501
收藏 人收藏

    評論

    相關(guān)推薦

    用ARM7-LPC2148連接7顯示器的教程

    今天在本教程中,我們將用ARM7-LPC2148連接7顯示器。在詳細(xì)介紹之前,我們將了解如何控制7
    的頭像 發(fā)表于 10-28 15:34 ?2867次閱讀
    用ARM<b class='flag-5'>7</b>-LPC2148連接<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>的教程

    如何使用CD4511驅(qū)動7顯示器

    在本教程中,我們將使用 IC 4511 驅(qū)動 7 顯示器。該CD4511 IC基本上是一個BCD轉(zhuǎn)7解碼
    的頭像 發(fā)表于 01-02 10:15 ?9326次閱讀
    如何使用CD4511驅(qū)動<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>

    如何使用8051單片機在7顯示器顯示數(shù)字?

    在使用單片機開發(fā)項目的時候,經(jīng)常會使用到7顯示器。7顯示器可以
    的頭像 發(fā)表于 07-07 11:34 ?2879次閱讀
    如何使用8051單片機在<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>上<b class='flag-5'>顯示</b>數(shù)字?

    使用MAX6954驅(qū)動7LED顯示器

    使用MAX6954驅(qū)動7LED顯示器:本文旨在幫助工程師快速掌握 MAX6954 驅(qū)動7 單色LED 驅(qū)動
    發(fā)表于 10-02 13:46 ?46次下載

    使用MAX6954驅(qū)動7LED顯示器

    摘要:本文旨在幫助工程師快速掌握MAX6954驅(qū)動7單色LED驅(qū)動的使用方法。 MAX6954是一個通用顯示驅(qū)動,能夠通過一個串口控制
    發(fā)表于 05-03 14:32 ?1124次閱讀
    使用MAX6954驅(qū)動<b class='flag-5'>7</b><b class='flag-5'>段</b>LED<b class='flag-5'>顯示器</b>

    7LED顯示器的驅(qū)動電路圖

    7LED顯示器的驅(qū)動電路圖
    發(fā)表于 07-18 11:33 ?1388次閱讀
    <b class='flag-5'>7</b><b class='flag-5'>段</b>LED<b class='flag-5'>顯示器</b>的驅(qū)動電路圖

    如何結(jié)合4英寸7顯示器和ESP8266 Wifi模塊來創(chuàng)建8位顯示器

    您做到了。您剛剛構(gòu)建了自己的7互聯(lián)網(wǎng)顯示器。
    的頭像 發(fā)表于 11-01 15:31 ?3758次閱讀

    帶有Arduino Pro Mini的LED矩陣顯示器

    電子發(fā)燒友網(wǎng)站提供《帶有Arduino Pro Mini的LED矩陣顯示器.zip》資料免費下載
    發(fā)表于 07-12 09:53 ?5次下載
    <b class='flag-5'>帶有</b><b class='flag-5'>Arduino</b> Pro Mini的LED矩陣<b class='flag-5'>顯示器</b>

    基于Arduino的機械彩色Nipkow顯示器

    電子發(fā)燒友網(wǎng)站提供《基于Arduino的機械彩色Nipkow顯示器.zip》資料免費下載
    發(fā)表于 10-18 09:39 ?0次下載
    基于<b class='flag-5'>Arduino</b>的機械彩色Nipkow<b class='flag-5'>顯示器</b>

    Arduino電腦顯示器開源分享

    電子發(fā)燒友網(wǎng)站提供《Arduino電腦顯示器開源分享.zip》資料免費下載
    發(fā)表于 10-26 15:42 ?0次下載
    <b class='flag-5'>Arduino</b>電腦<b class='flag-5'>顯示器</b>開源分享

    創(chuàng)建一個7顯示器

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建一個7顯示器.zip》資料免費下載
    發(fā)表于 10-26 10:51 ?0次下載
    創(chuàng)建一個<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>

    使用Arduino測試7顯示器

    電子發(fā)燒友網(wǎng)站提供《使用Arduino測試7顯示器.zip》資料免費下載
    發(fā)表于 11-15 10:56 ?0次下載
    使用<b class='flag-5'>Arduino</b>測試<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>

    基于Arduino UNO的4位7顯示器的溫度監(jiān)控

    本方案是一個基于 Arduino UNO 的4 位 7 顯示器的溫度監(jiān)控。該項目旨在顯示用于
    發(fā)表于 12-22 14:30 ?0次下載

    使用3x7LED顯示器的反應(yīng)計時

    方案介紹統(tǒng)計您需要花費多長時間來響應(yīng)執(zhí)行信號。使用由3個4026B十進(jìn)制計數(shù)驅(qū)動的3x7LED顯示器。硬件部件Arduino UNO??
    發(fā)表于 12-30 14:46 ?0次下載

    使用7顯示器的交通燈

    電子發(fā)燒友網(wǎng)站提供《使用7顯示器的交通燈.zip》資料免費下載
    發(fā)表于 06-25 14:40 ?0次下載
    使用<b class='flag-5'>7</b><b class='flag-5'>段</b><b class='flag-5'>顯示器</b>的交通燈