はじめに
スマートフォンから空調服のDCモータを制御してみました.
また,温度センサーの値によって自動的に風量を変化させることもできます.
空調服がUSBの抜き差しでしか,電源を入れることができなかったため,
不便だと感じていたのですが,obniz boardを使うと簡単に製作できると思い作りました.
デモ動画
動作
操作画面のManualとAutoを選択することにより,モータの動作が変わります.
各動作は以下の通りとなります.
・Manual:画面のスライダーに合わせてモータの出力を変更
・Auto:温度センサーの値を読み取って,モータの出力を変更
(今回は25℃以上のときに出力80%,25℃より低いときは出力20%となっています.)
動作中はobniz boardに次の画像のようにモータの出力[%]と温度[℃]が表示されます.
部品
部品 | 数量 |
---|---|
obniz 1Y | 1個 |
空調服(ファン2つ付き) | 1着 |
USB-DC変換ケーブル(外径4mm内径1.7mm) | 2個 |
MCP9700A | 1個 |
回路図
空調服のモータは空調服に付いているコードではなく,
USB-DC変換ケーブルを使用します.
DC側はモータに接続し,USB側は一度切断し電源コードをobniz boardに接続します.
ソースコード
obnizプログラム
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
<style>
/* div {display: inline-block; _display: inline;} */
/* #slider{
padding: 50px;
} */
</style>
</head>
<body>
<div id="obniz-debug"></div>
<div class="text-center">
<button id="auto" type="button" class="btn btn-primary">Auto</button>
<button id="manual" type="button" class="btn btn-secondary" disabled>
Manual</button
><br />
</div>
<div class="text-center">
Temperature:
<temp id="temperature"></temp>
</div>
<div class="text-center">
MotorPower:
<motor id="motorpower"></motor>
</div>
<div class="text-center">
<input id="slider" type="range" value="0" min="0" max="100" step="10" />
<script>
const obniz = new Obniz("OBNIZ_ID_HERE");
const motorid = document.getElementById('motorpower');
const tempid = document.getElementById('temperature')
motorid.innerHTML = "0";
tempid.innerHTML = "1";
let isAuto = false;
let temp = 20;
let slider_val = 0;
// called on online
obniz.onconnect = async function() {
const motor1 = obniz.wired("DCMotor", { forward: 1, back: 0 });
const motor2 = obniz.wired("DCMotor", { forward: 3, back: 2 });
const tempsens = obniz.wired("MCP9700", { gnd:9 , output:10, vcc:11});
motor1.power(0);
motor2.power(0);
motor1.move(true);
motor2.move(true);
//alternative button
$('#auto').click((e) => {
isAuto = true;
$('#auto').prop('disabled', true);
$('#manual').prop('disabled', false); });
$('#manual').click((e) => {
isAuto = false;
$('#auto').prop('disabled', false);
$('#manual').prop('disabled', true); });
$("#slider").on('input', function() {
// this function will be called when someone move a slider.
slider_val = $("#slider").val();
});
setInterval(async function(){
//show power & temp
obniz.display.clear();
obniz.display.print('Power:' + $("#slider").val());
obniz.display.print('Temp:' + Math.round(temp));
}, 1000);
// called while online.
obniz.onloop = async function() {
//display power & temp
motorid.innerHTML = $("#slider").val();
tempid.innerHTML = Math.round(temp);
//choose auto
if (isAuto){
if (temp > 25){
motor1.power(80);
motor2.power(80);
}
else{
motor1.power(20);
motor2.power(20);
}
}
//choose manual
else{
motor1.power(slider_val);
motor2.power(slider_val);
}
};
//changed temprature
tempsens.onchange = function(_temp){
temp = _temp;
};
};
// called on offline
obniz.onclose = async function() {
//stop motor
motor1.power(0);
motor2.power(0);
motor1.move(false);
motor2.move(false);
};
</script>
</body>
</html>
おわりに
スマートフォンから空調服のモータを制御できるようになり,
風量の調整ができるようになりました.
これで,USBの着脱を毎回行う必要は無し!
温度センサーによる風量の変化は実際に使っていきながら調整していきたいと思います.
暑い夏を空調服で快適に暮らしましょう!
-
ponkotu
さんが
2021/04/25
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する