ロジックIC(論理回路、フリップフロップ)を使った早押し対決ゲームを作りました。
フリップフロップを使った早押しボタンはネット上にいろいろ作例もあって、キットも市販されているのですが、ちゃんと2人で対決して遊べるゲームとして開発しました。
紹介動画はこちら。
www.youtube.com
電源は単4電池×3本です。
遊び方
- 電源スイッチを入れてスタートボタンを押します。数秒経つとスタートLEDが光るので、その瞬間に2人でAとBのボタンを押してください。早く押した方のLEDが光って、勝ちとなります。
- スタートLEDが光る前にボタンを押してしまうと、フライングの反則で相手の勝ちになってしまいます。
- リプレイするには、スタートボタンを押してください。
回路図
スタートLED制御
コンデンサの充電回路とIC・7400のNANDゲート2個を使って、スタートLEDを制御しています。スタートボタンを押すとコンデンサC2が一度放電され、その後R1・R2・フォトトランジスタを通して充電されます。充電が進んでC2の+側の電圧が上がると、7400Cゲートの入力がL→Hに変わり、7400Cゲートの出力=7400Dゲートの入力がH→Lに、7400Dゲートの出力がL→Hに変わって、スタートLEDが点灯します。
NANDゲートでLとHを反転して、また反転して…と2回反転しているのがムダに見えますが、C2の+側にLEDを直接つなぐと「だんだん明るくなって光る」動きになってしまいます。今回のゲームではパッと瞬間的に点灯させたいので、ゲートで変換してデジタルな出力にしています。また、途中の反転出力をフライング判定(後述)に使っています。
コンデンサC2へ充電する電流の一部はフォトトランジスタを通しているので、周囲の明るさによってスタートLED点灯までの時間が変わります。明るい場所だと3~4秒、暗いと7~8秒かかります。ちょっとした光の具合で変化するので、「いつ光るのか?」とハラハラさせてゲームを面白くしています。
早押し判定
ボタンの早押し判定は、Dフリップフロップが2個入ったIC・7474を使っています。
回路図上側のフリップフロップAを例に取ると、最初の出力は「Q=L・Q=H」の状態から始まり、LED-Aは光りません。
時間が経ってスタートLEDが点灯すると、D入力がHになります。ここでボタンAが押されると、CLK入力がL→Hに立ち上がり、出力が「Q=H・Q=L」に切り替わって、LED-Aが光ります。同時にQ出力がつながった先のフリップフロップBのCLR端子がLになるので、フリップフロップBはクリアされて「Q=L・Q=H」で固定されます。後からボタンBを押しても入力を受け付けません。
フリップフロップBに注目するとこの逆になるので、A・Bのどちらか早く押した方のLEDが光ることになります。
リプレイするためにスタートボタンを押すと、2つのフリップフロップのCLR端子がダイオードD2・D3を通じてLに落とされるので、フリップフロップがクリアされて最初の状態に戻ります。
フライング防止
このままだとスタートLEDが光る前からボタンを連打していれば勝ててしまうので、7400のNANDゲートA,Bでフライング防止回路を組んでいます。
スタート信号の反転信号と、ボタン入力信号の2本をNANDゲートへ入力すると、「スタートLEDが光る前(H)、かつ、ボタンが押された(H)」時だけ、ゲートの出力がLになります。このL出力を相手のフリップフロップのPRE入力へつないでいるので、フリップフロップがプリセットされて「Q=H・Q=L」で固定され、相手のLEDが光ります。一方で自分のフリップフロップは、(相手が勝利した時と同様に)CLR端子がLになってクリア状態「Q=L・Q=H」で固定されるので、ボタン入力を受け付けなくなります。これでフライングの反則となって相手の勝ちになります。
Dフリップフロップの入力が、CLKよりもCLRやPREが優先されることを利用して、勝利やフライング時のインターロックをしています。
基板データ
- Fusion PCB用ガーバーデータ(ZIP)(72×95mm)
*同じ基板を2枚配置しています。
*いわゆる「C基板」のサイズで設計しています。C基板用のケースやパネルが使えます。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。
(C) 2022 Shiro Saito (https://www.ichigoaman.jp)
材料
だいたい以下の順番ではんだ付けすると作りやすいです。
- カーボン抵抗(炭素皮膜抵抗) 1/4W150kΩ (100本入) R1、R2
- この抵抗を換えるとスタートLED点灯までの時間が変わります。抵抗値を小さくすると早く、大きくすると遅くなります。
- カーボン抵抗(炭素皮膜抵抗) 1/2W10Ω (100本入) R3
- スタートボタンを押した時にコンデンサC2を瞬時に放電する電流が流れるので、この抵抗だけ1/2Wにしています。短時間なのでそれほど気にしなくてもいいとは思いますが。
- カーボン抵抗(炭素皮膜抵抗) 1/4W470Ω (100本入) R4
- カーボン抵抗(炭素皮膜抵抗) 1/4W10kΩ (100本入) R5~R10
- 汎用整流用ダイオード 1000V1A 1N4007-B(20本入) D1~D3
- スライドスイッチ 1回路2接点 基板用 横向き
- 2入力NANDゲート TC74HC00AP
- 2回路Dフリップフロップ TC74HC74AP
- 14ピンのICソケット×2個をはんだ付けして、はんだ付け終了後にICを差しても良いです。子ども向け工作教室ではソケットを使った方が、ICを逆向きにはんだ付けしてしまう事故を防げます。
- 絶縁ラジアルリード型積層セラミックコンデンサー 10μF16V5mmピッチ (10個入) C1
- 電解コンデンサー 100μF16V105℃ ルビコンMH7 C2
- 照度センサ(フォトトランジスタ) 560nm NJL7502L (2個入)
- タクトスイッチ(水色) スタートボタン
- タクトスイッチ 12mm TVGP01-G73BB ×2個 A・Bボタン
- 電子ブザー 12mm UGCM1205XP
- 5mm青色LED 470nm OSB5SA5B64A (10個入) スタートLED
- 5mm赤色LED 640nm OSDR5113A LED-A
- 5mm黄色LED 590nm OSYL5113A LED-B
- LEDの色はお好みで。ボタンやキャップの色と合わせるといいでしょう。スタートLEDは何色でも構いませんが、LED-AとLED-Bは赤や黄色などのVfが低いLEDを使ってください。青や緑などのVfが高いLEDを付けるとブザーが鳴らなくなります。
- 写真や動画の作例では、amazonで安売りしていたスモークのLED(青・赤・黄)を使ってみました。
- 電池ボックス 単4×3本 リード線
- タクトスイッチキャップ(20個入)(aitendo) 赤・黄
- キャップの色はお好みで。LEDの色と合わせるといいでしょう。
- キャップが四角でもよければ、秋月のこちらのセットを使う手もあります。
IchigoJamプログラム版
IchigoJamのプログラムだと、20行ほどで同様の早押し対決ゲームが実現できてしまいます。やっぱりコンピュータってスゴイですね。
遊び方
- プログラムを実行すると、画面中央上に丸いLEDが表示されます。数秒待つとLEDが点灯するので、2人でそれぞれキーボードの「A」と「B」を押してください。どちらか早かった方が「WIN!」と表示されます。
- LEDが点灯する前にキーを押してしまうと、フライングの反則で相手の勝ちになってしまいます。
- リプレイするには、再び「RUN」またはF5キーを押してください。
10 '*PUSH FIRST 20 CLV:VIDEO 3:CLS 30 A=ASC("A"):B=ASC("B") 40 LC 2,5:?CHR$(A) 50 LC 12,5:?CHR$(B) 60 LC 7,0:?CHR$(232) 70 T=RND(180)+180:CLT 80 P=30 90 @TLOOP 100 K=INKEY() 110 IF K=A W=B:GOTO @OVER 120 IF K=B W=A:GOTO @OVER 130 IF TICK()<T GOTO @TLOOP 140 LC 7,0:?CHR$(233) 150 P=10 160 @KLOOP 170 K=INKEY() 180 IF K=A W=A:GOTO @OVER 190 IF K=B W=B:GOTO @OVER 200 GOTO @KLOOP 210 @OVER 220 BEEP P,30 230 IF W=A LC 1,6:?"WIN!" 240 IF W=B LC 11,6:?"WIN!"
(追記)ブレッドボード版
ブレッドボードで組むこともできます。
部品が多くてちょっと面倒ですが、基板無し・はんだ付け無しで作れます。