Raspberry Pi2を使ってリモートで餌やりをする
2015/09/29
ブログからガレージの金魚にエサをやる
以前からやろうやろうと先延ばしにしてたエサやりのシステムが完成しました!
プラ船のページで完成品が見れます。
是非一度エサやりにきてください
以下にハウツーを残します
ハードウェア
材料
- ホームセンターで売られてる端材の詰め合わせ
- 100均の小さいタッパー
- ペットボトル
- トイレットペーパーの芯
- サーボモーター SG90
モーターにタッパーを取り付けて穴あけ
モーターが回ったときエサが飛び散るのでペットボトルを切ってカバーにします
配線やらソフトウェアの設定は前の記事を参考にしてください
ソフトウェア
続いてソフトウェア
無制限にボコボコとエサをやられたら水があっという間にダメになるので制限をかけます
仕様
- 最後にエサをやった時刻から3時間経過していればエサがやれる
- エサをやれる時刻は10時から20時までの間
- 毎日10時に一度自動でエサをやる
Raspberry Pi2側
まずエサをやった時刻をさくらVPSのDBに保存します
// サクラVPS側 <?php if (!array_key_exists('tbl', $_POST)) { exit; } require_once('./db_conf.php'); $pdo = getPDO(); $pdo->prepare('insert feed_log value()')->execute(); $pdo = null; ?>
ガレージのRaspberry Pi2からさくらVPSへ送信
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'uri' require 'net/http' def http_request(method, uri, query_hash={}) query = query_hash.map{|k, v| "#{k}=#{v}"}.join('&') #ハッシュをオプションの書式に変換 query_escaped = URI.escape(query) uri_parsed = URI.parse(uri) http = Net::HTTP.new(uri_parsed.host) case method.downcase! when 'get' return http.get(uri_parsed.path + '?' + query_escaped).body when 'post' return http.post(uri_parsed.path, query_escaped).body end end #POSTで送るだけ http_request('POST', '送信先URL', {:tbl=> 'g'})
サーボブラスターを使ってエサの入ったタッパーを回転させる
#!/bin/sh echo 3=100% > /dev/servoblaster sleep 1 echo 3=20% > /dev/servoblaster #さくらVPSへログ送信 /usr/local/bin/send-feed-log
Sangoのサブスクライバに追記
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'mqtt' MQTTHOST = "std1.mqtt.shiguredo.jp" USERNAME = "ユーザー名" PASSWORD = "パスワード" # MQTTに接続するためのクライアントを作成します client = MQTT::Client.new( MQTTHOST, :username => USERNAME, :password => PASSWORD, :keep_alive => 60 ) # 接続します client.connect do |c| # Subscribeします TOPIC = "ユーザー名/#" c.get(TOPIC) do |topic, message| # # 他省略 # #feed ←エサ用トピック追加 if topic == "ユーザー名/feed" `/usr/local/bin/feed` end end end
ブログ側
最後にエサをやった時刻と、次にエサをやれる時刻をJSONで出力する
require_once('./db_conf.php'); $pdo = getPDO(); $ret = array(); // エサやり最終時刻を取得 $sql_ret = $pdo->query("select * FROM feed_log ORDER BY id DESC LIMIT 1")->fetchAll(PDO::FETCH_ASSOC); $ret['latest'] = $sql_ret[0]['on_at']; $pdo = null; $ret['next'] = ""; // 次のエサやり時刻 if((date('Hi') + 0) > 2000 ) { $ret['next'] = date("Y-m-d", strtotime("+1 day" )) . " 13:00:00"; }else if((date('Hi') + 0) < 1000 ) { $ret['next'] = date("Y-m-d") . " 13:00:00"; }else{ $ret['next'] = date("Y-m-d H:i:s", strtotime($ret['latest'] . " +3 hour")); // 次にエサをやれる時刻が20時以降の場合は翌日の13時とする if(date("Hi", strtotime($ret['next'])) > 2000) { $ret['next'] = date("Y-m-d", strtotime("+1 day" )) . " 13:00:00"; } } header('Access-Control-Allow-Origin: *'); header('Content-type: application/json'); echo json_encode($ret, JSON_PRETTY_PRINT);
エサやりボタン押下でSangoを使ってガレージのRaspberry Pi2にキューを飛ばす
if (!array_key_exists('from', $_POST)) { exit; } require_once('./phpMQTT.php'); require_once('./db_conf.php'); $pdo = getPDO(); // エサやり時刻チェック $cnt = $pdo->query('select count(*) as cnt from feed_log where on_at > (now() - interval 3 hour)')->fetch(PDO::FETCH_ASSOC); $pdo = null; if($cnt['cnt'] === 0) { $mqtt = new phpMQTT("tcp://std1.mqtt.shiguredo.jp", 1883, md5(time())); if ($mqtt->connect(null,null,'ユーザー名', 'パスワード')) { $mqtt->publish("ユーザー名/feed","",0); $mqtt->close(); } }
これで一先ずやりたい事は実装できた感じ
やぶ蚊に刺されず屋内から金魚を眺めながらエサがやれるようになりました!
おかげで人には懐かずカメラに懐いてしまった・・・人が近づくと逃げますがカメラが動くとエサくれーしますw
関連記事
-
Raspberry Pi2でPlanexのGW-450Dが動かなくなった
Raspberry Pi2上で何も考えずソフト類をアップグレードしたらカーネルの …
-
エサやりボタンを撤去しました
寒い! 寒くなってきましね。 水温を10度を切り始めたので、プラ舟ページに配置し …
-
福だるま 購入しました
新入り金魚 メイン水槽をリセットしたのでヤフオクで金魚を購入しました 福だるまと …
-
ウチの金魚たち
ウチに置いてある水槽の紹介 仕事場水槽 金魚水槽のページで配信している60cm水 …
-
Raspberry Pi2で外部から水槽のLEDを点灯する その2
前回でひとまずさくらVPS上のPHPから自宅水槽のLED照明をONにできるように …
-
Raspberry Pi ZEROをソーラーパネルで動かす
ソーラーパネルでラズパイ! 以前からソーラーパネルを使って電源の要らないRasp …
-
プラ舟に水中ライトを設置
ライトが暗い! 配信中のプラ船ページですが、以前からライトが暗いので水中ライトを …
-
穂竜はじめました
先日新しく45cm水槽を立ち上げてまして穂竜という金魚を飼いはじめました。 高頭 …
-
Raspberry Pi2で室温、水温を計測してグラフ表示する
Raspberry Pi2に水温計と温度計を取り付け、10分ごとに室温と水温を計 …
-
プラ舟に外部フィルター追加
安かったのでつい・・・ ヤフオクで安い中古の外部フィルターが売っていたので衝動買 …
- PREV
- ピンポンパール投入しました
- NEXT
- Raspberry Pi2に2台のカメラを繋いで同時配信する
Comment
こんにちは。初めまして。ponと申します。
ラズパイを使った水槽への自動給餌機に興味があり、情報を探していたところ、こちらの記事に出会いました。
いくつかお聞きしたいことがあるのですが、よろしいでしょうか?
ご連絡お待ちしております。
答えられる範囲であればー