久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6801|回復: 8
打印 上一主題 下一主題
收起左側

用Arduino打造機械傳動結構溫度計,顛覆你...

[復制鏈接]
跳轉到指定樓層
樓主
無意中觀察到家里面使用的溫度計,是那種最傳統的,使用紅色酒精來測量溫度的溫度計


   這種外觀的溫度計是我傳統意義上對溫度計的理解。而現在的廠商設計的溫度計未免太沒新意,用一塊LED顯示屏就草草了事,方方正正外觀也是十分古板,與家庭氛圍不和。我于是想到用傳統的溫度計外觀,結合一些機械結構來顯示溫度,用同步帶齒輪來傳達溫度的變化,成為家中的一個亮點。


結構:
   首先是選擇材料,我之前在亞克力和椴木板上徘徊,不知道用那種材料好,但是觀察過一些家庭的裝修之后,發現木飾面占據了大多數,我還是覺得使用椴木層板比較好。



   更加吻合現代的風格,并且木板更易于加工,給后面的工序也帶來了便利。
   對于溫度的顯示,我想用類似3D打印機的原理,使用步進電機驅動同步帶,同步帶帶動指針在表盤上移動,這樣做保證了指針的穩定和指示溫度的精確。也曾想過使用絲桿加滑臺來驅動,但是由于絲桿滑臺價格高昂,最終放棄。


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

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

   指針的做法就比較多變了,我使用了一個回形針來指示溫度,回形針可以牢固的夾在同步帶上,不易晃動。

電路:
   單片機選擇方面,我選擇的是ArduinoUno

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

   這里再次感謝Arduino的開源環境,各路大神早已為我們寫好了此驅動模塊的函數庫,我們只需要調用即可。這里是設計好的電路圖:

   完成的結構設計以及元件之后,接下來就是設計木板的圖紙了,經過一小會忙活,設計好圖紙,發送給廠家切割,幾天后,收到了切好的木板:

   接下來就是安裝了,將各個元件悉數安裝到對應位置,并將線路接好:

   因為溫度傳感器以及步進電機驅動都是使用的數字信號,所以我只使用了ArduinoUno的數字端口。線路與元件都安裝好之后,接下倆就是對ArduinoUno編程了。

程序:
  1. //首先我們需要引入頭文件,沒有這些頭文件,在編程中一些函數就無法調用。

  2. #include <dht11.h>   //引用dht11溫濕度傳感器庫文件,使得下面可以調用相關參數
  3. #include <Stepper.h>  ///引用步進電機驅動庫文件,使得下面可以調用相關參數

  4. //接著依據電路圖,我們來定義元件的接口。

  5. #define DHT11PIN 6     //dht11溫濕度傳感器的數據輸出接在ArduinoUno的6號數字引腳
  6. Stepper myStepper(stepsPerRevolution,2,3,4,5); //步進電機驅動的輸入信號接在ArduinoUno的2,3,4,5號數字引腳
  7. dht11 DHT11;  //實例化DHT11對象,便于后面讀取溫度使用

  8. //接下來定義一些變量,來存儲溫度數據或者步進電機的位置信息

  9. int stepsPerRevolution = 128;  //步進電機每次轉動步數
  10. int temlast=0;    //temlast代表上一次讀取到的溫度數據
  11. int chk,tem;     //chk代表讀取到的溫濕度數據,tem代表讀取到的溫度數據

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

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

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

  22. //接下來就是主要循環程序,對于控制步進電機轉動的方法,我使用了比較的方法,將上一次測量的溫度存儲起來,與當前測量的溫度值比較,根據比較大小來控制步進電機轉動方向,具體實現代碼如下。

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

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

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

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

   來調整回形針指針的位置以及張緊彈簧的位置。調整好之后,一件富有科技與藝術的溫度計就做成了,有問題的朋友請在下面留言,這款溫度計我已經做成了套材,想了解的請訪問鏈接
游客,本帖隱藏的內容需要積分高于 1 才可瀏覽,您當前積分為 0

   務必記住,如果有需要的朋友請發送我們的暗號“51黑電子”給我,我會給你們優惠!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:452731 發表于 2019-1-24 22:31 | 只看該作者
這個創意真的很不錯!一切都是滿滿的智慧
回復

使用道具 舉報

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

使用道具 舉報

地板
ID:619987 發表于 2020-2-14 19:52 | 只看該作者
學習了,很詳細謝謝樓主
回復

使用道具 舉報

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

使用道具 舉報

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

Stepper myStepper(stepsPerRevolution,2,3,4,5); //步進電機驅動的輸入信號接在ArduinoUno的2,3,4,5號數字引腳

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

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

請問怎么解決,謝謝
回復

使用道具 舉報

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

把這句移動到你那句前面  int stepsPerRevolution = 128;  //步進電機每次轉動步數
回復

使用道具 舉報

8#
ID:143767 發表于 2021-3-9 16:31 | 只看該作者
glinfei 發表于 2021-3-8 10:56
把這句移動到你那句前面  int stepsPerRevolution = 128;  //步進電機每次轉動步數

謝謝你,按照你的辦法現在問題解決了,再次感謝!
回復

使用道具 舉報

9#
ID:143767 發表于 2021-3-10 15:38 | 只看該作者
但是燒錄程序到ARDUINO UNO后發現不管溫度上升還是下降步進電機只往一個方向轉,不知什么問題,請眾壇友幫忙分析一下,謝謝。
補充:DHT11信號接在6腳,ULN2003的A,B,C,D分別接在2,3,4,5腳
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人99| 伊人青青久久 | 精品国产乱码久久久久久图片 | 91av在线免费 | 久久这里有精品 | a视频在线观看 | 亚洲区一区二 | 亚洲免费av一区 | 日韩欧美大片在线观看 | 欧美国产日韩精品 | 欧美精品一二区 | 久久久久国产精品 | 亚洲视频一区 | 亚洲国产精品视频一区 | 色综合色综合网色综合 | 狠狠色狠狠色综合日日92 | 亚洲精品91 | 免费黄色的网站 | 亚洲视频一| 91精品综合久久久久久五月天 | 日韩精品一区二区三区中文在线 | 亚洲精品永久免费 | 国产精品久久久久久久久免费丝袜 | 成人不卡在线 | 91久久| 国产精品毛片一区二区在线看 | av电影一区二区 | 在线日韩在线 | 在线看91 | 中文字幕一区二区三区四区 | 午夜精品一区二区三区在线观看 | 欧美日韩国产一区 | 少妇av片 | 91成人在线 | 国产剧情一区 | 欧美日韩不卡在线 | 国产精品久久午夜夜伦鲁鲁 | 精品欧美乱码久久久久久 | 久久精品久久精品 | 中文字幕一二三 | 在线视频亚洲 |