ホーム » 電子情報
「電子情報」カテゴリーアーカイブ
IchigoJamとMapleSylup
7/25(木) 18:30~20:00
ボタンとLED点灯
IchigoJam には、LED 命令と BTN() 関数がある。BTN() 関数は、SW2 のボタンが押されていれば1,押されていなければ0を返す。
このため、ボタンを押している間 LED を点灯する関数は以下のように書ける。
10 LED BTN() 20 GOTO 10 RUN
これを踏まえ、ボタンが押された回数を数えるプログラムを作ってみよう。以下のプログラムは、BTN() が 1 の時、Aの値を増やし、Aの値を表示する。
10 A=0 20 IF BTN()=1 THEN A=A+1 : PRINT A 30 GOTO 20 RUN
しかし、このプログラムは1回ボタンを押すだけで、Aの値はいくつも増えるはずである。
これは、IchigoJam の処理が速いため、人間がボタンを1度押してボタンを離すまでの間に何度も繰り返すためである。
練習問題:ボタンを1回押したら1つづつ増えるようにプログラムを書いてみよう。(練習問題)
このプログラムであれば、ボタンが押されない間待ち、押されたらボタンが離れるまで待ち、1回とカウントする。(練習問題)
10 A = 0 20 IF BTN()=0 THEN GOTO 20 30 IF BTN()=1 THEN GOTO 30 40 A = A+1 50 PRINT A 60 GOTO 20
“でもこのプログラムでも「チャタリング」の影響で上手くカウントできない。どう直せばいいのだろうか?”と書いてチャタリングによる誤動作を見せるつもりだったけど、実際にやってみると、IchigoJam の処理速度の影響で、WAITなしでもチャタリングによる誤動作は発生しなかった。
チャタリングは数100μsec~数msecほど継続する可能性がある。このため「25 WAIT 1」と「35 WAIT 1」を追加すれば、問題ない。
複数のLEDの点灯
IchigoJam の定番の最初のプログラムでは、LED1,LED0 命令で LED を点灯させる実験をするが、OUT1~OUT4ポートを使って複数の LED を点灯させてみよう。
LED 1 2 3 4 OUT 1, 1 〇✕✕✕ 一つづつポートを1に変化 OUT 2, 1 〇〇✕✕ OUT 3, 1 〇〇〇✕ OUT 4, 1 〇〇〇〇 OUT 2, 0 〇✕〇〇 OUT 0 ✕✕✕✕ まとめて消す命令 OUT `1100 ✕✕〇〇 4ポートまとめて点灯/消灯 OUT `1010 ✕〇✕〇
(練習問題)
10 OUT `1100 : WAIT 20 20 OUT `0110 : WAIT 20 30 OUT `0011 : WAIT 20 40 OUT `0110 : WAIT 20 50 GOTO 10
10進数と2進数
OUT 命令で、複数ポートをまとめて変更する際には、「`1010」といったIchigoJam BASICでの2進数の取扱いの理解が必要なので、ちょっとだけ10進数,8進数,2進数の説明。
IchigoJam BASIC で2進数を扱う場合は、バッククオート` を使う。シングルクオート’ と間違いに注意。
10進数とは 123)10 = 1✕102 + 2✕10 + 3 のように、数字を10をひとまとめとして、10が10個で100を表すというように各桁を対応させたもの。
人間が8本指で進化したら、数字は8をひとまとめで扱い、123)8 = 1✕82 + 2✕8 + 3 = 83)10 として表現する8進数になったかもしれない。
コンピュータの中では、電気のある/なし の2通りで表現することで動いているため、各桁を0と1で表す 2進数 が便利。1010)2 = 1✕23 + 0✕22 + 1✕21 + 0 = 10)10
IchigoJam によるモータ制御の実験
IchigoJam で モータを動かす場合、MapleSylup というモータドライバボードを使うと簡単にモータが制御できる。
IchigoJam には、主要な出力ポートが OUT1~OUT6まである。このうち、OUT2~OUT5までは サーボモータの制御に使える。
(重要) IchigoJam の OUT ポートに直接「直流モーター」を接続してはいけない。モータを回すために大量の電流が使われるため IchigoJam は誤動作などを起こす可能性が高い。場合によってはモータから出るノイズで IchigoJam が壊れる可能性がある。必ず MapleSylup などのモータを動かす専用の回路を経由させること。
直流モータとサーボモータ
直流モータは、直流の電圧を加えることで回転するモータで、電圧を加える方向で右回転・左回転を簡単に制御できる。
サーボモータは、模型飛行機などの羽の角度などを変化させることに特化したモータで、中に直流モータと信号に応じて回転角度を変えるための電子回路が組み込まれているため、パルス幅信号PWM により簡単に角度を変化させることができる。
ただし、モーターは電流がたくさん流れるため、IchigoJam の電源からモータを回すと、IchigoJam を動かすための電力が不足して誤動作してしまう。このため、MapleSylup のモータドライバによって乾電池からの電力でモータを回す必要がある。
ポートの配線
IchigoJam の上に MapleSylup を接続して、MapleSylup のジャンパを配線する。
- OUT2ポートを、サーボモータではなく直流モータの配線につながるように、J2 を 2=3 接続となるようにジャンパをつなぐ。
- 同様に、J3 を 2=3 接続となるようにジャンパをつなぐ。
直流モータを動かす(OUT1,OUT2 , OUT5,OUT6)
MapleSylup では、今回 OUT1,OUT2 と OUT5,OUT6 の出力ポートにそれぞれ直流モータを接続する。OUT1,1 とOUT2,0 の時、OUT1側が V+, OUT2側が GND=0V になることでモータが回転する。OUT1,0 と OUT2,1 とすれば、OUT1側がGND=0V, OUT2側が V+ となることで、先ほどとは逆方向に回転する。
((( モータを片方だけ動かす ))) OUT 0 OUTポート全部を 0 にする。 OUT 1,1 左モータが回転する。(OUT2 がまだ0のため) OUT 1,0 左モータが止まる。 OUT 2,1 左モータが逆転で動く。 OUT 2,0 左モータが止まる。 OUT 5,1 右モータが回転する。 OUT 5,0 OUT 6,1 右モータが逆転で動く。 OUT 6,0 ((( モータを複数動かす ))) OUT 1,1 OUT 5,1 両方のモータが動く OUT 1,0 OUT 5,0 ((( モータを複数同時に設定 ))) OUT '000001 OUT1=1,OUT2=0,OUT5=0,OUT6=0 左モータが動く OUT '010000 OUT1=0,OUT2=0,OUT5=0,OUT6=0 右モータが動く
サーボモータを動かす(PWM2)
MapleSylup では、OUT2,OUT3,OUT4,OUT5 をサーボモータに接続できるが、OUT2 は、直流モータを動かすために使うので、今回は OUT3,OUT4 を使う。
サーボモータを動かすためには、専用の PWM 命令を使う
PWM 3, 100 PWM 3, 200
PWM2, 50 PWM2,100
サーボモータを左右に動かすプログラムは以下のようになる。(練習問題)
10 PWM 3,100 : WAIT 30 20 PWM 3,200 : WAIT 30 30 GOTO 10
DCON2024 本選にて4EIチームが企業賞
作品イメージ
(2024/5/20追記) 企業賞 QUICK さまの副賞を頂きました
(2024/5/21追記) DCON副賞 エナジードリンクが届きました。
ふくいソフトウェアコンペ大賞!
2023年12月23日に開催された、ふくいソフトウェアコンペティション2023にて、4EI 藤野間くん, 中西くん, 山腰くんによる「チャリレコ- 1人1人の未来を守る次世代システム-」が、ふくいソフトウェアコンペの最優秀賞を受賞しました。
日本ゲーム大賞2023「U18部門」で2EI福嶋君コラボレーションプラットフォーム賞🏆
一般社団法人コンピュータエンターテインメント協会による、18歳以下の方が開発したゲーム作品を対象に審査、表彰する「U18部門」で、2EI福嶋くんが
コラボレーションプラットフォーム賞(Nintendo Switch プチコン4 SmileBASIC 作品名:CRYPTFACTOR)を受賞🏆しました。
落ちてくる数字に、数を入力すると素因数分解され、1になると撃破….(^_^;
第34回 高専プロコン 競技部門 優勝🏆
自由部門 敢闘賞 チャリレコ
同じく、自由部門にて本選に参加した 4EI 藤野間くん、中西くん、鈴木くん、山腰くん、治内 杏太、指導教員 小松 先生 のチームによるチャリレコも敢闘賞となりました。
メディア掲載
- 日刊県民福井Web 2023/10/16※
- 福井新聞 D刊 2023/10/15※
- 日本経済新聞 北陸 2023/10/16※
- 第34回高専プロコン福井で開催 – BCN
- 高専プロコン観戦記「高専就職・転職ガイド」
※は学内のみアクセス可