DIYA4サイズ7セグメントディスプレイを備えたArduinoビンゴマシン
コンポーネントと消耗品
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
|
このプロジェクトについて
ACTION店を歩いていると、許容できる価格でデジタルLEDトリップを発見しました(12V電源アダプターを含み、IRリモコン付きのコントローラーも含まれています)。私はそれを購入することに決め、私の場合はArduinoUnoでLEDストリップを制御することを目的として彼らと遊び始めました。
<図>パッケージまたはLEDストリップ自体にはどこも指定されていませんが、すぐに、これが3つのLEDごとに1つのWS2811ドライバーを備えた3つの5050LEDのセグメントを持つストリップのタイプであることがわかりました。
<図>ストリップをArduinoUnoに接続し、AdafruitNeoPixelライブラリとRGBWストランドテストなどのサンプルコードを使用して実験しました。
私はブレインストーミングを始め、これらの旅行を使ってA4サイズの7セグメントディスプレイを作ることを思いつきました。上に示したストリップの7つのセクションは、その仕事に加えて、ディスプレイ上の小数点用に1つの余分なセクションを実行します。これにより、Arduinoの1つの出力ピンから制御され、ACTIONパッケージにすでに含まれている12Vアダプターで電力が供給される8つのセグメントが効果的になります。
しかし、1つの7セグメントディスプレイで何ができるでしょうか。
そのうちの2つを作って、ビンゴマシンの作成に使用することにしました。 ボタンを押した後、1から75までの乱数を表示します。
ステップ1:7セグメントディスプレイを作成する <図>
ディスプレイの作成プロセス全体はかなり長い話であり、別のチュートリアルで説明できます。作成の短いバージョンは次のとおりです:
両方のA4サイズのディスプレイは、従来の手段と材料で作られました。レーザーカッターと3Dプリンターを使用する場合、プロセス全体が異なり、おそらくより単純になります。あなたはインターネット上でかなり良い例を見つけます、例えば。 YouTube(https://learn.adafruit.com/ninja-timer-giant-7-segment-display/overview)で、既製のものを購入することもできます。
自分で作るのはやりがいがあり楽しいと思いました。
LEDストリップには、ACTIONのWS2811LEDストリップからそれぞれ切り取った3つのLEDの16セクションを使用しました。
<図>これらのセグメントは、はんだ付けワイヤによってストリップの+ 12V、GND、およびDoとDiに接続されます。これを適切に行う方法については、インターネット上にたくさんのチュートリアルがあります。
住宅には、地元のACTIONストアから入手可能で手頃な価格のペグボードを使用しました。
<図><図>
<図>
ハウジングの新しいフロントは、IKEAの白い半透明のまな板素材で作られました。
<図>テンプレートを使用して、ボードの上にあるペイントされたレイヤーからセグメントを切り取りました(黒のプライマー)。
<図>安価なオーディオケーブル(これもACTIONから)を使用して、わずか3本のワイヤ(12V、GND、およびデータ入力)で7セグメントディスプレイを220オームの抵抗を介してArduinoに接続しました。
<図>オーディオコネクタを簡単に差し込めるようにハウジングを変更しました。
<図>
ステップ2:スコアボードを作成する
また、生成された乱数を表示するスコアボードディスプレイ、新しい番号を生成するためのプッシュボタン、および新しいラウンドを終了および開始するための「ビンゴボタン」を作成することにしました。
<図>スコアボードは、ハウジング(上記)と同じACTIONペグボードを使用して作成されます。カバープレートは、上記のようにドリルで穴が開けられたダークグレーのまな板(これもACTIONから)で作られています。トップカバーはIKEAのまな板で作られています。 2つの層の間には、写真用紙へのプリントと保護用の透明フォイルがあります。
内部には、まな板の裏側にテープで留められており、それぞれ15個のWS2812 LEDの5つのセクションに加えて、「ビンゴ」という言葉をバックライトするための3 * 8個のLEDストリップセクションがあります。
<図>
ステップ3:ソフトウェアを作成する
LEDストリップと7セグメントディスプレイのコーディングと再生に関する最初の実験は、Arduinoとはんだ不要のブレッドボードを使用して行われました。
<図>大きな瞬間的な押しボタンは、GNDと宇野のデジタルIOピン2に接続されています。ボタンを押すと、新しい乱数の生成が開始されます。短い「ライトショー1」の後、2つの7セグメントディスプレイに乱数が表示されます。
7セグメントディスプレイで数値を作成するために使用されるテーブルは次のとおりです。
<図><図>
Arduino Sketchの構造化を支援するために、ClickChartsを使用していくつかの簡単なフローチャートを非営利目的の無料バージョンで作成しました(いくつかの固有の制限に慣れれば問題なく動作します)
<図><図>
生成された番号は、「0」または「1」で埋められた75の位置で構成されるSCORE []と呼ばれる配列に格納されます。生成された新しい番号がすでに存在する場合は、新しい乱数が自動的に生成されます。
新しい番号がスコアボード(75個の番号)で点灯すると同時に、新しい番号が7セグメントディスプレイに表示されます
スコアボードには、有効なビンゴが達成されるまで、生成されたすべての乱数が表示され続けます。 「BINGO」と呼ばれるプッシュボタンは、短い「BingoLightShow」でラウンドを終了します
その後、SCORE配列がクリアされ、新しいラウンドを開始できます。
電源スイッチを切り替える(12V電源を切断する)ことで新しいラウンドを開始することもできます。これにより、Arduinoがリセットされ、プログラムが再開されます。
ステップ4:電子機器
12V、2Aの充電器は、完全なビンゴマシンに電力を供給します。
Arduino電源ジャックの12V入力は、電源切り替え(オン-オフ)を有効にするように変更されました。
スコアボードに使用される99個のLED(75 + 24)の5 V電力は、7805電圧レギュレーター(WS2812 LEDストリップによって引き出される電流をほぼ処理できる)による12V入力電力から得られます。ヒートシンクまたは電源バージョンをインストールすることをお勧めします(アップデートでは、スコアボード内の99個のWS2812 LEDによって主に消費される必要な5V電力を処理するために、おそらく電源トランジスタを追加します。このような方法でArduinoのスケッチを作成しました。スコアボードの電力需要は中程度です。
フリッツ図のレイアウトは次のようになります。
<図>7セグメントLEDセクション(12V)と、ビンゴスコアボードの1〜75の数字を照らすLEDストリップの両方が、Unoからの同じ出力ピン(6)によって制御されていることに注意してください。
Pierre Pennings(2018年11月)によって開発および制作されました。
コード
- BINGO_Machine_rev04.ino
BINGO_Machine_rev04.ino Arduino
ArduinoUnoと電子スコアボードを備えた2つのA4サイズの7セグメントディスプレイを備えたBINGOマシンのスケッチ/ *これはPierrePenningsによって開発および製造されたビンゴマシンのコードです(2018年11月)このマシンは2つのDIGITラージA4を使用します12Vを搭載したWS2811LEDストリップで作られたサイズの7セグメントディスプレイ(1つのコントロールチップを備えた3つのLEDのペア)3つのLEDで構成される各セグメントは、1つのコントロールアドレスでアドレス指定されます各ディスプレイには、7つのセグメントと小数点(DP)があります。通常のBINGOゲームと同じように、2つのディスプレイに表示されるのは1から75までです。瞬間的なプッシュボタンがGNDとARDUINO UNOのデジタルIOピン6に接続されています。ボタンを押すと、新しいランダムな数字の生成が開始されます。 「ライトショー1」ランダム番号は2つの7セグメントディスプレイに表示されます生成された番号は、「0」または「1」で埋められた75の位置で構成されるSCORE []と呼ばれる配列にも格納されます存在し、自動的に新しいランダム番号が生成されますARDUINOUNO自体を含むすべての電子機器は、個別のスコアボードディスプレイに組み込まれています75個の番号は、それぞれ1つのSMD5050 LEDを備えた1つのWS2812Bコントローラーチップで点灯します(5 Vで駆動)スコアボードには、生成されたすべてのランダム番号が表示されます有効なBINGOが達成されるまで「BINGO」と呼ばれるプッシュボタンは短い「BingoLightShow」でラウンドを終了しますその後、SCOREアレイがクリアされ、新しいラウンドを開始できます電源スイッチを切り替える(切断する)ことで新しいラウンドを開始することもできますARDUINOをリセットしてプログラムを再起動する12V電源)12V、2A充電器は完全なBINGOマシンに電力を供給しますARDUINO電源ジャックの12 V入力は、電源切り替え(オン-オフ)を有効にするように変更されています5 Vスコアボードに使用される99個のLED(75 + 24)の電力は、7805電圧レギュレーター(WS2812 LEDストリップによって引き出される電流をほぼ処理できる)による12V入力電力から得られます。ヒートシンクまたは電源バージョンのインストールをお勧めします。このコードはGPL3 +ライセンスでライセンスされています。* /#includeconst int NewnumberButton =2; //デジタルIOピン2はノーマルオープン接点でNewnumberボタンに接続されています//ピン2は内蔵のプルアップ抵抗で駆動されてノーマルHIGHになります//スイッチはピンを瞬間的にグランドに引き下げます。 //ボタンを押すことによる高->低遷移では、プログラムは新しい数値を生成します。constintBingoButton =4; //デジタルIOピン4は通常開いている接点でBINGOボタンに接続されています//ピン4は内蔵のプルアップ抵抗で駆動されて通常HIGHになります// BINGOボタンはピンをグランドに引きます/ /ビンゴボタンを押してハイ->ロートランジションでライトショーが開始され、その後プログラムが終了します。constintLedPin =6; // 220オームの抵抗を介してWS2811 LEDストリップのデータ入力(DI)に接続されたデジタルIOピン6int Newnumber =1; int Bingo =1; int SCORE [76]; int count =0; long randNumber; int NUMBER =0; int NW_NUMBER =0; int TENSNUMBER =0; int UNITNUMBER =0; #define NUM_LEDS 99 //最初の16は、2桁の7セグメントディスプレイのLEDを制御するために使用されます(WS 2811)//(2回2つのディスプレイに8つのセグメント);番号0〜7はUNIT番号用//番号8〜15はTENS番号用(番号7および15は各DIGITのDP)//スコアボードディスプレイに番号を表示し、(WS2812)LEDを制御するためアドレス16から99までが使用されます// 24個のLEDがBINGOの文字のバックライトに使用され、75個が生成されたBINGO番号の表示を可能にするスコアボードに使用されます; //すべてのLEDは1本のワイヤーで制御されます! LED_PIN 6から//実際のところ、2つの異なるタイプのLEDストリップが(並列で)同じLedPin 6から2つの220オーム抵抗を介して制御されます#defineBRIGHTNESS 250 // LEDの輝度を最大に設定します(255) Adafruit_NeoPixelストリップ=Adafruit_NeoPixel(NUM_LEDS、LedPin、NEO_GRB + NEO_KHZ800); / * NUMBERからセグメントへの割り当てを含む2次元配列、各NUMBERには独自の列があります------------------ ---------------------------------- 8 0 13 9 5 1 14 6 12 10 4 2 11 15 3 7桁2桁110単位7および15は、10進ポイント(DP)を表します* /// 0 1 2 3 4 5 6 7 89バイトSEGMENTarray [8] [10] ={{1,0,1,1,0 、1,1,1,1,1、}、//セグメント0または8 {1,1,1,1,1,0,0,1,1,1、}、//セグメント1または9 {1 、1、 0,1,1,1,1,1,1,1、}、//セグメント2または10 {1,0,1,1,0,1,1,0,1,1、}、//セグメント3または11 {1,0,1,0,0,0,1,0,1,0、}、//セグメント4または12 {1,0,0,0,1,1,1,0,1 、1、}、//セグメント5または13 {0,0,1,1,1,1,1,0,1,1、}、//セグメント6または14 {0,0,0,0,0 、0,0,0,0,0、}、//セグメント7または15}; byte color_scheme [] ={50、100、200、100、150、250、150、200、50、200、250、100 、250、50、150、0、100、200、50、150、250、100、200、0、150、250、50、200、0、100、250、50、200、0、100、250、50 、150、0、250、0、0}; ////////////////////////////////////// /////////////次のセットアップコードは、「電源オン」の後、またはRESETvoid setup(){Serial.begin(9600);の後に1回実行されます。 pinMode(LedPin、OUTPUT); // LedPin 6を出力として初期化します:pinMode(NewnumberButton、INPUT_PULLUP); //プッシュボタンピン2を入力として初期化します:pinMode(BingoButton、INPUT_PULLUP); // bingobuttonピン4を入力として初期化します:strip.setBrightness(BRIGHTNESS); strip.begin(); //すべてのLEDを「オフ」に初期化しますstrip.show(); for(int t =16; t <24; t ++){strip.setPixelColor(t、0、0、250); //電源を入れた後、スコアボードにBINGOという単語を青い文字で表示しますstrip.show(); // WS2812 LEDストリップの色の順序はR、G、Bであることに注意してください} for(count =0; count <76; count ++){//配列SCORE内のすべてのデータを0にします(配列の位置は0から実行されます) 75まで;ゼロ位置は使用されません)SCORE [count] =0; } / * for(int n =0; n <10; n ++)//このコードは、2つの7セグメントディスプレイで0〜9のすべての数値をテストするために使用できます(2つのDPはテストされません){for( int s =0; s <8; s ++){int z =SEGMENTarray [s] [n]; int i =0 + s; int j =8 + s; strip.setPixelColor(i、z * 250、0、z * 50); strip.setPixelColor(j、z * 250、0、z * 50); strip.show(); Serial.print( "["); Serial.print(n); Serial.print( "]"); Serial.print( "["); Serial.print(s); Serial.print( "] ="); Serial.print(z); Serial.print( ""); }遅延(1500); Serial.println(); } * /} ////////////////////////////////////////////// /////次のループコードは、「電源オフ」またはRESETvoid loop(){Newnumber =digitalRead(NewnumberButton);まで繰り返し実行されます。 if(Newnumber ==LOW)//最初はLOWでループが進行するため、ボタンのバウンス効果を排除するために短い遅延は必要ありません{randomSeed(millis()); {GENERATENEWNUMBER(75);を実行します。 // 1から75の範囲のNW_NUMBERを生成します} // NW_NUMBERがすでに存在する場合:NW_NUMBERを再度生成しますwhile(NW_NUMBER ==SCORE [NW_NUMBER] * NW_NUMBER); SCORE [NW_NUMBER] =1; //配列のNW_NUMBERの位置に1を入れますNUMBER =NW_NUMBER; TENSNUMBER =int(NUMBER / 10); // NW_NUMBERの10進値と単位値を計算しますUNITNUMBER =NW_NUMBER-(10 * TENSNUMBER); CLEARDISPLAY(); LIGHTSHOW1(4、100); // lightshow1を開始しますCLEARDISPLAY(); // PRINTNUMBERSERIAL(); //生成されたNW_NUMBERをシリアルモニターに出力し、SCORE配列の新しいコンテンツを表示しますDISPLAYNUMBER(TENSNUMBER、UNITNUMBER); DISPLAYSCORE(); } else {ビンゴ=digitalRead(BingoButton); if(Bingo ==LOW)delay(3000); //バウンス効果とボタンの誤った押し込みを排除するための3秒の遅延。if(Bingo ==LOW){BINGOLIGHTSHOW(); for(count =0; count <76; count ++)//配列SCORE内のすべてのデータを0に戻し、新しいBINGOラウンドを開始できます{SCORE [count] =0; }}}} ///////////////////ループの終了///////////////////////// /////////////////////////////////// /////////////// ////////////////////////////////////以下、loopvoid LIGHTSHOW1( int duration、uint8_t wait){for(int t =16; t <24; t ++){strip.setPixelColor(t、0、0、0); // strip.show();の設定時に、青い文字でビンゴLEDをオフにします。 } for(int k =0; k
カスタムパーツとエンクロージャー
tekening_gaten_patroon_puntjes_xgW76A8Jmw.svgディスプレイ前面のテンプレートとして使用 回路図
bingo_sketch_66WRdQITE2.fzz 製造プロセス