欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6934|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

用Arduino打造機(jī)械傳動(dòng)結(jié)構(gòu)溫度計(jì),顛覆你...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
無(wú)意中觀察到家里面使用的溫度計(jì),是那種最傳統(tǒng)的,使用紅色酒精來(lái)測(cè)量溫度的溫度計(jì)


   這種外觀的溫度計(jì)是我傳統(tǒng)意義上對(duì)溫度計(jì)的理解。而現(xiàn)在的廠商設(shè)計(jì)的溫度計(jì)未免太沒(méi)新意,用一塊LED顯示屏就草草了事,方方正正外觀也是十分古板,與家庭氛圍不和。我于是想到用傳統(tǒng)的溫度計(jì)外觀,結(jié)合一些機(jī)械結(jié)構(gòu)來(lái)顯示溫度,用同步帶齒輪來(lái)傳達(dá)溫度的變化,成為家中的一個(gè)亮點(diǎn)。


結(jié)構(gòu):
   首先是選擇材料,我之前在亞克力和椴木板上徘徊,不知道用那種材料好,但是觀察過(guò)一些家庭的裝修之后,發(fā)現(xiàn)木飾面占據(jù)了大多數(shù),我還是覺(jué)得使用椴木層板比較好。



   更加吻合現(xiàn)代的風(fēng)格,并且木板更易于加工,給后面的工序也帶來(lái)了便利。
   對(duì)于溫度的顯示,我想用類似3D打印機(jī)的原理,使用步進(jìn)電機(jī)驅(qū)動(dòng)同步帶,同步帶帶動(dòng)指針在表盤上移動(dòng),這樣做保證了指針的穩(wěn)定和指示溫度的精確。也曾想過(guò)使用絲桿加滑臺(tái)來(lái)驅(qū)動(dòng),但是由于絲桿滑臺(tái)價(jià)格高昂,最終放棄。


   接著就是對(duì)于電機(jī)以及驅(qū)動(dòng)部件的選擇,市面上常見(jiàn)的步進(jìn)電機(jī)就是42步進(jìn)電機(jī),其常常被使用在各種機(jī)器人或者3D打印機(jī)上,穩(wěn)定性非常有保障,但是缺點(diǎn)是體積過(guò)于龐大,不適合溫度計(jì)使用,最后經(jīng)過(guò)一番挑選,選用了28BYJ48這款減速步進(jìn)電機(jī)。

   這款步進(jìn)電機(jī)體積小巧,工作電流小,使用ULN2003芯片即可驅(qū)動(dòng),價(jià)格也比42步進(jìn)電機(jī)便宜,并且含有減速裝置,在扭矩方面也有了保障。輸出軸也是5MMD形軸,可以兼容市面上常見(jiàn)的同步輪。在傳動(dòng)系統(tǒng)的選擇上,使用3D打印機(jī)常用的標(biāo)準(zhǔn)件即可,我使用了16齒的GT2同步輪作為驅(qū)動(dòng)輪,驅(qū)動(dòng)同步帶轉(zhuǎn)動(dòng),從動(dòng)輪方面就比較簡(jiǎn)單了,用兩顆軸承即可,這樣做既簡(jiǎn)單也便宜,沒(méi)必要花錢去購(gòu)買惰輪。同步帶的松緊決定了指針的指示是否精確,于是我增加了一個(gè)張緊彈簧來(lái)保證同步帶時(shí)刻都是張緊狀態(tài)。

   指針的做法就比較多變了,我使用了一個(gè)回形針來(lái)指示溫度,回形針可以牢固的夾在同步帶上,不易晃動(dòng)。

電路:
   單片機(jī)選擇方面,我選擇的是ArduinoUno

   因?yàn)?/font>ArduinUno支持很多開(kāi)源庫(kù)以及傳感器,所以編寫程序起來(lái)也是十分簡(jiǎn)單,易于操作,相比較其他單片機(jī)需要了解各種復(fù)雜的寄存器起來(lái),ArduinoUno只需要簡(jiǎn)單的語(yǔ)句即可實(shí)現(xiàn)很多功能。單片機(jī)性能方面,ArduinoUno所搭載的Atmega328單片機(jī)的資源也足夠使用,并且有RISC精簡(jiǎn)指令集的加持,ArduinoUno足夠勝任本項(xiàng)目。
   選擇好單片機(jī)之后,其他元件的選擇就簡(jiǎn)單了許多,溫度測(cè)量方面使用了DHT11溫濕度傳感器,它可以測(cè)量環(huán)境的溫濕度,單總線傳輸數(shù)據(jù)的方式更加節(jié)省端口資源,得益于Arduino的開(kāi)源環(huán)境,使用它也是十分容易,只需要一個(gè)函數(shù)即可獲取溫濕度信息,是制作溫度計(jì)的不二之選。
   步進(jìn)電機(jī)的驅(qū)動(dòng)模塊使用ULN2003大功率達(dá)林頓晶體管陣列模塊,此模塊很易于找到并且價(jià)格低廉,搭配我選擇的步進(jìn)電機(jī)是不二之選。板載4led指示燈可以清楚的觀察到各相的工作狀態(tài)。

   這里再次感謝Arduino的開(kāi)源環(huán)境,各路大神早已為我們寫好了此驅(qū)動(dòng)模塊的函數(shù)庫(kù),我們只需要調(diào)用即可。這里是設(shè)計(jì)好的電路圖:

   完成的結(jié)構(gòu)設(shè)計(jì)以及元件之后,接下來(lái)就是設(shè)計(jì)木板的圖紙了,經(jīng)過(guò)一小會(huì)忙活,設(shè)計(jì)好圖紙,發(fā)送給廠家切割,幾天后,收到了切好的木板:

   接下來(lái)就是安裝了,將各個(gè)元件悉數(shù)安裝到對(duì)應(yīng)位置,并將線路接好:

   因?yàn)闇囟葌鞲衅饕约安竭M(jìn)電機(jī)驅(qū)動(dòng)都是使用的數(shù)字信號(hào),所以我只使用了ArduinoUno的數(shù)字端口。線路與元件都安裝好之后,接下倆就是對(duì)ArduinoUno編程了。

程序:
  1. //首先我們需要引入頭文件,沒(méi)有這些頭文件,在編程中一些函數(shù)就無(wú)法調(diào)用。

  2. #include <dht11.h>   //引用dht11溫濕度傳感器庫(kù)文件,使得下面可以調(diào)用相關(guān)參數(shù)
  3. #include <Stepper.h>  ///引用步進(jìn)電機(jī)驅(qū)動(dòng)庫(kù)文件,使得下面可以調(diào)用相關(guān)參數(shù)

  4. //接著依據(jù)電路圖,我們來(lái)定義元件的接口。

  5. #define DHT11PIN 6     //dht11溫濕度傳感器的數(shù)據(jù)輸出接在ArduinoUno的6號(hào)數(shù)字引腳
  6. Stepper myStepper(stepsPerRevolution,2,3,4,5); //步進(jìn)電機(jī)驅(qū)動(dòng)的輸入信號(hào)接在ArduinoUno的2,3,4,5號(hào)數(shù)字引腳
  7. dht11 DHT11;  //實(shí)例化DHT11對(duì)象,便于后面讀取溫度使用

  8. //接下來(lái)定義一些變量,來(lái)存儲(chǔ)溫度數(shù)據(jù)或者步進(jìn)電機(jī)的位置信息

  9. int stepsPerRevolution = 128;  //步進(jìn)電機(jī)每次轉(zhuǎn)動(dòng)步數(shù)
  10. int temlast=0;    //temlast代表上一次讀取到的溫度數(shù)據(jù)
  11. int chk,tem;     //chk代表讀取到的溫濕度數(shù)據(jù),tem代表讀取到的溫度數(shù)據(jù)

  12. //接下來(lái)就是初始化程序,里面包含了初始化溫度傳感器以及各個(gè)變量的代碼。

  13. void setup() {                                                      
  14. Serial.begin(9600);           //設(shè)置串口波特率
  15. pinMode(DHT11PIN,OUTPUT);   //定義溫濕度傳感器的端口為輸出
  16. myStepper.setSpeed(50);      //設(shè)置步進(jìn)電機(jī)速度為50r/min

  17. delay(1000);
  18. chk = DHT11.read(DHT11PIN); //讀取溫濕度的值賦給chk                                          
  19. tem=DHT11.temperature;    //從DHT11對(duì)象中將溫度數(shù)據(jù)分離出來(lái)
  20. temlast=tem;          //將溫度值賦給存儲(chǔ)上一次測(cè)量溫度值的變量,以便接下來(lái)的比較
  21. }

  22. //接下來(lái)就是主要循環(huán)程序,對(duì)于控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的方法,我使用了比較的方法,將上一次測(cè)量的溫度存儲(chǔ)起來(lái),與當(dāng)前測(cè)量的溫度值比較,根據(jù)比較大小來(lái)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向,具體實(shí)現(xiàn)代碼如下。

  23. void loop() {                                                   
  24. chk = DHT11.read(DHT11PIN);        //讀取溫濕度的值賦chk
  25. tem=DHT11.temperature;         //從DHT11對(duì)象中將溫度數(shù)據(jù)分離出來(lái)

  26. delay(100);
  27. Serial.print("Tempeature:");       //串口打印出Tempeature:
  28. Serial.println(tem);              //打印溫度結(jié)果

  29. if(tem-temlast>=1)          //如果當(dāng)前測(cè)量溫度的結(jié)果大于等于上一次測(cè)量的溫度值1度
  30. {
  31. myStepper.step(stepsPerRevolution); //步進(jìn)電機(jī)正向轉(zhuǎn)動(dòng)
  32. Serial.println("add");              //串口打印增加
  33. temlast=tem;                    //更新上一次測(cè)量的溫度值
  34. }

  35. else if(tem-temlast<=-1)      //如果當(dāng)前測(cè)量溫度的結(jié)果小于等于上一次測(cè)量的溫度值1度         
  36. {
  37. myStepper.step(-stepsPerRevolution); //步進(jìn)電機(jī)反向轉(zhuǎn)動(dòng)
  38. Serial.println("less");            //串口打印減小
  39. temlast = tem;                 //更新上一次測(cè)量的溫度值
  40. }
  41. delay(500);                     //延時(shí)500ms
  42. }
復(fù)制代碼
   連接電腦,燒寫代碼到ArduinoUno中,打開(kāi)串口監(jiān)視器,根據(jù)屏幕上顯示的溫度數(shù)值。

   來(lái)調(diào)整回形針指針的位置以及張緊彈簧的位置。調(diào)整好之后,一件富有科技與藝術(shù)的溫度計(jì)就做成了,有問(wèn)題的朋友請(qǐng)?jiān)谙旅媪粞裕@款溫度計(jì)我已經(jīng)做成了套材,想了解的請(qǐng)?jiān)L問(wèn)鏈接
游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當(dāng)前積分為 0

   務(wù)必記住,如果有需要的朋友請(qǐng)發(fā)送我們的暗號(hào)“51黑電子”給我,我會(huì)給你們優(yōu)惠!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:452731 發(fā)表于 2019-1-24 22:31 | 只看該作者
這個(gè)創(chuàng)意真的很不錯(cuò)!一切都是滿滿的智慧
回復(fù)

使用道具 舉報(bào)

板凳
ID:159403 發(fā)表于 2019-4-30 13:43 | 只看該作者
想法真的很厲害
回復(fù)

使用道具 舉報(bào)

地板
ID:619987 發(fā)表于 2020-2-14 19:52 | 只看該作者
學(xué)習(xí)了,很詳細(xì)謝謝樓主
回復(fù)

使用道具 舉報(bào)

5#
ID:231819 發(fā)表于 2020-3-31 16:20 | 只看該作者
好厲害啊,謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

6#
ID:143767 發(fā)表于 2021-3-7 15:57 | 只看該作者
你好樓主,我在編譯的時(shí)候出現(xiàn)下述問(wèn)題:
_______:11:19: error: 'stepsPerRevolution' was not declared in this scope

Stepper myStepper(stepsPerRevolution,2,3,4,5); //步進(jìn)電機(jī)驅(qū)動(dòng)的輸入信號(hào)接在ArduinoUno的2,3,4,5號(hào)數(shù)字引腳

                   ^~~~~~~~~~~~~~~~~~

exit status 1
'stepsPerRevolution' was not declared in this scope

請(qǐng)問(wèn)怎么解決,謝謝
回復(fù)

使用道具 舉報(bào)

7#
ID:844772 發(fā)表于 2021-3-8 10:56 | 只看該作者
dj3365191 發(fā)表于 2021-3-7 15:57
你好樓主,我在編譯的時(shí)候出現(xiàn)下述問(wèn)題:
_______:11:19: error: 'stepsPerRevolution' was not declared  ...

把這句移動(dòng)到你那句前面  int stepsPerRevolution = 128;  //步進(jìn)電機(jī)每次轉(zhuǎn)動(dòng)步數(shù)
回復(fù)

使用道具 舉報(bào)

8#
ID:143767 發(fā)表于 2021-3-9 16:31 | 只看該作者
glinfei 發(fā)表于 2021-3-8 10:56
把這句移動(dòng)到你那句前面  int stepsPerRevolution = 128;  //步進(jìn)電機(jī)每次轉(zhuǎn)動(dòng)步數(shù)

謝謝你,按照你的辦法現(xiàn)在問(wèn)題解決了,再次感謝!
回復(fù)

使用道具 舉報(bào)

9#
ID:143767 發(fā)表于 2021-3-10 15:38 | 只看該作者
但是燒錄程序到ARDUINO UNO后發(fā)現(xiàn)不管溫度上升還是下降步進(jìn)電機(jī)只往一個(gè)方向轉(zhuǎn),不知什么問(wèn)題,請(qǐng)眾壇友幫忙分析一下,謝謝。
補(bǔ)充:DHT11信號(hào)接在6腳,ULN2003的A,B,C,D分別接在2,3,4,5腳
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表