自動(dòng)瓶灌裝機(jī)最常用于飲料和軟飲料行業(yè)。這些機(jī)器使用傳送帶,這是一種經(jīng)濟(jì)且快速的裝瓶方式。大多數(shù) PLC 用于自動(dòng)灌裝機(jī),但您可以使用 Arduino制作非常基本且多功能的灌裝機(jī)。您可以對 Arduino 進(jìn)行編程,使其使用紅外或超聲波傳感器自動(dòng)檢測瓶子,并通過停止傳送帶一段時(shí)間讓裝瓶機(jī)進(jìn)行灌裝。然后再次移動(dòng)皮帶并在檢測到下一個(gè)瓶子時(shí)停止。
在這里,我們將使用 Arduino Uno 、傳送帶、電磁閥、紅外傳感器和步進(jìn)電機(jī)設(shè)計(jì)自動(dòng)灌裝機(jī)的原型。帶式輸送機(jī)由步進(jìn)電機(jī)以恒定的預(yù)設(shè)速度驅(qū)動(dòng)。步進(jìn)電機(jī)將繼續(xù)驅(qū)動(dòng)傳送帶,直到 IR 傳感器檢測到傳送帶上存在瓶子。我們使用紅外傳感器作為外部觸發(fā)器。因此,只要 IR 傳感器變高,它就會(huì)向 Arduino 發(fā)送觸發(fā)器以停止電機(jī)并打開電磁閥。已在灌裝代碼中輸入預(yù)設(shè)的所需延遲時(shí)間。Arduino 將保持電磁閥開啟并關(guān)閉步進(jìn)電機(jī),直到指定時(shí)間。之后,電磁閥關(guān)閉灌裝,傳送帶開始移動(dòng),以便灌裝下一個(gè)瓶子。
我們之前使用Arduino 與電磁閥、紅外傳感器和步進(jìn)電機(jī),因此要了解有關(guān) Arduino 與這些組件的基本接口的更多信息,您可以訪問鏈接。
所需組件
阿杜諾
步進(jìn)電機(jī) (Nema17)
中繼
電磁閥
紅外傳感器
A4988 電機(jī)驅(qū)動(dòng)器
電池
電路原理圖
下面給出了使用 Arduino 的自動(dòng)瓶子灌裝系統(tǒng)的電路圖。
???

我用Fritzing畫了電路圖。在該電路中,電磁閥通過繼電器模塊連接到Arduino,A4988驅(qū)動(dòng)模塊用于控制步進(jìn)電機(jī)。您可以按照如何使用 Arduino 和 A4988 控制 Nema17 教程了解有關(guān) Nema17 和 A4988 驅(qū)動(dòng)模塊的更多信息。
Relay 模塊的輸入引腳連接到 Arduino 的引腳 7。A4988 模塊的 Direction 和 Step 引腳連接到 Arduino 的 2 和 4 引腳。在這個(gè)項(xiàng)目中,紅外傳感器用作Arduino 的外部中斷。在 Arduino Uno 中,數(shù)字引腳 2 和 3 是中斷引腳,因此將 IR 傳感器的 Out 引腳連接到 Arduino 的第 3引腳。電磁閥由24V電源供電,步進(jìn)電機(jī)由12V電源供電。

Arduino自動(dòng)灌裝程序
最后給出了這個(gè)使用 Arduino 的自動(dòng)灌裝系統(tǒng)的完整程序。在這里,我解釋了一些重要的行。
通過包含步進(jìn)電機(jī)庫來啟動(dòng)程序。您可以從這里下載步進(jìn)電機(jī)庫。
之后,定義步進(jìn)電機(jī)每轉(zhuǎn)的步數(shù)。對于 NEMA,每轉(zhuǎn) 17 步是 200。
?
#include#定義步驟 200
?
指定連接電機(jī)驅(qū)動(dòng)模塊的 Step 和 Direction 引腳的引腳。由于電機(jī)是通過驅(qū)動(dòng)模塊連接的,所以定義電機(jī)接口類型為Type1。
?
步進(jìn)步進(jìn)器(STEPS, 2, 4); #define motorInterfaceType 1
?
設(shè)置步進(jìn)電機(jī)速度。
?
stepper.setSpeed(500);
?
將繼電器、步進(jìn)和方向引腳定義為輸出
?
pinMode(繼電器,輸出); pinMode(4,輸出); pinMode(2,輸出);
?
Arduino中外部中斷的語法如下:
?
attachInterrupt(digitalPinToInterrupt(pin),ISR,模式);
?
在哪里:
?digitalPinToInterrupt(pin):用于定義連接外部中斷的引腳。在 Arduino Uno 中,引腳 2 和 3 是外部中斷引腳。
ISR:它是一個(gè)在調(diào)用外部中斷時(shí)調(diào)用的函數(shù)。
模式:要觸發(fā)的轉(zhuǎn)換類型,例如下降、上升等。
通過以下鏈接了解有關(guān)Arduino 中斷的更多信息。
在attachInterrupt()函數(shù)中,指定引腳 3 是外部中斷引腳,并且只要 IR 傳感器將其狀態(tài)從低電平變?yōu)楦唠娖剑ㄉ仙?,就?huì)調(diào)用IR_detected函數(shù)。
?
attachInterrupt(digitalPinToInterrupt(3),IR_detected,HIGH);
?
void IR_detected()是一個(gè) ISR 函數(shù),當(dāng) IR 傳感器變高時(shí)執(zhí)行。因此,每當(dāng) IR 傳感器變?yōu)楦唠娖綍r(shí),此功能會(huì)使步進(jìn)電機(jī)運(yùn)行幾步,然后停止步進(jìn)電機(jī)并打開電磁閥。?
?
無效 IR_detected() {
stepper.step(150);
數(shù)字寫入(繼電器,高);
stepper.step(0);
?
現(xiàn)在最后通過將代碼連接到筆記本電腦將代碼上傳到 Arduino。下圖顯示了我們使用 Arduino 的自動(dòng)瓶子灌裝系統(tǒng)原型。

#include
#定義步驟 200
#define motorInterfaceType 1
步進(jìn)步進(jìn)器(STEPS, 2, 4);
詮釋繼電器=7;
int step_num =700;
無效設(shè)置(){
序列號.開始(9600);
pinMode(繼電器,輸出);
stepper.setSpeed(500);
pinMode(4,輸出);
pinMode(2,輸出);
attachInterrupt(digitalPinToInterrupt(3),IR_detected,RISING);
}
布爾螺線管_on = false;
無效循環(huán)(){
如果 (solenoid_on)
{
延遲(6000);//等待6秒
螺線管開啟 = 假;
}
數(shù)字寫入(繼電器,低);// 現(xiàn)在繼電器處于關(guān)閉狀態(tài)(并且電機(jī)處于開啟狀態(tài))
stepper.step(step_num);
}
void IR_detected() //ISR 函數(shù)在 IR 傳感器變高時(shí)執(zhí)行。
{
Serial.println("檢測到中斷");
stepper.step(150); //在步進(jìn)電機(jī)停止前運(yùn)行幾步
數(shù)字寫入(繼電器,高);//打開電磁閥
stepper.step(0); //停止步進(jìn)電機(jī)
螺線管開啟 = 真;
}
電子發(fā)燒友App



















評論