【Arduino】灌水ポンプを駆動する方法について検討してみた

      概要 Arduinoから外部電源で駆動するモータを制御する方法を、いくつか検討しました。     したいこと Arduinoから外部電源で駆動するモータを制御する       検討内容   Arduinoの出力は数十mAまでしか供給できないため、Arduinoでモータを制御するには、外部電源に接続されたモータのスイッチをArduinoでONまたはOFFできれば可能になります。   その方法として、次の4つを検討してみました。 ① 普通のトランジスタを使用する トランジスタのスイッチング回路で大電流を制御するにはベース電流 を多く流す必要がありますが、制御側が流せる電流にも限りがあります。 今回はそれほど大きなモータは制御しませんが、それでも二段にしてより多くの電流を流せるようにする必要があります。   ② パワーMOS FETを使用する パワーMOS FETは発熱量が小さく、出力の大きいモータを回す場合でも放熱の点で有利です。   ③ リレーを使用する リレーは絶縁性が高く大電流の制御やAC電源の制御も可能です。 しかしリレーを使用する場合でも、リレーを駆動するためにトランジスタかFETが必要になります。   ④ モータドライバを使用する モータドライバはIC内部に制御用の回路が組まれているため、ピンに接続するだけでモータを制御することが可能です。 DRV8835は数ミリ程度のチップで2個のモータを制御できるため設計が容易です。       まとめ 今回はArduinoで小型のウォータポンプモータを駆動するので、手間とお金がかかるリレーを使うほどでもありません。 その他の案を比較すると、費用面ではトランジスタが一番安く上がりますが手間がかかります。 モータドライバは、設計も実装も楽で見た目もきれいな仕上がりになります。価格もDRV8835であれば2個の制御ができてFETとさほど変わりません。 とりあえず今回はささっと動かしてみたいのでモータドライバを使ってみることにしました。       追記[…続きを読む]

Continue reading …

【RaspberryPi】サーバーから端末を制御する方法を検討してみた

  概要 水耕栽培の設備の制御※をWEBサーバーからの指示できるようにするため、サーバーから端末(ラズベリーパイ)に指令を送る方法を検討してみました。 ※ポンプの駆動や照明のON/OFFなど 環境   ネットワーク システム Hardware Raspberry Pi2 Wifi Dongle Web Camera ZigBee Software Raspbian (Wheezy) fswebcam python   制御方法の検討結果 今回、ラズベリーパイ(通信ユニット)に指令を送るための方法を検討しました。 ※最終的にラズベリーパイ(通信ユニット)を経由してArduino(センサーユニット)に指令を伝搬する予定ですが、今回その部分は省略します。 ラズベリーパイ(通信ユニット)は固定IPアドレスをもっていないため、サーバーから直接ラズベリーパイにデータを送ることはできません。 しかし、ラズベリーパイ(通信ユニット)からサーバーにHTTP通信を行うことで、そのレスポンスとして制御情報を送信することは可能です。 「サーバからクライアントに送信する技術 – WebSocketを中心に」で、サーバーからラズベリーパイ(通信ユニット)にデータを送信する方法をわかりやすく解説してますので、以下に引用します。 http://qiita.com/yuba/items/00fc1892b296fb7b8de9 水耕栽培の制御ではレスポンスの即時性は要求されません。また端末の数が増えてくると頻繁にサーバーとのでデータ通信が発生するので、一回の通信はできるだけ短時間で終わらせる方やよいです。 そこで、今回は一番原始的な方法「ポーリング」で確実に制御を行いたいと思います。 参考 WebAPIについての説明 http://qiita.com/busyoumono99/items/9b5ffd35dd521bafce47 サーバからクライアントに送信する技術 – WebSocketを中心に http://qiita.com/yuba/items/00fc1892b296fb7b8de9 You might not need a WebSocket(2014-06-24)by Justin http://blog.fanout.io/2014/06/24/you-might-not-need-a-websocket/ あなたにWebSocketは必要ないかも http://postd.cc/you-might-not-need-a-websocket/[…続きを読む]

Continue reading …

【IoTプラットフォーム】M2Xについて調べてみた

概要 MicrosoftのAzureやAmazonのAWSをはじめとするクラウドサービスにもIoT向けのサービスが提供されるようになり、IoTに特化したクラウドストレージも各社様々なサービスを開始しています。IoTに特化したサービスといえばXively(ザイブリー)が有名ですが、最近はAT&TのM2Xがいいらしいです。   環境 Hardware Raspberry Pi2 Wifi Dongle Arduino UNO ZigBee Temp/Humidity sensor  AM2302(DHT-22 ) Software Raspbian (Wheezy) Server M2X     スクリプト curlでデバイス情報取得 curlでデータ更新 CAKEPHP2でデータ更新 感想 AzureやAWSのサービスを利用する場合、さまざまなサービスの一つとしてIoTデータストレージが存在するため、データを取るだけでも労力と出費が必要になります。M2Xは、その点データをとれるようにするための手順が単純で簡単にIoTと接続できるため、導入までがとてもスムーズです。そしてデバイスの点数が10点までなら無料で利用できます(2017年4月現在) ※Xively(ザイブリー)は個人利用者向けのユーザー登録画面(https://personal.xively.com/)がありましたが現在は新規登録ができなくなっているようです。現在無料で利用できるのは、試用期間の30日間のみとなっています。     参考   Dreamforce2016 Day4:XivelyはIoT導入のカギとなるサービスかも知れない https://www.terrasky.co.jp/blog/2016/161010_001859.php IoT用Webサービス XivelyとUbidots(name_untitledのエッセイ) http://nameuntitled.hatenablog.com/entry/2017/02/06/140612 IoT向けクラウドストレージ「xively(ザイブリー)」はセンサネット業界の破壊神?(Bye Bye Moore) http://shuzo-kino.hateblo.jp/entry/2013/11/08/200424 Raspberry PiによるIoT(M2M)【I2C温度センサー/xively/Python】 http://yamaryu0508.hatenablog.com/entry/2014/08/19/233431 Xivelyでセンサデータなどのリアルタイムなチャートを作る http://qiita.com/satzz/items/cef654f8de52ee06eaf5 Xivelyの代替候補M2X[…続きを読む]

Continue reading …

【Raspberry Pi】ZigBeeで受信したデータをサーバーにアップする

  概要 子機(Arduino)で取得したセンサー情報をZigBee通信により親機(RaspberryPi)に集約して、定期的にサーバーにアップする ※私的な備忘録として作成したスクリプトを残しています。サーバーにアップする部分は別ファンクションです   環境   ネットワーク システム Hardware Raspberry Pi2 Wifi Dongle Web Camera ZigBee Software Raspbian (Wheezy) fswebcam python     仕様 プログラムの起動時に、引数にアップロード用APIのURLとデータの取込回数を指定する。 子機から受信したデータを順次変数に取込み、引数で指定された回数に達した時点でその間の平均値を送信する。 子機には子機IDが割り振られているため、IDごとにデータは区別して扱う     スクリプト   課題 ZIGBEEより安価でARDUINOから直接サーバーにアップ可能なESP8266 (ESP-WROOM-02)を使ってみる   参考 Python入門 サンプル集(アルゴリズム雑記) https://algorithm.joho.info/programming/python/sample-code-py/ 家庭菜園の土の乾燥状態等をリモート監視する http://qiita.com/dodo5522/items/63d1efee3f70b3d5f2f6 XBee ZigBee 基本編センサーの値を読み取ってみよう~アプリケーション~(ボクにもわかる地上デジタル) http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-tutorial_3.html 電子工作でインターネットに無線接続して通信を行う (Arduino) https://www.qoosky.io/techs/14bfffdc82  […続きを読む]

Continue reading …

【OpenCV】キャプチャした画像を二値化してみた

概要 fswebcamでキャプチャした画像をOpenCVの画像処理機能を使用して二値化しました。黒の領域を抽出することでセンサーだけでは情報を取得することが難しい作物の成長を数値化して記録することが可能になります。 ※四国総研さんがトマトの水やり後の変化を画像処理で検出しています(こちら)   環境 Hardware Raspberry Pi2 Wifi Dongle Web Camera Software Raspbian (Wheezy) fswebcam python※ OpenCV2 ※OpenCVにはC/C++, Python, Javaのインターフェイスが提供されています。今回はシェルスクリプトから利用したいので、連携が容易にできることとコーディングのしやすさから、Pythonを採用することにしました。     方法 画像の読み込む グレースケールに変換する 二値化する 黒ドットをカウントする 黒ドットの比率により二値化データまたはグレースケールデータを出力する     スクリプト ※pythonコードで、if __name__ == ‘__main__’の下にコードをダラダラと書くのはよろしくないようです     参考   OpenCV逆引きリファレンス(OpenCV.jp) http://opencv.jp/cookbook/ Python版OpenCV入門(画像処理プログラミング入門) http://opencv.blog.jp/python/nyumon if __name__ == ‘__main__’ の下にコードをダラダラと書く人、挙手しなさい http://qiita.com/pashango2/items/57d8a08e53a4548fb5ad[…続きを読む]

Continue reading …

【2017年度】プログラミング言語人気の移り変わりを調べてみた

  概要 アメリカの産業調査会社RedMonkが半年ごとにプログラミング言語の人気ランキングとその動向と調査して発表しています。2015年下半期から2017年上半期までのランキングを比較してプログラム言語の人気の移り変わりを調べてみました。   ランキングの推移 メリカの産業調査会社RedMonkは、RedMonkはStack Overflowのディスカッション数やGitHubで使用されている言語を分析して、独自の評価方法によりランキングを作成しています。 下表に、RedMonkが発表した2015年下半期から2017年上半期までのトップ20をまとめました。   表だけではイメージしにくいので、折れ線グラフでプロットしてみました。 縦軸はランキング1位~20位、横軸にランキング発表時期です。     edMonkのアナリストおよび共同創設者のスティーブン・オグレディも述べていますが、トップ10にはほとんど動きが見られません。特に、JavascriptとJavaは2015年下半期から1位と2位をキープしており不動の強さを示しています。 Javascriptはもともとネットスケープ社のブラウザでインターネットの端末用スクリプト言語として開発された言語です。しかし、マイクロソフトがJavaScriptの非同期通信を利用したAjaxという技術を開発したことにより、高機能なウェブアプリケーション開発言語の一つとして再び注目もあつめるようになりました。2017年にはJavascriptを利用したフレームワークTypeScriptやCofeeScriptがこのTop20にランクインしており、Javascriptはますます高くなりそうです。 ちなみに、Javascriptはこの調査がはじめて行われた2012年からずっと1位をキープしています。 JAVAはその適用範囲が広く、WEBプログラミング言語から組込み系の開発言語としても使用されており、上位にランキングされているのも頷けます。2、3年ほど前から聞かれるようになったIoT(Internet of Things)の開発言語としてもJavaは浸透しておりますし、スマホやタブレット(Android端末)の開発にもJavaは欠くことができない言語となっています。 機械学習やディープラーニングで使える言語として日本でも最近急に耳にするようになったのがPYTHONです。海外では開発言語として人気があり、GOOGLEやFACEBOOKでは開発言語として使用されています。GOOGLEは独自に最適化を施したPython、Unladen Swallowを使用しています。 PHPとは、PHPマニュアルによると次のように書かれています。 PHPはapache、IISなどのWEBサーバーに標準で実装されており、C言語をベースにしたわかりやすい文法と豊富な機能により急速に広まりました。エラーが発生しても基本的にプログラムを継続して動作し、完璧なプログラムではなくてもそこそこ動くため、初心者にも敷居が低く人気の言語です。ただ、この敷居の低さが完成度の低いプログラムがチェックをくくりぬけてリリースされることにつながり、PHPのプログラムがバグの温床になりやすい傾向にあります。この欠点を補うために、独自の規約を設けてフレームワークを作成したり、既存のフレームワークを使用する必要があります。 Rubyは前期からランクを一つ下げましたが、依然人気のある言語です。Rubyはここでは唯一日本人により開発された言語です。PerlやPythonをもとによりProgrammingを楽しめる言語として開発したのがRubyといわれており、公式リファレンス用語集にも「Matz(まつもと) が Python に満足していれば Ruby は生まれなかったであろう」と記載されています。Rubyの設計思想が「プログラミングを楽しむこと」にあるように、Rubyはストレスなくプログラムを記述でき、フレームワーク「Ruby on rails」がより記述コードをすくなくすることを可能にしています。 Top10内のその他の言語C#,C++,C,Objective-cは際立った特徴はありませんが生産性が高く開発効率がよく仕事をこなすのにとても有効な開発言語です。CSSはスタイルシートでありプログラム言語とはいえませんが・・ その他、今期からTop20に入ってきたものとして、TypeScript、PowerShell、CoffeeScriptそしてLunaが存在します。Lunaは手続型言語でPowerShellはコマンドラインで実行するためのスクリプト言語(SHELLの拡張版)です。しかし、TypeScriptとCofeeScriptはJavascriptを生成するためのツールで、プログラム言語とは言い難いですが、Javascript用のコンパイラとして機能します。クライアントサイドだけでなくサーバーサイドのプログラムも担うことができるようになり、Javascript用のフレームワーク(AnglarJS、React.jsなど)のJavascriptコードを記述するためのコンパイラ言語として使用されているようです。Javascriptの用途がますます広がると、可読性の低いJavascriptを補うために、このようなJavascript用のコンパイラも必要になってくると思われます。   考までに、RedMonkが2017年上半期のランキングを決定するためにStack Overflowのディスカッション数やGitHubで使用されている言語を分析して作成した資料を引用しておきます。 ※上のグラフで斜線から遠く離れているもの(Visual Basic、Common Lispなど)は、GitHub/StackOverflowで順位に大きな差のあるものを示しています。       参考 10 Best Programming Languages That You Need[…続きを読む]

Continue reading …

【RaspberryPi】Webカメラで定点観測をする

  概要 RaspberryPiに接続したWEBカメラを利用して栽培中のトマトの生育状況を静止画で観察するスクリプトを作ってみた。     環境 Hardware Raspberry Pi2 Wifi Dongle Web Camera Software Raspbian (Wheezy) fswebcam     シェルスクリプトの歴史   Linux におけるシェルの進化より引用しました Bourne シェルから派生したシェルの多くは、現在でも典型的な Linux システムで使用されています。下図に、重要なシェルの系列を示しています。この図を見るとわかるように、Bourne シェル (sh) から Korn シェル (ksh)、Almquist シェル (ash)、そしてよく使われている Bourne Again Shell (bash) が開発されました。C シェル (csh) に関しては、Bourne シェルがリリースされた時点では、まだ開発中でした。    1977年以降に開発された UNIX/Linux シェル      […続きを読む]

Continue reading …