TIM Labs

超小型のPCとして、Raspberry Pi と Arduinoの国産版の Marduino を入手し、さらに各種センサなどを集めている。

DSCN4544-600.JPG

センサ類は、ブレッドボードを使ってちょこちょこと動作確認している。

何しろ、センサは多種多様であり、普通に入手可能なものだけでも何十種類もあり、とてもではないが調べ尽くせない。

Raspberry Pi に繋ぐのと、Arduino に繋ぐ場合、回路が異なることが多い。

Raspberry Pi はデジタル(HIGH,LOW)だけで、アナログが扱えないのだが、かなりのセンサーはアナログ値で測定値を伝えてくる。

そういう場合は、DAコンバータ(デジタル・アナログ変換器)というICを使うことになり、周辺の回路が増えてくることが多い。

Arduinoの場合は、デジタルだけでなくアナログも扱えるので、DAコンバーターが不要となり、配線が楽になる。

センサは種類によってかなりの価格差があり、下は数十円から数千円までと幅が広い。

さらに、測定結果の精度を問題にしだすとどんどん価格が上昇する。

非常に安く買おうとすると、中国から品物が送られてくる確率が高くなり、説明書はもちろん、箱にすら入ってなくて、スーパーのポリ袋の不透明版にいきなり賞品が入っていて驚くことがある。

写真に写っているセンサは、受光、人感、距離、加速度、二酸化炭素濃度、温度=湿度=気圧センサである。

これからはIoTの時代。ソフトだけではなく、実世界の情報をセンサで集収し、分析し、通知はもちろん、さまざまな機器を動かすことになる。

ということで、次回から、このようなセンサ類についての扱いについて色々書いて行こうと思っている。

MIDIでは、音色というか楽器を非常に多数用意している。
何もしなければ、ピアノの音が出るようだが、次のように楽器の名前を指定すれば、その楽器で演奏してくれる。

Sound[SoundNote["C", 10, "Violin"]]

楽器の種類はMIDIなので、128種類ある。
以下が、指定可能な名称である。



"Accordion" "Agogo" "AltoSax" "Applause"
"Atmosphere" "Bagpipe" "Bandoneon" "Banjo"
"BaritoneSax" "Bass" "BassAndLead" "Bassoon"
"Bird" "BlownBottle" "Bowed" "BrassSection"
"Breath" "Brightness" "BrightPiano" "Calliope"
"Celesta" "Cello" "Charang" "Chiff"
"Choir" "Clarinet" "Clavi" "Contrabass"
"Crystal" "DrawbarOrgan" "Dulcimer" "Echoes"
"ElectricBass" "ElectricGrandPiano" "ElectricGuitar" "ElectricPiano"
"ElectricPiano2" "EnglishHorn" "Fiddle" "Fifths"
"Flute" "FrenchHorn" "FretlessBass" "FretNoise"
"Glockenspiel" "Goblins" "Guitar" "GuitarDistorted"
"GuitarHarmonics" "GuitarMuted" "GuitarOverdriven" "Gunshot"
"Halo" "Harmonica" "Harp" "Harpsichord"
"Helicopter" "HonkyTonkPiano" "JazzGuitar" "Kalimba"
"Koto" "Marimba" "MelodicTom" "Metallic"
"MusicBox" "MutedTrumpet" "NewAge" "Oboe"
"Ocarina" "OrchestraHit" "Organ" "PanFlute"
"PercussiveOrgan" "Piano" "Piccolo" "PickedBass"
"PizzicatoStrings" "Polysynth" "Rain" "Recorder"
"ReedOrgan" "ReverseCymbal" "RockOrgan" "Sawtooth"
"SciFi" "Seashore" "Shakuhachi" "Shamisen"
"Shanai" "Sitar" "SlapBass" "SlapBass2"
"SopranoSax" "Soundtrack" "Square" "Steeldrums"
"SteelGuitar" "Strings" "Strings2" "Sweep"
"SynthBass" "SynthBass2" "SynthBrass" "SynthBrass2"
"SynthDrum" "SynthStrings" "SynthStrings2" "SynthVoice"
"Taiko" "Telephone" "TenorSax" "Timpani"
"Tinklebell" "TremoloStrings" "Trombone" "Trumpet"
"Tuba" "TubularBells" "Vibraphone" "Viola"
"Violin" "Voice" "VoiceAahs" "VoiceOohs"
"Warm" "Whistle" "Woodblock" "Xylophone"

もうちょっと分かりやすいもとのしては、WikipediaのMIDIの説明がある。

これによると、琴、尺八、三味線、和太鼓が入っている。

Raspberry Piには、MIDIの音源チップが載っているようだ。
そして、多くの人は、Sonic Pi というRaspberry Pi にプレインストールされているソフトで遊ぶのが普通かもしれない。
しかし、ここでは別の方法でMIDIを操ってみよう。

せっかく Wolfram/Mathematica について書いてきたので、WolframでMIDIを操ってみよう。

音は、HDMIのディスプレイからでも、ラズパイのイアホンジャックからでも音は出せる。
どこから出すかの切り替えは、公式マニュアル(訳)のオーディオ設定を見て欲しい。

さて、Wolframで「ド」の音を出してみよう。実際には、"C"と書く。

Sound[SoundNote["C"]]

すると、次のようなものが現れ、左下の三角マーク(Play)を押すと音が出る。

Mathe-MIDI-C.JPG

右下に"1s"とあるが、これは1秒という意味である。

Raspberry Pi にLEDをつけたり、センサーを付けたり、その他何かつけようとすると、GPIOポートに対応するピンを探さないといけない。

GPIOボートの番号順にきちんと並んでいるわけではないので、覚えるのは面倒である。

本、雑誌、ネットなどに対応表がいっぱいあって、それらを開いたり、コピーしたのを開いたりしながら導線を繋ぐのが普通だ。

でも、これって、結構面倒である。

でも、Raspberry Pi には、とても便利なコマンドが用意されている。

pinout という、機能そのままの名前のコマンドがあり、以下のような表示が得られる。

raspberry_pinout.png

それからコマンドで直接、GPIOについて調べたり、設定したりする、gpio というコマンドがある。

詳細は省略するが、 -v オプションで、製造メーカなどが分かる。

pi@raspi1:~ $ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 3B+, Revision: 03, Memory: 1024MB, Maker: Sony 
  * Device tree is enabled.
  *--> Raspberry Pi 3 Model B Plus Rev 1.3
  * This Raspberry Pi supports user-level GPIO access.
pi@raspi1:~ $ 

今使っているのは、SONY製という事が分かる。
Raspberry Pi のボードを見ると、Made in the UK とある。

英国ウェールズのPencoed(ペンコイド)のSONYの工場で作られている。

それで、探していたら、

Making your Raspberry Pi 3B+ in Wales, UK

という動画があった。

Mathematica が Raspberry Pi で動くということで、ちょっと遊んでいるというか、調べている。

Mathematicaは、本来が数式処理システムなんで、さまざまな方程式を解いたり、曲面のグラフィックス表示をしたりは得意である。

今回は数学について色々なことができる、宿題の問題だって楽勝でできるなどのさわりを紹介しようと思う。

Mathe-FuncWave-Graph3D.png

曲面を表す式と値の範囲などを指定するだけで、こんな3D表示が簡単にできる。
もちろん、Raspberry Pi3+ で表示できる。

こんな簡単な曲面でなくてもOKで、さらに複数の曲面が空間で交わっていても大丈夫。さらに曲面毎に色を変えたり、透明度なども細かく調整ができるが、そんなことを延々と書くと切りがないのでやめる。

Raspberry Piに安価なLCDを繋いで表示テストで紹介した画像のLCD部分にこんなことを書いておいたが、気がついただろうか?

Mathematica-LCD-ZeroYen.png

「Raspberry Pi ノ Mathematica ハ タダ」と表示していたのだ。

Mathematicaは数式処理システムとして良く知られているが、使いたくても高くて購入を躊躇している人、会社が多いだろう。

しかし、Raspberry Pi 用のMathematicaは、ここに書いているように無料なのだ。

Raspberry Pi 上で動く特別な機能制約版があって、ほとんど何もできないのか、あるいは太っ腹で、特別な制限は何もなく、ただただRaspberry Pi の能力上の制約でできることが限られているのだろうか。そんなことを調べてみようと思う。

数式処理システムMathematicaで使われているプログラミング言語がWolfram Languageであり、考案者がStephen Wolfram、つまり考案者の名前がそのまま言語名になっているのである。

Raspberry Pi 向けのページも用意されているので、困ったときにはそこを見れば、かなり解決する。
何しろ、驚くほどのドキュメントが完備されている。

Mathematica-RaspberryPi-home.png

さて、車側ができたので、つぎはリモコン側の製作である。

車を制御するのに、どういう方法にするかは色々ある。
本格的な制御をするなら、本格的なゲームコントローラのようにしないといけないが、以下のような簡単な方法にした。

ボタンを5つならべ、

左回転、後退、停止、前進、右回転

とすることにした。
実は、『ラズパイマガジン1018年12月号』の「リモコン自走カー」の記事のリモコン制御ボタンの並びと同じである。

DSCN4105-600.JPG

並んでいるのは安いトグルスイッチ(袋に10個まとめて入って売られていた)で、押し下げている間だけ導通する。

これをブレッドボード上に並べ、各ボタンとそれに対応させるGPIOポートを導線でつないでいる。
黒はアース(GND)である。

Raspberry Pi 側の対応ポートを全部入力に指定することで、ボタンの押し下げ状態かどうかを読み取っている。
押し下げると、GNDに繋がることでLOWになり、そうでないときHIGHになる。

プログラムはこんな感じ。

    if GPIO.input(18) == GPIO.LOW:
        # 押し下げられたボタンに対する処理

実際には、この前に、使用するポートが入力のポートになることを指定しておく必要がある。

5つのボタンの状態を読み終えたら、0.1秒sleepすることにしている。
そんなに反応の早い車ではないので、この程度で十分人間には瞬時に反応していると思えるハズ。

Bluetooth通信がRaspberry Pi でできることが分かったのだが、Raspberry同士の通信ができると、色々な可能性が生まれるはずだ。

ということでもう一台Raspberry Pi を調達した。

DSCN4108-400.JPG追加購入したのは、左側の小さい方である。

より正確にいうと、右が Rapberry Pi 3 B+ であり、左が Raspberry Pi Zero WH である。

Raspberry Pi Zeroというだけでは色々なモデルがあり、価格もかなり違う。一番安いのは600円+税程度で買えるのだが、BluetoothとWifiがなく、ピンもついていない。
しかし、今回は通信テストを行うということで約2000円のを入手した。

2つの最大の違いは、メモリの容量で、3B+は1GB、Zeroは500MBと半分しかない。
また、コネクタを省略したり、小さいタイプに変更になっている。
HDMIなのだが、ZEROのコネクタはminiタイプで、普通はmini-標準の変換アダプタが必要になる。

どちらも、おなじLinuxベースのOSを入れて動かせるので、普通にbluetoothの通信をすんなり行える。
技術屋さんが相手なら、それだけで十分なのだが、一般の人、お偉い人々には通信ができているのかどうか分からないので、何か分かりやすい具体的な物を作って示さないといけない。

ということで、こんなのを作ってみた。

DSCN4103-600.JPG

Raspberry Piに色々なものが接続できることが分かってきた。

単機能のセンサーは、GPIOのおかげで、非常に簡単に接続できる。
それでも、Raspberry Pi はアナログを直接扱えないので、そういう場合には ADコンバータが必要になるが、実例が本、雑誌、ネットに多数あるので困ることはない。

ということで、もうすこし面倒なものを接続してみようと思ってしまった。

さて、週末に、ちょっと秋葉原に行ってきて、昔良く行っていた電気街などを回ってきた。つまり、ガード下の部品やとか、千石、秋月などのパーツ屋である。
もうちょっと離れたとこりに、ジャンク品を売っている店が昔は多数あったのだが、今はほとんど無くなったようだ

そういうことで、ちょっとふらふらしていたら、こんなものを見つけてしまった。

DSCN4074-450.JPG

これは、bluetoothのゲームコントローラの非常に小さく、そして安いやつである。

よく本や雑誌に取り上げられているのは、PS3のコントローラ「DUALSHOCK3」であるが、そういうのは中古でも結構する。

600円で売っていたので、つい購入してしまったが、実はアマゾンで同じものが333円で売られているのを発見し、がっかりしているところである。

写真はサイズが分かるように、5mm方眼紙の上に置いて撮影した。

下の中国語は、A4よりやや小さい紙1枚だけのマニュアルの折りたたんだ状態の表紙部分である。

IoTの世界の標準語は中国語なのだが、一応裏面は英語になっていたものの、そんな詳しい説明はない。

入手したものの、ちゃんと認識できるか不安である。
記事になっているようなゲームコントローラなら、記事を参考にプログラムを作れば良いだけであるが、こういう品物を買うと苦労もいっしょに買ってしまうことになる。

Raspberry Piを入手したら、まずはあれこれGPIOに繋いで、情報を取得したり、表示したり、モータを回したりなどするのが当然だろう。


Raspberry Piに、3.5インチのカラー液晶を繋ぐのは、単に差し込むだけで終わってしまうのでとても簡単で、何のお勉強にもならない。
しかし、IoTをやろうとすると、もっと簡易で安い超小型液晶、つまり壊しても気にならないくらい安い液晶に、センサーから得られた値を表示するなどが普通だろう。
ということで、とても安い、2行16文字表示しかできない500円ほどで入手できる液晶表示モジュールを買って動かしてみた。

LCD2L-disptest−600.JPG回路はラズパイマガジン2018年12月号を参考にし、プログラムはラズパイマガジンのWEBサイトからダウンロードし、液晶動作チェックと無関係な部分を全部削って動かしてみた。

液晶上に表示できる文字は、用意されている256個のパターンだけで、英数字記号(ASCII)、カタカナとアクセントなどが付いた英小文字、数学記号などである。
カタカナで濁点、半濁点があると2文字に分けて液晶に送ってやらないといけなくて面倒である。
それだけではなく、2行16文字を意識して表示を制御するプログラムを書くのはとても面倒なので、用意されていたこの液晶(AQM1602)用のモジュールを使い、文字列を送って表示しただけである。

右の赤いボタンは、2行に収まらない文字列の場合には、2行いっぱいまで表示し待つようにしていて、スイッチが押されたら1行だけスクロールして次行を表示するようにしてみた。

表示している文字は、"Raspberry Pi ノ Mathematica ハ タダ" である。

月別 アーカイブ