近日因为个人需要,宿舍里有个设备要 24 小时不断网,所以萌生出了一个自制 ups,给宿舍 WiFi 不间断供电的想法。
所有的部件材料,都有现成的,所以 diy 起来是很简单的。仅仅需要的就是简单烙锡。
- 一个 ups 模块
- 根据需求,18650 电池买几块
- 一个输出功率大于充电和供电的电源适配器
- 电线
- 一套烙铁工具
由于我的宿舍内的 WiFi 设备是光猫路由一体,要求的输入是 12v1.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);
}
}
发现完全可以坚持完宿舍人走断电所带来的断网,绰绰有余的电量。
到此,结束。