KIMTECH 「オリジナルサウンド目覚まし時計」オキドキ!のLEDチカ改造について その2

こんにちは、KITECHです。

 

 

8月7日のいわゆる”華の日”に新たな目覚まし改造ショート動画をアップしましたので紹介します。まだ見ていない方は是非どうぞ

 

 

 

 

沖ドキ!目覚まし時計を改造した件 その2#Shorts #沖ドキ #パチスロ #作ってみた #華の日 - YouTube

 

 

 

今回の解説は、「オリジナルサウンド目覚まし時計」オキドキ!のLEDチカ改造。前回の続きとなります。

 

 

1,目覚ましの音楽を自由に変えたり、

 

の準備段階である、音源入手について説明したいと思います。目覚まし本体の音源チップに音源をコピーする必要がありますが、MP3形式のデータであることが必要なんですね。

 

 

 

KITECHはユニバの推し活をしておりますので、CDを購入したり、Amazon Music様より純正音源を購入して使用しておりますが、個人使用ならばYouTubeの音源を使用しても問題にならないでしょう。YouTubeユニバーサルサウンドチーム様サイトにて沖ドキ!の音源をコピーして、目覚まし音として準備する方法を今回解説したいと思います。

 

また今回は無料で準備できる方法を説明しますが、音量調整や、音源の組み合わせ編集などを行いたい場合はDAWが必須となります。(一応、無料のDAWも存在しますが、今回はDAWの説明はしません。)

 

では解説を開始します。

 

 

 

1,Windows標準アプリの”ボイスレコーダー”の設定。

 

まずYouTubeなどのサイトから音源を録音できるように、Windows標準アプリの”ボイスレコーダー”の設定です。これを使用すればPCのスピーカーから出てくる音楽の録音が可能になります。

 

設定においては、様々なPC環境があると思いますので”PCの内部音声の録音方法”と検索して、それを行ってください。(Windows最新バージョンではボイスレコーダーの呼称も変わっているようです。)

 

録音はそんなに難しい事はなく、ボイスレコーダーでしたら、アプリ下の”マイク”のマークを押してからすぐにYouTubeなどPC音源を再生するだけです。録音が終わったらアプリ中央の”四角マーク”を押すと録音停止して、録音リストのページに戻ります。

 

ここで重要な点は、音量の調整です。DAWがあるならのちに調整することが可能ですが、無しならここで音量が確定することになります。本用途は目覚まし音ですので音が大きい方が良いでしょう。次回に目覚ましから純正の音声(デフォルトのおはよう!+私ヴァージョンアップ)が入手できますので、それと比較して同じ位の音量になるまでやり直すと良いでしょう。音量調整はPC本体のボリュームと、YouTubeの動画下のボリュームを調整することでできます。

 

またアプリの録音リストの再生から前後のトリミング作業などもおこなえます。

 

最後に、録音リストの名前の上から右クリック→ファイルの場所を開く、によりフォルダの所在地の確認が行えますが、拡張子がM4Aファイルのためmp3へ変換する必要があります。

 

 

 

2,iTunesの設定。

 

iTunesはアプリストアから無料で入手できます。このソフトによりM4Aからmp3やWAVに変換できます。DAWを使うならWAVに変換すると良いでしょう。

 

バージョンの違いによりますが、KITECHのiTunesは「編集」タグから「環境設定」をクリック。「一般環境設定」ページ一般の「読み込み設定」クリック、「読み込み設定」内の「読み込み方法」をDAWで編集するなら「WAVエンコーダ」、音源チップに入れる状態なら「MP3エンコーダ」を選択。

 

下の「設定」で音質を変更できますが、音源チップの容量が7Mバイトほどですので、「カスタム」でビットレート、サンプルレートなどを低レベルに調整して任意の容量に調整してください(ここでは容量を確認できません)。

 

設定が済みましたら、任意の曲をクリックして「ファイル」タグより「変換」、MP3 or WAVバージョンを作成をクリックで、元曲の直下に新しい同名の曲が作られます。

 

コピー曲を右クリック、「Windowsエクスプローラーで表示」をクリック、これでMP3やWAV版の場所を確認できます。右クリック、プロパティーで拡張子、容量を確認できます。(目覚ましに採用するなら、MP3、容量は7MBより下)実際に再生して純正の音声(デフォルトのおはよう!+私ヴァージョンアップ)と音量を比較してみてください。

 

これで音源は完成です。

 

 

次回に音源の追加作業を解説しますが、絶対に先走って行わないでください。

目覚まし本体の発火など危険な要素が存在します。必ず解説を読んで、リスクを許容できる方だけ行ってください。

 

 

では次回に続きます。今回もご視聴ありがとうございました。

 

 

KIMTECH 「オリジナルサウンド目覚まし時計」オキドキ!のLEDチカ改造について その1

こんにちは、KITECHです。

 

今回は以前に予告していた、年初にユニマーケット様から発売された、
「オリジナルサウンド目覚まし時計」オキドキ!のLEDチカ改造について説明します。

 

実機そのまま、綺麗にLEDが発色してますよね。

 

今回の改造としては

1,目覚ましの音楽を自由に変えたり、

2,目覚ましの指定時間、後部の音楽再生ボタンにより、音楽再生と共にシーケンスしたLEDチカの演目が行われます。

 

 

ショート動画もすでに投稿されておりまして(8月7日にもう一本投稿するつもりです。)、チャンネル的にも結構な回数が再生されております。

まだ見ていない方はこちらから是非どうぞ!!!

 

www.youtube.com

 

現在ユニマーケット様では「オリジナルサウンド目覚まし時計」オキドキ!が売り切れになっております、GODの時計も再発されておりますので再発される可能性が高いです。

 

 

動画の下の方になにやらレバー、7セグ、2.4インチカラー液晶等が付いておりますが、そう、将来的にKITECH沖スロ機械の最新バージョンmark3にする予定です。年末頃の完成を目指しております。

 

 

mark2の基本的なルーティングはそのままに、更にマイコン1つと部品を追加することで新たな新機能を実装します。(改造無しでは新機能は使用できませんが、mark3用のプログラムもmark2で使う事も可能です。)

 

 

 

KITECH沖スロ機械 mark3 搭載新機能(予定)

1,2.4インチ液晶Wio Terminalの追加; 機種パネルの画像表示、モード示唆、リーチ目表示、出玉グラフなどカラー液晶を生かした更なる工夫が実装できるでしょう。

 

2,音源チップの追加: 現在では抽選部分マイコンで音源を操作しているため、もう一系統 他マイコンで音源を操作できることにより複雑な処理が可能となります。

 

3,パトランプ; これは解説するか分かりませんが、パチスロの伝統的な役物ですよね。キュイン♪

 

4,追加マイコンの役割の変異性; ブレッドボードとピンを使用することにより、一部回路の変異性、拡張性を予定しております。

 

 

是非ご興味ありましたら KITECH沖スロ機械 mark3 を制作してみてください。

しかし複雑な7セグの配線、ユニバーサル基盤のはんだ処理、マイコンの知識、その他工作など電子工作上級者向けの内容となっております。

 

今回説明する「オリジナルサウンド目覚まし時計」オキドキ!のLEDチカ改造は部品数なども大幅に少ないので、沖スロ機械よりも工作のハードルは低くなっています。

 

しかしながらこの改造はメーカー公認改造ではありませんし、工作の失敗によるアクリルパネル・時計本体の破損、電源の重複による音源半導体の発火、LED多用による大電流使用でレギュレータ、トランジスタの発火。など結構危険なトラブルの発生がありますので、説明を読んで良く分からなければやらない方が賢明です。
(現にKITECHも今回の工作で、UNO一台を燃やしてしまいました。(´・ω・`)ギギギィ!)

 

この改造による火災、怪我、商品の損壊等の責任は KITECHは一切取りませんので、自己責任でこれらの改造を行ってください。約束です。

 

 

という事で、本文長くなりましたので解説は次回以降行います、未筆のLEDチカのプログラム発展編も書きたいなと思っております。
みんなでユニマーケット様でアクリルパネル(時計)買って、音楽に合わせてカナちゃんとハイビスカスをチカチカ光らしましょう!

 

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

 

KIMTECH 自作沖スロで、オキドキDUO弾丸ツアーヴァージョンを作ってみた。

こんにちは、KIMTECHです。

 

今回は先日YOUTUBEにてアップした動画、自作沖スロで、オキドキDUO弾丸ツアーヴァージョンを作ってみた。について説明を致します。まだ動画を未視聴の方は良かったら見てください。自信作です、お願いします。

 

 

昨年末にスマスロオキドキDUOアンコールとパチンコのP沖ドキ!ドキドキ弾丸ツアーがめでたく同時にデビューしまして、KIMTECHもとても刺激を受けたので両要素を組み込んだ新台を作ってみたということです。

今回の売りは特定の条件をクリアすれば突入する”沖ドキRUSH”です。パチンコの右打ち時短STの様に、全自動かつ高速で36回転まで確変抽選を行い、平均3500枚ほどの獲得を目指せます。演出も今のパチンコ風のものを複数採用しましたのでドキドキ出来るでしょう。

それ以外も、RUSH突入条件、仮天井、コイン持ちも実機に寄せております。従来通りマイコンに指定されたプログラムのインストールと、MP3モジュールに音源を順番にいれて、抽選部分マイコンプログラムの音源の長さ(delay(再生時間))を自身のものに変更するだけで遊べますので、是非作って遊んで見てください。

 

 

ではいつもの音源表です。


1 0X01  BIG_1  39500   DUO1曲目
2 0X02  BIG_2   39500 DUO2曲目
3 0X03  BIG_3   43500 DUO3曲目
4 0X04  BIG_4  37500  DUO4曲目
5 0X05  BIG_5   41500 DUO5曲目
6 0X06  REG    21500 DUO_REG
7 0X07  rever1  1500 レバー音(通常)
8 0X08  rever2  1000  レバー(時短)
9 0X09  coin      700     ベット音
10 0X0a  che      900   チェリー
11 0X0b  kche  1200   強チェリー
12 0X0c  wait   1500  ウエイト
13 0X0d  ドキPUSHチャンス  12500   DUO_doki_push
14 0X0e  右打ち 6500 DUO_migiuti1_1
15 0x0f  お願い 15500 DUO_onegai
16 0x10  押して 1300 DUO_osite●
17 0x11 凄い(時短BIG) 12500   DUO_sugoi1
18 0x12  やったー 4500 DUO_yatta
19 0x13  キュイン音  1300
20 0x14 わたしversion up  43500
21 0x15  ハズレ 1000 ハズレ音

 

この表の上から順番でmp3モジュールにmp3音源をコピーしていってください。

名前を半角英数にしないと認識しません。データを小さくしたい場合は、iTuneなどのフリーソフトで低レートのmp3を作成すればよいでしょう。

 

 

 

また以下の抽選部分マイコンのプログラムの内容を全部読んで

play(0x07);    表7番目のレバー音(通常)
delay(1500); ←この数字を自分の用意した音源再生時間(1000で1秒)に直す。

 

これら全箇所を訂正してください。

自身の音源の再生時間を確認したい時は、音源の上右クリックから、

プロパティ→詳細タグの”長さ”で確認できます。

0;00.04でdelay(4000)に相当します。更に表示された時間に600ほど足すと失敗しないと思います。(0;00.00ならdelay(1000)にする。)

 

最悪、音源無しでもシュミレーターとして試す事も可能です。(音は出ません!)

 

 

 

 

抽選部分マイコンのプログラム オキドキDUO弾丸ツアーヴァージョン

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

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

 

用意した全ての音源時間を変更してください。

 

 

 

 

そして今回は全てのマイコンも再インストールします。

 

ハイビスカスLED用マイコンのプログラム

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

 

アルドゥイーノのランダム性が怪しいので改良しました、以前のよりもプレミアム点滅の偏りが改善されています。

 

 

データ機上段用マイコンのプログラム

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

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

 

最初からメダルが3000枚入った状態です。つまり表示数からー3000枚の値が正確な差枚数となります。ー1000枚以下の高速時短が正確にカウントされないバグを解決するためです。よって-4000枚までは正確にカウントできます。

 

 

データ機下段用マイコンのプログラム

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

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

 

通常の時短中、オキドキRUSHの時短中共に、特別なテーブルで抽選を行うために5000ゲームでのゲーム数自動停止機能が効きません。(通常オートのみ自動停止)

よってプログラム137行から150行に5000G、5200G,5400Gと3段階の自動停止を追加しました。これでたいてい大丈夫と思いますが、RUSH中にそのゲームを跨いでしまったら、手動オフまで無限にゲームが続くことになります。

 

 

 

 

それでは以上で今回の内容を終わります。

次回は多分、前回触れていたオキドキ目覚ましの改造の動画を作るかもしれません。

目覚ましの音源をほかの曲に変更できることや、音楽発生とともにハイビスカスがハナチカする工作のめどがつきましたので現在制作中です。

 

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

 

 

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


こんにちはKIMTECHです。

 

 

ttps://www.unimarket-777.com/SHOP/O-alarmclock-okidoki_duo_encore.html

 

なんと、今年新発売のユニマーケットさんの目玉新商品は

 

【オリジナルサウンド目覚まし時計】沖ドキ!

でした。パネルの裏面も白でしたので、KIMTECH沖スロ機械に改造し易そうですね。一応、目覚ましで音楽と共にハイビスカスが光るように改造してみようと思っています。出来たら動画に出しますので、乞うご期待!

 

 

 

前回までにループ内の基本的なふるまいについて説明しました。電源を入れると変数”moti”が”0”に初期化され、待機状態を続ける。レバーなどでトリガーを受けると、変数”moti”に1-65537のいずれかの数字が代入され、数字に対応した動作が行われます。
そしてループ最終で変数”moti”が”0”に初期化され、また待機状態に、この基本的な動作が繰り返されます。

 

 

この一連の動作により基本的なAタイプの沖スロを作れますが、KIMTECH沖スロ機械では更に一工夫加えて、4つの追加部分を加えることで4号機的複雑な抽選を行わせています。

1、テーブル    

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

2、ST    

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

3,ゲート(門)  

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

4,分母      

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

 

 

今回は1,テーブルと2,STについて解説していきます。

 

 

今回の内容は一番新しい”クランキーチャレンジを搭載したドラゴンハナハナを作ってみた”のプログラムで上の処理を実際に運用しておりますので、プログラムに沿ってそれらを説明するというものです。
https://github.com/kimtech806/hanatika/blob/main/dra_cra_Ver.txt

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

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

 

 

さて、ST・テーブル  プログラム 低確121-555行 高確560-1438行の説明です。

 

ST

 

前回少し説明しましたが、データ機下段マイコンからの指示が、抽選部分マイコンのアナログリードPIN A0に入り、大テーブル高確・低確の切り替えを行います。データ機下段マイコンが指定されたゲーム数をカウントして指示を出すため、特定のゲーム数・期間で異なった確率の大高確・低確抽選テーブルで抽選することができます。このふるまいを利用する事を”ST”と呼んでいます。

 

用途としては、現代主流のパチンコの右打ちSTの確変ループの様な動作や、ハナハナのボーナス後100G以内のハナ連は特別な音楽が流れる動作、パチスロ獣王・サラ金の様なボーナス後の高確ゲームにチャンス役でATのストック取得の動作、などなど特定ゲーム数に依拠した処理を担当します。

 

データ機下段 123ー136行

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;

}

このcase 0が指定ゲーム数で、digitalWrite(19,HIGH); digitalWrite(19,LOW);で高確期間の始まりと終わりを指定します。上のプログラムでは0から88ゲームまで高確テーブルで、それ以降は低確テーブル、そして1200ゲームからは当たるまで高確で抽選するように指示しています。

 

 

テーブル

 

高確・低確の2つの大テーブルと、その中に複数の小テーブルを持ち、それらを移行する事で複雑な処理を行ないます。前回少し説明しましたが、”vmode”という変数で小テーブルを定義し、基本的に0から1づつ増やして、上に上にと積み上げていきます。今回のプログラムではvmode0~4の計5つの小テーブルを持っています。

 

大低確テーブル構成

 

if(s_set >= 0)&&(s_set <= 350){      //表示のため”if”と”}”の間に()を省いています。

 

vmode4  低確の上位モード中BIGのおまけ1G連BIGの処理を行います。

vmode3  低確の上位モード中BIGの処理、ストック付与を行います。

vmode2  低確の上位モード突入BIG(ハナ連5連)の処理、ストック付与を行います。

vmode1  低確のボーナス準備を行っています。BIG・REGボーナスの種類と、ストック獲得数を抽選します。

vmode0  低確の子役、ボーナス抽選を行っています。チェリー解除などはクラちゃれのストックを追加するなど工夫しています。当りを引いても即動作せず、vmode1のボーナス準備に移動します。

 

 


大高確テーブル構成

 

else if (s_set >= 801)&&(s_set) <= 1100  {      //表示のため”if”と”}”の間に()を省いています。

 

vmode4  高確の上位モード中BIGのおまけ1G連BIGの処理を行います。

vmode3  高確の上位モード中BIGの処理、ストック付与を行います。

vmode2  高確の上位モード突入BIG(ハナ連5連)の処理、ストック付与を行います。

vmode1  高確のボーナス準備を行っています。BIG・REGボーナスの種類と、ストック獲得数を抽選します。

vmode0  高確の子役、ボーナス抽選を行っています。チェリー解除などはクラちゃれのストックを追加するなど工夫しています。当りを引いても即動作せず、vmode1のボーナス準備に移動します。

 

 

 

121行ー1438行と大きい内容ですが、一度に全て同時に使っているわけではありません。通常ゲームは0ゲームから88ゲームまでが大高確テーブルのvmode0で、それ以降は大低確テーブルvmode0で抽選されています。そしてボーナスのフラグが立てば、0ゲームから88ゲームまでが大高確テーブルのvmode1で、それ以降は大低確テーブルvmode1でボーナスの種類、ストックの付与が抽選されます。

 

STを利用するならば、大低確・高確の小テーブル各vmodeの確率に差を付けることで様々なゲーム性をデザインしていくことになります。例えば大高確・低確のvmode1ではストック獲得の確率が異なり、低確時は比較的に大きい数のストックを取得しやすく、高確時はストックの取得が難しくなっています。これによりBIG5連を巡るはらはらしたゲーム性をデザインしています。

 

 

 

 

小テーブルvmodeの作成についてはいくつかのルールが存在します。

 

 

vmodeは電源を点けた際に初期化され、必ずvmode0から始まります。抽選によって"vmode = 1;”などの指示が入らない限りは無限にvmode0を選択され続けます。

また”vmode7”のみには特別な意味があり、プログラム 1439-1441行の

if(vmode == 7){
vmode = 0;
}

により”vmode0”に自動的に変化します。(この仕様にしないと、プログラムは上から下に動きますので、自動的に移動先のテーブルを1ゲーム余分に回してしまいます。)必ず”vmode7”の小テーブルを作らず、vmode0に移動する専用にしましょう。

 

大低確通常ゲーム 低確vmode0で通常抽選。

大低確特殊ゲーム(ボーナス準備) vmode0と7以外の低確小テーブルに移動。ボーナスなどのイベントの終わりに”vmode=7”の指示を付与、vmode0に。ゲーム数が0にリセットされ、大高確へ移行。

大高確通常ゲーム 高確vmode0で高確通常抽選。

大低確通常ゲーム ゲーム数が88ゲームを過ぎ、大低確へ移行、低確vmode0で通常抽選。

 

以上が基本的な抽選のサイクルです。

 

 

大低確・高確共に同じ様な構成に見えますが、利用されるか関係なく同じ様な構成の小テーブルを用意せねばなりません。なぜなら例えば、vmode2,3,4はゲームルール的に大高確テーブル以外では必要ありません。しかしまれに低確でも計算違いで入る可能性もあるかもしれません。その際vmode2,3,4が低確に存在しなければフリーズ状態になってしまうのです。

 

 

以上の内容を考えるに、実際に抽選の動作をしているのは大テーブルの中の各小テーブルという事になります。しかしまた大テーブルのみでも固有の仕事をさせています。


低確大テーブル
if(s_set >= 0)&&(s_set <= 350){    //表示のため”if”と”}”の間に()を省いています。

 

digitalWrite(15,HIGH);     //盤面LEDを緑色に点灯させる。
digitalWrite(16,LOW); 

while(stateZ == HIGH){    //機能ボタンを押せば、当たりまで自動で高速抽選します。。
    while(autm == 0){
stateZ =digitalRead(10);
switch(i){
case 0:
moti = random(1,65537);
break;
case 1:
moti = random(1,51561);//prem
break;
}
int s_set = analogRead(A0);
n_spv_2();
stateZ =digitalRead(10);
}
autm = 0;
}

}

盤面LEDを緑色に点灯させる動作と、機能ボタンを押す事で次回大当たりまでの自動高速遊戯の動作を行います。

 

 

高確大テーブル
else if(s_set >= 801)&&(s_set <= 1100){    //表示のため”if”と”}”の間に()を省いています。

 

digitalWrite(15,HIGH);  //盤面LEDを橙色に点灯させる。
digitalWrite(16,HIGH); 

if(stateZ == HIGH){      //機能ボタンを押せば、液晶にストック、BIG・REG回数表示。
n_spv_3();
}

}

盤面LEDを橙色に点灯させる動作と、機能ボタンを押す事で液晶にストック、BIG・REG回数表示の動作を行います。

 

 

 

 

今回の内容は以上です。ちょっと文字ばかりで内容も難しく、ご理解いただけるか心配ですが、オリジナルのゲームを作るのに必要な説明ですので頑張って書いています。抽選部分プログラムを読みながら学んだ方がよいと思います。

 

 

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

 

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を光らせて判断してください。

 

 

 

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

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

 

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