資料介紹
描述
介紹
也許這發生在你身上,但在過去的幾年里,當我離開家去度假或忘記給它們澆水時,我殺死了很多植物。因此,我考慮將任務自動化以挽救未來的植物生命。本文描述了生成的項目。
我將 Arduino Uno 與 Infineon 的TLE94112 多半橋一起使用,為我的家庭植物創建了一個自動水泵。
有關這些部分的介紹以及如何熟悉相應的庫,請參閱這篇 hackster 文章。我還假設您對 Arduino 和 C++ 編程有一些基本知識。
硬件
Arduino 和 TLE94112 像任何其他 Arduino 盾牌一樣組合在一起。

棘手的部分是泵與TLE94112的連接,因為我們需要幾個半橋來為泵提供足夠的電流。就我而言,總共有 8 個,4 個高側和 4 個低側半橋,為泵提供高達 3.6A 的電流。問題是,這是我的泵產品頁面中列出的電流的兩倍多,因為大多數制造商只包括他們產品的平均電流負載,但對我們來說,開關期間的峰值電流是有限的,因為TLE94112如果超過每半橋 0.9A 的限制,將進入緊急關斷狀態。
這就是為什么我從三個螺絲端子中焊接了一個從 2 x 4 到 2 根電線的適配器:

泵上的連接取決于您選擇的泵。就我而言,它帶有預連接的電線。
關于直流泵的另一個注意事項:在我的例子中,泵中的電機以相同的方向旋轉,而不管連接的極性如何。對于這個項目,這不是問題,但如果您想適應其他應用程序,請記住這一點。
最后,將軟管連接到泵上,并將一端放在水箱(例如噴壺)中,另一端放在植物的花盆中:

現在,我使用我的實驗室工作臺電源作為整個設置的電源。根據您的泵選擇合適的來源(可以是電池供電的)。請記住,TLE94112 將您的電源連接到泵。
軟件
由于我使這個項目相當可擴展,因此代碼被分成了幾個文件,但別擔心,它非常簡單,我們將詳細介紹所有細節。
該項目可以在任何與 arduino 兼容的 IDE 中設置,我們將使用默認的Arduino IDE ,但例如 Platformio 也可以。
前兩個文件,helpers.cpp僅helpers.hpp包含一些包裝器,用于啟用和關閉可切換到串行終端的日志記錄。
使用此處提供的功能,您可以簡單地使用
logger.log("hello world");
代替
Serial.print("hello world");
該類Logger 包裝 Serial.print等,并且僅logger.logging在設置為時打印/記錄true。需要創建該類的一個實例,然后您可以像通常的Serial類一樣使用它:
Logger logger(500, true); //logger wraps Serial.print in order to disable logging with one variable, here it is enabled.
logger.logln("Init ready");
第一個變量設置應將 TLE94112的錯誤消息提取并記錄到串行終端的時間段(以毫秒為單位)(請參閱本文,第 5 節以了解有關板的錯誤消息的說明)。第二個完全啟用/禁用日志記錄。
第二組文件是包含植物類的基本功能定義的文件plant.cpp,plant.hpp以支持通過同一設置澆灌多個植物。
class Plant {
private:
/* data */
uint32_t pump_duration; //pump powered time in millis
uint8_t pump_interval_days; //nr of days between pumping
Tle94112Motor *pump_motor;
public:
void pump(); //function to pump water for pump_time length
Plant(Tle94112Motor* pump_motor_p, uint32_t pump_duration_p, uint8_t pump_interval_days_p); //constructor
void setPump_duration(uint32_t t_milli);
uint32_t getPump_duration();
void setPump_interval_days(uint8_t interval);
uint8_t getPump_interval_days();
};
標題是不言自明的。
每株植物都有一個泵(Tle94112Motor *pump_motor;),應該uint32_t pump_duration;每隔幾天激活一次()一段時間( uint8_t pump_interval_days;)
這些函數是這兩個變量的 getter 和 setter,以及激活泵送的函數。
我要特別注意void pump();.cpp文件中函數的函數定義:
void Plant::pump(){
pump_motor->rampSpeed(255, pump_duration);
delay(pump_duration);
pump_motor->coast();//coast the motor to save power (as opposed to forced holding)
}
如您所見,泵電機并未立即完全啟動,但泵送速度在泵持續時間內上升至全速。這種“軟開關”是必要的,因為同時打開電機會消耗比TLE94112能夠處理的更多的電流。這通常也超過了電機/泵的電流消耗標簽。
現在我們已經來到了plant_watering.ino文件,代碼的核心。
前幾行只是庫包含和串行波特率的定義。
#include
#include
#include
#include
#include "plant.hpp"
#include "helpers.hpp" //Logger
#define BAUD 115200
接下來是為 TLE94112、記錄器和工廠創建所有類對象。在此示例中,我只使用一種植物,但您可以以相同的方式添加其他植物:
// Tle94112 Object on Shield 1
Tle94112Ino controller = Tle94112Ino();
// Tle94112Motor Objects on controller
Tle94112Motor motor_0(controller);
Logger logger(500, true); //logger wraps Serial.print in order to disable logging with one variable, here it is enabled.
Plant p1(&motor_0, 2000, 1); //attach the motor, the watering time and the days between watering
const uint8_t plant_nr = 1;
Plant* plants[plant_nr] = { //array of all plants, for iteration purposes
&p1
};
所有植物都必須保存到一個plantssize 的數組中plant_nr。
接下來是一些有助于安排澆水任務的變量。這被排除在工廠類之外,以便輕松切換到不同的計時方案,例如實時時鐘。但是,在這種情況下,我們將使用該millis();函數。
//Timing:
uint32_t millis_in_day = (uint32_t)1000*60*60*24; //calculate the milliseconds in a day, for timekeeping
// uint32_t millis_in_day = (uint32_t)1000*5; //this is the testing version to see immediate results
uint32_t last_pumped[plant_nr] = {0}; //this is not a plant::variable since timing method is independent of plant class
出于測試目的,您可以通過減少一天中的毫秒數來模擬更快的時間流逝。
該setup()函數初始化之前創建的所有對象。每個電機的半橋數量也在此處設置。在我的情況下,我必須使用最多四個,但根據您的泵,您可能可以使用更少。我建議您查看這篇文章以了解錯誤代碼和調試TLE94112 。
void setup()
{
// Switch on communications
Serial.begin(BAUD);
while (!Serial){};
// Enable MotorController on all Shields and Motors
controller.begin();
// IMPORTANT connect PWM to Lowside as higside is active Free wheeling
motor_0.initConnector(motor_0.HIGHSIDE, controller.TLE_NOPWM, controller.TLE_HB1, controller.TLE_HB2, controller.TLE_HB7, controller.TLE_HB8);
motor_0.initConnector(motor_0.LOWSIDE, controller.TLE_PWM1, controller.TLE_HB3, controller.TLE_HB4, controller.TLE_HB5, controller.TLE_HB6);
// start the motor controller
motor_0.begin();
motor_0.coast();
// end the setup function
logger.logln("Init ready");
}
反復檢查陣列中的loop()所有植物,最后一次澆水的時間,以及該時間是否超過所需的澆水間隔(以天為單位)。如果是這樣,則給植物澆水。最后的延遲減少了這些檢查之間的時間。
void loop()
{
uint32_t ct = millis();
for(int i = 0; i < plant_nr; i++){
if((ct - last_pumped[i]) >= (plants[i]->getPump_interval_days()) * millis_in_day){
logger.log("Pumping Pump ");
logger.log(i);
logger.log(" at ");
logger.logln(ct);
plants[i]->pump();
last_pumped[i] = ct;
}
}
logger.error_status(controller);
delay((uint32_t)1000); //this can be increased even more
}
這就是這個項目的全部內容。隨意在您自己的設置中使用代碼并通過例如使用 RT-Clock 或包括多個泵來擴展它。
在這里你可以看到我的設置:
?
?
?
- 溫室自動化開源硬件
- 家庭自動化開源案例
- 照明自動化開源分享
- 濾光輪自動化開源項目
- WaterSmart植物澆水裝置開源
- 自動植物澆水系統開源分享
- 智能植物澆水系統開源案例
- 雙植物澆水系統開源分享
- 室內植物澆水系統開源分享
- 智能植物澆水系統開源
- 智能植物澆水系統開源分享
- 智能植物澆水系統開源項目
- 家庭自動化開源分享
- PCB家庭自動化開源分享
- 使用樹莓派2實現的植物澆水系統的資料合集 57次下載
- 樹莓派自動灌溉系統:植物的智能保姆! 517次閱讀
- 自動化焊接機器人:引領制造業未來的高效工具 2.4k次閱讀
- 工業自動化和自動化區別是什么 3.7k次閱讀
- 過程自動化控制和運動自動化控制的原理詳解 2.6k次閱讀
- Selenium在自動化中有何用處 2.9k次閱讀
- 如何利用樹莓派Zero實現自動室內園丁的設計 2.3k次閱讀
- 如何自學PLC與自動化? 5.2k次閱讀
- 歐司朗推出的新型LED技術幫助植物生長促進綠色生態 1.1k次閱讀
- 自動澆灌噴淋控制系統怎樣來實現 5.2k次閱讀
- 自動澆花系統的設計及制作 基于Arduino 2.6w次閱讀
- ATE自動化測試系統是什么_ATE自動化測試系統介紹 3.3w次閱讀
- 自動化領域初涉水 非標自動化和自動化到底有哪些區別? 7k次閱讀
- arduino測量土壤濕度自動澆水提醒 1.8w次閱讀
- 紅帽推出Ansible 2.2 :為開源自動化框架奠定牢靠的基礎 2.9k次閱讀
- 工程師DIY智能灌溉器解決植物澆水難題 3.3k次閱讀
下載排行
本周
- 1新一代網絡可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費
- 2冷柜-電氣控制系統講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數據手冊
- 2.33 MB | 次下載 | 免費
- 4MDD品牌三極管S9012數據手冊
- 2.62 MB | 次下載 | 免費
- 5LAT1218 如何選擇和設置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 8MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數據手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協議電壓誘騙控制器IC技術手冊
- 1.81 MB | 1次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論