IchigoJamで遊ぶ・その5 「7セグディスプレイを使う」

(投稿日:2016-04-06)

なんだか久々になりましたが、今回は7セグメント(略して7セグ)LEDを使ってみたいと思います。
ええ、また光りモノですとも。

7seg
7セグというのは、こういう「日」の字型になっている、よく見かけるお馴染みのやつです。
光る棒の部分が7本あるので7セグメント。
小数点のドット部分を入れると8セグメントですけどね。

(ドットのことは忘れて)これを制御するには7本の信号が必要になるんですけど、ここで困った問題が。

Ichigo Jamには出力ポートが6つしかない!

さて、どうしましょう?

※ Ichigo Jam も日々進化しており、新しいバージョンでは出力ポートはもっと増えています。

7セグメントデコーダを使う

しかし、世の中には便利なものがあるものです。
汎用ロジックICの中に、その名も7セグメントデコーダという7セグ用の「74HC4511」というICがありますので、これを使いましょう。

74HC4511
これが「74HC4511」です。
足が16本あります。

74hc4511ds
(日立(現ルネサス)のデータシートから引用)

構造はこんな感じになっていて、左側のABCDの4ビットを使って0から9の信号を入力すると、それに対応した7セグ用の信号が右側のa~gから出力されます。
入力が4ビットなので、これを使えば4本の出力ポートで7セグ表示が可能になるというワケです。

他に、このICが動作するためには電源も必要なので、VCCには電源を接続します。
LT,BT,LEといったのは制御用?なので、今は特に気にしなくても良いかと。

ちなみに、10以上の信号を入力(4ビットなので15まで入力可能)した場合、全てのセグメントが消えて何も表示されません。

BASICで制御する

kairo

というわけで、74HC4511と7セグLEDをこんな感じで接続します。
LT,BT,LEは、VCCやGNDに固定します。
(本当は他にも抵抗やらコンデンサやらを追加した方がいいんだと思いますが省略しています)

あとは、表示したい数字をOUT命令に指定すれだけでOK!
OUT命令はパラメータが1つだと、2ビット化して各ポートに出力してくれるためです。

早速、「OUT 1」を実行してみると・・・
7seg_1
この通り。

7seg_2
「OUT 9」だとこうなります。
下の横棒が光らないデザインですね。

7seg_a
「OUT 10」とすると何も表示されません。

プログラムでグルグル回してみます。

電子ルーレット

グルグルカウントするだけでは面白くないので、電子ルーレットみたいなのを作ってみました。

本体のスイッチを押すとルーレットが遅くなっていき、最後に出目の数値か点滅します。

数値はカウントアップではなくランダムです。

「ルーレットなら、別に7セグ使わなくても画面で表示すればいいじゃん」 とか言われそうですけど、それを無理矢理作るのが電子工作なのです。
・・・ほんとかよ(笑)

というわけで、ではまた。

投稿者:

IchigoJamで遊ぶ その4 アナログ入力で温度計

(投稿日:2016-03-18)

IchigoJamには(あのRaspberry Piにも付いていない)アナログ入力が備わっていて、0V~3.3Vの範囲の電圧を0~1023の数値として取得できます。
今回はこのアナログ入力を使ってみようと思います。

アナログ温度センサで温度を測る

IMG_8590_
見た目はトランジスタみたいですけど、温度センサです。
(この形だとトランジスタだと思っていた時期が私もありました)

これはTMP36というアナログ温度センサで、この三つある足のひとつから、温度が25℃の時には750mVが出力され、そこから温度が1℃変わる毎に電圧も10mV増減します。
なので、この足をIchigoJamのアナログ入力につないで電圧を測れば、温度が分かるというわけです。
(ちなみに残り2本の足は、電源とGND)

ondo
例によってつなぎ方はこんな感じ。

TMP36のVoutというのが温度の出力で、Vsが電源です。
今回はIN2のアナログ入力を使うので、VoutとIN2をつないでます。

IMG_8608_
実際の接続はこんな感じ。

アナログ入力の値はANAという関数で調べられるので、早速取得してみます。

tmp36
IchigoJamのアナログ入力は0~3.3Vが1024段階なので、1段階あたりは 3.3V ÷ 1024 ≒ 0.0032V =3.2mV。
アナログ入力の値が225ということは、3.2mvをかけると720mv。

25℃の時の750mVとの差は-30mVなので、温度は22℃という事になります。
若干肌寒い。

IMG_8610_
温度計で測ってみると22.8℃。
まぁまぁ近い値でした。

温度計プログラム

しかし、いちいちアナログ入力の値を調べて計算するのは面倒なので、こういうことはコンピュータにやらせましょう。

20行目、IchigoJamは小数を扱えない(たぶん)ので、アナログ入力の値に3.2mV分の32を掛け、500mV分の5000を引いておきます。
この値を100で割ると温度が求まるハズ。
40行目や60行目で、100で割ったり余りを求めたりして小数1桁まで表示してます。
温度の数字以外何も出さない、手抜きプログラムです。

では、実行~。

速すぎっ!
こんな温度計はせわしなさすぎる。

というわけで、途中にウェイトを入れて調整。

まだ速い気もしますけど、そこはWAITを調整かな。
単にWAITを入れるだけではなくて、待ってる間にも値を測定し、それを平均化したものを表示するのが良いかもしれない。

温度計の分解能

温度計を動かしていると、値はころころ変わるわりに、小数部分は同じ数字ばかり出てきます。

これは、IcihgoJamのアナログ入力の分解能が約3.2mVであるのと、温度センサの1℃あたり10mVという仕様とが相まって、約0.3度単位でしか温度を測れないからでしょう。

もっと細かく温度を測ろうと思ったら、センサを1℃あたり20mVとかのものに換えたり、出力電圧を増幅したりが必要かと。

あるいは、上に書いた平均を求めるようにプログラムを改造しても、ある程度は細かくなりそうな気がします。

投稿者:

IchigoJamで遊ぶ その3 信号機を作る

(投稿日:2016-03-16)

信号機っぽいものを作ろう

前回は1個のLEDを制御したので、今度は三つくらい制御してみましょう。
せっかくなので、青(緑)・黄色(橙)・赤の3色のLEDを用意して、信号機もどきにチャレンジ。

led2
こんな感じで、前回同様にOUT1には緑色のLEDを取り付け、加えてOUT2に黄色のLED、OUT3に赤色のLEDを接続します。

前回は「OUT 1」というコマンドを使っていましたが、実はこのOUTコマンドはパラメータを二つ指定することができて、以下のように使えます。

※オンにするというのは正確には電圧をHighにする事ですが、今のところは単純にオンとオフとしておきます。

OUT 2,1 にすると黄色のLEDが光り、OUT 3,1にすると赤色のLEDが光るというわけです。
簡単ですねぇ。

で、こんなプログラムで、緑が6秒、黄色が1.5秒、赤色が6秒というような信号機っぽいものを作ってみました。

見た目はちょっとアレですけど、信号機っぽい動作になってるハズ。

プログラムが分かりづらい!

しかし、このプログラムはちゃんと動きはしますが、出力先の指定とオンとオフが入り乱れていてややこしいし、なんだか無駄に長いです。

プログラムを一端途中で止めてから再度実行すると、初期化してないので青と赤が同時に光ったりする不具合もあります。

なので、ここは複数の出力を一度にオンとオフできる方法を使ってみます。
といっても、何のことは無い(前回も使っていた) OUTコマンドをパラメータ一つで使うだけなんですけどね。

OUTコマンドをパラメータ一つのみで使うと、そのパラメータを2進数にしたときの各ビットに対応したOUT端子がオン・オフされます。
たとえば、パラメータが「6」の場合、2進数だと「00000110」なので、OUT2とOUT3がオンで他はオフとなるわけです。

というわけで、プログラムをこういう風に書き換えました。

50行目の「OUT 4」 が、OUT4端子をオンにするものと思いがちですけど、実際は「OUT3端子のみオン」にしています。

個人的には分かりやすくなったと思ってますが、2進数を知らないと余計に分かりにくくなったかも?
ただ、プログラムは短くなったので良しとします・・・してください。

おまけ・歩行者用信号機

ほとんど同じようなプログラムですけど、歩行者用信号機も作ってみました。

動き的にはこちらの方が面白いかも(笑)

投稿者:

IchigoJamで遊ぶ その2

(投稿日:2016-03-13)

ハルチカ・・ではなくLチカ

今回は、電子工作での「Hello,World!」と言われるLチカ(LEDをチカチカ点滅させる)にチャレンジしてみましょう。

といっても、私の買ってきたIchigoJamのボードには最初からLEDが実装されています。
BASICにもLEDコマンドというものがあり、実に簡単に制御できます。

IMG_8544

というわけで、以下のようなプログラムを作成。

LEDをオンにして、30フレーム(0.5秒)待機し、LEDをオフにして、また30フレーム待機、を繰り返すだけのプログラム。
実行させると・・・

Lチカ完成です!
(刺さってる赤い線やらは今のところ気にしないでください)

外付けLEDをチカチカさせる。

しかし、基板上のLEDをチカチカさせるだけでは、いまいち面白くない。
なので、ブレッドボードを用意して、そこにLEDを取り付けてチカチカさせてみます。


つなぎ方はこういう感じ。
IchigoJamの出力ポートのOUT1とGNDの間にLEDを接続。
LEDに電流が流れすぎないよう、途中に抵抗も入れます。


実際の接続。
白い線がOUT1、黒い線がGNDで、IchigoJamのそれぞれのポートに刺さってます。

プログラムも出力ポートを使用するように変更。
といっても「LED」を「OUT」に変えるだけですけどね。

そして実行。

無事にチカチカしました。

やっていることは基板上のLEDを動かす事と変わり無いんですけど、自分で取り付けた部品を動かすというのが楽しいところですね。

次回、LEDでもうちょっと遊んでみたいと思います。

謝辞

回路図(と言うほどのものではないですが)の作成には、水魚堂さんのBSch3Vを使用させて頂きました。

ハルチカとは

初野晴さんによる日常系の青春ミステリ小説。及び、それを原作としたPA WORKS制作によるアニメーション。
個人的に好きな作品ですけど、Ichigo Jamには全然関係ありません。

投稿者:

IchigoJamで遊ぶ

(投稿日:2016-03-10)

IchigoJamとは

IMG_8544

ビデオ出力とPS2キーボードを接続すればすぐに使える、小さなワンボードコンピュータ。
電源ONでBASICが起動する、昔のMSXライクなパソコンです。

GPIOというハードウェアの入出力端子もついていて、これもBASICで簡単に制御できるので、電子工作にも最適。

「こどもパソコン」という触れ込みですが、MSX世代の大人の琴線に触れるのも間違いなし(?)

値段も1500円(完成品は2000円)とお手頃です。

Hello,World!

では、早速モニタをつないで起動。

ichigojam1
起動後の画面はこんな感じで、とてもシンプル。

続いて、Hello,World をプログラムしてみます。

ichigojam2
BASICのスタイルも昔懐かしい行番号付き。

入力できたら「RUN」でプログラムを実行します。

ichigojam3
動いた!

起動から、プログラム入力、実行までを動画にしてみました。

動くHello,World

これだけでは面白くないので、動くHello,World!というのを作ってみました。

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

実行結果は、コチラ。

「Hellow,World!」の文字が左から右に動きます。
ただそれだけです。

ポイントは、40行目で表示する「Hello,World!」の前にスペースを一つ置いてあり、これにより先頭文字を消しながら動いているように見せかけていること。
あと、50行目の何もしないループで時間稼ぎをしてるところでしょうか。

まぁ、今となっては、ほとんど何の役にも立たないテクニックですけどね。

実際、IchigoJam BASICには指定されたフレームだけ待機するWAITというコマンドがあるので、50行目は以下のようにするのが良いかも。

というわけで、IchigoJamでは、もうちょっと遊んでみたいと思います。

投稿者:

サイクルモード・ライド

(投稿日:2016-03-08)

P3060055

日曜日、万博記念公園で行われたサイクルモード・ライドというイベントに行ってきました。

サイクルモードとは

スポーツ自転車の展示・試乗会です。

以前はインテックス大阪で大々的に行われてたのですが、数年前から大阪では行われなくなり(東京では毎年行われてます)、もう無くなったのかと思っていたら、今年になってサイクルモード・ライドとして復活。

P3060050 P3060047

肝心の自転車の写真をあまり撮ってませんでしたが、70万近くする高級車にも試乗できる楽しいイベントです。

東京に比べたらショボいんだろうなぁ・・と思いきや、大阪にしか出展していないビアンキやTREKといったブランドも結構あり、意外と負けてはいません(笑)

P3060052

自転車本体の他、パーツや自転車用ジャージなんかの展示もあります。

P3060036

そして、なぜか大阪府警のパトカーも。

P3060077 P3060068

サイクルモードの後は、せっかくなので梅林と太陽の塔を見て帰りました。

太陽の塔は近くでみると本当にデカくて大迫力。

投稿者: