KIMTECH DIY沖スロの抽選部分の解説 その3

こんにちはKIMTECHです。

 

 

 

前回までに抽選部分マイコンのループ以外の3つの部分の説明を行いました。
ざっと繰り返すと、定義部分でどんな機能を使うか定義し、変数初期化部分では変数の定義・初期化、LOOP内は本体で抽選、関数群はLOOP内で指示された処理を行ないます。

1-79行         定義部分
81-94行        変数初期化部分
96ー1445行      LOOP
1447-2156行    関数群

 

 

注;プログラムの一部が正しく表示されず、//*1-4 ブログ最後尾に参照 となって、最後尾に一覧になっています。

 

 

今回は一番新しい”クランキーチャレンジを搭載したドラゴンハナハナを作ってみた”のプログラムで説明を行います。
https://github.com/kimtech806/hanatika/blob/main/dra_cra_Ver.txt

 

 

C++のif文、switch文、while文などを使用します。文法・制御文・関数については説明しません。
Arduino日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/

等で勉強することをお勧めします。

 

 

今回はこのプログラムの本体のループについて説明を行います。まずプログラムの動作する基本ルールですが、一番上から始まって下に向かって進みます。そして"loop(){ }"内の{ }の中の内容をひたすら上から下へ繰り返されます。一番最後の関数は、必要に応じて呼び出されて、作業が終わったら元のループ内の位置に戻ります。

 

試しに1-94行の内容を切り取って、プログラムの最後にコピーしてみてください。IDEコンパイルするとエラーが出るはずです。プログラムはタスクの順番、流れを考えて作らないと成功しないものです。

 

 

 

では本題ですが、LOOP内で行われている抽選、まず基本的な抽選の仕組みと、追加部分(確変処理)について整理しなければなりません。

KIMTECH沖スロ機械では、4号機的複雑な抽選を行うために主に4つの追加部分を持っており、基本的な抽選の仕組みに4つの追加部分を組あわして制作しています。

 

1、テーブル    

2つの大テーブルと、その中に複数の小テーブルを持ち、それらを移行する事で複雑な処理を行なう。

2、ST    

大当たり後、50回転まで高確などの処理ができる。(変数を工夫すれば、確変確定50ゲームで後は1/20で転落抽選も可能。)

3,ゲート(門)  

変数が有るか無いか、何個以上あるか、で別の抽選処理を行なう処理。

4,分母      

確率の分母を下げる事で確変処理を行なう。

 

これらは今回は説明しません。

 

 

 

 ループ内の役割分け ループ内 96-1445行

 

1、トリガーの受信と抽選乱数の生成、大テーブル用の数値の取得 98-119行  

レバーやLFOの信号を受信すると指定された範囲内の乱数を生成して、変数”moti”に代入します。(トリガーの受信と乱数の生成)
アナログリードPIN A0(データ機下段から指示)から数値を取得して、変数”s_set”に代入します。(大テーブル用の数値の取得)


2,大テーブル(低確、盤面LEDは緑色に表示。)121ー555行

ボーナス後、データ機下段から指定されたゲーム数を超えたゲームの抽選を行う。いわゆる低確テーブル。

(LED右 緑が点灯で”低確テーブル”)


3,大テーブル(高確、盤面LEDは橙色に表示。)560ー1438行

ボーナス後、データ機下段から指定されたゲーム数以内のゲームの抽選を行う。いわゆる高確テーブル。

(LED右 橙が点灯で”高確テーブル”)

 

4、抽選乱数(変数”moti”)、小テーブル(変数”vmode”)の初期化。 1439-1444行

では先に基本的なループの動作をプログラムを指し示しながら解説します。プログラムを読みながら理解することが重要です。

 

 

 

 

基本的動作には”待機”と”トリガー受信”があります。

 

 ”待機”(いつでもトリガーを受信できる状態、盤面LED青色が点灯)

電源を点けて何もしなければ常にこの状態です。盤面LED(GPIO5ピン)がずっと青色に点灯しています。

(LED左 青が点灯で”待機”)


1,初期設定では抽選乱数の変数”moti”は”0”に指定されています。トリガーが無いと抽選乱数が生成されませんので”0”のままです。

 

2,118行の大テーブル変数”s_set”の数値に従い、大テーブル低確(121-555行)か大テーブル高確(560ー1438行)の、どちらか一方のタスクのみを行います。今回は大テーブル低確(121-555行)に入ります。

 

3,子テーブル変数”vmode”初期値”0”に従い、358-554行の小テーブル”0”に入ります。そして抽選乱数の変数”moti”は”0”ですので、

360-363行
if(moti ==0){//低確    215  1/304  高確  1/242
// reset
s_reset();
}

"moti"が0であれば{ }内を実行、の指定された関数処理が呼び出されます。


1802ー1812行
void s_reset(){     
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH); //青色LED点灯
digitalWrite(6,LOW); 
digitalWrite(7,LOW);  
digitalWrite(8,LOW); 
digitalWrite(9,LOW); 
play(0x00);
delay(30);
}

GPIO5ピンのみを点灯して後は全て消灯、音の初期化を指定という処理です。


4、そして抽選乱数(変数”moti”)、小テーブル(変数”vmode”)を”0”に初期化。 1439-1444行の内容が行われ(どちらも元々”0”なので変化なし。)またループ先頭の96行に戻り、永遠にこの処理が繰り返されます。

多分、一秒間に100回程度はこの処理が行われているでしょう、”待機”ですので高速処理でトリガーを待っているだけの状態です。

 

 

 

”トリガー受信”(GPIO 2ピンにトリガーを入れると発動、盤面LED青色が消灯)

電源を入れて”待機”の処理が高速でループしていますが、トリガーを感知すると以下の動作が行われます。

(LED左 青が消灯で”抽選”)


1,98行のタスクが行われる際にGPIO 2ピンがトリガーを感知すると、98-117行の処理 変数”adata”初期値0に1が代入され、以下adataが1以上なら変数”moti”初期値”0”に1-65536のランダムな数字が一つ代入、ここでは例えで"10000"の数字を代入値とします、そして最後にadataが0に初期化されます。

stateD = digitalRead(2);                // read
   if ( stateD == 1 && stateF == 0 ) // plus count
     adata++;
     stateF = stateD;
delay(10);
switch(i){
case 0:
if(adata>=1){  
moti = random(1,65537);
}
break;
case 1:
if(adata>=1){  
moti = random(1,51561);
}
break;
}
if( adata >= 1){
adata -= 1;

 

 

2,118行の大テーブル変数”s_set”の数値に従い、大テーブル低確(121-555行)か大テーブル高確(560ー1438行)の、どちらか一方のタスクのみを行います。今回は大テーブル低確(121-555行)に入ります。

 

3,子テーブル変数”vmode”初期値”0”に従い、358-554行の小テーブル”0”に入ります。そして抽選乱数の変数”moti”は”10000”ですので、


411-413行
 else if*1{ //*1 ブログ最後尾に参照
n_loss();
 }


"moti"が9000から13000であれば{ }内を実行、の指定された関数処理が呼び出されます。

1813ー1832
void n_loss(){ //低テーブル用
digitalWrite(11,LOW); 
digitalWrite(3,LOW);
digitalWrite(4,LOW); 
digitalWrite(5,LOW); //青色LED消灯
digitalWrite(6,HIGH); //回転数 オン
digitalWrite(7,LOW);  
digitalWrite(8,LOW); 
digitalWrite(9,LOW); 
play(0x07);//レバー音再生
delay(1200);//レバー音再生時間
v_blank();//液晶画面消灯
delay(200);
play(0x08);//BET音再生
delay(800);//BET音再生再生時間
digitalWrite(11,LOW);
big_p = 0;
reg_p = 0;
stc = 0;
}


GPIO5ピンを消灯、GPIO6ピン回転数オン(データ機上・下に送られゲーム数が加算されます)、レバーとBETの音楽を流す処理をしています。この処理はハズレの処理になります。

 

4、そして抽選乱数(変数”moti”)、小テーブル(変数”vmode”)を”0”に初期化。 1439-1444行
の内容が行われ(変数”moti”は”10000”から”0”へ、変数”vmode”は元から”0”なので変化なし。)またループ先頭の96行に戻り、”待機”の処理が繰り返されます。

 

 

 

この3,の際に、”moti”が"950"なら

367-370
else if*2{ //*2 ブログ最後尾に参照
n_loss();
vmode = 1;
 }

"moti"が947から960以内であれば{ }内を実行、の指定された関数処理が呼び出されます。

先ほどのn_loss(); ハズレが発動し、
vmode = 1; で小テーブルが1ボーナス準備(224-355行)に変わり、次ゲームでボーナス告知という事になります。

 

 

 

つまり65536通りの総乱数の内、当たりの数が何個あるかで大当たりの確率が決まるという事です。例えば当り数が"300"存在すれば1/218となります。
その数を

else if*3{ // *3 ブログ最後尾に参照

の数字の部分に割り振っていきます。


else if*4{ //*4 ブログ最後尾に参照

と一気に300割り振ることも可能ですが、アルドゥイーノの乱数は結構偏りがあるので、極端に固めると当たり過ぎたり全然当たらなかったりと不安定です。
KIMTECHはいつも5段階位に分けて配置しています、総乱数が65536通りもありますからね。


今回の内容だけで単純なAタイプの沖スロが出来ました。次回のテクニック編で、上の4つの追加部分を組み合わせた複雑な抽選処理方法を説明します。

 

 

 

最後に基本的なループ内の動作をまとめると


● 電源を入れると自動的に”待機”の処理を高速で繰り返します。(青色LEDが点灯)

● トリガーを入れると、乱数を一つ取得。”moti”へ代入。

● 指定された大テーブルの中の小テーブルにて、””motiに割り振られた処理を行なう。 (青色LEDが消灯)

● ループ最終で乱数と小テーブルの変数が初期化。

● 乱数が初期化され””に戻ることにより、自動的に”待機”の処理を高速で繰り返す状態に戻ります。(青色LEDが点灯)  以下繰り返しです。

 

 

 

基本の動きはこんな感じです。同じようなふるまいを他の電子工作などでさせたい場合にも参考になると思いますので、よかったらプログラムを全文読んでみてください。

 

では今回の内容は以上です。ご視聴ありがとうございました。

 

 

*1:moti >= 9000)&&(moti <= 13000

*2:moti >= 947)&&(moti <= 960

*3:moti >= 947)&&(moti <= 960

*4:moti >= 947)&&(moti <= 1246

KIMTECH 自作沖スロで、クランキーチャレンジを搭載したドラゴンハナハナを作ってみた。の解説 

こんにちはKIMTECHです。

 

 

今回は先日YOUTUBEにてアップした動画、自作沖スロで、クランキーチャレンジを搭載したドラゴンハナハナを作ってみた。について説明を致します。まだ動画を未視聴の方は良かったら見てください、お願いします。

 

 

今回はKIMTECHの大好きな台の要素を組み合わせた仕様です。ユニバのクランキーコレクションのクランキーチャレンジの要素と、パイオニアのツインドラゴンハナハナの5連ハナ連BIGで音楽変化の要素を組み合わせて、更にクラちゃれのストック上乗せ方式や上位モードなど、KIMTECH的な拡張を実装しました。

 

プログラム的にも、自動高速消化機能や、同一ゲーム内のPUSH演出機能(テーブル移行無し)、BIGの曲が重ならないように順番で流す仕組みなど、新しい工夫を組み込んでおります。これらは現代のパチンコのゲーム仕様を再現するのに有効であると思います。

 

 

しかし新しい技術には失敗はつきもの、バグを二件発見しましたので報告致します。

 

1,差枚数が負の整数の4桁以下(ー1000枚以下)になる状態では、自動高速消化機能を使っていると枚数がカウントされなくなります。データ機上段の仕様的問題だと思います、原因が分かりません。解決法としましてはデータ機上段マイコンの初期値差枚数に3000枚ほど加えて、最終的に手計算で3000枚引いてやることです。こうすればー4000枚までカウント可能となります。今回はプログラムに実装していませんが、次回以降組み込む予定です。

 

2,乱数の繰り返しが見られる。動画内でもありましたが、実戦の最後の段階で同じゲーム数で3回ほど繰り返しが見られます。これは今まで見たことがない現象で、多分クラちゃれの抽選の際に乱数を引き直しているのが原因ではないかと予想します。たまにしか起こりませんが、起こった際は抽選部分マイコンをリセットするか、治るまで遊戯するしかありません。

 

 

 

 

では本題の新台機械のセッティングになります。”クランキーチャレンジを搭載したドラゴンハナハナを作ってみた”。

抽選部分マイコン

hanatika/dra_cra_Ver.txt at main · kimtech806/hanatika · GitHub

 

必ず#include "U8glib.h"をライブラリにインクルードしてください。

 

いつもの音源表です。

1 0X01  BIG_1   59500 ツインドラゴンハナハナ白7
2 0X02  BIG_2   54500 ドラゴンハナハナ白7
3 0X03  BIG_3   73500 ハナハナ連チャンBIG
4 0X04  BIG_4   54500 スーパーハナBIG
5 0X05  REG   46500 ツインドラゴンハナハナREG
6 0X06  S_BIG     21300 ハナチカBIG
7 0X07  rever  1200 レバー音
8 0X08  bet  800 ベット音
9 0X09  cratyare_dan 4300 クラちゃれ男性ボイス
10 0X0a  cratyare_zyo 3300 クラちゃれ女性ボイス
11 0X0b  cratyare_suuzi 1300 クラちゃれPUSH音
12 0X0c  kiyuin   2300 キュイン音
13 0X0d cherry   800 チェリー音
14 0X0e  evasiren  11300 プレミアサイレン音

 

これらの目的のMp3音源と再生時間を用意してください。

そしてこの順番通りに、一つずつMP3モジュールDFR0534にデータを転送してください。必ずファイルの名前は半角数字にしてください。USBでPCとつなぐとリムーバブルメディアとして認識されます。
ttps://wiki.dfrobot.com/Voice_Module_SKU__DFR0534 ←DFR0534マニュアル

音楽を最悪用意できなくても、無しでも動きます(音は鳴りません)。音源モジュールに癖がありますんで、他サイトをGOOGLEで調べることも重要です。

 

 

そして抽選部分マイコンのプログラムを、自分のデータに半角で直してください。

今回は訂正箇所が広く散らばっており、96行目のLOOP以下、最後まで存在します。

最初は157行にあります。

 

play(0x0c);   ←音楽の再生番号、直さない。
delay(2300);  ←再生時間の数字を任意の数字に直す。

 

の delay(2300);再生時間の数字部分を、必ず半角で自分の用意した曲の数字に直してください。一秒は1000ですので、この場合2.3秒となります。

以下、全ての音楽再生部分のdelay()の中の数字を直してください。

 

 

この作業毎度めんどくさいですよね。

 

KIMTECH沖スロ機械mark2で使用中の、”MP3モジュールDFR0534”は現在秋月電子電子で品切れになっており、ベストセラーですが機能が古いです。

上の写真のGrove MP3モジュールv4.0は在庫も安定しており、音質の良化、SDカードで音源を管理・容量増加、再生時間を用意しなくてよいのでプログラムの書き換えいらず、抽選部分マイコンの現在使っていない0・1ピンを使いますので改造も楽と、大変合理的で変更を考えています。最近購入してUNOでの再生に成功しましたので、また記事にしたいと思います。

 

また新発売されるARDUINO UNO Qも面白そうですね。音楽再生用のジャックもあるし、メモリも2G、無線LAN、AI、マイコンとCPU連動でマルチタスクリナックス使用も可能ですね。これ1台で機能拡張化した沖スロ機械が作れるかも知れませんね。

 

 

 

そして残るはデータ機上段、データ機下段のマイコンへのプログラムです。今回は自動高速消化機能対応版という事で、各マイコンに下のプログラムをインストールしてください。(上で説明したバグ1は修正していません。)

必ず#include <MsTimer2.h>をライブラリにインクルードしてください。

 

データ機上段

hanatika/de-taki_zyoudan_mod.txt at main · kimtech806/hanatika · GitHub

データ機下段

hanatika/de-taki_kadan_mod.txt at main · kimtech806/hanatika · GitHub

 

いつもの変更点は既に修正されています。

result = (big*300)+(reg*120)-(xdata*2);

 

switch(adata){  
case 0:
digitalWrite(19,HIGH);
digitalWrite(1,LOW);
break;
case 88:
digitalWrite(1,HIGH);
digitalWrite(19,LOW);
break;
case 1200:
digitalWrite(19,HIGH);
break;

 

 

 

それでは今回の内容は以上です。

しかし年末にオキドキの新作”沖ドキDUOアンコール”が出ます、大期待ですね。ユニバは良質なAタイプのパチスロを作れる数少ないメーカー様なのでKIMTECHは応援しております。

では、ご視聴ありがとうございました。

 

 

 

 

KIMTECH 自作沖スロでパイオニア公式プレミアムハナチカを再現してみた。の解説 その1

こんにちはKIMTECHです。

 

 

 

 

今回は先日YOUTUBEにてアップした動画、自作沖スロでパイオニア公式プレミアムハナチカを再現してみた。について説明を致します。まだ動画を未視聴の方は良かったら見てください、お願いします。

 

 

凝ったハナチカの制作方法についての説明です。まず今回使用したプログラムをアップしましたので、沖スロ機械を完全に作っている方はインストールして是非遊んで見てください。

 

 

まず抽選部分マイコンについてのプログラム。

hanatika/hanatika_tyusen.txt at main · kimtech806/hanatika · GitHub

 

ふるまいは、1G目にGOGO!告知、2G 目にBIGハイビスカス告知を指令します。そして一定時間経つとリセットされて0Gに初期化されます、以降繰り返し。

 

 

そして告知ハイビスカス部分マイコンについてのプログラム。

hanatika/hanatika_haibis_LED.txt at main · kimtech806/hanatika · GitHub

 

ふるまいは、0から28(0はハナチカが消灯です。)のプログラム通りの順番でプレミアムハナチカを行います。
これはATMEGA_328チップのEEPRAMを使用して、リセットするたびにプログラムを+1していく手順で行っています。

 

 

 

しかしアクリルパネルなど材料が無くて作れない方も、キーホルダーハイビスカスでも同様の処理で作ることが可能です。また完全な機械を作れない方も、ブレッドボード等でテストも可能です。是非ともコツをつかんで、皆様がオリジナルハナチカ制作などを楽しんでいただければKIMTECH感激です。

 

 

 

以前アップした上の動画を見て頂ければ、アクリル絵の剥がれの欠点を修正したLED設置の最新方法を理解できると思いますので、是非ご視聴ください。また以前の

 

KIMTECH 沖スロ機械のDIY -ハナチカ編#1
KIMTECH 沖スロ機械のDIY -ハナチカ編#2

のブログを参考にして、D4BIG の回路一つと、ハイビスカスLED D3左ハナ上、D5左ハナ下、D6左葉っぱ2つ、D9右ハナ上、D10右ハナ下、D11右葉っぱ2つ(LEDには任意の抵抗を使用してください。)の配線をブレッドボードなどでテストすることも可能です。

 

ハナチカのみテストの方法は、アルドゥイーノUNOに今回紹介の告知ハイビスカスマイコン用のプログラムを焼いて、D4ピンに5Vの電圧を入力すれば現在のプログラム番号のハナチカが作動します。
またアルドゥイーノUNOリセットボタンを押すか電源を落として、再度D4ピンに5Vの電圧を入力すれば、次のプログラムのハナチカが作動します。

 

ーハナチカプログラムー

1左から点滅  2ボワァ~点滅 3高速点滅   4右から点滅 5三三七拍子 6点灯 7花びらのみ点滅 8葉っぱだけ点滅 9花びら点滅葉っぱ点灯 10花びら点灯葉っぱ点滅 11フワフワ点滅 12カラフル点滅1 13カラフル点滅2 14三三四拍子 15赤メラメラ点滅 16ゆっくり点滅 17カラフル点滅7 18緩急点滅 19kしびれ点滅 20スピードアップ&ダウン 21チバリヨ風点滅 22おもてなし点滅 23ゆっくりモーフィン点滅 24白移動葉っぱ点灯 25黒移動葉っぱ点灯 26kカラフル点滅1 27kカラフル点滅1スロー 28チカチカ移動

 

 

 

 

では告知ハイビスカス部分のプログラム仕組みを説明します。

PWM(パルスワイズモジュレーション)という技術を使用しております、これは普通のデジタルピンではONとOFFしかできない所を、PWMではONとOFFを高速で繰り返す事によりアナログの様な電圧の波(高低)を作る技術です。電圧が高くなればLEDが明るくなり、逆に電圧が低くなればLEDが暗くなります。これを超高速で行う事によりモーフィン点滅など複雑なハナチカを行う事ができます。ATMEGA328はそのPWM発生PINがD3、D5、D6、D9、D10、D11の6系統あります。

analogWrite(3,200); (光らせるLED番号、光の輝度0~255)でPWM制御します。

 

 

まずは基本形の通常ハナチカを見てみましょう、一番多く見る左から光って右左右左とチカチカする点滅ですね。

void LED_1() {
analogWrite(3,200); 左ハナ上
analogWrite(5,200); 左ハナ下
analogWrite(6,200); 左葉っぱ2枚
analogWrite(9,0);  右ハナ上
analogWrite(10,0); 右ハナ下
analogWrite(11,0); 右葉っぱ2枚
delay(90);
analogWrite(3,0); 
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,200);
analogWrite(10,200);
analogWrite(11,200);
delay(90);
}

 

void LED_1() {}の{}内の内容が無限にループする仕組みになっています。一定時間経てばリセット初期化され、全消灯します。

analogWrite(3,200); 
analogWrite(5,200);
analogWrite(6,200);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);
delay(90);

 

が一つの命令の塊で、delay(90);  90/1000秒間、左のハイビスカスが全て(ハナ上、ハナ下、葉っぱ2つ)光り、右のハイビスカスが全て消えます。(輝度0は消灯。)

この90/1000秒間という時間は色々試して納得した数字です、ハイビスカスの形状でチカリ方が変わる気がしますね。本家のパイオニアハイビスカスはもっと点滅が早い気がしますが、KIMTECHはこの位の時間の方がしっくりしました。

 

このdelay();の()内の数字を増やしたほうが点滅が遅くなり、減らした方が早くなります。同じ内容でdelayを、高速点滅は50に、ゆっくり点滅は600にすればできます。

 

また、analogWrite(3,200); の輝度が200になっているのに注目してください。最大値が255なので中途半端ですよね。これは最初のLEDの抵抗の値を調整する際に、255(5V)で輝度が眩し過ぎる位に抵抗値を調整しておくという事です。最大値の255はLEDが白くなるほど明るく光れば、それは演出のスパイスとして使えます、プログラムの関数群を見れば240(明るすぎる)とか90(暗い)とかさまざまな輝度を使用しています。

また255まで比例的に明るくなる訳ではなく、対数関数的に急激に明るくなるので、輝度を演出に使いたい場合は実際に任意の輝度でLEDを光らせて判断してください。

 

 

 

では長くなってきましたので、今回はここで終わろうと思います。次回はモーフィンなどハナチカテクニックについて説明したいと思います。

だいぶ気温も下がってまいりまして創作の秋という事で、皆様もどうかオリジナルハナチカなどを制作してみてはいかがでしょうか?パチ屋で華が光るだけで嬉しいのに、普段と違うチカリ方をした瞬間の衝撃は言葉にできないですよね。それがお家で毎日楽しめるなんて・・・最高ですね。

 

では、今回もご視聴ありがとうございました。

 

 

 

 

 

 

 

 

KIMTECH DIY沖スロの抽選部分の解説 その2

こんにちはKIMTECHです。

 

 

 

 

 

今回は前回の続きの、抽選部分マイコンの説明についてやっていきます。

 

前回は抽選機械プログラムが4つに分けられることを説明しましたが、”BOSSカスタムDAINO2Ver”のプログラムを使って更に詳しく説明していきます。

https://github.com/kimtech806/hanatika/blob/main/BOSS_daino2Ver_1.txt

 

 

 

 

1-79行 定義部分 セットアップを含めた、どんな機能を?、どう使うか?を最初に宣言する部分です。基本触る必要はありません、よくおまじないとか言われる部分です。

 

 

セットアップ部分だけ説明しておきます。ATMEGA328のピン足の役割を設定する項目になります。ピンはデジタル汎用入力出力”GPIOピン”(D0~D13)とアナログ入力ピン(A0からA5)があります。

 

各GPIOピンは、設定によって5Vの入力・出力に変更できます。5Vのオンオフ出力と、0Vか5V(4Vぐらいから反応)のオン・オフ入力読み取りができるという事です。

 

各アナログ入力ピンは、電圧を0から1023の指数に変換して読み取ることができます。外部センサー値の読み取りなどで良く使われます。またGPIOピンに役割を変更することも可能です。

 

 

 

ATMEGA328の足の役割


0 X
1 X
2 レバー・オートのトリガー デジタル入力
3 BIG 他ICにBIG加算を伝える、BIG LEDの点滅。 デジタル出力
4 REG 他ICにREG加算を伝える、REG LEDの点滅。デジタル出力
5 LOSS リレーが鳴る、GAMEOVER LEDの点滅 デジタル出力
6 回転数加算をデータIC上下に伝える。 デジタル出力
7 バイブを動作させる。デジタル出力
8 X
9 回転数リセットを他のICに伝える。デジタル出力
10 機能ボタン(液晶モード) デジタル入力
11 チビカナランプ点滅。 デジタル出力
12 音源1
13 音源2
14 A0 親モード切替情報の取得 アナログ入力
15 A1 親モード表示LED1 デジタル出力
16 A2 親モード表示LED2 デジタル出力
17 A3 ランダムシード  アナログ入力

18 A4液晶1
19 A5液晶2

 

という割り当てになっています。

以前の回路図には説明が無かったですが(2024-1-12の記事)、以下のD10ピン液晶モード切替にスイッチの回路をつけないと液晶表示がおかしくなってしまします、追加してください。

上回路を実装すれば、動画のように押しボタンを押して、初当たり確定LED点灯、ストック表示など、液晶の表示が変わります。

 

 

 

 

 

 

81ー87行。次に変数初期化部分、グローバル空間にあるので、電源をOFF→ONした際にこの値に初期化されます。主に次に進む、LOOP内で変数が他の値に変化して使用されます。ちょっとわかりにくいので具体的に用途を説明します。

 

 

int vmode=0;//mo-do  抽選の子テーブルの情報です。各子テーブルを移動します。抽選確率や役が異なります。


byte b_point = 1;   BPTの保有個数、設計上の都合で1がゼロの意味になります。1G目に強制的に使用されます。1G率8%。


byte reg_point = 1;  プレミアムBOSSの特典の個数、設計上の都合で1がゼロです。1G目に強制的に使用されます。1G率50%。


byte st_point = 0;   STCの保有数。1以上なら、2ゲーム目以降、強制的に1/12でボーナスと引き換えられます。


byte i = 1;//kakuhen  0が高確、1が低確です。ボーナス直後は高確になり、1/30で低確に落ちます。1/302→1/72。上乗せ、引き戻し用。


byte k = 0;            STC消化用のBIGの曲番号。


int stateZ = LOW;   機能ボタンの初期状態。

 

 

BOSSカスタムDAINO2Ver”のゲーム性を実現するために、上の変数を使用しています。良く分からなくて結構です。詳しくはループの説明でゲームのフローチャートと共に後で説明します。

"int””byte”等のデータの型の説明は、C++などの変数、データ型の説明でググってください。

要は変数の使用宣言と、その初期設定の数字を定義しています。

 

 

 

 

 

 

1241ー1775行 関数群、ループ内で指示された演出、計算など決まった仕事をする関数が呼び出されて実行されます。ループ内の重複する仕事を何回も呼び出す際に、関数化した方がループの文量も減りますし、関数を別スペースで一括管理しますのでプログラムが見やすくなります。積極的にループ内の仕事を、関数化してループ外に出した方が効率が良くなります。

ただ各関数とループは各ローカルスペースとなりますので、変数の名前とか数値が別々に定義されてます。引数を使って数値を渡すこともできますが、いろいろとややこしくなるかもしれません(ループ内で変数がどんどん変化したいきますので、関数化が難ししいケースもあります。)。

 

関数には2種あり、関数内に引数を渡すデータ型と、引数を渡さないVOID型があります。詳しくは関数と引数についてググってください。

 

データ型関数例

byte loop_big_s(byte sound){

switch(sound){  
case 1:
play(0x01);
delay(39500);
break;
case 2:
play(0x02);
delay(41500);
break;
case 3:
play(0x03);
delay(44500);
break;
}
}

 

loop_big_s( )の”( )”の中に1から3の曲ナンバーを入れれば、対応した曲と再生時間で曲が再生されます。この( )内の1から3が引数です。

 

さらにループ内

 else if*1{ //BIG1 13107
digitalWrite(6,HIGH); 
digitalWrite(11,LOW); 
digitalWrite(3,HIGH);  
digitalWrite(5,LOW);  
play(0x04);
delay(1400); 
v_blank();
delay(200);
v_BIG();
delay(400);
k++;      ”k” 曲番号に1が追加される。
loop_big_s(k);  ”k”が引数として関数に送られる。 
if(k>=3){      ”k”が3以上であれば0になる。
k=0;
}
digitalWrite(3,LOW); 
digitalWrite(9,HIGH);
v_blank();
delay(1000);
vmode = 7;
 }

 

のプログラムで、ストックの放出BIGのみの曲(1-3)を順番にループ再生されるように設定しています。曲を順繰り再生にして飽きるのを防ぐ上に、特定の曲なら初当たり、上乗せ連確定というような演出を実現しています。

 

 

 

 

 

VOID型関数例

void n_big1(){ //1-2
digitalWrite(6,HIGH);  回転数加算をデータIC上下に伝えるオン。
digitalWrite(11,LOW);  チビカナランプを消す。
digitalWrite(3,HIGH);  他ICにBIG加算を伝える、BIG LEDの点灯。 
digitalWrite(5,LOW);   リレーが鳴る、GAMEOVER LEDの滅灯。

play(0x04);  四番の曲を流す。
delay(1400);  四番の曲を流す1.4秒待機。
v_blank();   液晶を黒く塗りつぶす。
delay(200);   0.2秒待機 
v_BIG();    液晶にBIGの表示。
delay(400);  0.4秒待機
play(0x07);  7番の曲を流す。
delay(31500); 31.5秒待機

digitalWrite(3,LOW);  他ICにBIG加算停止、BIG LEDの滅灯。
digitalWrite(9,HIGH); 回転数リセットを他のICに伝えるオン。
v_blank();       液晶を黒く塗りつぶす。
delay(500);      2秒待機。
delay(1500);
}

 

 

文先頭にvoidを付けるVOID型は引数を貰わず、ただ指定された仕事のみを行います。上のプログラムは、初当たり・上乗せ時のBIGボーナスの仕事を行う関数です。

プログラムの横に動作の説明を添えましたが、SETUPで紹介したATMEGA328の足に指示を与えたり、液晶の操作(関数で行っています。)、曲を流したり、待機時間を取るなど、指示を順番に行っています。

 

 

 

 

次回以降に、ループ内の実際に抽選処理の模様を説明します。今回説明したものは基本的にループ内の処理を補助するものです。ですから次回以降のループ内説明を見てからまたこっちに戻って来ることも、理解の向上に繋がると思います。

 

新しい機械の仕様を作る手順としては、まず大まかな仕様をメモ書き、変数の設定、ループ内の処理設定、関数作成、ループ内の処理設定、関数、ループ、関数、、、、。と行う事がおおいですね。関数の処理の音楽や待機時間、液晶の絵はとてもこだわりが必要な部分でしょう、一旦作れば他のプログラムでも利用できますので作りこみたいですよね。

 

 

では今回の内容は以上です、ちょっと内容が難しくなってきましたが、この用途以外でも何か作る際に参考になると思いますので続けていきます。ご視聴ありがとうございました。

 

*1:moti >= 8739)&&(moti <= 21846

KIMTECH DIY沖スロの抽選部分の解説 その1

こんにちは、KIMTECHです

 

 

 

 

 

今回は、抽選部分のマイコンのプログラムについて解説したいと思います。ちょっと情報量が多いので、最初にARDUINOとかC言語の説明や、関連情報の定義を行います。

内容も初心者には難しくなりそうですが、内部をいじってオリジナルのシステムを作りたい方には必要でしょう。ちょっとまとまりの無い散文、備忘録的な文書になるかもしれませんが良かったらお付き合いください。

 

 

 

では、今回は使用しているマイコンATMEGA328(arduino uno 5V仕様)とプログラムについて情報の定義をおこないます。

 

Arduino Unoは教育用の有名なマイコンボードで、ICがDIP型ですので、プログラムを書き込んでからICを外して他の回路に組み込むことが可能です。一つ買えば、安い交換用ICでいくつも複製品を作ることができます。
KIMTECH沖スロ機械mark2では、4つのプログラムを書き込んだICと、パソコンにデータを送る用の本体が一セット必要です。
Arduino Unoは、アマゾンとかの格安品でも特に問題ないと思います。

 

Arduino Bootloader書込済(5V 16MHz仕様) ATmega328P
ttps://akizukidenshi.com/catalog/g/g112774/

 

5Vタイプを購入してください。乱数のシードを取得するADコンバータが故障し易いため、いくつか余分を買うことをお勧めします。故障しても普段通り動きますが、毎回同じ回数で同じ種の当たりがでますので、おかしいと思ったら抽選部分ICを交換してください。

 

 

また、Arduino Ideという無料の開発環境ソフトで開発をおこないますので、非常に快適に作業を進められます。基本的な使い方はここでは説明しません。詳しいサイトが沢山あるのでそちらで使い方を確認ください。

 

 

ARDUINOのプログラムはC++が基本になっています。

基本、Arduino日本語リファレンス
ttp://www.musashinodenpa.com/arduino/ref/

を勉強すればば十分対応できるでしょう。

 

 

 

基本的にプログラムは、上から下へ流れて行って底で停止してしまします。水みたいなもんですね。

しかしARDUINOでは

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

 

を必ず組み込まないといけないルールがあります。これはset upの{ }内の内容を一回通ってから、LOOPの{ }内を上から下へ、永遠にループするという意味です。
センサーの数字などをずっと監視して、その数字を元に対応する動作を行う用途では、LOOP内でずっと無限ループするこの仕組みはとても便利です。

 

また、このマイコンはシングルタスクという、要は一度に一つの命令しかできません。
例えば抽選部分マイコンでは、音楽を出す、液晶表示、ちびカナランプ、バイブ、他マイコンへの指示など行っています。動画でもフリーズ演出で、液晶消す→チビカナランプ→液晶表示→音楽(プチューン)→バイブ→ファンファーレと、順番にシングルタスクで行うため、ちょっともたもたしています(同時にはできません)。

 

しかし、レバーを叩いたらその瞬間に複雑なハナチカ演出が発生して、同時に音も出ています。これはハナチカのみの演出を行う、他のマイコンに指令を出しているからです。これはデータ機も同様で、複数マイコンで分業して作業を行う場合は、同時に作業させることが可能です。

 

そして重要なのは、シングルタスクゆえにLOOP内のどこで作業しているかを認識することが重要ということです。KIMTECH沖スロ機械では2つの親テーブルと、それらが持つ複数の子テーブルが存在し、それを縦横無人に移動して複雑な抽選を行います。シングルタスクなので、タスクの主体がどこかの行で作業を行っています。このプログラムの流れを理解することが一番重要であると思います。

 

 

 

今回は最後に、抽選機械プログラムが4つに分けられることを説明します。説明に使用するプログラムは前回発表した ”BOSSカスタムDAINO2Ver”を使います。

https://github.com/kimtech806/hanatika/blob/main/BOSS_daino2Ver_1.txt

 

 

1-79行 定義部分 セットアップを含めた、どんな機能を?、どう使うか?を最初に宣言する部分です。基本触る必要はありません、よくおまじないとか言われる部分です。

 

81ー87行 変数の定義、初期化部分です。グローバル空間にあるので、電源を点けた際に毎回この値に初期化します。おもに次のLOOP内で変数が他の値になって使用されます。

 

89-1237行 ループ、プログラムの本体です。この中で抽選が行われます。

 

1241ー1775行 関数群、ループ内で指示された演出関数が呼び出されて実行されます。

 

 

上の四つですね。次回以降これらを説明していきます。

プログラムの分岐・流れ

ローカル空間とグローバル空間

関数について

変数について

 

を勉強すれば、よりKIMTECH沖スロ機械の理解が深まるでしょう。基本的には上で紹介したArduino日本語リファレンスを参照して貰えれば十分でしょう。

 

 

次回の機械は、今のパチンコの主流、高速時短ST機をテーマにしようと思っています、任意、条件付きで0.5秒以下の速度で一回の抽選を指定回数まで自動で行います。早すぎるので演出をどうするか工夫の難しさですが、DIYゆえに”普通のパチスロでは不可能”を実現したいと思っております。興味があれば是非とも作ってみてください。

 

では今回もご視聴ありがとうございました。

 

 

 

 

BOSSカスタマイズ DAINO2Verのセッティングについて

こんにちは、KIMTECHです。

 

 

 

 

 

先日、YOUTUBEにアップさせて頂きました新動画は、パチスロ雑誌レジェンドライターBOSS様のカスタマイズ案を実現した内容になっております。

 

 

まだ視聴されていない方は是非ご覧ください。

”パチ馬鹿っ!!”チャンネル様の【北斗SE】一位は誰?妄想裏モノカスタマイズ王選手権で見た、の内容を元に制作しております。

 

しかし、半年ぶり位に動画アップしたら散々の数字です。再生数が1/10になってしまいました。まあしかし、自分の作品ですので、自分のペースで作っていきます。興味がある方は是非作って、試打してください。

 

 

 

ところで最近KIMTECHが気になっているトピックが、サミーの名機初代”獣王”のミニスロ(五分の一サイズ)での復活、クラウドファンディングやってるみたいですね。

ttps://kibidango.com/2806 (写真お借りしております。)

値段は一口33,100円だそうです。モーター制御のリール、レバー、ボタン、LED照明もあり、さらに対応オンラインサービスもあり、プレイ内容が点数化できるそうです。これは期待できそうですね。

インテリア性と実際に遊べる機能を持った機械の需要は、まあまあ有るんじゃないでしょうか。個人的には光物とかリーチ目Aタイプの方が、稼働がありそうな気がします。小さいリールでATとか飽きちゃいそうですね、リール制御も再現できているのか?、気になりますよね。

 

ちなみにKIMTECH沖スロ機械はDIYで1万円くらいです。是非DO IT YOURSELF!

 

 

 


では今回の本題ですが、BOSSカスタムDAINO2Verのセッティングについて説明します。
個人で用意するものは、音楽データとその再生時間数字(一秒1000sec)のみです。
あとはデータ機上、下、抽選部分のマイコンの数字を少しいじるだけです。

 

まず音楽表について、下の様な表を作ると便利です。

1 0x01 loop big_1 3_1 39500  BIG1
2 0x02 loop big_2 2_1 41500  BIG2
3 0x03 loop big_3 4_1 44500  BIG3
4 0x04 reba- 1400  レバー音
5 0x05 bet 900   ベット音
6 0x06 wait 1300  ウエイト音
7 0x07 n_big old_jag 31500  BIG初当たり
8 0x08 reg1 16500  REG
9 0x09 eve  11500  BOSSサイレン
a 0x0a fanfer 5500  daino2BIGファンファーレ
b 0x0b paon 2400  フリーズ
c 0x0c bell 1100  チェリー音
d 0x0d kyoche 1500  強チェリー音
e 0x0e gako 1400   ガコ音
f 0x0f zyanbari 40500  BIGジャンバリ

 

0x00は音楽を完全に止めるために使います。
この順番通りに、一つずつMP3モジュールDFR0534にデータを転送してください。必ずファイルの名前は半角数字にしてください。USBでPCとつなぐとリムーバブルメディアとして認識されます。
ttps://wiki.dfrobot.com/Voice_Module_SKU__DFR0534 ←DFR0534マニュアル

音楽を最悪用意できなくても、無しでも動きます(音は鳴りません)。

 

 

 

では抽選部分のICに転送するプログラムです。

必ず#include "U8glib.h"をライブラリにインクルードしてください。

https://github.com/kimtech806/hanatika/blob/main/BOSS_daino2Ver_1.txt

 

このプログラムの1241行目、以下が関数です。

play(0x01);   ←音楽の再生番号、直さない。
delay(39500);  ←再生時間の数字を任意の数字に直す。

の delay(39500);再生時間の数字部分を、必ず半角で自分の用意した曲の数字に直してください。一秒は1000ですので、この場合39.5秒となります。

以下、全ての音楽再生部分のdelay()の中の数字を直してください。

 

 

 

次に、データ機上段のICです。

必ず#include <MsTimer2.h>をライブラリにインクルードしてください。

slot-machine/de-taki_zyoudan.txt at master · kimtech806/slot-machine

 

そして201行目

result = (big*210)+(reg*90)-(xdata*1.4);

 

result = (big*260)+(reg*100)-(xdata*2.5);

と半角数字で書き換えて、ICに転送してください。BIG260枚、REG100枚、コイン持ち20ゲーム/50枚という意味になります。

 

 

 

 

最後に、データ機下段のICです。

必ず#include <MsTimer2.h>をライブラリにインクルードしてください。

slot-machine/de-taki_kadan.txt at master · kimtech806/slot-machine

 

そして123行目

switch(adata){  
case 0:
digitalWrite(19,HIGH);
digitalWrite(1,LOW);
break;
case 87:
digitalWrite(1,HIGH);
break;
case 100:
digitalWrite(19,LOW);
break;
case 1000:
digitalWrite(19,HIGH);
break;

 

switch(adata){  
case 0:
digitalWrite(19,HIGH);
digitalWrite(1,LOW);
break;
case 1:
digitalWrite(19,LOW);
break;
case 100:
digitalWrite(1,HIGH);
break;

case 1500:
digitalWrite(19,HIGH);
break;

}

と半角数字で書き換えて、ICに転送してください。以上でセッティング完了です。

 

 

さっき気づいたんですが、DFR0534 MP3モジュールの秋月電子の在庫が無くなってますね。しかしMarutsuではまだ在庫があるようです。

次に音源モジュールの変更候補としては”Grove MP3モジュール v4.0”ですかね。
UARTで操作できますし、ARDUINOでも扱えそうです。しかし無音時にノイズが
出るものがあるんですね。DFR0534はそれが無いので重宝していました。

 

 

さて今回の内容は以上です。近々プログラム改造についての解説も行いたいと思っております。需要があるかどうか分かりませんが、自分で抽選部分を作ると色々と考える部分が出てきます。(例えば、ジャグラーでBIGは設定1以下だが、REGは6で以上で、粘ったけど一日中この状況が続くなど。)現在の抽選では4号機みたいに体感機狙い打ちは出来ません。かといって今の台は解析が不可能なので、中身がどうなっているか憶測しかできません。ジャグラー、ハナハナで朝一何故か早く当たるとか、花火でREGは来てもBIGが2000回ハマりとか極端すぎませんかね。

要はリセットのかけ方なんですけど、色々分かってくる部分がある気もします。(オカルトかもしれませんが?)

 

ではご視聴ありがとうございました。

 

 

 

 

音楽に合わせてチカるカナちゃん作ってみた。

こんにちは、KIMTECHです。

 

 

 

 

 

前回予告しておりました、UNI-MARKET様の沖ドキ!カナちゃん小悪魔アクリルスタンドを音楽に合わせてチカらせる、電子工作動画をYouTube様へ投稿しました。

まだ見てない方は是非ともご覧ください、なかなかの力作です。

 

 

 

 

グラフィックイコライザーなどに使われるLM3915を使用しております。音量によって光りますので、歌謡曲よりは抑揚の大きい四つ打ちのハウス、ダンスミュージック系の方が良い反応が得られると思います。予算は工具抜きで、3000円くらいで出来ますので、動画を見て興味を持たれた方は是非作ってみて下さい。

また動画にアクリル工作の新工法が紹介されてますので、良かったらご覧ください。

 

 

 

 

 

 

今回のブログの内容は、上の電子工作の回路図面の解説です。細かい作り方は動画で紹介しておりますので、ブログでは触れません。

 

 

ではまず、作品の前面にある2つの自動的に交互に点灯、消灯を繰り返す、黄色LEDの回路についてです。有名なマルチバイブレーション回路を使っています。電源確認用と、追加装飾用途なので最悪無くても構いません。好みでLEDを変えたりしてみてください。なお、回路の抵抗、電解コンデンサの値を変えると点滅速度が変わります。

LEDの光度を変えたいなら、トランジスタを追加する改造をしなければなりません。

 

 

 

続いてLM3915を使った、本体の回路です。

 

 

 

LM386オーディオアンプモジュールという商品を使っておりますが、アマゾンなどで取り扱っておりますのでそれを使用してください。

 

ケース表面には、図面上のAUDIO IN、10KΩB POD、VIN(電源)の3点の部品を外付けしてください。動画で出てきた音源INPODというのは10KΩB PODの事です。

 

図面上、2.1KΩと、3.1kΩの抵抗値の比率を変えることで、LM3915の動作のふるまいを調整できるそうです。

 

図面上、コンデンサの値はそのままで結構ですが、LED周りの抵抗値は使用するLED製品によって光度が違いますので、個々で実験して確定した方が良いと思います。基本的に抵抗値が増えればLEDは暗くなります。

 

秋月電子でLM3915のコンパチ品のLM3914が安価で売っていますが、基本的に使える可能性が高いです(試してはいませんが)。このIC自体が、メーカー製造終了品と思いますので、完全に同じ状態のICを手に入れることは現在出来ません、不良品とか少し動作が異なる可能性もあります。

 

 

 

 

 

最後に、今回使用したLEDの情報について説明します。

 

白テープLED  

カナちゃんを薄っすら白く光らせるために使用、自動的にひかります。ドン・キホーテで以前買いました、1つづつテープを切ってはんだ付けして使用しますが、抵抗が初めからついてますのでそれを考慮にいれて値を決めないといけません。

今回は一つだけ使用しています。

 

 

足場赤テープLED

 

カナちゃんの足場ハイビスカスの後ろ部分を赤く光らせます。上のドンキと同じの赤色版です。

2個使用します、なお抵抗一個で並列でLED2つ繋いでいるので注意。

 

 

 

カナ青三色LED

 

秋月電子で買った角形フルカラーLEDOSTBMAZ2C1Dアノードを使用しました。

アノードですので、電源+が一つ、赤青緑のGNDが3つ付いていますので、電源、抵抗で光らせて調べてください。設置方法は動画で確認できます。

カナちゃんの本体部分に3つ使用しています、なお抵抗一個で並列で青LED3つ繋いでいるので注意。。

 

 

カナ赤三色LED

 

上の三色と同じです。今回は三色LED赤色、青色を同時に光らせてピンク色になるように調整しています(緑色は使っていない)。

 

 

足場緑3mmLED

 

カナちゃんの足場ハイビスカスの前部分を緑色に光らせます。以前に秋月電子で買ったものを使用しています、発色の良いものが良いでしょう。

普通のLEDは輝度が高すぎますと輪っかで光ますので、光源を小さく複数にする、輝度、距離の調整とか色々調整してみると良いでしょう。

写真の通り、面で光らずにLEDが輪っか(点)で光っている。

 

3個使用します、なお抵抗一個で並列でLED3つ繋いでいるので注意。

 

 

 

 

 

今回の内容は以上となります。今回はマイコンとか、プログラムとか難しいのは使用せず、ただ部品を組むだけなので、はんだ付け愛好家の方なら簡単にできると思います。

また同機構のアクリルスタンドならなんでも同じ処理を施せますので、良かったら皆さんも電子工作してみてください。

ご視聴ありがとうございました。

 

 

 

 

 

 

写真の引用させていただきました。(フィッシング対策によりURLは表示していません。)

AMAZON

秋月電子

UNIーMARKET様