編集履歴一覧に戻る
ponkotuのアイコン画像

ponkotu が 2021年04月25日18時27分18秒 に編集

初版

タイトルの変更

+

スマートフォンから空調服制御

タグの変更

+

obniz

+

温度センサー

+

モーター

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

製作品

本文の変更

+

# はじめに スマートフォンから空調服のDCモータを制御してみました. また,温度センサーの値によって自動的に風量を変化させることもできます. 空調服がUSBの抜き差しでしか,電源を入れることができなかったため, 不便だと感じていたのですが,obniz boardを使うと簡単に製作できると思い作りました. # デモ動画 @[youtube](https://youtu.be/ME-nwhO8ZpQ) # 動作 スマートフォンの画面は次のようになります. ![スマートフォン画面](https://camo.elchika.com/6f64fed4f1800904b7c03d4e1a51e73ff8a05433/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65316238386638642d663434632d346361352d613834652d3236633337343933656634352f32636535643066372d376336392d346666372d613230302d653139363364396230366566/) 操作画面のManualとAutoを選択することにより,モータの動作が変わります. 各動作は以下の通りとなります. ・Manual:画面のスライダーに合わせてモータの出力を変更 ・Auto:温度センサーの値を読み取って,モータの出力を変更     (今回は25℃以上のときに出力80%,25℃より低いときは出力20%となっています.) 動作中はobniz boardに次の画像のようにモータの出力[%]と温度[℃]が表示されます. ![obniz board画面](https://camo.elchika.com/2770e910afb83b58d8f319eaa69e6f3abe76ef98/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65316238386638642d663434632d346361352d613834652d3236633337343933656634352f30613233373464302d393036322d343933662d383639642d633831393232333538616332/) # 部品 |部品|数量| |---|---| |obniz 1Y|1個| |空調服(ファン2つ付き)|1着| |USB-DC変換ケーブル(外径4mm内径1.7mm)|2個| |MCP9700A|1個| # 回路図 ![](https://camo.elchika.com/d6f7d9e1cbb6be87488a953fbbfa870287bb6d41/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65316238386638642d663434632d346361352d613834652d3236633337343933656634352f61356639633131372d326266312d343939382d616564342d613139326265356331613336/) 空調服のモータは空調服に付いているコードではなく, USB-DC変換ケーブルを使用します. DC側はモータに接続し,USB側は一度切断し電源コードをobniz boardに接続します. # ソースコード ```html: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の着脱を毎回行う必要は無し! 温度センサーによる風量の変化は実際に使っていきながら調整していきたいと思います. 暑い夏を空調服で快適に暮らしましょう!