slackからRaspberry Piに喋らせてみた
D級アンプ
秋月でこんなものを見つけた。
D級アンプといって、アナログではなくPWMで増幅するらしい。
以前、Raspberry Piに100均で買ったスピーカーをつけて音声を再生させてみたが、あまりにも音が小さすぎて使い物にならなかった。
今回は、このD級アンプモジュールを使って、Raspberry Piの音声再生にリベンジしてみた。
USBカップウォーマーを作ってみた
あけましておめでとうございます。
本年もよろしくお願いします。
大晦日ハッカソン
ここ3年ほどだが、毎年年末になると年が明けるまでに、何かしらの電子工作を作り上げるという趣味を続けている。
2013年、2014年と光るLEDマフラーを作成した。
それについてはいずれブログにまとめたい。
去年(2015年)はUSBカップウォーマーを作っていた。
ちょうどtwitterで #大晦日ハッカソン というタグが流れていたので、それに乗じて進捗を報告していた。
完成品の見た目はこんな感じ。
完成品の動画は下記から。
2016年の抱負
去年以上にモノづくりのイベントやハッカソンなどに参加して、知識や交友を深めたい。
去年から作り続けているオリジナルラジコン戦車を完成させたい。
室内の湿度を監視して加湿を促すシステムを作った
この記事は、Raspberry Pi Advent Callender 2015の23日目の記事です。
22日目はCS_Tokuさんの「Raspberry PiとRGBマトリクスで電光掲示板作ってアニメ流したった」でした。
自分もLEDが好きなので、そのうちLEDマトリックスで色々遊んでみたいと思います。
Raspberry Pi + slack + hubot + 温湿度センサ
以前、Raspberry Piとslackとhubotと温湿度センサで室内の温湿度を測定してslackに投稿する仕組みを作ったが、それを更に改良した。
構築方法に付いては過去記事を参照。
湿度監視システム
せっかく室内の温湿度が測定出来るようになったので、定期的に湿度を測定して快適な湿度をはみ出してしまったら通知するように改良した。
ちなみに快適な湿度とは、45%〜65%の間らしい。*1
さらに、室内灯にPhilips Hueを使っているので、湿度に応じて灯りの色を変えて目でもわかるようにしてみた。
ざっくりとした仕組みは下記の通り
- node-cronで毎時間温湿度を測定しslackに投稿する
- 湿度が45%を下回っていたら「湿度低すぎ」と判断し、加湿を促すメッセージをslackに投稿し、Philips Hueを赤くする
- 湿度が65%を上回っていたら「湿度高すぎ」と判断し、除湿を促すメッセージをslackに投稿し、Philips Hueを青くする
Philips HueをRaspberry Piから制御する方法は過去記事を参照。
一定時間毎に温湿度を監視して通知するスクリプト
hubotは(というかnode.jsは)受動的に処理を行うのは得意だが能動的に処理を行うのは苦手。
定期的に処理をするために、node-cron をインストールする。
$ npm install cron
続いて、温湿度を監視するCoffeeScriptを作成。
湿度を監視するジョブの起動と停止は、slackからできるようにしている。
# Description: # 温湿度を監視する # # Commands: # hubot 湿度監視して 湿度監視をする # hubot 湿度監視やめて 湿度監視をやめる uc = require('../libs/usercheck') # 特定のユーザーかどうかチェックする自作ライブラリ tmp = require('../libs/temperature') hue = require('../libs/hue') CronJob = require("cron").CronJob STORE_KEY = 'hue_hudi_key' request = require('request') exec = require('child_process').exec envelope = room: "#general" module.exports = (robot) -> # 温湿度をチェックする関数 tempCheck = () => tmp.get_temperature((err, temp, hudi) -> if !err robot.send envelope, "現在の室温は#{temp}℃、湿度は#{hudi}%です" if hudi < 45 hue.set_hue_color(128, 255, 6375) # Hueを赤くする robot.send envelope, "室内が乾燥し過ぎのようです。加湿したほうがよろしいかと思います" else if hudi > 65 hue.set_hue_color(128, 255, 47000) # Hueを青くする robot.send envelope, "室内の湿度が高すぎるようです。除湿したほうがよろしいかと思います" else robot.send envelope, "#{err}" ) # 湿度をチェックする命令 robot.respond /湿度チェック/i, (msg) -> if uc.user_check(msg.message.user.id) tempCheck() else msg.reply 'ご主人様以外のお方からのご命令はお受けできません' # 1時間毎に温湿度をチェックするCronジョブ(午前2時〜9時までは計測しない) tempJob = new CronJob('0 0 0-1,9-23 * * *', tempCheck) # redis.brainの読み込み時に監視設定を読み込む robot.brain.on 'loaded', => flag = (robot.brain.get STORE_KEY ) or "false" if flag == "true" robot.send envelope, "湿度の監視を開始します" tempJob.start() # 湿度監視開始リクエスト robot.respond /湿度監視して/i, (msg) -> robot.brain.set STORE_KEY, "true" # 湿度監視停止リクエスト robot.respond /湿度監視やめて/i, (msg) -> msg.send "湿度の監視を停止しました" tempJob.stop() robot.brain.set STORE_KEY, "false"
実際に使用してみて
自宅湿度監視システムのおかげで、室内が乾燥しているのが目でもわかるようになったのはいいが、加湿器が無いのでどうすることも出来ないという致命的な欠陥が発覚した。
加湿器を購入して、それをRaspberry Piから制御できるようにするといいかもしれない。
「オレはようやくのぼりはじめたばかりだからな このはてしなく遠いおうちハック坂をよ…」
カイワレ先生の次回作にご期待ください。
明日は、kinpiraさんです。
Raspberry Pi + hubot + slackでPhilips Hueを制御する
自宅の室内灯は色が自由に変えられるLED電球、Philips Hueを使っている。
Philips HueはAPIが公開されており、同一ネットワーク内ならAPIを叩くことで制御することが出来る。
使い方は公式のGetting startedを参照。
かいつまんで説明すると、
- www.meethue.com/api/nupnp にアクセスしてHueのブリッジのIPアドレスを取得する
- http://<ブリッジのIPアドレス>/debug/clip.html にアクセスする
- ブリッジからユーザーIDを発行してもらう。ブリッジのボタンを押してからAPIを叩かないとエラーになる。
- http://<ブリッジのIPアドレス>/api/<ユーザーID>/lights/<ライトの番号>/state にJSON形式で状態を設定して PUT して制御する
これを、slack経由でhubotにHueを簡単に制御できるようにしてみた。
続きを読むオール3Dプリントラジコン戦車(仮)制作日記 その3
引き続き、ラジコン製作をしている。
今回は、簡単なLED制御機能を作った。
オール3Dプリントラジコン戦車(仮)制作日記 その2
引き続き、ラジコン戦車を制作している。
今回は、砲塔の上下動を改善した。
当初、砲塔の上下動にSG92Rサーボを使っていたが、トルク不足でプルプルしていた。
その当時の映像がこちら。