あら、嬉しいですな

投稿日:

 ブログのアクセスログを見ていたら、Aidafruiteの小型TTLシリアルJPEGカメラの基本的な扱いについて書いた私の記事を参考にされた方があって、その方がブログに取り上げてくださっていることが分かった。

 取り上げていただいて、誠に恐縮なことである。

最近の一般向けワンボード・コンピュータ、なかんづく「Arduino」「Raspberry Pi」の状況

投稿日:

平成28年2月
JISTA ML リレーコラム 第1回
会員 関東支部 jista1197 佐藤俊夫

1 はじめに

 このところ、若い方やDIYなどを楽しむ一般の方向けに、ワンボード・コンピュータが売られています。しかも、相当な売れ行きであると仄聞(そくぶん)します。

 「Arduino」や「Raspberry Pi」、「IchigoJam」「Intel Edison」「mbed」と言った製品名を聞いたことがある方も多いでしょう。秋葉原を歩くと、店の表にこれらのカラフルな箱が山積みになっています。また、イタリア人マッシモ・バンジ氏の「TED」スピーチを見たことがある方もたくさんおられると思います。

 数年前から、普及価格帯の3Dプリンタが出現してきたことにより、一般人でも小規模の製品を作り、それを世に問うようなことが可能になってきました。そこから、「Makers Movement」と言われる流行が盛り上がりはじめました。これはオープンソース・イノベーションの自然な興隆ということに加えて、出版と連携した一種のマーケティングの成功であるとも言われているようです。ちなみに、この「Makers Movement」について著書を出し、流行に火をつけたのはクリス・アンダーソンと言う人ですが、この人の名を覚えている方もJISTA会員の皆さんには多いことでしょう。そう、かの「ロング・テール」の著者その人です。

 古くから言われる「DIY」と、最新流行の「Makers Movement」との違いは、そこに「ネット」が介在するか否かだ、と言ってもよいと思います。物を作る上での発想やハウ・トゥ、設計図、使用感などは、インターネットを通じて迅速に共有され、改良が加えられ、更に共有されます。

 こうしたことを背景に、3Dプリンタを使用してものを作り、作ったものへデジタルやITのパワーを盛り込むことが広く行われるようになりました。ものへデジタルやITのパワーを盛り込むのには、廉価なワンボード・コンピュータがうってつけだというわけです。

 実際、巷間ではArduinoがこれまでに100万台、Raspberry Piが700万台売れたと言われていますから、これらのワンボード・コンピュータは、ITのプラットフォームとして無視できない勢力になっていると言えます。また、これらは安価に数を得られることから、「IoT」流行の趨勢とも関連する雰囲気が濃厚に感じられます。

 私は仕事の上ではこれらと関わっておりません。しかし、その一方で、ITストラテジの道というものは、ITワールドを形作るもののうちの何が将来の影響要素としてつながってくるかわかりません。そうしたことから、これらワンボード・コンピュータを体験しておくことが何かの足しになることもあろうと思い、ArduinoとRaspberry Piを少しばかりいじってみておりましたところ、ちょうど今般リレーコラム執筆の機会を頂きました。

 そこで、この機会をお借りして、ArduinoとRaspberry Piについて、その状況などを簡単に紹介させていただきたいと思います。

2 Arduinoについて

 「Arduino」はイタリア人のマッシモ・バンジ氏を中心に、平成17年(2005)から開発が始められたワンボード・コンピュータです。バージョンアップや派生を含め、既に数十種類の製品があります。現在店頭で入手可能な製品には、代表的な「Arduino UNO」があり、これは本日(平成28年2月7日)現在、税込み2,940円で手に入ります。

 その特徴に、次のようなことを挙げることができます。

○ ハードウェアが「オープンソース」であること。

 仕様も設計もオープンで、一般人がネットから基盤のパターンなどをダウンロードしてそっくり同じものを製作することも可能です。また、そのため、世界中にArduinoのクローンを作っている企業やグループがあり、それら自由なクローンの種類を数え上げることはもはや不可能と言う状況にあります。

○ 開発環境が無料で配布されていること。

 開発環境は統合環境(IDE)になっており、これも無料です。様々なライブラリが日々提供され続けており、一般に入手可能なほとんどのハードウェアやIC、電子素子などを扱うためのライブラリがGitHubなどですぐに手に入ります。

○ アナログ入出力、デジタル入出力が簡単に可能であること。

 「Arduino UNO」の場合、基板上にはデジタルI/Oが14本、アナログINが6本、アナログOUTが6本あります。これにさまざまな電子部品をつないで制御することができます。

○ C++で簡単にプログラミングできること。

 従来の「マイコン」はアセンブラ一辺倒でしたが、ArduinoはC++でプログラミングでき、しかも、ややこしいハードウェア・アクセスはC++のクラスの中にすべてカプセル化され、手軽に扱うことが可能になっています。ユーザはオブジェクトを生成し、入出力ピンを開いて読み、書くだけでさまざまなことができます。

 こうした特徴があるため、Arduinoを使用すると、一般人がデジタル・プロダクトを簡単に製作することができます。

 かく言う私も次のようなことを試しました。

「スマート・ファン」

 安物の扇風機にArduinoとEtehrnetインターフェース、温度センサをとりつけ、Webサーバをこの扇風機に実装してブラウザから制御できるようにし、温度によって風量を変え、1/fゆらぎ送風ができるなど、ものすごく無駄にリッチ化した扇風機です。

 1980円の安物扇風機をめっちゃ高機能化(笑)して、結構遊べました。

ウェブ扇風機

「メールサーバ監視ランプ」

 メール来着状況を監視し、ランプの色で教えてくれるもの。昔はISDN用のルータにこうした機能があり、パソコンのスイッチを入れていなくてもメールチェックのタイミングを教えてくれて便利だったのですが、今はこういうものがなくなってしまったので、意を決して自作したわけです。実は、今はスマホでこれは出来てしまうのですが、LEDの輝度のパルス幅変調などを試して遊ぶのに格好の題材でしたので、あえて試してみました。

メールサーバお知らせランプ

「多機能リモコン」

 赤外線リモコンのある電化製品を、Webで制御するようにしたものです。パソコンからでも、スマホからでも操作できます。赤外線LEDは秋葉原などで100円ほどで手に入りますので、これを試す人は非常に多いようです。

いよいよ多機能リモコン

「モーターで動くおもちゃの類をデジタル・パワードにする」

 おもちゃにArduinoを積み込むと、男の子などは大変喜びます。ここでは、モーターで動く自動車に超音波センサをとりつけ、自律制御させるとともに、その自動車にデジカメを乗せて動画を撮影しています。

虫瞰(ちゅうかん)カメラ

 私には男の子供はありませんが、私自身が男の子じみた中年(笑)ですので、みずからこういうことを試して遊びました。

 このように、Arduinoを使うと、手軽にさまざまな機器を制御したり、デジタルパワーを盛り込んだものを作ることが可能です。

 伝統的にArduinoにはAtmel社のマイコン「AVR」シリーズが使われていましたが、最新の製品「Arduino 101」にはIntelのCurieが採用され、Bluetoothや6軸の加速度ジャイロセンサーが搭載されるなど、大変高機能化しています。

 さて、目が離せないArduinoですが、昨年ごろから、長年Arduinoを牽引してきた5人の人たちが仲違いし、分裂騒動を起こしてまだ決着がつかず、もめているようです。Arduinoコミュニティは既に大きなものになっているので、この騒動は残念なことであり、かつ、目が離せないところです。

3 Raspberry Piについて

 「Raspberry Pi」はイギリス人のイブン・アプトン氏を中心に、Raspberry Pi財団というところが開発しているワンボード・コンピュータです。SONYなども深くかかわっていると聞き及びます。

 平成24年(2012)に最初のモデルが発売され、バージョンアップ等で数種類の製品があります。現在店頭で入手可能な製品の代表的なものに「Raspberry Pi 2 Model B+」があり、これは本日(平成28年2月7日)現在で税込み5,000円です。

 次のような特徴があります。

○ れっきとした「PC」であること。

 前述のArduinoは「マイコンボード」であり、OS等は載っておりません。しかし、Raspberry PiはSoCを利用するれっきとした「パソコン」で、OSを載せて作動します。主としてRaspberry Pi用に最適化されたLinux(「Raspbian」というディストリビューション)が作動するほか、マイクロソフトからは「Windows 10 IoT core」というWindows製品が、なんと無料でコントリビュートされています。余談、最近のマイクロソフト社の変革ぶり、オープンソースやフリーへのコミットぶりには驚くばかりです。それだけ、IoTにからむ製品に注目しているということでしょう。

 また、HDMI端子やUSB、Ethernetの端子を基板上に標準で備えているので、キーボードやマウス、ディスプレイをつないでPCとして利用することができます。

○ あらゆる開発環境が利用可能なこと。

 「Linuxマシン」なので、Linuxで利用できる開発ツール類は全て利用できると言って過言ではありません。Raspberry Piになじみの良いのはPythonで、入門本などにはPythonの作例が多く載っております。他にRaspberry Pi向けに最適化されたビジュアル言語の「Scratch」などもあります。しかし、別にこれらにこだわる必要はなく、GCCが走りますから、C/C++も使えますし、他にシェル、PerlやPHP、Ruby、Javaも扱えます。極端な話、g77をインストールして「FORTRAN」でハードウェア制御を行うことも可能でしょう(聞いたことはありませんが……)。私などは、RubyやPythonに暗いので、CやPHPでRaspberry Piのプログラムを書きました。

 エディタやIDEも、自分が使い慣れた好きなものが使えます。私はviが好きなので、Raspberry Pi上でももっぱらviを使っています。

○ 簡単にデジタル入出力が可能なこと。

 「GPIO」と呼ばれるデジタル入出力端子を豊富に備えていますが、これらは、ユーザからはUNIXで言う所の「ファイルシステム上にあるスペシャル・ファイル」に見えます。ですので、このファイルをオープンし、読み、あるいは書くだけで外部に入出力ができ、ハードウェアの制御が可能です。

○ あらゆるミドルウェア等が利用可能なこと。

 Linuxであるがゆえ、Linuxで使えるミドルウェアなどはほとんどのものが利用可能です。例えば、MySQLやPostgreSQLなどのRDBも扱えます。また、ApacheなどのWebサーバ、sendmail、DovecotなどのPOP/IMAPサーバなども走ります。

 こうした特徴があるため、既存のオープンソース・ソフトウェアを用いて、相当複雑なことも可能です。

 Arduinoと違って、Raspberry Piは単体ではアナログ入力ができません。そこで、私はRaspberry PiにADC(アナログ・デジタル変換)のICを接続し、これにサーミスタを取り付け、Apache+PHP+C言語を使用して「ウェブ温度計の製作」などを試してみました。

Raspberry Piで温度を測ろう

 また、PHPでハードウェア制御もできます。私はこんなふうに、PHPを使用して、Webインターフェイスにより家電製品のスイッチをオン・オフすることなどを試しました。

そうか、PHPでもモノにつながるな

 Arduinoに比べてRaspberry Piの歴史は浅いのですが、その出荷台数などから見ても新進気鋭の勢いを持っており、躍進中であると言えます。

 もともと5,000円ほどの値段で、高価ではないRaspberry Piですが、昨年(平成27年(2015))11月に流れたニュースでは、なんと650円(5ドル)という驚くべき価格の製品「Raspberry Pi Zero」もラインナップに投入されました。

Raspberry Pi Zero

 この値段と大きさでLinuxが走るのですから、驚きです。さすがにEthernetはついていませんが、USBの無線LANドングルを接続すればネットにつながります。

 「Raspberry Pi Zero」は、この値段と大きさのゆえに数量を稼ぐことができますから、IoTにからむ何らかのブレイク・スルーをもたらす可能性も相当にあると言えるでしょう。

4 むすび

 私などが若い頃には、ワンボード・コンピュータというとNECのTK-80にとどめを打ったものです。一定の年齢層の人には大変懐かしいものの一つです。

 他方、ここまで触れましたように、現在のワンボード・コンピュータは長足の進歩を遂げており、ますます興味の尽きないものに変貌しております。

 今回紹介したものは一般向けのものなので、エンタープライズでの応用については、別途考察と検討、研究が必要であると思われますが、既に一般向けには広く普及していることから、早晩業務用途にも応用が広がることが想像されます。

2550コネクタ(QIコネクタ)の圧着を動画に撮った

投稿日:

IMG_3290 このブログは、なぜか「2550コネクタ」で検索して見に来る方が多い。

 なにかニーズでもあるのかしらん、とも思うので、圧着方法を動画に撮って解説してみた。ピンボケだが……

● 過去記事

● 2550コネクタ、QIコネクタの圧着
● 2550コネクタ、またはQIコネクタ

停年が近い

投稿日:

PHM01_0115 この前の誕生日で、いよいよ停年まで5年を切ってしまった。

 今は「定年」と書くのが正しいわけだが、かつては標記のように「停年」と書いたもので、いつ頃からだったか、この字面ではあんまりにも寂寥感が漂っていていけない、というような批判があって、「停年」から「定年」に書き換わったのである。「子供」が「子ども」になったようなものか。

 なんにせよ、悠々自適と言うわけにはいかないので、働き口を探さねばならぬ。

 私はいくつかIT系の資格を持っているが、それはもともと、なんとか就職に有利になればという考えもあって取ったものだ。日本ITストラテジスト協会というところに加入しているのも、無論、自学研鑽、IT業界の人たちから刺激を得て自分の仕事の質を向上させたい、という純然たる動機が主ではあるが、それにあわせて、就職情報でも得られれば、という考えが少しあった。モロに誰かに雇ってもらうとか、そこまでは考えないにしても、なにか働き口を探すきっかけやヒントでも人々の話から得られれば、という気持ちである。

 ところが、なんだか最近、迷いが出てきたのだ。IT業界の人々と付き合いを深め、話を聞いたりしているうち、「俺、ホントにITやりたかったのかしらん」と、自問するようになってしまったのである。

 このところ、ArduinoやRaspberry Piをいじっているのも、「一つ、迷いを見極めるために原点に戻ってみよう」と思ったからである。私のコンピュータの原点はNECのTK-80など、ワンボード・マイコンにある。ワンボード・マイコンやハードウェアに回帰すれば、なにかつかめるかも知れないと思ったのである。

 やってみると、やはり、ワンボードは面白い。

 こうやって子供の遊びみたいなことをしながら、よくよく考えてみると、ITと言うより、なにか、「工場で働きたい」ような気がしてきた。

 それで、妻に「なあ、おい、俺、定年になったら工場で働きたいんだが」と言ったら、妻は「ええーっ、ダメだわよ工場なんて」という。

「なんでだ?」

「だって、気の荒い、変な人がいて、イジメられちゃうわよ、『コラ爺ぃ』とか言って」

「……。ぬぅ、それもそうだのう」

「お父さん、銀行のフロア係とかやりなよ、いいよ、アレ」

妻は昔、銀行員だったので、フロア係はいい仕事だ、よく知っている、というのである。

「けどお前、銀行にだって、変な客がいて、エラそうに文句言われたりするのと違うか?」

「そりゃ、たまには来るけど、そんなには来ないのよ。適当に右から左へ案内しとけばいいんだから」

「ははあ、しかし、ワシには向かんなあ。フロア係って、人相手なんだもの。ワシは本来は狷介(けんかい)な性格で、人嫌いなんだぞ」

「人は見かけによらないって言うけど、それもそうねえ。社交的によく喋るように見えて、実はお父さん、社会不適合の変なオッサンだもんねえ」

「……自覚していても、あえてそう言われると、なんかムッと来るな……。工場は工場でも、食品工場なら、変なDQN(ドキュソ)はそんなにいないんじゃないか?」

「あー、ダメね、お父さん、鼻が悪くってくしゃみばっかりしてるから、食品に唾や痰が入って、クビになるわよ。どうすんのよ、娘ふたり、学校に行かせなくっちゃいけないし」

「うーむ。ワシ自身が中卒のオッサンだっちゅうのに、自分の子は大学出さにゃならんってのも、世の中不公平じゃのう」

「中卒中卒て、お父さん夜間大学行ってたんでしょ。ホンモノの純粋の中卒の人に失礼だわよ」

「……そ、それもそうだのう。とはいえ、夜間大学ってったって、4年通って中退しちまったがな」

 あの頃は忙しかった。自分の成人式の日だって、仕事してたんだもんなあ、俺。(遠い目)

 しかし、考えなければならないのはここだ。今の仕事だって、本当に腹の底から芯からやりたいと思って選んだのかと言うと、必ずしもそうではない。いや、やってみたい仕事ではあったが、それにも増して、当時家庭が裕福でなかったから選んだ、という理由も大きかった。IMG_3628

 だが、これからは違うぞ。これからの俺には選ぶ自由がある。人に左右されず、やりたい仕事を自由に選んで働いてよいのだ。やったー!そう考えると嬉しいぞ。自由だー!フリーダム!

 いずれにしても、言えることは、こーんな、休日に鼻栓つっこんでフザけているようでは、雇ってくれるところも雇うのをやめてしまうであろうということである。

2550コネクタ、QIコネクタの圧着

投稿日:

IMG_3612 なぜか、標記「2550コネクタ(QIコネクタ)」について調べる方が多い。

 以前にこんな記事を書いたのだが……

……この記事を見る人が非常に多い。多分、電子工作をするときにこのコネクタの圧着で、うまく行かない方がけっこういるのかもしれない。

 私はこのコネクタを作るのは、得意だ。他のサイトでも詳しく書いておられるところがあり、私がいろいろと書くのは余計な気もするが、少しばかり知っているコツもあるので、ひとつ、世の中への奉仕のため、それを書き留めておこう。

  •  被覆の剥き長さ
  • IMG_3608_2mm QIコネクタの金属のカシメ部分は2ミリほどの長さがある。電線の芯線がちょうどここに収まるように被覆を剥くのが基本だ。しかし、日曜工作で電線の被覆を2ミリピッタリに剥くのは難しい。被覆に弾力があって伸び縮みするからだ。それで、私は4ミリほど剥いている。この4ミリ、私が使っている「大西工業(株)No.150 MINIクリンピングプライヤー」の場合、工具の厚みが3ミリほどであり、また、被覆を剥く刃の部分の、斜めになったところが4ミリほどなので、これに電線をあてて4ミリの目安にしている。

    4ミリの目安IMG_3605_4mm

  •  圧着工具に、先に金具だけを噛ませる
  •  金具に電線をつけて工具に噛ませようなんてしても、絶対にうまく行かない。金具だけを先に工具に軽くかませる。

    IMG_3608

     その時、この金具はちょっと力を入れても、すぐにカシメられてしまうので、やさしく工具を握る。

     私の持っている工具の場合は、一番手前の、「AWG22/0.3mm^2」のダイスが2550コネクタ用である。ダイスの中央部分に、金具のカシメ部分がちょうど乗るように良く見て噛ませる。

    噛ませたところを左から見る
    IMG_3609

    右から見る
    IMG_3610

    真上から見る
    IMG_3611

  •  電線はダイスに金具を正しく噛ませてから差し込む。
  •  写真のようにする。

    IMG_3612

     あとは、おもむろに「キュッ」と握ってカシメると、ポリッ、と手ごたえがあってしっかり締まる。

     被覆部分の「巻き締め」は、以前にも引用したデジットのブログを参考にするとよい。

    うまく付いた金具(被覆はまだ巻き締めていない)
    IMG_3613

    被覆を巻き締めたあと、ハウジングを付けたところ
    IMG_3614

Arduino/Genuino 101

投稿日:

 用事を済ませて改めて見てみると、Arduino/Genuino 101、いっぱいニュースが出ている。

この前気づいた記事

タミヤの六角シャフト

投稿日:

 先週、虫瞰カメラを作って遊んだ際、タミヤのギヤボックスを使ったのだが、その際、ギヤボックス付属の「六角シャフト」に適当にゴムタイヤを取り付けた。

 それはそれでうまく行っていたのだが、タイヤを差し込んだだけだから取り付けがどうも不安定・不確実である。

 タミヤの純正のタイヤなどを使えばよいのだろうが、高いし、面倒くさい。

 そこで、シャフト両端にネジを切る。

IMG_3595

 万力にしっかりシャフトを止め、たまたま手持ちに3mmのダイスがあるからそれで切る。

 ダイスは、しっかりと噛みつかせるのにコツがいる。切削油をよく注し、下方向にしっかりと力を加えて、最初は注意深くまっすぐ切る。3回転くらい切ったら、半回転戻して切り粉を落とし、油を足す。

 それから、半回転切っては、1/4~1/3回転戻して切り粉を落とす、ということを繰り返して所望の長さになるまで切っていく。

IMG_3596

 切った後はこんなふうに切り粉だらけになるから、ワイヤブラシなどでよく落とす。


IMG_3597
IMG_3598

 こうして、ナットでしっかりとタイヤが止まるようになる。

 実はタミヤからはシャフトのセットが出ていて、両端にねじを切ったシャフトもあるにはあるのだが、これは丸形で、ギヤボックスのギヤに取り付けることができないのだ。ギヤの内腔はシャフトに合う六角形になっており、それで回転させる仕組みなのだ。

虫瞰(ちゅうかん)カメラ

投稿日:

虫瞰カメラ 唐突だが、虫瞰(ちゅうかん)動画を撮りたいっ、などと思ったのである。それはTwitterのだいぶ前からのお知り合いで、クリエイターの齋藤美紀さんという方が、このところArduinoでのロボット製作を試しておられ、それに刺激を受けたということも大きい。私のほうがArduinoに関しては少しばかり先達なのだが、モーターで動くものについては齋藤さんのほうが熱心に取り組んでおられるので、まあ、インスパイアされたわけである。

 モーターで動く小さい台車にデジカメを乗せ、走り回らせて動画を撮りたい。虫の視点で動画を撮るわけだ。人の視点では思いもよらない、家の中のいろいろなものが写り込んで、面白いのではないだろうか。

 Arduinoで制御し、手持ちの超音波センサで障害物を避けるようにしたい。

 できるだけシンプルに作るため、操向装置を工夫する。普通ならサーボなどを用いて操向輪の向きを操作するのだろうが、ここを単純にしたい。

 3輪の台車にし、後輪をキャスターのようなものにする。前進時はまっすぐに向くが、後退させるとモーメントがかかって後輪が傾き、左右どちらかに振れるようにする。そうすると、前進・後退の制御のみであちらこちらに台車を走行させることができるだろう。直進していって、ある程度まで壁などの障害物に近づくと、後退させる。後退させると、左右どちらかに向きが振れるので、超音波センサで測距しつつ後退させ、ある程度障害物が離れたらまた前進させる。

 Arduinoでモーターを回すには、FETやトランジスタを用いる方法もあるが、前進・後退をさせるためには逆転ができた方がよい。それをFETなどを使ってスクラッチでやるのは面倒くさい。そこで、「モータードライバIC」を購入して、手っ取り早く済ませよう。

 検索すると、よく売れていて入手しやすく、かつ他人の作例も多そうなものには東芝のTA7291Pというのがある。メーカーのサイトには生産終了予定と出ているものの、秋葉原へ行けば多分千石電商あたりに置かれているだろう。180円とか300円とか、そんな値段なので、どうってことはない。

 このモータードライバに合うような模型用のモーターを選ぶ。スペックシートによるとTA7291Pは1A流せる。乾電池で台車を動かすとして、Arduinoには5Vがいるから、単3×4本の6Vとして、良さげなものをマブチのページで見繕う。

 6Vだと電流が途端に2.9Aくらいにハネ上がり、モータードライバに合わない。しかも、急に1000円近くするので、趣味の工作にはちょっとどうかと思う。それで、電圧は3端子レギュレータを一つ買って落とすとして、3Vのものを見繕うと、「FA-130RA」というのに結局落ち着きそうだ。このモーターはよく使われているようで、他の方の作例にも良く出てくる。電圧は3Vまで、500mAだから、TA7291Pで動かすにはぴったりだ。

 このモーターをタミヤあたりのギアボックスにうまく取り付ければいいだろう。

 ギヤボックスを探すと、モーター込みのものも多くあるようだ。見ていると、このFA-130RA込みのギヤボックスがある。「タミヤ・3速クランクギヤーボックス」というやつだ。モーター込みで600円かそこらは安い。

 最後に、ゴムの車輪を三つ、だな。まあ、これは何か、いいものがあるだろう。

 休みなので、さっそく秋葉原へ行き、いろいろと買い込んでくる。秋葉原にはないものを、帰りに北千住の東急ハンズで買う。

買い込んできたブツいろいろ
IMG_3537

 まず、タミヤの「ミニモーター標準ギヤボックス」というのを買ってみた。モーター付きだが810円。安いかと言うと微妙なところだが、自力でギヤをいろいろやるとこれが結構大変なので、まあ、値段はこんなところだろう。

ミニモーター標準ギヤボックス
IMG_3538

 それから、走行させるためのゴムタイヤを買う。向きをうまく変えるための「キャスター」は東急ハンズで買う。

タイヤとキャスター
IMG_3540

 タイヤはさておき、この「キャスター」が、今回の私の工夫だ。前進・後退のみ、モーター1個の制御で、操向もしてしまおう、という工夫だ。このキャスターの変向角度を一定に制限し、後退する時だけランダムに向きが変わるようにするのだ。

 それから東芝のモータードライバ「TA7291P」と、モーター用に電圧を落とす3端子レギュレータ。3端子レギュレータは3.3Vのものを探したが、なかったので、2.5Vのものを買った。これでだめなら、抵抗分圧で電圧を落とそう。

IMG_3541

 ギヤボックスは組み立てるとこうなる。

IMG_3543

 これを、いつもの100円ショップ「ダイソー」にあるアクリルの枠にねじ止めし、タイヤを取り付け、例のキャスターも取り付ける。

IMG_3544
IMG_3545

 このキャスターの根元に、適当な金具を共締めし、変向角度を制限してやる。

IMG_3546
IMG_3547

 これが、「モーター1個だけで向きも変える工夫」である。ためしに、2.5Vで動かしたがどうも力がなくていけない。そこで、ギア比をうんと落とし、9Vを直接モータにくれてやることにした。まあ、壊れやせんだろ。電流を測ると、200mAくらいなので、Arduinoに直接流さなければ許容範囲である。

 さて、機械のほうはこれくらいのぞんざい適当、次に電子回路のほうに取り掛かる。

 次のように考え、この通りブレッドボードを作る。

モータドライバ及び超音波センサ結線要図
虫瞰カメラ台車

 モータ付きの台車に取り付けると、次のとおりである。

IMG_3570
IMG_3569

 スケッチは次のように書く。

//
//  crawlCar.ino
//    27.10.11(日) 0600~
//    佐藤俊夫
//    台車を這いまわらせる
//

// モータードライバ
const int MOTOR1 = 7;
const int MOTOR2 = 8;
const int MOTORPWM = 6;
//  超音波センサ
const int TRIG  = 9;
const int ECHO  = 10;
//  現在の台車の状態
const unsigned int STOP = 0, FORWARD = 1, BACK = 2;
//  ストップさせる距離、前進を再開させる距離
const float FOWSTOP = 20.0, FOWCONT = 50.0;
//  ある程度はバックを持続するようバック継続時間制限(ミリ秒)
const unsigned int BACKLIMIT = 2000;
//  PWMの強さ
const unsigned int POWER = 128;

void setup(){
  pinMode(MOTOR1,OUTPUT);  //  モータードライバ入力1へ
  pinMode(MOTOR2,OUTPUT);  //  モータードライバ入力2へ
  pinMode(TRIG,OUTPUT);
  pinMode(ECHO,INPUT);
}

void loop(){
  static unsigned int state = FORWARD;
  static unsigned long int backstart = 0;
  float range = 0.0;
  
  range = ranging();
  if(range >= FOWSTOP && state != BACK){
    state = motor(FORWARD);
  }
  else if(range < FOWCONT){
    if(state == FORWARD){
      state = motor(BACK);
      backstart = millis();
    }
    else{
      if(millis() >= (backstart + BACKLIMIT)){
        state = motor(FORWARD);
      }
      else{
        state = motor(BACK);
      }
    }
  }
  else{
      if(millis() >= (backstart + BACKLIMIT)){
        state = motor(FORWARD);
      }
  }
}
//
//  モーター制御
//
unsigned int motor(unsigned int command){
  switch(command){
    case FORWARD:
      digitalWrite(MOTOR1, LOW);
      digitalWrite(MOTOR2, HIGH);
      analogWrite(MOTORPWM, POWER);
      break;
    case BACK:
      digitalWrite(MOTOR1, HIGH);
      digitalWrite(MOTOR2, LOW);
      analogWrite(MOTORPWM, POWER);
      break;
    case STOP:
      digitalWrite(MOTOR1, LOW);
      digitalWrite(MOTOR2, LOW);
      break;
    default:
      digitalWrite(MOTOR1, LOW);
      digitalWrite(MOTOR2, LOW);
      break;
  }
  return command;
}  
//
//  測距
//
float ranging(){
  float time = 0.0, range = 0.0;

  digitalWrite(TRIG,LOW);
  delayMicroseconds(1);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(1);
  digitalWrite(TRIG,LOW);
  time = pulseIn(ECHO,HIGH);
  if (time > 0) {
    range = (time / 2) * 340 * 100 / 1000000;
    return(range);
  }else{
    return(9999);
  }
}  

 これを走り回らせると、次のようになる。

 これにカメラを積み込み……

虫瞰カメラ

 で、動画を撮影するわけだ。

 なかなか這いまわっている感じが出て、いいと思う。

Raspberry Piで温度を測ろう

投稿日:

 以前、Arduinoのアナログ入力にサーミスタをつなぎ、温度計にして遊んだ最近はLCDディスプレイに温度を表示してみたり、なかなか面白い。

 一方、Raspberry PiはWebによくなじむ。ApacheもPHPも走る。

IMG_3317 それで、先週宮城大学小島研究室のサイトで公開しておられるADCアクセスのためのソースコードを拝借して遊んだが、これを使ってWeb温度計にしてみた。

 まず、ブレッドボードにAD変換ICのMCP3208と、サーミスタ、分圧用の抵抗1kΩを置き、適切に配線する。これには、以前Arduinoで遊ぶために買った「Seeedstudio Arduino Sidekick Basic Kit」に入っていたMF11-503Kというサーミスタをそのまま使う。

 それから、C++でこんなプログラムを書く。先週も書いたが、宮城大学小島研究室のサイトで公開しておられるコードは、Raspberry Pi 1では何の支障もなく動くが、Raspberry Pi 2 Model Bではそのままでは動かない。一部の型キャストなどを変更する必要がある。それについては先週のエントリで記してある。

//
//    tempMesure.cpp
//      佐藤俊夫
//      Sun Sep  6 13:57:53 JST 2015
//      サーミスタMF11-503Kと1kΩ抵抗を直列につなぎ、3.3Vを印加して、
//      その間から分圧をとって温度を測る。
//      宮城大学小島研究室でウェブ公開しておられるソースコードを拝借した。
//      コンパイル
//        cc -lm tempMesure.cpp raspSPI.o raspADC.o -o tempMesure
//
#include <stdio.h>
#include <math.h>
#include "raspADC.h"

#define ADC_CHIP  ADC_3208
float tempMesure(int srcVal);

int main() {
  ADC adc;

  adc.init("/dev/spidev0.1", ADC_CHIP);
  printf("%2.2f\n", tempMesure(adc.get(0)));
}

float tempMesure(int srcVal){
  const float B = 4350.0, Ta = 25.0, Rt0 = 50000.0;  //  MF11-503Kスペックシート記載
  const float K = 273.15;  //  熱力学温度の定数
  const float v0 = 3.3, r0 = 1000.0;  //  Arduino +5Vと電流調整抵抗1kΩ
  const int resolution = 4096;  //  アナログ入力の分解能
  float vt = 0.0, rt = 0.0;

  vt = srcVal * (v0 / (resolution - 1));
  rt = (v0 * r0 - vt * r0) / vt;
  return(1.0 / (log(rt / Rt0) / B + 1.0 / (Ta + K)) - K);
}

 これは単に、サーミスタで計った現在の温度を標準出力に書くだけだ。

 これを「popen();」で開けば、PHPで読める。簡単である。

<html>
 <head>
  <meta name="Editor" content="vim">
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  <link rel="icon" href="favicon.ico" type="image/x-icon" />
  <link rel="Shortcut Icon" type="image/x-icon" href="favicon.ico" />
  <title>PHPで温度計</title>
  <meta http-equiv="Keyword" content="佐藤俊夫, 佐藤, 俊夫, SATOTOSHIO, SatoToshio, sato, toshio, Raspberry Pi, Raspberry Pi 2 Model B">
 </head>
 <body bgcolor="#888888">
<body>
  <center>
  <h1><img src="raspberry_pi.png" width="50px" align="middle"/>Raspberry Pi + PHPで温度計</h1>
  <hr>
  </center>
<?
ini_set( 'display_errors', 1 );
$process = popen("sudo /home/toshio/SPI_ADC/tempMesure", "r");
$temp = fgets($process);
?>
<center>
<table border=1 width="120px">
<tr> <th>0</th><th>10</th> <th>20</th> <th>30</th> <th>40</th> <th>50</th> <th>60</th></tr>
<tr><td colspan = 7>
<table>
<tr>
<td bgcolor="red" width="<?print $temp * 2?>px"><?print $temp?>℃</td&t;</tr></table>
</tr>
</table>
</td></tr></tr></table>
</center>
</body>
</html>

raspberry_tempMesure
 テーブルの幅を温度計のアルコール柱に見立てて、赤い帯で表すようにしてみた。


 Arduinoでも同じようなことはできるが、Arduinoで難しいのは、こういうふうに、無駄に画像を配置したり、少し分量の多いHTMLを書いたりすることだ。だが、こんなことはRaspberry Piには造作もなくできてしまう。

 反面、Arduinoはアナログ入力が直接可能だが、Raspberry Piで同じことをしようとすると、アナログ入力にAD変換ICを準備し、これとの通信にもいろいろと研究の上で取り組む必要がある。簡単で刺激的な目的のために少しプロトタイピングをしてみようと考えている多くのクリエイターがなしうるところではない。

 入門書籍「Raspberry Piをはじめよう」にもそうしたことが少し書かれてある。