RM新时代网站-首页

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

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

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

如何使用Arduino構(gòu)建一個電子動畫眼睛

科技觀察員 ? 來源:circuitdigest ? 作者:Debashis Das ? 2022-07-10 09:52 ? 次閱讀

在這個項目中,我們將使用 Arduino 構(gòu)建一個動畫眼睛。在網(wǎng)上尋找新的項目創(chuàng)意時,我萌生了制作動畫眼睛的想法,這個項目立即引起了我的注意。首先,它看起來很酷,并且有一個簡單的機(jī)制,我在做這個項目時學(xué)到了很多關(guān)于機(jī)電一體化的知識。非常感謝Will Cogley構(gòu)建 3D 模型并讓社區(qū)可以訪問所有源文件,用他的話來說,他想設(shè)計它,以便制造商社區(qū)更容易訪問它。這個動畫眼睛設(shè)計有兩個版本,一個簡單的和一個高級的,對于這個項目,我們認(rèn)為構(gòu)建簡單的,在這個過程中,我們會告訴你構(gòu)建經(jīng)驗以及我們遇到的問題。

構(gòu)建 3D 打印電子動畫眼睛所需的組件

這個項目的 BOM 非常小,因為所有的辛苦工作都是由 3D 打印機(jī)完成的,我們只需要一些螺絲和粗體,大部分你可以在當(dāng)?shù)氐膼酆蒙痰暾业?。下面給出了 BOM 的完整列表。

六臺SG90伺服電機(jī)

螺釘 M2、M3 和 M4

Arduino UNO

跨接電纜

面包板

針頭機(jī)

PLA 燈絲和 3D 打印機(jī)

后處理和組裝 - 電子動畫眼睛機(jī)構(gòu)

要使用這個項目,我們需要首先打印所有 3D 模型,您可以在Ikkalebob instructables中找到 3D 模型。打印完所有 3D 部件后,您需要打磨眼睛和其他一些順利合作所需的部件,一旦這些部件完成,我們就可以繼續(xù)進(jìn)行組裝過程。如果您正確打印了每個部分,您的產(chǎn)品應(yīng)該類似于下圖。

pYYBAGLKMFaAXnc8AAThsAVqw_U153.png

我們將通過將 6 個伺服電機(jī)中的 5 個連接到Servo_Block模塊來開始構(gòu)建,如下圖所示。為了捕捉圖像,我必須使用黑色作為背景,因為它增加了圖像的細(xì)節(jié)層次。

poYBAGLKMEGAetU-AAeUnBKQBCo185.png

現(xiàn)在我們將Servo_Block連接到Main_Base,如下圖所示。我們還使用了四個 12 毫米 M3 內(nèi)六角螺釘來制作設(shè)備的支腿。

pYYBAGLKMECAIzHIAAbNPmU2pvQ767.png

接下來,我們將為雙眼連接 Eye-Adaptor 和 Fork。完成后,我們將 Eye-Holder 與 Eye-Adaptor 和Three-point_Connector與 Fork 連接。完成所有這些過程后,它將如下圖所示。

pYYBAGLKMDyAOnV2AAW_4NhpUkQ564.png

完成后,我們將第六個和最后一個伺服器連接到Sub_Base,然后用螺絲將Sub_Base連接到Main_Base。在此之后,我們將 PlaceHolder Eye 彈出到眼睛適配器。我們還用螺釘連接了 X 臂和 Y 臂。

poYBAGLKMDWAImZJAAclABb6buA882.png

現(xiàn)在我們將眼瞼連接器連接到眼瞼,我們使用 M3 螺釘從兩側(cè)將眼瞼固定到位。

pYYBAGLKMDKAFmVdAAbrzxZcfKo911.png

如果您已正確完成所有操作,圖像將類似于上圖所示的圖像 ,您可以看到我們已將所有眼瞼與眼瞼連接器連接起來,并且我們已將它們與伺服電機(jī)的臂擰緊。完成后,我們可以進(jìn)入編碼過程。

3D打印的Animatronic眼睛電路圖

DIY 3D 打印的仿真眼示意圖如下圖所示,您可以看到它非常簡單易懂。雖然項目設(shè)計者和作者提供的原理圖中使用了 PCA9685 IC,一個 16 通道 12 位 PWM 伺服電機(jī)驅(qū)動器,但我們不會在這個項目中使用它,因為 Arduino 的伺服庫可以輕松處理六個伺服器。

pYYBAGLKMCyAIwsgAAGQuQ8Daas618.png

正如我們之前所說,硬件連接非常簡單。我們使用 Arduino 的六個引腳來控制六個伺服電機(jī)。如果我們快速瀏覽一下 Arduino 的規(guī)格,您會發(fā)現(xiàn) Arduino 有六個 PWM 引腳,我們正在使用所有這些引腳來控制所有六個伺服電機(jī)。

用于控制動畫眼睛的 Arduino 代碼

動畫眼睛 Arduino 代碼非常簡單易懂。為了使這段代碼正常工作,我們將使用 Arduino 的Servo.h 庫。

我們通過包含所需的庫并定義控制所有六個伺服電機(jī)所需的所有實例來開始我們的代碼。

#include <伺服.h>
伺服 top_left_eyelid;
伺服底部_左眼瞼;
伺服 top_right_eyelid;
伺服bottom_right_eyelid;
伺服紗線;
伺服 Xarm;

接下來,我們有我們的setup()函數(shù)。在 setup 函數(shù)中,我們已經(jīng)聲明了眼睛的哪個部分連接到 Arduino 的哪個引腳。這非常有用,因為我們可以拔下所有連接器并按原樣連接。

  top_left_eyelid.attach(10);
  bottom_left_eyelid.attach(11);
  top_right_eyelid.attach(5);
  bottom_right_eyelid.attach(6);
  Yarm.attach(9);
  Xarm.attach(3);

接下來,我們初始化串口進(jìn)行調(diào)試,并調(diào)用一些函數(shù)以保持眼睛睜開并位于中心,我們還添加了一些延遲以保持穩(wěn)定性。

  序列號.開始(9600);
  開眼();
  眼球中心();
  延遲(2000);

接下來,我們有我們的loop()函數(shù),但在我們解釋循環(huán)函數(shù)之前,我們將解釋一些更重要的函數(shù),這些函數(shù)對于理解循環(huán)函數(shù)內(nèi)部的內(nèi)容是必要的。這些功能是最重要的功能,有了這些,我們將移動系統(tǒng)的眼球。首先,我們有open_eye()函數(shù)。如果你看硬件,你需要順時針移動一個伺服器,逆時針方向移動另一個伺服器,我們對左右眼瞼都做同樣的事情。

無效的開眼(){
  top_left_eyelid.write(55);
  bottom_left_eyelid.write(36);
  top_right_eyelid.write(2);
  bottom_right_eyelid.write(160);
}

接下來是close_eye()函數(shù),在close_eye函數(shù)中,我們將做與open_eye函數(shù)完全相同的事情,但相反。

無效 close_eye() {
  top_left_eyelid.write(2);
  bottom_left_eyelid.write(120);
  top_right_eyelid.write(46);
  bottom_right_eyelid.write(55);
}

接下來,我們有l(wèi)ook_up()和look_down()函數(shù)。如果您查看硬件,移動設(shè)備的 Y 臂會使眼球上下移動。

無效查找(){
  Yarm.write(132);
}
無效look_down(){
  Yarm.write(45);
}

接下來,我們有eye_ball_left()和eye_ball_right()函數(shù),它們與 up 和 down 函數(shù)相同,唯一的區(qū)別在于設(shè)備的角度。

無效 eye_ball_left() {
  Xarm.write(50);
}
無效的eye_ball_right(){
  Xarm.write(130);
}

接下來我們有eye_ball_centert()函數(shù)。在此功能中,我們將 X 臂和 Y 臂設(shè)置為 90 度角,以便我們可以將眼睛移動到死點。

無效的eye_ball_centert(){
  Xarm.write(90);
  Yarm.write(90);
}

現(xiàn)在我們有了一些我編寫的其他函數(shù),以使我們的生活更輕松。在該列表中,我們首先有synchronous_close()函數(shù),調(diào)用此函數(shù)將關(guān)閉并打開一次眼睛。

無效同步關(guān)閉(){
  close_eye();
  延遲(420);
  開眼();
  延遲(222);
}

然后我們有random_close()函數(shù),它將隨機(jī)打開和關(guān)閉眼睛。這將產(chǎn)生很酷的效果。

無效隨機(jī)關(guān)閉(){
  close_eye();
  延遲(隨機(jī)(220、880));
  開眼();
  延遲(隨機(jī)(220、880));
}

接下來,我們有random_movement()函數(shù)。在這個函數(shù)中,我們在延遲函數(shù)中使用了 Arduino 的random()函數(shù)來使眼睛隨機(jī)移動。

無效隨機(jī)運動(){
  Xarm.write(60);
  延遲(隨機(jī)(250、340));
  Yarm.write(80);
  延遲(隨機(jī)(250、340));
  Xarm.write(120);
  延遲(隨機(jī)(250、340));
  Yarm.write(140);
  Xarm.write(60);
  延遲(隨機(jī)(250、340));
  Yarm.write(80);
  延遲(隨機(jī)(250、340));
  Xarm.write(120);
  延遲(隨機(jī)(250、340));
  Yarm.write(140);
  眼球中心();
  延遲(300);
  同步關(guān)閉();
  隨機(jī)關(guān)閉();
}

現(xiàn)在我們將解釋 void 循環(huán)功能,它是 Arduino 的主要功能。在這個函數(shù)中,我們將眼睛向左、向右和居中移動,然后上下移動,然后我們會讓眼睛眨眼。我們將這樣做幾次并做出隨機(jī)動作。最后,我們有兩個 for 循環(huán)。for 循環(huán)是如何實現(xiàn)平滑運動或移動眼球的示例。

無效循環(huán)(){
  eye_ball_left();
  延遲(680);
  eye_ball_right();
  延遲(680);
  眼球中心();
  延遲(450);
  同步關(guān)閉();
  眼球中心();
  延遲(450);
  抬頭();
  延遲(400);
  向下看();
  延遲(400);
  眼球中心();
  延遲(300);
  隨機(jī)關(guān)閉();
  延遲(450);
  抬頭();
  延遲(400);
  向下看();
  延遲(400);
  隨機(jī)運動();
  延遲(400);
  眼球中心();
  延遲(300);
  top_left_eyelid.write(2);
  bottom_left_eyelid.write(120);
  延遲(200);
  top_left_eyelid.write(55);
  bottom_left_eyelid.write(36);
  延遲(200);
  開眼();
  延遲(500);
  對于 (int i = 60; i < 120; i++)
  {
    Xarm.write(i);
    Yarm.write(i - 5);
    延遲(10);
  }
  眼球中心();
  延遲(400);
  同步關(guān)閉();
  for (int i = 120; i > 60; i--) {
    Xarm.write(i);
    Yarm.write(i - 5);
    延遲(10);
  }
}

這標(biāo)志著代碼部分的結(jié)束,我們可以繼續(xù)閱讀本文的下一部分。

測試和調(diào)試 3D 打印的電子動畫眼睛

由于項目的機(jī)械部分有點忙,有很多事情在第一次開始時沒有奏效,所以在本節(jié)中,我想討論這些話題。

我們遇到的第一個問題是eye_place_holders移動不順暢,并且eye_place_holders和eye_lids之間存在很多摩擦。

poYBAGLKMCKAKbGPAAbkhoEa7Bk751.png

解決此問題的方法是丟失固定眼支架和設(shè)備底座的螺釘,這些螺釘是上面所示的標(biāo)記螺釘。

下一個問題是如何將伺服臂連接到eye_lid和X-arm和Y-arm 的臂。這是一個大問題,因為如果沒有適當(dāng)?shù)慕宇^,設(shè)備將無法順利工作,因此在下圖中您可以看到所有伺服臂的圖片。

poYBAGLKMCKAfbUOAAL7THKBYlw355.png

代碼

#include <伺服.h>


伺服 top_left_eyelid;
伺服底部_左眼瞼;
伺服 top_right_eyelid;
伺服bottom_right_eyelid;
伺服紗線;
伺服 Xarm;
無效設(shè)置(){
top_left_eyelid.attach(10);
bottom_left_eyelid.attach(11);
top_right_eyelid.attach(5);
bottom_right_eyelid.attach(6);
Yarm.attach(9);
Xarm.attach(3);
序列號.開始(9600);
開眼();
眼球中心();
延遲(2000);
}
無效循環(huán)(){
eye_ball_left();
延遲(680);
eye_ball_right();
延遲(680);
眼球中心();
延遲(450);
同步關(guān)閉();
//同步關(guān)閉();
眼球中心();
延遲(450);
抬頭();
延遲(400);
向下看();
延遲(400);
眼球中心();
延遲(300);
隨機(jī)關(guān)閉();
延遲(450);
抬頭();
延遲(400);
向下看();
延遲(400);
隨機(jī)運動();
延遲(400);
眼球中心();
延遲(300);
top_left_eyelid.write(2);
bottom_left_eyelid.write(120);
延遲(200);
top_left_eyelid.write(55);
bottom_left_eyelid.write(36);
延遲(200);
開眼();
延遲(500);
對于 (int i = 60; i < 120; i++)
{
Xarm.write(i);
Yarm.write(i - 5);
延遲(10);
}
眼球中心();
延遲(400);
同步關(guān)閉();
for (int i = 120; i > 60; i--) {
Xarm.write(i);
Yarm.write(i - 5);
延遲(10);
}
}
無效隨機(jī)運動(){
Xarm.write(60);
延遲(隨機(jī)(250、340));
Yarm.write(80);
延遲(隨機(jī)(250、340));
Xarm.write(120);
延遲(隨機(jī)(250、340));
Yarm.write(140);
Xarm.write(60);
延遲(隨機(jī)(250、340));
Yarm.write(80);
延遲(隨機(jī)(250、340));
Xarm.write(120);
延遲(隨機(jī)(250、340));
Yarm.write(140);
眼球中心();
延遲(300);
同步關(guān)閉();
隨機(jī)關(guān)閉();
}
無效隨機(jī)關(guān)閉(){
close_eye();
延遲(隨機(jī)(220、880));
開眼();
延遲(隨機(jī)(220、880));
}
無效同步關(guān)閉(){
close_eye();
延遲(420);
開眼();
延遲(222);
}
無效 eye_ball_left() {
Xarm.write(50);
}
無效的eye_ball_right(){
Xarm.write(130);
}
無效的eye_ball_centert(){
Xarm.write(90);
Yarm.write(90);
}
無效查找(){
Yarm.write(132);
}
無效look_down(){
Yarm.write(45);
}
無效 close_eye() {
top_left_eyelid.write(2);
bottom_left_eyelid.write(120);
top_right_eyelid.write(46);
bottom_right_eyelid.write(55);
}
無效的開眼(){
top_left_eyelid.write(55);
bottom_left_eyelid.write(36);
top_right_eyelid.write(2);
bottom_right_eyelid.write(160);
}

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

    關(guān)注

    188

    文章

    6468

    瀏覽量

    186912
  • DIY設(shè)計
    +關(guān)注

    關(guān)注

    2

    文章

    59

    瀏覽量

    19800
  • 3D打印
    +關(guān)注

    關(guān)注

    26

    文章

    3546

    瀏覽量

    109008
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Arduino構(gòu)建計算器

    在本教程中,我們將使用 Arduino 構(gòu)建自己的計算器。這些值可以通過鍵盤(4×4 鍵盤)發(fā)送,結(jié)果可以在 LCD 屏幕上查看(16×2 點陣)。該計算器可以執(zhí)行簡單的運算,例如整數(shù)的加法,減法,乘法和除法。但是旦你理解了這
    的頭像 發(fā)表于 11-21 17:43 ?6051次閱讀
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>計算器

    如何使用Arduino Nano構(gòu)建金屬探測器

    在這個項目中,我們將使用線圈和電容器來檢測金屬。在這里,我們使用Arduino Nano來構(gòu)建這個金屬探測器項目。對于所有電子愛好者來說
    的頭像 發(fā)表于 11-22 17:15 ?3609次閱讀
    如何使用<b class='flag-5'>Arduino</b> Nano<b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>金屬探測器

    如何構(gòu)建Arduino官方開發(fā)環(huán)境

    本系列教程將向大家講述,在自己的計算機(jī)上構(gòu)建完善的嵌入式系統(tǒng)開發(fā)環(huán)境的方法。本文將向大家講述構(gòu)建Arduino官方開發(fā)環(huán)境的方法。Arduino簡介:
    發(fā)表于 12-24 06:44

    使用Arduino構(gòu)建數(shù)字羅盤

    方向。在本文中,您將學(xué)習(xí)如何使用 Arduino 構(gòu)建自己的數(shù)字羅盤。通過它,您將能夠了解HMC5883L傳感器的完整操作,來檢測它的方位方向。此外,您將學(xué)習(xí)如何構(gòu)建自己的電子羅盤板并
    發(fā)表于 08-25 06:11

    如何利用Arduino構(gòu)建功率計

    我們可能會想自己制作儀表。例如,當(dāng)我們準(zhǔn)備做一個太陽能光伏項目時,我們想計算負(fù)載的功耗,在這種情況下,我們就可以用
    的頭像 發(fā)表于 04-12 16:23 ?3279次閱讀
    如何利用<b class='flag-5'>Arduino</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>功率計

    如何使用Arduino構(gòu)建無線門鈴

     在這個項目中,我們將使用 Arduino 構(gòu)建無線門鈴。我們將有按鈕,按下該按鈕將無線
    發(fā)表于 08-19 15:57 ?1798次閱讀
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>無線門鈴

    Arduino控制時鐘和動畫開源分享

    電子發(fā)燒友網(wǎng)站提供《Arduino控制時鐘和動畫開源分享.zip》資料免費下載
    發(fā)表于 10-27 09:23 ?1次下載
    <b class='flag-5'>Arduino</b>控制時鐘和<b class='flag-5'>動畫</b>開源分享

    帶有Neopixel環(huán)形動畫Arduino時鐘

    電子發(fā)燒友網(wǎng)站提供《帶有Neopixel環(huán)形動畫Arduino時鐘.zip》資料免費下載
    發(fā)表于 11-07 16:16 ?1次下載
    帶有Neopixel環(huán)形<b class='flag-5'>動畫</b>的<b class='flag-5'>Arduino</b>時鐘

    Arduino Nano構(gòu)建SN76489 USB MIDI合成器

    電子發(fā)燒友網(wǎng)站提供《用Arduino Nano構(gòu)建SN76489 USB MIDI合成器.zip》資料免費下載
    發(fā)表于 11-10 14:24 ?0次下載
    用<b class='flag-5'>Arduino</b> Nano<b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>SN76489 USB MIDI合成器

    使用Alexa和Arduino動畫智能燈

    電子發(fā)燒友網(wǎng)站提供《使用Alexa和Arduino動畫智能燈.zip》資料免費下載
    發(fā)表于 12-09 10:23 ?0次下載
    使用Alexa和<b class='flag-5'>Arduino</b>的<b class='flag-5'>動畫</b>智能燈

    構(gòu)建Arduino交通燈模塊

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建Arduino交通燈模塊.zip》資料免費下載
    發(fā)表于 12-13 10:39 ?0次下載
    <b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>Arduino</b>交通燈模塊

    Arduino簡單的滑塊構(gòu)建電子設(shè)備

    電子發(fā)燒友網(wǎng)站提供《Arduino簡單的滑塊構(gòu)建電子設(shè)備.zip》資料免費下載
    發(fā)表于 12-30 09:45 ?0次下載
    <b class='flag-5'>Arduino</b>簡單的滑塊<b class='flag-5'>構(gòu)建</b><b class='flag-5'>電子</b>設(shè)備

    構(gòu)建小型工作電子動畫

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建小型工作電子動畫頭.zip》資料免費下載
    發(fā)表于 06-09 14:41 ?0次下載
    <b class='flag-5'>構(gòu)建</b>小型工作<b class='flag-5'>電子</b><b class='flag-5'>動畫</b>頭

    使用Raspberry Pi和Arduino實現(xiàn)Web控制的LED動畫

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi和Arduino實現(xiàn)Web控制的LED動畫.zip》資料免費下載
    發(fā)表于 07-03 14:52 ?0次下載
    使用Raspberry Pi和<b class='flag-5'>Arduino</b>實現(xiàn)Web控制的LED<b class='flag-5'>動畫</b>

    Arduino動畫矩陣骰子

    電子發(fā)燒友網(wǎng)站提供《Arduino動畫矩陣骰子.zip》資料免費下載
    發(fā)表于 07-06 09:05 ?0次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>動畫</b>矩陣骰子
    RM新时代网站-首页