自制一个小ups

近日因为个人需要，宿舍里有个设备要 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 能用多久。

Copy
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);
}
}

发现完全可以坚持完宿舍人走断电所带来的断网，绰绰有余的电量。

到此，结束。