3D 打印機(jī)已成為快速原型制作的一個(gè)重要方面,并已接觸到廣泛的制造商和工程師。但是這些打印機(jī)中的大多數(shù)都是業(yè)余愛(ài)好,因此需要不斷地修補(bǔ)和維修以保持它們的工作。在所有挑戰(zhàn)中,3D 打印機(jī)耗材斷裂或纏結(jié)是每個(gè)使用 3D 打印機(jī)的人在某些時(shí)候遇到的最常見(jiàn)問(wèn)題之一,因?yàn)檫@個(gè)問(wèn)題導(dǎo)致大量打印和耗材被浪費(fèi)。為避免此問(wèn)題,我們將使用燈絲傳感器,這將使您的打印機(jī)能夠識(shí)別燈絲何時(shí)用完,并在您更換線軸時(shí)停止打印。
今天我將演示如何使用光學(xué)編碼器傳感器和控制器在穿孔板上創(chuàng)建 3D 打印智能燈絲傳感器。我為我們的燈絲傳感器設(shè)計(jì)了一個(gè)單獨(dú)的傳感器外殼,因?yàn)槲乙蚕朐谄渌蛴C(jī)上使用它。當(dāng)燈絲因斷裂或纏結(jié)而停止移動(dòng)時(shí),此燈絲傳感器會(huì)發(fā)出蜂鳴聲提醒您。
構(gòu)建 DIY 燈絲跳動(dòng)傳感器所需的材料
對(duì)于傳感機(jī)制部分:
BB3609 光電編碼器傳感器 X 1
軸承625×3
M5 30mm 內(nèi)六角螺栓,帶螺母 X 1
PC4 M5 氣動(dòng)耦合器 X 2
彈簧 X 1
對(duì)于控制器和蜂鳴器部分:
AT-微型 85 X 1
DPDT 按下開(kāi)關(guān)
2 針線連接器
7805
7812
有源蜂鳴器 5V
女伯格帶
燈絲傳感器的工作原理
由于有兩種類型的燈絲傳感器,一種使用限位開(kāi)關(guān)檢測(cè)燈絲的存在,另一種使用光學(xué)旋轉(zhuǎn)編碼器來(lái)感受燈絲在其中移動(dòng)的速度。每個(gè)燈絲傳感器都有自己的優(yōu)點(diǎn)和缺點(diǎn)。
帶有限位開(kāi)關(guān)的那個(gè)是用于長(zhǎng)絲溢出或當(dāng)擠出機(jī)電機(jī)由于長(zhǎng)絲斷裂而趨于干轉(zhuǎn)時(shí)。盡管如此,由于其簡(jiǎn)單且沒(méi)有移動(dòng)組件,因此易于設(shè)置和維護(hù),并且其緊湊性使其更有用。但是,如果燈絲在傳感器輸出附近斷裂,它將不會(huì)接合,因?yàn)闊艚z在燈絲斷裂后仍然存在。
圖1:在上圖中,您可以看到盡管輸出端的燈絲斷了,但開(kāi)關(guān)仍然指示燈絲的存在
當(dāng)涉及到基于光學(xué)旋轉(zhuǎn)的傳感器時(shí),無(wú)論燈絲斷裂的位置和程度如何,它都會(huì)通知您。當(dāng)燈絲纏結(jié)導(dǎo)致燈絲停止時(shí),它會(huì)發(fā)出嗶嗶聲?,F(xiàn)在,如果燈絲在任何地方斷裂并且無(wú)法以任何方式到達(dá)擠出機(jī)電機(jī),傳感器就會(huì)發(fā)出嗶嗶聲,表明出現(xiàn)問(wèn)題。
因?yàn)槲覀兏P(guān)心精度和有效性,我們將使用基于 MOC7811 的光學(xué)旋轉(zhuǎn)傳感器模塊構(gòu)建燈絲傳感器,這將確保燈絲連續(xù)移動(dòng)。
在這里,您可以查看市場(chǎng)上現(xiàn)有的傳感器。
圖 2:基于限位開(kāi)關(guān)的燈絲傳感器,可以檢測(cè)燈絲的存在
圖 3:上圖顯示了一個(gè)基于旋轉(zhuǎn)編碼器的傳感器,它可以感知燈絲的存在和移動(dòng)
基于運(yùn)動(dòng)的燈絲傳感器
既然我們已經(jīng)談到了限位開(kāi)關(guān)傳感器的優(yōu)點(diǎn)和缺點(diǎn)?,F(xiàn)在讓我們談?wù)劵跓艚z運(yùn)動(dòng)的傳感器。
這些傳感器是智能燈絲傳感器,在檢測(cè)燈絲堵塞、纏結(jié)和斷裂等方面非常準(zhǔn)確和有用。
我們將構(gòu)建的傳感器將允許我們修改燈絲運(yùn)動(dòng)的時(shí)間延遲或不活動(dòng),這將取決于打印質(zhì)量和速度。如果燈絲移動(dòng)速度慢,則打印速度也慢。為了個(gè)性化,我們將創(chuàng)建一個(gè)安裝在電位器旋鈕上的轉(zhuǎn)子。它還將包含一個(gè)停用傳感器按鈕,該按鈕將在不使用傳感器時(shí)關(guān)閉傳感器。
您可以在下圖中看到最終連接。
我使用了 ATtiny 85 digispark 板來(lái)檢測(cè)旋轉(zhuǎn)和控制蜂鳴器。
編程 AT-Tiny 85
我使用 Arduino IDE 對(duì) ATtiny85 digispark 板進(jìn)行編程。如果您是 Digispark Boards 的新手并想了解如何使用 Arduino IDE 對(duì)ATtiny85進(jìn)行編程,請(qǐng)單擊鏈接。
我們之前使用這款 ATtiny85控制器制作了許多令人興奮的項(xiàng)目,您可以查看一下。
編寫(xiě)以下程序,每次旋轉(zhuǎn)輪隨燈絲移動(dòng)時(shí),都會(huì)觸發(fā)中斷。
?
#include#include // 定義用于切換 LED 的引腳,加上選擇的用于 響應(yīng) #define INTERRUPT_PIN PCINT1 的中斷 // 這是示意圖中的 PB1 #define INT_PIN PB1 // 板上 LED 中斷引腳選擇:PB1(與 PCINT1 相同) - 引腳 6 #define LED_PIN PB4 // PB4 - 引腳 3 #define BUZZ PB0 #define PCINT_VECTOR PCINT0_vect // 這一步不是必需的 - 這是一個(gè)命名的東西清晰度 // 僅供參考:在 ISR 中使用的變量必須聲明為 Volatile。 // 靜態(tài)易失字節(jié) LEDState; // setup 函數(shù)只在 ALU 啟動(dòng)時(shí)運(yùn)行一次 void setup() { pinMode(LED_PIN, OUTPUT); // 將我們選擇的 LED 視覺(jué)反饋設(shè)置為輸出引腳(PB4 / Pin 3) pinMode(BUZZ,輸出); 數(shù)字寫(xiě)入(LED_PIN,高);// 閃爍表示它正在啟動(dòng)并且你的 LED 連接正確 delay(500); 數(shù)字寫(xiě)入(LED_PIN,低); 延遲(500); // 這里的代碼是配置和啟用中斷的關(guān)鍵部分 cli(); // 在設(shè)置期間禁用中斷 PCMSK |= (1 << INTERRUPT_PIN); // 為我們選擇的中斷引腳(PCINT1/PB1/引腳 6)啟用中斷處理程序 (ISR) GIMSK |= (1 << PCIE); // 在通用中斷掩碼中啟用 PCINT 中斷 pinMode(INT_PIN, INPUT_PULLUP); // 使用上拉將中斷引腳設(shè)置為輸入以保持穩(wěn)定 sei(); //最后一行設(shè)置 - 設(shè)置后啟用中斷 } 無(wú)符號(hào)長(zhǎng) current_millis=0; 無(wú)符號(hào)長(zhǎng) prev_millis=0; 整數(shù)區(qū)間; void loop() { // 將任何通用處理代碼放入主循環(huán) // 注意 - 如果 INT_PIN 更改狀態(tài),則循環(huán)將暫停,同時(shí) ISR 運(yùn)行完成 interval=map(analogRead(1),0,1023 ,0,20); current_millis=millis(); if ((unsigned long)(current_millis-prev_millis)>=interval*1000) { digitalWrite(BUZZ,1); 延遲(50); 數(shù)字寫(xiě)入(嗡嗡聲,0); 延遲(50); 數(shù)字寫(xiě)入(BUZZ,1); 延遲(50); 數(shù)字寫(xiě)入(嗡嗡聲,0); 延遲(50); 數(shù)字寫(xiě)入(BUZZ,1); 延遲(50); 數(shù)字寫(xiě)入(嗡嗡聲,0); 延遲(50); 數(shù)字寫(xiě)入(BUZZ,1); 延遲(50); 數(shù)字寫(xiě)入(嗡嗡聲,0); 延遲(150); } } // 這是當(dāng) INT_PIN 發(fā)生任何變化時(shí)調(diào)用的中斷處理程序 // ISR 在頭文件中定義 - ATtiny85 只有一個(gè)處理程序 ISR(PCINT_VECTOR) { prev_millis=millis(); 如果(digitalRead(INT_PIN)== HIGH){ digitalWrite(LED_PIN,HIGH); }else{ digitalWrite(LED_PIN, LOW); } }
?
外殼的 3D 設(shè)計(jì)
我從Thingiverse得到了這個(gè)想法。在那里,我遇到了一個(gè)正是我需要的設(shè)計(jì)。不幸的是,我無(wú)法找到該設(shè)計(jì)的 BOM 中包含的所有需要的組件,因此我不得不修改設(shè)計(jì),您可以從提供的鏈接中獲得該設(shè)計(jì)??刂破麟娐番F(xiàn)在需要安裝在自己的附加盒中。
在這里您可以找到設(shè)計(jì)的圖像。
我已經(jīng)為我們制作的電路更換了彈簧支架和其他附件。修改后的設(shè)計(jì)如下。
這是我們的3D 打印機(jī)細(xì)絲跳動(dòng)傳感器的最終外觀。
結(jié)論
因此,我們使用光學(xué)編碼器傳感器和 AT tiny 85 控制器制作了自己的智能燈絲傳感器。我希望你喜歡這個(gè)項(xiàng)目。如有任何疑問(wèn),請(qǐng)參閱我們的論壇。
代碼
?
?
#include
#include
// 定義用于切換 LED 的引腳,以及用于響應(yīng)的所選中斷
#define INTERRUPT_PIN PCINT1 // 這是示意圖中的 PB1
#define INT_PIN PB1 // 板載 LED 中斷選擇引腳:PB1(與 PCINT1 相同)-引腳 6
#define LED_PIN PB4 // PB4 - 引腳 3
#define BUZZ PB0
#define PCINT_VECTOR PCINT0_vect // 這一步不是必需的 - 為了清楚起見(jiàn),這是一個(gè)命名的東西
// 僅供參考:在 ISR 中使用的變量必須聲明為 Volatile。
// 靜態(tài)易失字節(jié) LEDState;
// setup 函數(shù)只在 ALU 啟動(dòng)時(shí)運(yùn)行一次
無(wú)效設(shè)置(){
??? pinMode(LED_PIN,輸出);// 將我們選擇的 LED 視覺(jué)反饋設(shè)置為輸出引腳(PB4 / Pin 3)
??? pinMode(BUZZ,輸出);???
??? 數(shù)字寫(xiě)入(LED_PIN,高);// 閃爍以顯示它正在啟動(dòng)并且您的 LED 連接正確
??? 延遲(500);
??? 數(shù)字寫(xiě)入(LED_PIN,低);
??? 延遲(500);
??? // 這里的代碼是配置和啟用中斷的關(guān)鍵部分
??? cli(); // 在設(shè)置期間禁用中斷
??? PCMSK |= (1 << INTERRUPT_PIN); //為我們選擇的中斷引腳(PCINT1/PB1/pin 6)啟用中斷處理程序(ISR)
??? GIMSK |= (1 << PCIE); // 在通用中斷掩碼中啟用 PCINT 中斷
??? pinMode(INT_PIN,INPUT_PULLUP);// 使用上拉將我們的中斷引腳設(shè)置為輸入以保持穩(wěn)定
??? sei(); //最后一行設(shè)置 - 設(shè)置后啟用中斷
}
無(wú)符號(hào)長(zhǎng) current_millis=0;
無(wú)符號(hào)長(zhǎng) prev_millis=0;
整數(shù)區(qū)間;
無(wú)效循環(huán)(){
? // 將任何通用處理代碼放在主循環(huán)中
? // 請(qǐng)注意 - 如果 INT_PIN 更改狀態(tài),則循環(huán)將在 ISR 運(yùn)行完成時(shí)暫停
? 間隔=地圖(模擬讀?。?),0,1023,0,20);
? current_millis=millis();
? if ((unsigned long)(current_millis-prev_millis)>=interval*1000)
? {
??? 數(shù)字寫(xiě)入(BUZZ,1);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(嗡嗡聲,0);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(BUZZ,1);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(嗡嗡聲,0);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(BUZZ,1);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(嗡嗡聲,0);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(BUZZ,1);
??? 延遲(50);
??? 數(shù)字寫(xiě)入(嗡嗡聲,0);
??? 延遲(150);
?? }
}
// 這是當(dāng) INT_PIN 發(fā)生任何變化時(shí)調(diào)用的中斷處理程序
// ISR 在頭文件中定義 - ATtiny85 只有一個(gè)處理程序
ISR(PCINT_VECTOR)
{ prev_millis=millis();
? 如果(數(shù)字讀?。↖NT_PIN)==高){
??? 數(shù)字寫(xiě)入(LED_PIN,高);
? }別的{
??? 數(shù)字寫(xiě)入(LED_PIN,低);
? }
}
}
評(píng)論
查看更多