アップロードチャンネル



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

データーカウンター【パチンコ用】家庭用電源対応
価格:8250円(税込、送料無料) (2021/4/1時点)






●高性能7セグ家パチデータカウンターの製作

●家パチデータカウンターの製作方法

家パチカウンターは、高機能な物は、高価で1万5千円程度します。お安いのでも1万円ぐらいします。

今回は、2000円以内で家パチカウンターを製造します。
歩数計を利用した家パチカウンターは、すでに発表されています。
それが一番簡単で安いでしょう。 ここでは7セグメントLED表示でパチンコ店
のようなLEDセグメント表示のカウンターをマイコンを用いて製造します。

比較的簡単にちょこちょこっと完成できます。

arduino nano を使用します。
もしくは、難易度が上がりますが更に劇的にお安く製造する為にarduino nano IC
ATmega IC 3.3V を使用します。400円ぐらいではないでしょうか?
(それなら arduino nano の互換製品を使用した方が良いかもしれませんが
どちらかと言えば 互換品が一番コスパが良いですね。)

ATmega IC 3.3Vw単品のみを使用して 劇的にお安くできます。



下の写真がATmega328PU IC 3.3V単品です。 これでシリアル変換ケーブルが必要なのですが
お安いのが 有ります 200円ぐらいのです。安価な PL2303HX搭載のUSBシリアル変換ケーブル 150円〜370円 
メジャー品だと980円します。今回の企画 家パチカウンターを製造する では、この程度の作業を企画しています。
もちろんすぐ使用したいならarduino nano の互換製品を購買すればブートローダが組み込まれ
ているので即使用できます。


ATmega 328PU 3.3V単品

●家パチの配線の接続方法


集中端子基盤

接続は、集中端子基盤という裏側のバネコネクタに差し込むだけです。
灰色のバネコネクタの上側がプラス端子になるので arduino nanoのA1pinを差し込む
下側がマイナス端子 GNDを差し込む

ただカウント数だけを表示するならそれだけである。
問題点は、保留4個過ぎてもカウントしてしまう事である。
パチンコ台の入賞信号が発信されると
カウントしてしまうのでパチンコ店でも同じではないかと思う。
プログラムの大幅な修正が必要だがだが
大当たり回数や確変回数 2R確変 なども 接続すれば表示できる。

もしくは個数を用意すれば接続して点灯するだろう。

そこまでするなら 製品を買った方が良いだろううが 今回は、イベント企画なので
製造して点灯させる事が完成作業となる。

当然だがカウント機能のみに限定される機能しか提供できない。
高速消化機能や大当たりを出す遠隔機能は出来ない。

次期アップデートで搭載されるかもしれない機能ではあるかもしれない。
サブ基盤まで配線を回さないと不可能な処理である。

   
   
   
   
   
   
   
   

集中端子基盤

●完成試作品

   
   外装や基盤などもまだ加工もしていない状態のテスト用動作品です。
   完成品とするなら 外観の側になる。入れ物だけ用意してまとめる感じで完成という感じなのだが
   用は、側だけ 何処かで見つけるか工作するかで完成だと思う。
   
   本来基盤は、必要ないが ATmega328P IC 3.3V単品仕様で製造していくならば
   基盤も箱も必要だろう。この形態の製造では、商品として出荷可能である。
   プログラムを改良して 多機能化すれば 商品として出荷可能であろう。
   
   今回は、側は、無しで 基盤状態の家パチカウンターのみの製造体験コースとなる。
   
   
   
   
   
   
    ここで 購入する商品の斡旋と紹介をしよう!
   ここですべて買い揃えて製作すれば 良いでしょう。
   
   
  広告の下に、詳しい製造法とソースコードがあるよ!
   

完成品








[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

FT232 マイクロUSB-UARTアダプタボード
価格:748円(税込、送料別) (2021/4/6時点)








完成時 動作テスト

●製造方法の説明

  
   
   ざっと見た感じで 使えるのは、Arduino nano の互換製品とセグと配線ぐらいかな?
   セグも取り扱いしたので使えると思うよ。セグの型番は、TM1637 だから 紹介してるのには、
   HT16k33もあるから注意が必要だね! 動くのはうごくと思うけど・・・。
   ライブラリーがTM1637.h だから ライブラリーが違うのでコードの修正が必要だね。
   
   ※TM1637の販売取り扱いました。268円の方です。
   
   最低限必要なのは、Arduino nano と TM1637 7セグ それに ジャンパー線とモバイルバッテリーとソースコード
   
   必要品目
   
   arduino nano 当サイトで互換機を販売中!
   正規品も取り扱っています。
   
   TM1637 7セグ 当サイトで268円で販売中!
   
   ジャンパー線 両ソケット2本 片ソケット4本 当サイトで販売中 790円のデュポンワイヤーの方です。
  オス、メス メス、メス オス、オス とセットになっています。
   
   モバイルバッテリー 電源用 100円ショップであります。
   
   PL2303HX搭載のUSBシリアル変換ケーブル (ATmega328P IC 3.3V単品使用時) 中級者向けです。 
   シリアル変換チップ搭載の基盤かコード付きUSB 当サイトでFT232 910円と748円 販売中! 
  
   基盤
   
   電源
   
   ソースコード
   
   
   
 



実機テスト 完了

● ATmega328Pを使った製造方法の説明





  ATmega328P 3.3Vぶブートローダー組み込み済みICでの製造法
   
   
   PL2303HX搭載のUSBシリアル変換ケーブル 緑をATmega328P 3.3V のRXに接続
                      白をATmega328P 3.3V のTXに接続
                                         黒をGNDに接続 
                                         
                                         ATmega328P 5Vなら赤線をVCCに接続
                                         
                                         
 回路図は、下の写真で確認してください。
 写真のとうりにしないとプログラムは、書き込めません。
 
 DTR端子が PL2303HX搭載のUSBシリアル変換ケーブルには、在りませんので リセット信号は、手動でピンで押して印加します。 
 タイミングは、書き込み中の表示の最初の方ならどの場面でもOKです。
 一度だけピンを素早く差し込んで抜きます。
 それで書き込み完了の表示が少ししたら表示されます。
 
 回路説明
 
 1 VCCとGNDに0.1μFの無極性コンデンサーを接続 ※ 読み取りPIN7と反対側に設置する事
 
 2 RSTに2Kオームの抵抗を +3.3Vと接続
 
 3 RSTに0.1μFの無極性コンデンサーを直列接続
 
 4 RST直近にピンを接続
 
 5 書き込み  書き込み中の表示後 慌てず ピンを素早く押し 抜く
 
 6書き込み完了
 
 以上です。
 
 ここで問題が浮上しました!
 
 どうやら8MHz 3.3では、 表示が合わないようです。 寄生電流の関係でカウントが50ぐらいで0に戻ります。
 これは、止めて 中止して arduino nano16MHzにした方が良いかもですね。
 対策を検証した結果 読み取りPIN 7 の反対側のGND-VCC間に無極性コンデンサーを
 付け替える処置で完治しました。
 
 電極の接触が不安定な基盤やブレッドボードでは、動作不安定になる傾向があります。
 こちらは実機で検証はしていませんので 接続後の動作は、不明です。
 GNDテストでは、カウントは、9999カウントまでテストしています。
 
 
 
 
 ※ 再度検証した結果 完全動作します。 無極性コンデンサー GND VCC 間を 反対側に付ける事で
 何故か完全動作しました。ですから読み取りPINの反対側に無極性コンデンサーを付け替える事で
 正常動作しました。回路図は変更してません とにかく反対側です。
 
 これ以外にもESPーWROOM02を使用してWIーFI機能を持たせた
 パチカウンターを試行しましたが どうやら TM1637のレジスタメモリーのエラーで
 コンパイルできない事が判明しました。
 
 今回の製造イベントは、これで終了です。
 
  ATmega328P 3.3Vのソースコード
  
  Arduino IDE のボード選択設定
   Arduino pro or pro Mini
  
  プロセッサー選択 ATmega328P 8MHz 3.3V
  
  シリアルポート  PL2303HXかFT232の認識したCOMポートを選択
  
  
  #include <TM1637.h>

#define pin 7

unsigned int ct = 0;

// Pin 6- > DIO
// Pin 5 - > CLK
TM1637 tm(5, 6);
void set()
{

ct++;
delay(50);


}

void setup() {
  Serial.begin(115200);
  tm.init();
  pinMode(pin, INPUT_PULLUP);
 
  tm.clearScreen(); 
}

void loop() {
  

 int val=0;
 
if(digitalRead(pin)==LOW){val=1;}

delay(10);
if(val==1){set();delay(50);
 }
if(ct==9999){ tm.clearScreen(); ct=0;}
 tm.display(ct);
 
  
  Serial.println("ct= "  + String(ct+1));
} 
 
 


回路図
ATmega328p3.3V 動作テスト2

●arduino nano ソースコード



入賞タイミングは、オシロスコープで完璧に調整してあり実機で検証済み
正確に出力されます。


#include <TM1637.h>

#define pin 10

unsigned int ct = 0;

// Pin 12 - > DIO
// Pin 11 - > CLK
TM1637 tm(11, 12);
void set()
{

ct++;
delay(50);


}

void setup() {
  Serial.begin(115200);
  tm.init();
  pinMode(pin, INPUT_PULLUP);
 
  tm.clearScreen(); 
}

void loop() {
  

 int val=0;
 
if(digitalRead(pin)==LOW){val=1;}

delay(10);
if(val==1){set();delay(50);
 }
if(ct==9999)  { tm.clearScreen(); ct=0;}
 tm.display(ct);
 
  
  Serial.println("ct= "  + String(ct+1));
} 
 
 
 
 
 パチンコ台の乱数カウンター c++言語
 
こちらのプログラムは、簡易的な99分の1パチンコの16BIT乱数カウンターを模擬した物です。
パソコン上で動作します。波グラフの研究用です。コードの下にコンパイル済みプログラムがあります。
 
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>

#include <ctime>
#include <random>
#include <windows.h>



#pragma comment(lib, "winmm.lib")

extern int fx(int (*x));
using namespace std;


/* Period parameters */
#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL   /* constant vector a */
#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
#define LOWER_MASK 0x7fffffffUL /* least significant r bits */

static unsigned long mt[N]; /* the array for the state vector  */
static int mti = N + 1; /* mti==N+1 means mt[N] is not initialized */

/* initializes mt[N] with a seed */
void init_genrand(unsigned long s)
{
	mt[0] = s & 0xffffffffUL;
	for (mti = 1; mti < N; mti++) {
		mt[mti] =
			(1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti);
		/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
		/* In the previous versions, MSBs of the seed affect   */
		/* only MSBs of the array mt[].                        */
		/* 2002/01/09 modified by Makoto Matsumoto             */
		mt[mti] &= 0xffffffffUL;
		/* for >32 bit machines */
	}
}

/* initialize by an array with array-length */
/* init_key is the array for initializing keys */
/* key_length is its length */
/* slight change for C++, 2004/2/26 */
void init_by_array(unsigned long init_key[], int key_length)
{
	int i, j, k;
	init_genrand(19650218UL);
	i = 1; j = 0;
	k = (N > key_length ? N : key_length);
	for (; k; k--) {
		mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1664525UL))
			+ init_key[j] + j; /* non linear */
		mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
		i++; j++;
		if (i >= N) { mt[0] = mt[N - 1]; i = 1; }
		if (j >= key_length) j = 0;
	}
	for (k = N - 1; k; k--) {
		mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1566083941UL))
			- i; /* non linear */
		mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
		i++;
		if (i >= N) { mt[0] = mt[N - 1]; i = 1; }
	}

	mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */
}

/* generates a random number on [0,0xffffffff]-interval */
unsigned long genrand_int32(void)
{
	unsigned long y;
	static unsigned long mag01[2] = { 0x0UL, MATRIX_A };
	/* mag01[x] = x * MATRIX_A  for x=0,1 */

	if (mti >= N) { /* generate N words at one time */
		int kk;

		if (mti == N + 1)   /* if init_genrand() has not been called, */
			init_genrand(5489UL); /* a default initial seed is used */

		for (kk = 0; kk < N - M; kk++) {
			y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
			mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1UL];
		}
		for (; kk < N - 1; kk++) {
			y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
			mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
		}
		y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK);
		mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1UL];

		mti = 0;
	}

	y = mt[mti++];

	/* Tempering */
	y ^= (y >> 11);
	y ^= (y << 7) & 0x9d2c5680UL;
	y ^= (y << 15) & 0xefc60000UL;
	y ^= (y >> 18);

	return y;
}

/* generates a random number on [0,0x7fffffff]-interval */
long genrand_int31(void)
{
	return (long)(genrand_int32() >> 1);
}

/* generates a random number on [0,1]-real-interval */
double genrand_real1(void)
{
	return genrand_int32()*(1.0 / 4294967295.0);
	/* divided by 2^32-1 */
}

/* generates a random number on [0,1)-real-interval */
double genrand_real2(void)
{
	return genrand_int32()*(1.0 / 4294967296.0);
	/* divided by 2^32 */
}

/* generates a random number on (0,1)-real-interval */
double genrand_real3(void)
{
	return (((double)genrand_int32()) + 0.5)*(1.0 / 4294967296.0);
	/* divided by 2^32 */
}

/* generates a random number on [0,1) with 53-bit resolution*/
double genrand_res53(void)
{
	unsigned long a = genrand_int32() >> 5, b = genrand_int32() >> 6;
	return(a*67108864.0 + b)*(1.0 / 9007199254740992.0);
}
/* These real versions are due to Isaku Wada, 2002/01/09 added */

int fx(int (*x))
{
	const int b = 65536;

	const int max = 100; //メモリー数//
	int ct = 0;
	int cn = 0;
	int nm = 0;
	int i = 0;


	int count = 0;
	int counte = 0;

	int vc = 0;
	int ac = 0;
	int pi = 0;
	int sta = 0;
	int cot = 0;
	int att = 0;
	int zenkai = 0;
	
	int ax = 0;
	int aex = 0;

	

	unsigned long ul;


	init_genrand((unsigned long)timeGetTime());
	for (i = 1; i < 8001; i++) {
		ul = 1 + genrand_int32() % b;
		ct++; att++;



		if ((1 <= ul) && (ul <= 661)) {
			ax++; x[ax] = att;
			zenkai = att; ac++;

			att = 0;

		}




		if ((265 <= ul) && (ul <= 661)) {
			nm++; count = nm;
		}







		if ((1 <= ul) && (ul <= 264)) {
			cn++; counte = cn;
		}



	}





	
	pi = nm + cn;

	cout << endl;
	cout << "総回転数" << ct << endl;
	cout << "前回回転数" << zenkai << endl;
	cout << "回転数" << att << endl;
	cout << "50回時短回数" << count << endl;
	cout << "25回時短回数" << counte << endl;
	cout << "合計回数" << pi << endl;
	if (pi >= 1) { cout << "確率" << ct / pi << "分の1" << endl; }
	return ul;


}

int main(void)
{
	char s;
	char ss;
	int i;

	const int b = 65536;
	const int at = 100;
	const int max = 120; //メモリー数//

	int randax[max];
	int ax = 0;
	int aex = 0;
	int ac = 0;
	int acc = 0;
	unsigned long *p;

	unsigned long ul;



	for (ax = 0; ax < sizeof randax / sizeof randax[0]; ax++) randax[ax] = 0;

	ax = 0;









	ax = fx(randax);

	for (aex = 1; aex < 100; aex++)
		cout << "メモリー" << aex << "=" << randax[aex] << endl;








}

 




コンパイル済みプログラム




Powered by FC2ホームページ


inserted by FC2 system