3xmaker,人機(jī)協(xié)作共融萬(wàn)物互聯(lián),柔性可穿戴人機(jī)交互感知與測(cè)量!

  1. 設(shè)計(jì)指南
  2. |
  3. 新品速遞
  4. |
  5. 聯(lián)系我們
機(jī)器人+
傳感器+
柔性/印刷電子+
增強(qiáng)現(xiàn)實(shí)+
人機(jī)交互感知+
網(wǎng)站首頁(yè)
/
智造案例
/
智造

貓糧自動(dòng)分配器

來(lái)源:3XMaker   發(fā)布時(shí)間:2018年08月24日

貓糧自動(dòng)分配器

http://www.knexny.com/UploadFiles/2019-02/20192197871398697.png?resize=420%2C420&ssl=1

它通過(guò)提供每日貓食量,在預(yù)設(shè)時(shí)間自動(dòng)為寵物提供食物。

 

養(yǎng)寵物需要承擔(dān)很大的責(zé)任,首先是給他們食物;不幸的是,繁忙的生活方式和強(qiáng)制的工作時(shí)間并不能滿(mǎn)足我們四腳朋友的需要,而且任何靠自己生活的人都很難按時(shí)提供寵物餐。為了解決任何寵物主人,特別是貓和狗主人都非常重視的問(wèn)題,我們?cè)O(shè)計(jì)了一種稱(chēng)為Felixmatic的設(shè)備:它是一種實(shí)用的自動(dòng)干食分配器,為貓(或小狗)配備了一個(gè)大容量容器,可以很容易地從頂部打開(kāi),當(dāng)它是一個(gè)碗收集kibble時(shí),它是PPLIDE。我們知道我們已經(jīng)可以在市場(chǎng)上找到自動(dòng)售貨機(jī),但是,我們的例子是獨(dú)特的,因?yàn)樗梢跃幊虨槊刻?餐,以提供非常精確的數(shù)量的干糧。

http://www.knexny.com/UploadFiles/2019-02/20192193033216991.png?resize=500%2C500&ssl=1

項(xiàng)目

分配器的工作方式比市場(chǎng)上的普通產(chǎn)品更為復(fù)雜和完整,事實(shí)上,它不僅提供食物,而且還提供我們確定的確切劑量;基本上,在預(yù)先設(shè)定的時(shí)間,容器底部的耳蝸會(huì)轉(zhuǎn)動(dòng),并在碗中滴下一定量的kibble,由專(zhuān)門(mén)的衛(wèi)士進(jìn)行調(diào)節(jié)。右側(cè)傳感器。

 

為了實(shí)現(xiàn)這一功能,我們的點(diǎn)膠機(jī)由一個(gè)機(jī)械部分和一個(gè)電子部分組成;前者由PLA、3-D打印部件組裝而成,而電子部分由一個(gè)Arduino UNO板組成,我們?cè)谠摪迳蠎?yīng)用了一個(gè)RTC屏蔽,一個(gè)帶LCD顯示屏的特定屏蔽,一個(gè)連續(xù)旋轉(zhuǎn)的模型。伺服和稱(chēng)重傳感器;后者用于稱(chēng)重干燥食物的量,一旦達(dá)到所需的量,伺服操作耳蝸停止。LCD顯示器通過(guò)Arduino板的插腳8、3、5、6、7進(jìn)行管理;相反,稱(chēng)重傳感器通過(guò)A0插腳進(jìn)行讀取,它本身提供模擬信號(hào)。為了設(shè)計(jì)簡(jiǎn)單,我們決定使用專(zhuān)門(mén)用于測(cè)量和重量顯示的屏蔽,如圖所示與Arduino UNO Rev.3接口,并連接到稱(chēng)重傳感器。這個(gè)被稱(chēng)為重量防護(hù)罩的防護(hù)罩安裝了一個(gè)8個(gè)字符的2行液晶顯示屏,在我們的項(xiàng)目中,它被用來(lái)安裝機(jī)器。除顯示器外,我們還集成了INA125,一種專(zhuān)門(mén)為測(cè)量?jī)x器(如天平)開(kāi)發(fā)的高精度放大器。我們將在這個(gè)屏蔽上焊接鍵連接,這將遵循這些頁(yè)面上提出的接線(xiàn)圖(圖1),顯示與稱(chēng)重傳感器的連接(我們已經(jīng)為這些連接提供了一個(gè)接線(xiàn)板)。

 

如你所見(jiàn),五個(gè)常開(kāi)的鍵必須連接到公共接地,電阻的刻度,因?yàn)槲覀儗⑹褂肁/D轉(zhuǎn)換器讀取它們以保存Arduino的線(xiàn)路;基本上,由Arduino的5 V供電的多個(gè)分頻器在A2模擬線(xiàn)路上輸出8 V,。

0V for P1;

1,7V for P2;

2,53V for P3;

2,92 for P4;

3,26V for P5.

 

http://www.knexny.com/UploadFiles/2019-02/20192199157168687.png?resize=500%2C245&ssl=1

圖 1

稱(chēng)重傳感器的重量可達(dá)1.000克,其主體由鋁合金制成;輸出靈敏度為1 mV/V(±0.15 mV),非線(xiàn)性(滿(mǎn)刻度)為0.05%;滿(mǎn)刻度滯后為0.05%。在10°C的滿(mǎn)刻度下,由于熱推導(dǎo)產(chǎn)生的誤差為0.05%。電池的輸入電阻為1千歐(±10歐姆),與輸出電阻相同。絕緣電阻為2.000 mohm,工作溫度范圍為-10°C至+55°C。為了連接稱(chēng)重傳感器,有四根電線(xiàn):

rad為正(5伏);

黑色為負(fù)(GND);

綠色是OUT +;

白色是OUT–。

四根電線(xiàn)必須延伸到重量護(hù)罩右側(cè)的接線(xiàn)板上。

固件

#include <LiquidCrystal.h>來(lái)管理LCD 8×2監(jiān)視器

#include <EEPROM.h>在eeprom中寫(xiě)入一些值

#include <Wire.h>與RTC的接口

#include <DS1307RTC.h>管理rtc

#include <TimeLib.h>方便管理已用時(shí)間

http://www.knexny.com/UploadFiles/2019-02/20192194989320590.png?resize=500%2C281&ssl=1

讓我們來(lái)看一下代碼中的主要變量和函數(shù),這樣您就可以輕松地為其他目的定制項(xiàng)目。

 

為了管理稱(chēng)重傳感器檢測(cè)到的值,我們包括5個(gè)變量,其中4個(gè)變量用于校準(zhǔn)稱(chēng)重傳感器本身:

 

loadA 凈重量(皮重,單位:克);

AnalogvalA 稱(chēng)重傳感器讀取的與load相關(guān)的克數(shù)相對(duì)應(yīng)的類(lèi)似物的重量;

loadB任何載荷的重量(單位:g);

AnalogvalB稱(chēng)重傳感器讀取的與克數(shù)相對(duì)應(yīng)且與loadB相關(guān)的模擬值重量;

 

 

第五個(gè)變量是模擬值average,它將包含使用稱(chēng)重傳感器測(cè)量的有效重量的結(jié)果,即凈重,對(duì)應(yīng)發(fā)行的kibble克數(shù)。注意,loada是用來(lái)計(jì)算皮重的,這使得分配器可以將kibble的設(shè)定重量減去皮重,放到碗中。

 

在固件中,還有兩個(gè)數(shù)據(jù)陣列:

MealHour[10]

MealMinute[10]

 

如你所見(jiàn),這些陣列包含食物的分配時(shí)間,并將在每次打開(kāi)分配器時(shí)進(jìn)行計(jì)算。在此階段中,草圖將初始化串行端口(通過(guò)該端口,您可以使用PC監(jiān)視程序調(diào)試)和LCD。之后,它將調(diào)用函數(shù) ResetMeals() and Initialize().

http://www.knexny.com/UploadFiles/2019-02/20192198788589131.png?resize=500%2C281&ssl=1

reset meals()函數(shù)重置與進(jìn)餐分配相關(guān)的存儲(chǔ)單元:在EEPROM(其結(jié)構(gòu)如表1所示)中,通過(guò)設(shè)置一個(gè)標(biāo)志來(lái)設(shè)置有效進(jìn)餐分配,該標(biāo)志在每天00.00恢復(fù)為零,再次由reset meals()函數(shù)設(shè)置,因此允許重新開(kāi)始一天的進(jìn)餐周期。

 

函數(shù)initialize()調(diào)用其內(nèi)部的其他函數(shù):

reset()

load()

sort()

 

函數(shù)reset()允許重置數(shù)組mealhour[]和mealminute[],以確保這些變量沒(méi)有錯(cuò)誤的值。

load()例程負(fù)責(zé)從eeprom中獲取值,并將其復(fù)制到作為參數(shù)傳遞的數(shù)組中。

 

最后,sort()函數(shù)負(fù)責(zé)使用算法(冒泡排序)對(duì)數(shù)組進(jìn)行排序,當(dāng)我們希望確保進(jìn)餐時(shí)間由分配器自動(dòng)管理時(shí),它非常有用,即使它們是隨機(jī)存儲(chǔ)的,而不是以增加的方式存儲(chǔ)的,因此確保您的寵物在正確的時(shí)間吃飯。

 

分配器工作核心的最后一個(gè)功能稱(chēng)為supply():它是一個(gè)功能,當(dāng)調(diào)用時(shí),根據(jù)稱(chēng)重傳感器檢測(cè)到的重量來(lái)管理伺服;換句話(huà)說(shuō),例程命令伺服向上旋轉(zhuǎn),直到稱(chēng)重傳感器向Arduino提供與DoS對(duì)應(yīng)的重量相等的讀數(shù)。e待供應(yīng),然后停止伺服。此后,伺服旋轉(zhuǎn)輸出螺旋并停止它,這樣當(dāng)供給必須停止時(shí),它就像一個(gè)分隔器阻止了kibble。

 

在這個(gè)例行程序中,還有一個(gè)函數(shù)unjam()用于取消供應(yīng)機(jī)構(gòu)的平衡,以防某些kibble卡在節(jié)流孔中并阻止其旋轉(zhuǎn);通過(guò)使節(jié)流孔在一個(gè)方向旋轉(zhuǎn)五次,在另一個(gè)方向旋轉(zhuǎn)五次來(lái)嘗試解鎖。如果操作完成后,食物仍有庫(kù)存,系統(tǒng)將在LCD上顯示錯(cuò)誤消息;如果食物用完,也會(huì)發(fā)生同樣的情況,并且LCD上會(huì)顯示另一個(gè)錯(cuò)誤消息。由于kibble用完或供給機(jī)構(gòu)卡住而導(dǎo)致的供給缺失都以同樣的方式檢測(cè)到:在發(fā)送分配命令后的幾分鐘內(nèi)沒(méi)有凈重。

http://www.knexny.com/UploadFiles/2019-02/20192190429923004.png?resize=500%2C281&ssl=1

用戶(hù)界面

現(xiàn)在,讓我們來(lái)看看用戶(hù)界面,它由五個(gè)鍵和安裝在重量保護(hù)板上的顯示器組成,鍵的功能如下:

 

P1(向下按鈕):用于向下滾動(dòng)菜單;

P2(OK按鈕):用于確認(rèn)選項(xiàng);

P3(減少按鈕):用于減少用餐次數(shù);

P4(減少按鈕)用于增加用餐次數(shù);

P5(分配按鈕);只能在初始屏幕中使用(圖2),此鍵用于手動(dòng)分配kibble,無(wú)論何時(shí)我們想要添加超過(guò)預(yù)設(shè)劑量的食物,或隨時(shí)供應(yīng)食物。

http://www.knexny.com/UploadFiles/2019-02/20192196982577574.png?resize=500%2C227&ssl=1

啟動(dòng)系統(tǒng)后,您將看到主屏幕(圖2),第一行顯示當(dāng)前時(shí)間(如果顯示00:00:00,則必須配置時(shí)間;我們將在下面看到如何操作);第二行顯示單詞push,箭頭朝下:表示我們將繼續(xù)配置分配器的功能字符。特性。當(dāng)我們看到這個(gè)屏幕時(shí),我們可以按P5手動(dòng)分配kibble,并決定劑量。

http://www.knexny.com/UploadFiles/2019-02/20192190050910296.png?resize=500%2C227&ssl=1

現(xiàn)在,您將看到菜單有兩個(gè)選項(xiàng):膳食和克(圖3)。如果按兩次鍵,返回命令(圖4)將帶您返回主屏幕。

http://www.knexny.com/UploadFiles/2019-02/20192198275025823.png?resize=500%2C227&ssl=1

使用鍵選擇“Feeds”(膳食)選項(xiàng),將打開(kāi)一個(gè)菜單(圖5),您可以在其中選擇要為您的貓?zhí)峁┑纳攀硵?shù)量,最多每天9頓。

http://www.knexny.com/UploadFiles/2019-02/20192199064063186.png?resize=500%2C227&ssl=1

要選擇用餐數(shù)量,請(qǐng)使用指針停留在第一行,然后按下減少鍵(P3)以減少用餐數(shù)量。您可以按“增加”鍵(之前),這將增加一天的用餐次數(shù)。按OK確認(rèn)(P2)。要返回主屏幕,請(qǐng)單擊“上一步”保留以前的設(shè)置。按下OK(p2)后,您將返回上一個(gè)子菜單;這用于設(shè)置進(jìn)餐時(shí)間(圖6)。選擇餐數(shù)后,我們可以繼續(xù)并指示分發(fā)kibble的時(shí)間和分鐘數(shù)。例如,如果我們一天選擇三頓飯,圖6中的屏幕將顯示三次,每頓飯一次;對(duì)于每個(gè)屏幕,我們必須指示分發(fā)食物所需的時(shí)間。

http://www.knexny.com/UploadFiles/2019-02/20192190574058113.png?resize=500%2C227&ssl=1

綜上所述,為了在分配器上設(shè)置顯示時(shí)鐘,放置在按鍵上,您必須將指針?lè)旁诘谝恍校缓竽梢园础霸黾踊驕p少”鍵來(lái)增加或減少與時(shí)間相對(duì)應(yīng)的數(shù)字,直到您想要的時(shí)間為止。要修改分鐘數(shù),請(qǐng)按“確定”,然后再次按“減少”或“增加”以使用相同的步驟選擇分鐘數(shù)。選擇小時(shí)和分鐘后,按向下移動(dòng)第二行上的指針,然后按OK確認(rèn)并保存確切時(shí)間。完成時(shí)間設(shè)置后,可以返回圖2所示的主屏幕。要設(shè)置每頓飯的克數(shù),請(qǐng)按向下鍵;這樣您就可以進(jìn)入主菜單。再向下按一次,將指針移到克數(shù)的第二行(圖7),然后按OK。打開(kāi)子菜單(圖8)設(shè)置每頓飯的克數(shù)后,可以按“增加”或“減少”來(lái)調(diào)整體重。

http://www.knexny.com/UploadFiles/2019-02/20192196472464465.png?resize=500%2C227&ssl=1

http://www.knexny.com/UploadFiles/2019-02/20192198403003393.png?resize=500%2C227&ssl=1

一旦你決定了每餐食物的重量(即克數(shù)),如圖9所示,移動(dòng)第二行的指針,按OK保存設(shè)置。如果您不想確認(rèn)新的設(shè)置,請(qǐng)使用指針向下滾動(dòng),直到回到上一步,然后按OK返回上一個(gè)菜單(圖9)。

http://www.knexny.com/UploadFiles/2019-02/20192190885654300.png?resize=500%2C227&ssl=1

機(jī)械結(jié)構(gòu)

 

既然我們已經(jīng)解釋了系統(tǒng)的工作原理,我們就可以進(jìn)入組裝階段:電子部分放在基座上,三維打印作為機(jī)械結(jié)構(gòu)的其余部分。在底座中,我們將Arduino、護(hù)罩和鑰匙放置在專(zhuān)用隔間的右側(cè),如圖1所示進(jìn)行連接,并將其安裝在蓋子上,使用小的自螺紋2.5×10 mm金屬螺釘固定;蓋子上印有五個(gè)鑰匙的孔和顯示器的窗口。仍然在底座內(nèi)部,在實(shí)際分配器下方的部分,您將使用兩個(gè)螺釘將大理石板固定到稱(chēng)重傳感器上,然后必須將哪個(gè)傳感器應(yīng)用到底座上;在移動(dòng)板上,您將放置收集Kibble的碗。

http://www.knexny.com/UploadFiles/2019-02/20192197974749654.png?resize=500%2C321&ssl=1

后者是3-D打印,但你也可以自己使用,前提是它的底座比放置在稱(chēng)重傳感器上的移動(dòng)板小(直徑),并且它足夠短以避免接觸結(jié)構(gòu)的其余部分。事實(shí)上,重量并不重要,正如本文開(kāi)頭所解釋的,固件計(jì)算皮重,然后將皮重減去將kibble放入碗中時(shí)檢測(cè)到的重量。圖10所示為塊,圖11所示為結(jié)構(gòu)的分解圖,圖12所示為機(jī)構(gòu)的內(nèi)部視圖,尤其是關(guān)于基于伺服機(jī)構(gòu)作用的螺旋元件的Kibble分配機(jī)構(gòu)的內(nèi)部視圖。

http://www.knexny.com/UploadFiles/2019-02/20192198590048595.png?resize=500%2C321&ssl=1

請(qǐng)注意,通過(guò)一個(gè)3D打印圓適配器,用兩個(gè)螺釘將固定碗的移動(dòng)板應(yīng)用到稱(chēng)重傳感器臂上。列表1顯示允許設(shè)置供應(yīng)時(shí)間的固件部分。在那一方面,清單2顯示了管理Kibble分配的固件部分:它是用于供應(yīng)食物的功能。

List1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

void SetOra(int i)

{

char bottone[8];

int posCursor=0, opcMenu=-2;

int Ore=0,Minuti=0;

int flag=0;

int NO=1,NM=10;

lcd.clear();

lcd.setCursor(2,0);

stampa(Ore);

lcd.setCursor(4,0);

lcd.print(“:”);

lcd.setCursor(5,0);

stampa(Minuti);

lcd.setCursor(2,1);

lcd.print(“ok”);

do{

strcpy(bottone,”null”);

LeggiBottone( bottone, A2, 200);

lcd.setCursor(0, posCursor); lcd.write(byte(0));

if(!strcmp(bottone,”giu”))

MuoviCursore(&posCursor, 1, ‘m’);

else if(!strcmp(bottone,”ok”)||!strcmp(bottone,”incr”)||!strcmp(bottone,”decr”))

 

opcMenu = posCursor;

switch( opcMenu )

{

case 0:

if(!strcmp(bottone,”incr”))

{

if(flag==0){

Ore=Ore+1;

if(Ore>= 25)

Ore--;

lcd.setCursor(2, 0); stampa(Ore);

}

else{

Minuti=Minuti+1;

if(Minuti >= 60)

Minuti--;

lcd.setCursor(5, 0); stampa(Minuti);

}

}

else if( !strcmp(bottone,”decr”) )

{

if(flag==0){

Ore=Ore-1;

if (Ore <= 0)

Ore++;

lcd.setCursor(2, 0); stampa(Ore);

}

else{

Minuti=Minuti-1;

if(Minuti <= 0 )

Minuti++;

lcd.setCursor(5, 0); stampa(Minuti);

}

}

else if(!strcmp(bottone,”ok”))

{

if(flag==0)

flag=1;

else

flag=0;

}

opcMenu = -2;

break;

case 1:

if(!strcmp(bottone,”ok”)){

EEPROM.update(NO+i,Ore);

EEPROM.update(NM+i,Minuti);

opcMenu = -1;

}

break;

};

}while(opcMenu != -1);

mem=1;

}

 

如您所見(jiàn),計(jì)數(shù)器變量檢查嘗試丟棄食物的次數(shù);如果達(dá)到5,它將提供錯(cuò)誤消息,因?yàn)檫@意味著機(jī)制有問(wèn)題或容器為空。

List2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

void eroga(){

float load;

int analogValue;

float flag=0;

contatore=0;

int val = word(EEPROM.read(19), EEPROM.read(30));

do

{

analogValue = analogRead(A1);

analogValueAverage =   0.99*analogValueAverage + 0.01*analogValue;

unsigned long currentMillis = millis();

if(currentMillis - previousMillis2   > interval2){

previousMillis2 = currentMillis;

load = analogToLoad(analogValueAverage);

if(currentMillis - previousMillis5   > interval5){

previousMillis5 = currentMillis;

Serial.println(“copio flag”);

flag=load;

}

if(currentMillis - previousMillis4   > interval4){

previousMillis4 = currentMillis;

Serial.println(“controllo se blocca”);

if(load<=flag+1 &&   load>=flag-1)

sblocca();

if(contatore>=5){

servo.detach();

lcd.clear();

lcd.setCursor(1,0);

lcd.print(“ERRORE”);

lcd.setCursor(0,1);

lcd.print(“!!!!!!!!”);

while(1){}

}

}

servo.attach(9);

servo.write(0);

}

}while(load <= val);

servo.detach();

}

 

在這兩種情況下,您都需要照顧它,因?yàn)闄C(jī)器不提供食物,而且……您的寵物的肚子會(huì)隆隆作響!!

 

 

 

結(jié)論

對(duì)于任何寵物主人來(lái)說(shuō),我們的自動(dòng)售貨機(jī)都是一個(gè)有用的好主意,尤其是整個(gè)系統(tǒng)都是基于現(xiàn)有的Arduino,這使得一切變得簡(jiǎn)單。我們建議的機(jī)制不具有約束力,因?yàn)槿魏螕碛?-D打印機(jī)的人都可以根據(jù)需要采用商用分配器。

 

然而,該系統(tǒng)可以適應(yīng)其他用途,而不是嚴(yán)格地指給寵物喂食:它可以用來(lái)供應(yīng)各種物質(zhì),也可以……通過(guò)提供少量的糖和煙來(lái)避免一些不良習(xí)慣,例如過(guò)度消費(fèi)糖和煙……

 

總之,它是一個(gè)定時(shí)分配器,可以很容易地定制,這里看到用于供應(yīng)食物,但也能夠管理許多其他事情。


上一篇:沒(méi)有了
下一篇:往復(fù)式高樓逃生裝置

南京合越智能,增強(qiáng)智造,增強(qiáng)感知,增強(qiáng)交互!

業(yè)務(wù)合作

(我們會(huì)第一時(shí)間與您聯(lián)系)

聯(lián)系方式

  1. 微信:13815863530(手機(jī)同號(hào))
  2. QQ:38260484
  3. 3XMaker@163.com
Copyright@ 2016-2025 南京合越智能科技有限公司 蘇ICP備18068961號(hào)
主站蜘蛛池模板: 兰考县| 泉州市| 南华县| 大关县| 汤阴县| 锡林郭勒盟| 平舆县| 大同县| 得荣县| 杨浦区| 航空| 遂平县| 永寿县| 浦城县| 丰原市| 河池市| 黄大仙区| 兴山县| 崇信县| 太仆寺旗| 高雄县| 焉耆| 项城市| 奎屯市| 鸡西市| 新化县| 乌兰县| 专栏| 抚顺市| 莱西市| 乡城县| 蒙阴县| 汤阴县| 绍兴市| 泗水县| 罗定市| 井陉县| 蛟河市| 肥东县| 河西区| 新源县|