IchigoJamで遊ぶ・その5 「7セグディスプレイを使う」
なんだか久々になりましたが、今回は7セグメント(略して7セグ)LEDを使ってみたいと思います。
ええ、また光りモノですとも。
7セグというのは、こういう「日」の字型になっている、よく見かけるお馴染みのやつです。
光る棒の部分が7本あるので7セグメント。
小数点のドット部分を入れると8セグメントですけどね。
(ドットのことは忘れて)これを制御するには7本の信号が必要になるんですけど、ここで困った問題が。
Ichigo Jamには出力ポートが6つしかない!
さて、どうしましょう?
※ Ichigo Jam も日々進化しており、新しいバージョンでは出力ポートはもっと増えています。
7セグメントデコーダを使う
しかし、世の中には便利なものがあるものです。
汎用ロジックICの中に、その名も7セグメントデコーダという7セグ用の「74HC4511」というICがありますので、これを使いましょう。
これが「74HC4511」です。
足が16本あります。
(日立(現ルネサス)のデータシートから引用)
構造はこんな感じになっていて、左側のABCDの4ビットを使って0から9の信号を入力すると、それに対応した7セグ用の信号が右側のa~gから出力されます。
入力が4ビットなので、これを使えば4本の出力ポートで7セグ表示が可能になるというワケです。
他に、このICが動作するためには電源も必要なので、VCCには電源を接続します。
LT,BT,LEといったのは制御用?なので、今は特に気にしなくても良いかと。
ちなみに、10以上の信号を入力(4ビットなので15まで入力可能)した場合、全てのセグメントが消えて何も表示されません。
BASICで制御する
というわけで、74HC4511と7セグLEDをこんな感じで接続します。
LT,BT,LEは、VCCやGNDに固定します。
(本当は他にも抵抗やらコンデンサやらを追加した方がいいんだと思いますが省略しています)
あとは、表示したい数字をOUT命令に指定すれだけでOK!
OUT命令はパラメータが1つだと、2ビット化して各ポートに出力してくれるためです。
早速、「OUT 1」を実行してみると・・・
この通り。
「OUT 9」だとこうなります。
下の横棒が光らないデザインですね。
「OUT 10」とすると何も表示されません。
プログラムでグルグル回してみます。
10 FOR I=0 TO 9 20 OUT I 30 WAIT 30 40 NEXT 50 GOTO 10
電子ルーレット
グルグルカウントするだけでは面白くないので、電子ルーレットみたいなのを作ってみました。
10 REM INIT 20 M=0 30 W=0 50 REM RANDOM 60 A=RND(10) 70 IF R=A THEN GOTO 60 80 R=A 90 OUT R 100 IF M=0 AND BTN(0)=1 THEN M=1 110 IF M=1 THEN W=W+1 120 IF W>20 THEN M=2 130 WAIT W 140 IF M<>2 THEN GOTO 60 150 REM RESULT 160 FOR I=1 TO 5 170 OUT R 180 WAIT 30 190 OUT 10 200 WAIT 30 210 NEXT 220 GOTO 10
本体のスイッチを押すとルーレットが遅くなっていき、最後に出目の数値か点滅します。
数値はカウントアップではなくランダムです。
「ルーレットなら、別に7セグ使わなくても画面で表示すればいいじゃん」 とか言われそうですけど、それを無理矢理作るのが電子工作なのです。
・・・ほんとかよ(笑)
というわけで、ではまた。
ネットワークカメラを納品しました
先日、お客様の事務所にネットワークカメラを納品・設置させて頂きました。
複数ある支店の間をライブ映像で結び、各支店の様子を相互に確認できるように構築しています。
お互いの姿を見えるようにすることで、支店間の距離的な隔たりを減らし、会社としての一体感を出す事が第一の目的です。
もちろん防犯上の役割もあり、入退室者についての映像の記録も行っています。
弊社はソフトウェア開発をメインとしていますが、こういったソフト開発以外のソリューションの提案や提供も行っています。
IchigoJamで遊ぶ その4 アナログ入力で温度計
IchigoJamには(あのRaspberry Piにも付いていない)アナログ入力が備わっていて、0V~3.3Vの範囲の電圧を0~1023の数値として取得できます。
今回はこのアナログ入力を使ってみようと思います。
アナログ温度センサで温度を測る
見た目はトランジスタみたいですけど、温度センサです。
(この形だとトランジスタだと思っていた時期が私もありました)
これはTMP36というアナログ温度センサで、この三つある足のひとつから、温度が25℃の時には750mVが出力され、そこから温度が1℃変わる毎に電圧も10mV増減します。
なので、この足をIchigoJamのアナログ入力につないで電圧を測れば、温度が分かるというわけです。
(ちなみに残り2本の足は、電源とGND)
例によってつなぎ方はこんな感じ。
TMP36のVoutというのが温度の出力で、Vsが電源です。
今回はIN2のアナログ入力を使うので、VoutとIN2をつないでます。
実際の接続はこんな感じ。
アナログ入力の値はANAという関数で調べられるので、早速取得してみます。
IchigoJamのアナログ入力は0~3.3Vが1024段階なので、1段階あたりは 3.3V ÷ 1024 ≒ 0.0032V =3.2mV。
アナログ入力の値が225ということは、3.2mvをかけると720mv。
25℃の時の750mVとの差は-30mVなので、温度は22℃という事になります。
若干肌寒い。
温度計で測ってみると22.8℃。
まぁまぁ近い値でした。
温度計プログラム
しかし、いちいちアナログ入力の値を調べて計算するのは面倒なので、こういうことはコンピュータにやらせましょう。
5 CLS 10 O=ANA(2)*32-5000 20 LOCATE 10,10 30 PRINT O/100; 40 PRINT "."; 50 PRINT O%100/10 60 GOTO 20
20行目、IchigoJamは小数を扱えない(たぶん)ので、アナログ入力の値に3.2mV分の32を掛け、500mV分の5000を引いておきます。
この値を100で割ると温度が求まるハズ。
40行目や60行目で、100で割ったり余りを求めたりして小数1桁まで表示してます。
温度の数字以外何も出さない、手抜きプログラムです。
では、実行~。
速すぎっ!
こんな温度計はせわしなさすぎる。
というわけで、途中にウェイトを入れて調整。
55 WAIT 10
まだ速い気もしますけど、そこはWAITを調整かな。
単にWAITを入れるだけではなくて、待ってる間にも値を測定し、それを平均化したものを表示するのが良いかもしれない。
温度計の分解能
温度計を動かしていると、値はころころ変わるわりに、小数部分は同じ数字ばかり出てきます。
これは、IcihgoJamのアナログ入力の分解能が約3.2mVであるのと、温度センサの1℃あたり10mVという仕様とが相まって、約0.3度単位でしか温度を測れないからでしょう。
もっと細かく温度を測ろうと思ったら、センサを1℃あたり20mVとかのものに換えたり、出力電圧を増幅したりが必要かと。
あるいは、上に書いた平均を求めるようにプログラムを改造しても、ある程度は細かくなりそうな気がします。
IchigoJamで遊ぶ その3 信号機を作る
信号機っぽいものを作ろう
前回は1個のLEDを制御したので、今度は三つくらい制御してみましょう。
せっかくなので、青(緑)・黄色(橙)・赤の3色のLEDを用意して、信号機もどきにチャレンジ。
こんな感じで、前回同様にOUT1には緑色のLEDを取り付け、加えてOUT2に黄色のLED、OUT3に赤色のLEDを接続します。
前回は「OUT 1」というコマンドを使っていましたが、実はこのOUTコマンドはパラメータを二つ指定することができて、以下のように使えます。
OUT 1,1 'OUT1をオンにする OUT 2,1 'OUT2をオンにする OUT 1,0 'OUT1をオフにする
※オンにするというのは正確には電圧をHighにする事ですが、今のところは単純にオンとオフとしておきます。
OUT 2,1 にすると黄色のLEDが光り、OUT 3,1にすると赤色のLEDが光るというわけです。
簡単ですねぇ。
で、こんなプログラムで、緑が6秒、黄色が1.5秒、赤色が6秒というような信号機っぽいものを作ってみました。
10 OUT 1,1 20 WAIT 360 30 OUT 1,0 40 OUT 2,1 50 WAIT 90 60 OUT 2,0 70 OUT 3,1 80 WAIT 360 90 OUT 3,0 100 GOTO 10
見た目はちょっとアレですけど、信号機っぽい動作になってるハズ。
プログラムが分かりづらい!
しかし、このプログラムはちゃんと動きはしますが、出力先の指定とオンとオフが入り乱れていてややこしいし、なんだか無駄に長いです。
プログラムを一端途中で止めてから再度実行すると、初期化してないので青と赤が同時に光ったりする不具合もあります。
なので、ここは複数の出力を一度にオンとオフできる方法を使ってみます。
といっても、何のことは無い(前回も使っていた) OUTコマンドをパラメータ一つで使うだけなんですけどね。
OUTコマンドをパラメータ一つのみで使うと、そのパラメータを2進数にしたときの各ビットに対応したOUT端子がオン・オフされます。
たとえば、パラメータが「6」の場合、2進数だと「00000110」なので、OUT2とOUT3がオンで他はオフとなるわけです。
というわけで、プログラムをこういう風に書き換えました。
10 OUT 1 20 WAIT 360 30 OUT 2 40 WAIT 90 50 OUT 4 60 WAIT 360 70 GOTO 10
50行目の「OUT 4」 が、OUT4端子をオンにするものと思いがちですけど、実際は「OUT3端子のみオン」にしています。
個人的には分かりやすくなったと思ってますが、2進数を知らないと余計に分かりにくくなったかも?
ただ、プログラムは短くなったので良しとします・・・してください。
おまけ・歩行者用信号機
ほとんど同じようなプログラムですけど、歩行者用信号機も作ってみました。
10 OUT 1 20 WAIT 360 30 FOR I=1 TO 5 40 OUT 0 50 WAIT 30 60 OUT 1 70 WAIT 30 80 NEXT 90 OUT 4 100 WAIT 360 110 GOTO 10
動き的にはこちらの方が面白いかも(笑)
IchigoJamで遊ぶ その2
ハルチカ・・ではなくLチカ
今回は、電子工作での「Hello,World!」と言われるLチカ(LEDをチカチカ点滅させる)にチャレンジしてみましょう。
といっても、私の買ってきたIchigoJamのボードには最初からLEDが実装されています。
BASICにもLEDコマンドというものがあり、実に簡単に制御できます。
というわけで、以下のようなプログラムを作成。
10 LED 1 20 WAIT 30 30 LED 0 40 WAIT 30 50 GOTO 10
LEDをオンにして、30フレーム(0.5秒)待機し、LEDをオフにして、また30フレーム待機、を繰り返すだけのプログラム。
実行させると・・・
Lチカ完成です!
(刺さってる赤い線やらは今のところ気にしないでください)
外付けLEDをチカチカさせる。
しかし、基板上のLEDをチカチカさせるだけでは、いまいち面白くない。
なので、ブレッドボードを用意して、そこにLEDを取り付けてチカチカさせてみます。
つなぎ方はこういう感じ。
IchigoJamの出力ポートのOUT1とGNDの間にLEDを接続。
LEDに電流が流れすぎないよう、途中に抵抗も入れます。
実際の接続。
白い線がOUT1、黒い線がGNDで、IchigoJamのそれぞれのポートに刺さってます。
プログラムも出力ポートを使用するように変更。
といっても「LED」を「OUT」に変えるだけですけどね。
10 OUT 1 20 WAIT 30 30 OUT 0 40 WAIT 30 50 GOTO 10
そして実行。
無事にチカチカしました。
やっていることは基板上のLEDを動かす事と変わり無いんですけど、自分で取り付けた部品を動かすというのが楽しいところですね。
次回、LEDでもうちょっと遊んでみたいと思います。
謝辞
回路図(と言うほどのものではないですが)の作成には、水魚堂さんのBSch3Vを使用させて頂きました。
ハルチカとは
初野晴さんによる日常系の青春ミステリ小説。及び、それを原作としたPA WORKS制作によるアニメーション。
個人的に好きな作品ですけど、Ichigo Jamには全然関係ありません。
3月22日、企業説明会を行います
[終了しました]
弊社中途採用システムエンジニア(経験者)と他業種からの転職または新卒、第二新卒プログラマー(未経験者)の就職説明会を以下の場所・時間にて行います。
日時:3月22日(火曜日) 14:00~16:00
場所:ハローワーク梅田 北フロア (大阪駅前第2ビル16階)
採用面接ではございませんので、御気軽に御参加ください。(※採用試験は別途ございます。)
当日会場にておひとりずつ行いますので、説明は当日の受付順となります。
IchigoJamで遊ぶ
IchigoJamとは
ビデオ出力とPS2キーボードを接続すればすぐに使える、小さなワンボードコンピュータ。
電源ONでBASICが起動する、昔のMSXライクなパソコンです。
GPIOというハードウェアの入出力端子もついていて、これもBASICで簡単に制御できるので、電子工作にも最適。
「こどもパソコン」という触れ込みですが、MSX世代の大人の琴線に触れるのも間違いなし(?)
値段も1500円(完成品は2000円)とお手頃です。
Hello,World!
では、早速モニタをつないで起動。
起動後の画面はこんな感じで、とてもシンプル。
続いて、Hello,World をプログラムしてみます。
BASICのスタイルも昔懐かしい行番号付き。
入力できたら「RUN」でプログラムを実行します。
動いた!
起動から、プログラム入力、実行までを動画にしてみました。
動くHello,World
これだけでは面白くないので、動くHello,World!というのを作ってみました。
プログラムはこんな感じです。
10 CLS 20 FOR X=0 TO 10 30 LOCATE X,10 40 PRINT" Hello,World!" 50 FOR I=0 TO 50:NEXT 60 NEXT
実行結果は、コチラ。
「Hellow,World!」の文字が左から右に動きます。
ただそれだけです。
ポイントは、40行目で表示する「Hello,World!」の前にスペースを一つ置いてあり、これにより先頭文字を消しながら動いているように見せかけていること。
あと、50行目の何もしないループで時間稼ぎをしてるところでしょうか。
まぁ、今となっては、ほとんど何の役にも立たないテクニックですけどね。
実際、IchigoJam BASICには指定されたフレームだけ待機するWAITというコマンドがあるので、50行目は以下のようにするのが良いかも。
50 WAIT 5
というわけで、IchigoJamでは、もうちょっと遊んでみたいと思います。
サイクルモード・ライド
日曜日、万博記念公園で行われたサイクルモード・ライドというイベントに行ってきました。
サイクルモードとは
スポーツ自転車の展示・試乗会です。
以前はインテックス大阪で大々的に行われてたのですが、数年前から大阪では行われなくなり(東京では毎年行われてます)、もう無くなったのかと思っていたら、今年になってサイクルモード・ライドとして復活。
肝心の自転車の写真をあまり撮ってませんでしたが、70万近くする高級車にも試乗できる楽しいイベントです。
東京に比べたらショボいんだろうなぁ・・と思いきや、大阪にしか出展していないビアンキやTREKといったブランドも結構あり、意外と負けてはいません(笑)
自転車本体の他、パーツや自転車用ジャージなんかの展示もあります。
そして、なぜか大阪府警のパトカーも。
サイクルモードの後は、せっかくなので梅林と太陽の塔を見て帰りました。
太陽の塔は近くでみると本当にデカくて大迫力。
WEBサイトをリニューアルしました
本日、DITのサイトをリニューアルいたしました。
PCの他、スマートフォン等のモバイル端末でも閲覧しやすくなるよう心がけております。
(若干、旧デザインのままのページも残ってますが・・・)
更新頻度も上げていきたいと思っておりますので、今後もよろしくお願いいたします。