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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

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

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

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

六臺SG90伺服電機

螺釘 M2、M3 和 M4

Arduino UNO

跨接電纜

面包板

針頭機

PLA 燈絲和 3D 打印機

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

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

pYYBAGLKMFaAXnc8AAThsAVqw_U153.png

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

poYBAGLKMEGAetU-AAeUnBKQBCo185.png

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

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

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

3D打印的Animatronic眼睛電路圖

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

pYYBAGLKMCyAIwsgAAGQuQ8Daas618.png

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

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

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

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

#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);

接下來,我們初始化串口進行調(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ù)。如果您查看硬件,移動設備的 Y 臂會使眼球上下移動。

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

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

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

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

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

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

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

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

無效隨機關閉(){
  close_eye();
  延遲(隨機(220、880));
  開眼();
  延遲(隨機(220、880));
}

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

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

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

無效循環(huán)(){
  eye_ball_left();
  延遲(680);
  eye_ball_right();
  延遲(680);
  眼球中心();
  延遲(450);
  同步關閉();
  眼球中心();
  延遲(450);
  抬頭();
  延遲(400);
  向下看();
  延遲(400);
  眼球中心();
  延遲(300);
  隨機關閉();
  延遲(450);
  抬頭();
  延遲(400);
  向下看();
  延遲(400);
  隨機運動();
  延遲(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);
  同步關閉();
  for (int i = 120; i > 60; i--) {
    Xarm.write(i);
    Yarm.write(i - 5);
    延遲(10);
  }
}

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

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

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

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

poYBAGLKMCKAKbGPAAbkhoEa7Bk751.png

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

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

poYBAGLKMCKAfbUOAAL7THKBYlw355.png

代碼

#include <伺服.h>


伺服 top_left_eyelid;
伺服底部_左眼瞼;
伺服 top_right_eyelid;
伺服bottom_right_eyelid;
伺服紗線;
伺服 Xarm;
無效設置(){
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);
同步關閉();
//同步關閉();
眼球中心();
延遲(450);
抬頭();
延遲(400);
向下看();
延遲(400);
眼球中心();
延遲(300);
隨機關閉();
延遲(450);
抬頭();
延遲(400);
向下看();
延遲(400);
隨機運動();
延遲(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);
同步關閉();
for (int i = 120; i > 60; i--) {
Xarm.write(i);
Yarm.write(i - 5);
延遲(10);
}
}
無效隨機運動(){
Xarm.write(60);
延遲(隨機(250、340));
Yarm.write(80);
延遲(隨機(250、340));
Xarm.write(120);
延遲(隨機(250、340));
Yarm.write(140);
Xarm.write(60);
延遲(隨機(250、340));
Yarm.write(80);
延遲(隨機(250、340));
Xarm.write(120);
延遲(隨機(250、340));
Yarm.write(140);
眼球中心();
延遲(300);
同步關閉();
隨機關閉();
}
無效隨機關閉(){
close_eye();
延遲(隨機(220、880));
開眼();
延遲(隨機(220、880));
}
無效同步關閉(){
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)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Arduino
    +關注

    關注

    188

    文章

    6469

    瀏覽量

    187054
  • DIY設計
    +關注

    關注

    2

    文章

    59

    瀏覽量

    19805
  • 3D打印
    +關注

    關注

    26

    文章

    3549

    瀏覽量

    109087
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    我們可能會想自己制作儀表。例如,當我們準備做一個太陽能光伏項目時,我們想計算負載的功耗,在這種情況下,我們就可以用
    的頭像 發(fā)表于 04-12 16:23 ?3308次閱讀
    如何利用<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 ?1811次閱讀
    如何使用<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)建電子設備

    電子發(fā)燒友網(wǎng)站提供《Arduino簡單的滑塊構(gòu)建電子設備.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>設備

    構(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>矩陣骰子