チラシのうら

レゴとか、工作とか。

brickpino製作日誌 その4

ハンダで結線開始!

苦手分野です。 ここだけで失敗2回、約2週間(土日のみですが)のタイムロスとなりました。

失敗1

f:id:tetunori_lego:20150619205525j:plain
この図の通りにハンダ付け。
ピンソケットにピンヘッダをさして、ブレッドボードに固定しながらハンダ付けしてました。
そしたら、下処理の甘さが露呈しました
ピンソケットのピンを切りすぎて、穴が空いており、そこにハンダが流れてしまいました。 f:id:tetunori_lego:20150619073305j:plain
結果、ピンヘッダが抜けなくなり、使えないので、1からやり直し。

失敗2

上記の図の通りにハンダ付け。
それ自体はうまく行ったのですが、図の通りにやると、ピンソケットにハンダを盛ることが多くなり、結果、盛りすぎてレゴの中に入らなくなりました。
修正も試みましたが、ダメでした…
この辺でかなり心折れかけました。

三度目の正直

失敗2から学びました。
結線図とは異なりますが、二本以上の結線は、8pinoから直接出るようにしました。 さすがにハンダ着けも慣れてきています。

まずは8pino側。
f:id:tetunori_lego:20150619201804j:plain
表。虫みたいだ。

f:id:tetunori_lego:20150619201820j:plain
裏。8pino虫。

ちなみに、電源/GND回りは細い線だと不安なので、赤/黒の線を調達しました。ゴミになってたiPod shuffleのusbケーブルを引き裂いて、取り出してねww

ピンヘッダ結線

今回は無事できました。
ちゃんと結線出来たかの確認のため、テスターも買いました。
ショートしてたハンダをカッターで切ったりして、完成です!
f:id:tetunori_lego:20150619203908j:plain
集中力使い果たす…

f:id:tetunori_lego:20150619204555j:plain
ちゃんとレゴの中に格納でき、別のブロックとも組む事ができます。ブレッドボードにさしても、ピンなんか全然見えません!

早速動かしてみたいですが

慌ててはダメです。前準備が必要です。
詳しくは次回。

brickpino製作日誌 その3

今回で

回路回りは確定させたいと思います。

前回、 でMESHとの接続部は確定したのですが、(やったことないけど)実際に挿すと、ジグでも挟まないかぎり、各Pinにはアクセス出来なくなります。

ブロック内に収まるピン数は、 の回で投稿したとおりです。

この離れ小島のようなピン5本は、恐らくMESH挿していてもアクセス出来るはずですので、こちらを活用することにします。 f:id:tetunori_lego:20150619070049j:plain

どのピンを外に出すか?

MESH GPIO Tag Pin 8pino Pin 外に出したい度
Pin 1 : Vout Vcc 出来れば
Pin 2 : Din PB0 是非欲しい
Pin 3 : Din Vusb(brickpinoのみ) MESHと排他利用のため、不用
Pin 4 : Din PB1 是非欲しい
Pin 5 : GND GND 必須
Pin 6 : Dout PB3 不用
Pin 7 : Dout PB2 出来れば
Pin 8 : Dout - 不用
Pin 9 : Ain PB4 是非欲しい
Pin10 : PWMout Reset 不用

うーん、残念。
欲しいピンが6本あります。
Vccは外から供給しても良いかなぁと考え、この5つPB0, 1, 2, 4, GNDを選択しました。

お待たせしました

結線図です。 f:id:tetunori_lego:20150619071528j:plain ヒドイ(笑)
字と絵は子どもの頃から下手くそです。
スマホからこういう結線図書くのに良いアプリないかな?
PCだったら、皆良く使っている、
fritzing
が、なんかおしゃれ感あって良さそう。

結線(決戦)に向けて

figpinoの事を考えると、結線に使う線材(?)は出来るだけ細いのにしたいです。

知見が無かったのですが、以前、Any Tokyo 2014

「Any Tokyo」 暮らしにイノベーションを起こすデザインやアイデアが集結するイベント f:id:tetunori_lego:20150619075541j:plain

に行った際に、8pinoが展示してあって、その時にめちゃくちゃ細い線で繋がっていたのを思い出しました。 f:id:tetunori_lego:20150619075559j:plain

少なくともこういうのがあるはずだ、と調べてみて、こちらを採用しました。

なんとポリウレタン塗装のため、基本、絶縁されていて、ハンダを着けるとそこだけ導通すると言う優れものです。

これを使って、いよいよ結線に望みます。

brickpino/figpino製作日誌 その2

今回は

ピン配置特別記念、初の合併号です。
とにかく、要件を満たすピン配置を実現することをテーマにお送りします。

明らかにfigpino×MESH GPIO tagの組合せが一番厳しそうなので、まずはここから着手してみます。

MESH GPIO tagのピン配置

MESH GPIO FAQに詳細が書いてあります。
下記の通りにMESH側のピンアサインを重畳させてみました。
f:id:tetunori_lego:20150617202153j:plain

figpinoの足裏のピンは、下記の画像の青枠部にはまることになります。
つまり、×を書いた3, 8番ピンはfigpinoでは使えません。
f:id:tetunori_lego:20150617203023j:plain
ここで偶然助かったのは、VとGNDがちゃんと青枠内に収まっていることです。この偶然がなければ、figpinoは存在しなかった事でしょう。

どの8pinoピンに繋ぐか

VとGNDは良いとして、他の6ピンの扱いを考えます。

以下が考慮すべき項目

双方のOUT同士は結線すべきでない。

MESHから指示・トリガを受け取った8pino側で何らかの機能を実現するには、8pinoのピンに他の部品を繋ぎ、制御しなければなりません。
f:id:tetunori_lego:20150618080125j:plain
MESH GPIO tagに繋ぐのとはまた別のピンが必要になりますが、それは別の会で後述します。

その際、Out pin同士がぶつかってはいけない気がするので、8pinoでOut pinとして使いたい場合は、MESHのIN pinに繋ぐ必要があります。

よく使う8pino Out Pinを順に並べると、

8pino OUT出来るピン 使用頻度
PB0 よく使う
PB1 よく使う
PB2 まれに使う
PB3 ほとんどの使わない
PB4 よく使う

ただ、PB2はI2Cで使うため、無視は出来ません。MESHからはI2C制御出来ないと思うので、このピンもOutに出来ることが、brickpino/figpinoの魅力となります。

USB D+/D-

何て事はないですが、ブレッドボードに挿したとき、firmupしやすい様に、PB3, 4は同じ列にあって欲しい。

USB VBus

brickpino限定の話ですが、ちょうどDinピンが一個余ってるので、Vbusはこちらに結線します。

PWMの扱い

これを直接8pinoに繋いでworkする保証がないので、無難にResetをアサインします。
AnalogRead()で値取れたりするのでしょうか?

結果、こう接続します

MESH GPIO Tag Pin 8pino Pin
Pin 1 : Vout Vcc
Pin 2 : Din PB0
Pin 3 : Din Vusb(brickpinoのみ)
Pin 4 : Din PB1
Pin 5 : GND GND
Pin 6 : Dout PB3
Pin 7 : Dout PB2
Pin 8 : Dout -
Pin 9 : Ain PB4
Pin10 : PWMout Reset

図にすると、こう。
f:id:tetunori_lego:20150618072411j:plain

PB2に関しては、やむなくって感じです。PB2をOut Pinとして使う際は、ジグなどを挟むことにしました。

これで

brickpino/figpinoに共通した、MESH GPIO Tagとの接続部は確定しました。
さらに詳細な結線仕様については、個々の製作日誌で記載します。

figpino製作日誌 その1

brickpinoに続いて

並行してfigpinoについても、製作日誌を始めます。すぐに中断しちゃうと思いますが。

figpinoのバージョン

実は、figpinoには下記の2つのモデルが存在します。
1. figpino - model ghost
2. figpino - model darth vader
の2つです。
f:id:tetunori_lego:20150617065714j:plain
合成画像です。

この2つを選んだのには理由があります。

そもそもの課題

皆様、ミニフィグを観察したことは、ございますでしょうか?
小さいながらも汎用性、ポーズの自由度を高めるために、かなり内部は込み合 っています。
f:id:tetunori_lego:20150617065901j:plain
brickpinoの時の様に、中身がスッカスカではないため、
A. 8pinoを入れる空間
B. 配線を通す隙間
について、配慮が必要です。

また、figpinoは足からピンヘッダを出す予定でしたが、8pinoの8ピンで全て埋まってしまいます。
しかしfirmupするためには、
C. USBのVBusを1本外に出す
必要があります。 f:id:tetunori_lego:20150617071040j:plain

解決策

model ghostの場合

A.への対策

頭部~胸部にかけて、お化け布(何て言うの?シーツ?)に覆われているため、多少、中を削っても良さそう。頭無くせば、8pino入りそう。

B.への対策

お化け布のシワの部分が、うまいこと頭部から足元まで通るトンネルになっているので、ここに配線を通せる。 f:id:tetunori_lego:20150617071649j:plain

その他(ホントの理由)

そもそも、造形的に好き。
誤って壊しても良い位、数のあるのも大きい。

model darth vaderの場合

A./B.への対策

マントがついているので、最悪フィグの外に8pino配置も可能。ズルいけど。
また、特徴的なヘルメットは、何を隠すのにも便利。

その他(ホントの理由)

2015年はStar Wars year。
取り付けた圧電スピーカーから The Imperial March (Darth Vader's Theme)を流す場面が浮かんだ。

共通施策

C.への対策

これは、結果から言うと、こうです。(笑) f:id:tetunori_lego:20150617072343j:plain
急に人造人間っぽくなり恐縮ですが、頭からVBusを供給することにしました。

こうした理由は単純にインパクトあるのと市販品を活用出来る点です。

レゴのキーリングをHackしてみる

レゴの専門SHOPである、クリックブリックには、多種多様なレゴのキーリングがあります。
今回の対象である、ghostもdarth vaderもあります。
f:id:tetunori_lego:20150617075231j:plain
これは、一番大好きなストームトルーパー。白黒のバランス、造形の美しさ…完璧です。

どのキーリングも頭からお腹位までネジが入っていて、接着剤で固定されています。
熱を加えると外れる、とYahoo!知恵袋が仰るのでハンダごてを使ってやってみました。
おぉ、簡単! f:id:tetunori_lego:20150617080704j:plain

頭の輪っかを暫く熱した後、引っ張るとぬるぬると抜けてきます。
フィグも溶かしてしまわないよう、注意が必要です。

ネジが抜けた穴には、ピンヘッダ位は余裕で入りそうです。

余談ですが

最近のキーリングのフィグの内部構造は、特殊なものになっていました。
首の部分が、胴体ではなく、足と一体化しています。
恐らく、足もネジで固定出来るように特化した、と言うことでしょう。
f:id:tetunori_lego:20150617080720j:plain

ちなみに、本家のフィグではアナキンの傷ついた顔も再現しているのですが、キーリングではプリント無しでした。
ま、普通の人はネジ抜きませんからね~。

次回は

brickpino同様に、ピン配置について検討してみます。

brickpino製作日誌 その1

前回の投稿

で宣言した通り、早速brickpinoを作っていきたいと思います。

最初の壁

この間はピンヘッダが入って浮かれていましたが、実は肝心の8pinoが、サイズ的にブロックの中に入りませんでした。(笑)
f:id:tetunori_lego:20150617062258j:plain

普通ならプロジェクト消滅の危機な訳ですが、怪我の巧妙とはまさにこの事。
以前、8pinoが壊れた時、USBコネクタ無しでもfirmup出来るようにソリューションを構築していました。

もはや、ホラー映画

と言うわけで、8pinoのUSBコネクタ部を切り離してみます。
888円が無駄になる可能性大のため、手が震えます。OKストアならポテチが10袋は買える金額です、手が震えます。

前に壊れた8pinoがあることに気が付いたので、実験に使ってみます。
カッターで何回も切り込みを入れて(全然切り込みつかなかったです。無意味?)、最後はニッパでパツン!

結構、いい感じです。 本番環境でも恐る恐るやってみた結果がこちら。
f:id:tetunori_lego:20150616071431j:plain
f:id:tetunori_lego:20150616071854j:plain
これで、十分にレゴブロックの中に入るサイズとなりました。

汎用性の確保

今度は、ピンヘッダの件です。
実際にピンヘッダはブロック内に収まったのですが、これを入れたままだと、他のブロックと組む事が出来ません。
また、ブロックの下からピンヘッダの足が見えてしまうのも、何とか避けたい。 レゴ好きとして、譲れないこだわりです。
f:id:tetunori_lego:20150617062334j:plain

かといって、ピンソケット側は大きすぎて、全然ブロックの中には入りませんでした。
f:id:tetunori_lego:20150617062400j:plain

色々探すと、丸ピンヘッダ(とソケット)と言うものがあるそうで、こちらは省スペースでレゴの中にも入りそうです。

早速仕入れました。

入らねーじゃねーか=3

確かに、丸ピンはこれ以上無い位の良いソリューションでした。
が、横5本は入るものの、ピンソケットの縦方向が長いようで、レゴブロックの中央の円柱にあたり、角に2×2の大きさが入りません。 f:id:tetunori_lego:20150617062421j:plain

断腸の思い

これ以上、考えるのも面倒になったので、断腸の思いで、真ん中の円柱を取り去る決断をしました。
これがなくても、何とか他のブロックと組む事は可能です。
でも、ほんと、泣く泣くです。出来ればこんなことはしたくない。

ブロックの円柱はペンチで、割りと簡単に綺麗に破壊出来ます。
f:id:tetunori_lego:20150616183321j:plain
ペンチでグニュっと挟んだ後、クネクネしていると… f:id:tetunori_lego:20150616183334j:plain
パラパラと、剥がれ落ちます。どうしてもブロック側にもお残りが発生するので、綺麗に除去してください。後で8pino入らなくならないように。

丸ピンソケットの処理

丸ピンソケットの足は、穴が貫通しない程度にニッパでギリギリまで切り落とします。
穴が開いてしまうと、最終的にハンダ付けした際に穴の中にハンダが流れていって、私の様に2週間位の時間を無駄にすることになります。
f:id:tetunori_lego:20150617064951j:plain

いったん、ブレイク

今までの部品を組んでみて、レゴブロックの中に入るか確認します。
f:id:tetunori_lego:20150616184034j:plain
いい感じに入ります!
見たところ、8pinoへの配線等を考慮すると、ピン数の上限は15本と言うところでしょうか。

次回は

そのピン配置について考えてみます。

新しい(ぼっち)プロジェクトの宣言

先日まで

は8pinoの基本を学んで来ましたが、いよいよ8pino(の小ささ)を活かした、物作りを実践していこうと思います。

そして、結果から言うと、失敗して心がポキッとなっています。

何を作ろうか

構想はあります。
きっかけは、ずっと前の、レゴで遊んだ投稿 です。
当時は「8pinoってギリギリ、レゴに入る大きさだな」位にしか思っていませんでした。
後日、何の気なしに、ピンヘッダをミニフィグの足に入れてみたら、ブレッドボードにぴったりはまるではありませんか!
しかも、8pinoのピン数と同じ8本!! f:id:tetunori_lego:20150616062636j:plain

「あれっ、これは、8pinoを使えばレゴの世界に電子工作を持ち込めるのでは…」 と、洗濯板みたいに薄っぺらい胸が高鳴ります。
既にマインドストームとかあるのは気にしない。だって高いし~。

ためしにブロック側にもピンヘッダ入れてみると、 f:id:tetunori_lego:20150616062247j:plain

おおっ、ぴったり5本分だ!
何てクールなんだ!

別の構想

上記の5本×2列のピンヘッダを見ていると、何かが思い出されますよね?
そう、それです、MESHのGPIOタグです。
http://d1snu2um2qo33r.cloudfront.net/img/product/tag/img_advanced_02.png
MESH pjの画像をリンクして表示しております。 MESHをご存じない方は↓にアクセス!

もともと、

  1. MESHのGPIOタグでも、難しい制御ができるようにしたい。
  2. 8pinoを簡単に無線化したい。

と言う2つの欲求があったので、これらを解決するツールとして動くような物を作りたい。

(あいにく、MESHのGPIOタグは持っていないので、想像図ですが、)直接的にくっつける事が出来ると、何か面白そうです。ワクワクします。
f:id:tetunori_lego:20150616061747j:plain

ゴール作品の要件をまとめる

  1. レゴブロック、レゴミニフィグの中に8pinoをいれる。
  2. 使うときは、ハンダ無しで、簡単にブレッドボードと接続出来ること。
  3. MESH GPIOタグとピンコンパチ(って言うのであってるのかな?)にする。
  4. レゴの汎用性、連結性は出来るだけ損なわないこと!

僕の悪い癖、発動

何事も、まずは名前決めとロゴ製作から始めてモチベーションを高めます。

プロジェクト名

1. レゴブロックのやつ

商標は使いたくないので、legoは除外。 とすると、brickしか残りません。
最初はbrickduinoが良いと思ったのですが、残念ながら、ググると先に使ってる方がいらっしゃるので、不採用。
結果、8pinoへの尊敬の念も込めて、brickpinoとしました。

うん、語呂、悪い。

2. レゴ ミニフィグのやつ

brickpinoとの連帯感を出すため、minifigpino、もとい、figpinoとします。

プロジェクトロゴ

お絵描きソフトなんかもっていないので、皆大好きパワポの図形を使って書きます。
"8pino inside"であることを暗示しています。(相当こだわりました。)
あと、フォントを真似てみたのですが、vitro/8pinoさんとは、一切関係ありません。全くの非公認・勝手プロジェクトです。
vitro/8pinoさんが嫌がったら、即座にロゴも取り下げます。

brickpino

f:id:tetunori_lego:20150615070951j:plain
水色のやつが良いかなぁ。

figpino

f:id:tetunori_lego:20150615071018j:plain f:id:tetunori_lego:20150615071733j:plain
一応カラーバージョンも用意してみた。

さぁ、ロゴも出来たし

次回からbrickpino/figpino製作日誌をお送りします。

8pinoで測距センサーを使ってみる

本日も

研修でもらった部材で勉強します。 今回は最後の一点、こちらの測距センサーです。 本当の事を言うと、先週の時点で真っ先に試していたのですが、何をどうしても動作せず、部品が故障していると思っていました。

一緒の研修に行った会社の後輩から、同じ部品を貸してもらって、再チャレンジしてみました。

で、

それでも、動きません

これは故障では無いなと感じたものの、接続先のピンを変えても、ケーブルを変えても、一向にセンサーの値っぽいものは出てきません。

落ち着いて、先人の知恵を借りましょう。

間違えてた

こちらの投稿にヒント(と言うか答え)が。

AD変換といえば、8pinoのGPIOのピン番号は違うっていうのにさっきハマりました。#2のポートだからanalogRead(2);ってすると間違い。 #2はA1なのでanalogRead(1);

ん?

どうやら、

pinMode()と、analogRead()で指定するピン番号は、意味合いが違う様だ。
確かに、今まで気にしていなかったが、8pinoのケースに、ちゃんと書いてあるではないか。 f:id:tetunori_lego:20150608072732j:plain 8pinoのピン番号とアナログピン?対応の図

どうりで、動かないはずです。 ピン番号のdefineを両方にぶちこんでましたから。

距離がとれた

仕組みが解ると、今までが嘘のように簡単に動かす事が出来ました。
私の環境では、PB2(A1)を使っています。
デバック的に、SoftwareSerialに値を出力させてみると見事それらしい値が出てきました。

取得した値から距離への変換は、こちらのblogにあった、以下の変換式をで行います。

distance = (6762/(dist_sensor_pin_val-9))-4;

5cm~25cm位まで割りと正しく取得出来ます!

配線時の注意

こちらのモジュール、一件何も問題ない様に見えますが、 f:id:tetunori_lego:20150608074321j:plain
実は、黒:V、オレンジ:GNDとなっています。
大変気持ちが悪いので、私はジャンパケーブルで色を逆にしています。 f:id:tetunori_lego:20150608074838j:plain

デモ

距離に伴って、LEDを光らせ、さらにブザーから音を出します!
結果、子供ウケは今までの中で一番良かったです。

動画

テルミンっぽい、何かが出来上がりました。
後半、素早く手を降ったときの音は、中高の頃必死に練習したが全然弾けなかった、洋楽のギターソロ(インペリテリ的な) を彷彿とさせます。

配線図

f:id:tetunori_lego:20150608074221j:plain

コードはこちら

/*
  Distance Sensor test
 */

// #define _8PINO_SOFTWARE_SERIAL_DEBUG

#include <SoftwareSerial.h>

/*************************************************
* For Adafruit NeoPixel
*************************************************/
#include <Adafruit_NeoPixel.h>
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
 #include <avr/power.h>
#endif

#define NEOPIXEL_IN_PIN 0
#define NUM_OF_PIXELS 16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel( NUM_OF_PIXELS, NEOPIXEL_IN_PIN );

#ifdef _8PINO_SOFTWARE_SERIAL_DEBUG
#define _8PINO_SOFTWARE_SERIAL_PIN_RX ( 3 ) 
#define _8PINO_SOFTWARE_SERIAL_PIN_TX ( 1 ) 

#define _8PINO_PRINT_NEOPIXEL_RING_CONTROL ( "\r\n  Neopixel Ring -> " )

#define _8PINO_PROMPT_STRING ( "\r\n8pino > " )

SoftwareSerial mySerial( _8PINO_SOFTWARE_SERIAL_PIN_RX, _8PINO_SOFTWARE_SERIAL_PIN_TX );
#endif

#define DISTANCE_MEASURE_SENSOR_PIN 2


#define _8PINO_TONE_SPEAKER_PIN_1 ( 1 )
#define _8PINO_TONE_SPEAKER_PIN_2 ( 4 )

#define _8PINO_TONE_START ( 0x00 )
#define _8PINO_TONE_STOP  ( 0x01 )

#define _8PINO_TONE_NOT_USED ( 0 )

#define _8PINO_TONE_DO_2    ( 238 )
#define _8PINO_TONE_RE_2    ( 212 )
#define _8PINO_TONE_MI_2    ( 189 )
#define _8PINO_TONE_FA_2    ( 178 )
#define _8PINO_TONE_FA_SH_2 ( 168 )
#define _8PINO_TONE_SO_2    ( 158 )
#define _8PINO_TONE_SO_SH_2 ( 150 )
#define _8PINO_TONE_RA_2    ( 141 )
#define _8PINO_TONE_SI_FL_2 ( 133 )
#define _8PINO_TONE_SI_2    ( 126 )
#define _8PINO_TONE_DO_3    ( 118 )
#define _8PINO_TONE_DO_SH_3 ( 112 )
#define _8PINO_TONE_RE_3    ( 106 )
#define _8PINO_TONE_RE_SH_3 (  99 )
#define _8PINO_TONE_MI_3    (  94 )
#define _8PINO_TONE_FA_3    (  89 )
#define _8PINO_TONE_FA_SH_3 (  83 )
#define _8PINO_TONE_SO_3    (  79 )
#define _8PINO_TONE_SO_SH_3 (  74 )
#define _8PINO_TONE_RA_3    (  70 )
#define _8PINO_TONE_SI_FL_3 (  66 )
#define _8PINO_TONE_SI_3    (  62 )
#define _8PINO_TONE_DO_4    (  59 )
#define _8PINO_TONE_DO_SH_4 (  55 )
#define _8PINO_TONE_RE_4    (  52 )
#define _8PINO_TONE_MI_4    (  46 )
#define _8PINO_TONE_FA_4    (  44 )
#define _8PINO_TONE_SO_4    (  39 )
#define _8PINO_TONE_RA_4    (  34 )



void setup()  
{
  
  pinMode( NEOPIXEL_IN_PIN, OUTPUT );
  pinMode( DISTANCE_MEASURE_SENSOR_PIN, INPUT );
  pinMode( _8PINO_TONE_SPEAKER_PIN_2, OUTPUT );

#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
  if( F_CPU == 16000000 ) clock_prescale_set( clock_div_1 );
#endif
  pixels.begin();
  pixels.setBrightness(10);
  pixels.show(); // Initialize all pixels to "off"
  

#ifdef _8PINO_SOFTWARE_SERIAL_DEBUG
  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("");
  mySerial.println("--- 8pino. Distance Sensor Test. ---");
#endif
  
  // Configure Registers for PWM of PB4(PIN No.4)
  //  1. Comparator A Mode -> Set the OC1A output line.
  //  2. Time/Counter1 Prescale Select -> 8MHz/256 = 32KHz.
  //  3. Enable Pulse Width Modulator B.
  //  4. Comparator B Mode -> Set the OC1B output line
  TCCR1 = _BV (COM1A1) | _BV (COM1A0) | 
             _BV (CS13) | _BV (CS10);
  GTCCR = _BV (PWM1B) | _BV (COM1B1) | _BV (COM1B0);
  
}

void loop() // run over and over
{
  
  int i = 0;
  char tmpStr[5];
  int dist_sensor_pin_val = analogRead( 1 );
  int distance = 0;
  if( dist_sensor_pin_val < 10 ){
    distance = 6758;
  }else{
    distance = (6762/(dist_sensor_pin_val-9))-4;
  }
  
  itoa( distance, tmpStr, 10 );
#ifdef _8PINO_SOFTWARE_SERIAL_DEBUG
  mySerial.write( "\r\n" );
  mySerial.write( tmpStr );
#endif
  
  // Show LED
  showIndicator( distance );
  
  delay( 100 );
  
}


// From 5 to 30
void showIndicator( int distance ){
  
  int i = 0;
  
  // Initialize
  for( i = 0; i < NUM_OF_PIXELS; i++ ){
    pixels.setPixelColor( i, 0, 0, 0 );
  }
  
  // Clipping..
  int top_index = distance / 2;
  if( top_index < 1 ){
    top_index = 1;
  }else if( top_index > 15 ){
    top_index = 15;
  }
  
  top_index = NUM_OF_PIXELS - top_index;
  // sound
  soundIndicator( top_index );
  
  // LED
  for( i = 0; i < top_index; i++ ){
    pixels.setPixelColor( i, 255, 255, 255 );
  }
  
  pixels.show();
  
}

void soundIndicator( int index ){
  
  int note = 0;
  
  switch( index ){
    case 1:
    default :
      note = _8PINO_TONE_DO_3;
      break;
    case 2:
      note = _8PINO_TONE_DO_SH_3;
      break;
    case 3:
      note = _8PINO_TONE_RE_3;
      break;
    case 4:
      note = _8PINO_TONE_RE_SH_3;
      break;
    case 5:
      note = _8PINO_TONE_MI_3;
      break;
    case 6:
      note = _8PINO_TONE_FA_3;
      break;
    case 7:
      note = _8PINO_TONE_FA_SH_3;
      break;
    case 8:
      note = _8PINO_TONE_SO_3;
      break;
    case 9:
      note = _8PINO_TONE_SO_SH_3;
      break;
    case 10:
      note = _8PINO_TONE_RA_3;
      break;
    case 11:
      note = _8PINO_TONE_SI_FL_3;
      break;
    case 12:
      note = _8PINO_TONE_SI_3;
      break;
    case 13:
      note = _8PINO_TONE_DO_4;
      break;
    case 14:
      note = _8PINO_TONE_DO_SH_4;
      break;
    case 15:
      note = _8PINO_TONE_RE_4;
      break;
  }
  // _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP );
  _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, note, _8PINO_TONE_START );
}

void _8pinoTone( int pin_speaker, uint8_t freq, uint8_t startstop ){
  if( startstop == _8PINO_TONE_START ){
    pinMode( pin_speaker, OUTPUT );
    // if( pin_speaker == _8PINO_TONE_SPEAKER_PIN_1 ){
    //   OCR0A = freq;
    //   OCR0B = OCR0A - 1;
    // }else{
      OCR1C = freq;
      OCR1B = OCR1C - 1;
    // }
  }else{
     pinMode( pin_speaker, INPUT );
  }
}

今回で

「8pinoで勉強してみるシリーズ」は一旦終わりとさせていただきます。
不定期に再開するかもしれませんが。

何となくの使い方は解ったので、今後は、8pinoの小ささを活かしたOutputを出していきたいと思います。