最近因為個人需求,宿舍裡有個設備要 24 小時不斷網,所以萌生出了一個自製 UPS,給宿舍 WiFi 不間斷供電的想法。
所有的部件材料,都有現成的,所以 DIY 起來是很簡單的。僅僅需要的就是簡單烙錫。
- 一個 UPS 模組
- 根據需求,18650 電池買幾塊
- 一個輸出功率大於充電和供電的電源適配器
- 電線
- 一套烙鐵工具
由於我的宿舍內的 WiFi 設備是光貓路由一體,要求的輸入是 12V 1.5A。雖然實際上功率不會這麼大,但為了不讓 UPS 模組負載太高發熱,只能購入稍貴一點的 24W 版本。
普通路由器,其實 5W 功率都行了,不需要買這麼大,根據實際需求,購買一個輸出功率小點的,還便宜。
嗯,還有,這個 UPS 模組自帶電池保護。
主要部件總共花費我:UPS 模組 24 + 四塊電池 36 + 電池盒 10=70,其他的都是有剩餘過量。要算的話,QAQ,好多,欺騙一下自己。
這個模組要求兩個電池串聯,具體可看某寶的介紹圖。所以我採用兩個並聯電池組。
這裡提一嘴,電池並聯加容量,串聯加電壓。
先接上電源適配器和輸出,再接電線,最後再接電池,按照說明圖烙上去就行。
最後的大功告成。
等待紅燈變綠燈中......
總之就是非常簡單的東西啦
計算的話,這兩個電池組最短可以堅持 2.6 小時,想要測試的話,目前最好的辦法還是實際測。
最近學了 Rust,所以拿 Rust 來寫一個 ping,查看這個 UPS 能用多久。
use chrono::Local;
use rand;
use reqwest::Client;
use std::fs::File;
use std::io::Write;
use std::thread::sleep;
use std::time::Duration;
use tokio;
async fn check_internet_connection() -> bool {
let client = Client::new();
let response = client.get("https://www.baidu.com").send().await;
let foo: bool;
match response {
Ok(_response) => foo = true,
Err(_error) => foo = false,
}
foo
}
#[tokio::main]
async fn main() {
let path = "time_log.txt";
let mut output = File::create(path).unwrap();
writeln!(output, "wait start:)").unwrap();
loop {
let mut rng = rand::thread_rng();
let duration = Duration::from_secs(rand::Rng::gen_range(&mut rng, 60..180));
let local_time = Local::now();
if check_internet_connection().await {
let txt = local_time.to_string() + ": true";
writeln!(output, "{}", txt).unwrap();
} else {
let txt = local_time.to_string() + "::false::\n:(";
writeln!(output, "{}", txt).unwrap();
break;
}
sleep(duration);
}
}
發現完全可以堅持完宿舍人走斷電所帶來的斷網,綽綽有餘的電量。
到此,結束。