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

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

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

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



















評論