Posts Tagged ‘人生ゲーム’

人生ゲームルーレット再来 – 再構築編

Raspberry Pi Picoによるしょうもないシステムの専用機化の第二弾として、Raspberry Pi 4Bで作った人生ゲームのルーレットを、専用機化するプロジェクト。前回より少し機能を追加してブレッドボード上に組み上げた

起動ボタンを追加した。予め参加者が好きな色を決めて専用に使うも良し、そういう取り決めもなく自由にその時の気分で押しても良し。サーボモータが動いている間はLEDが点灯するようにもした。以前買っていたRGB LEDを使って押されたボタンの色で光るようにしようと思ったが、見つからないのでおとなしく手持ちの黄色のLEDにした

ゲームを始めるにあたって、それぞれのボタンには秘密の隠し味が仕込んであって目の出方が微妙に違い、参加者がどのようなコースを選んだか、また何を狙うかによってその結果に差が出て来るかもしれない等と能書きをコクのも趣が増して良いかも知れない(プログラムを見れば内部のロジックは全く同じなのは一目瞭然だけどな)

リード線が林立して非常に複雑そうに見え、自分にして見れば大したことをやったという感覚を覚える。それは良い、達成感を持つのは精神衛生上非常に良いことである。しかし、しみじみと考えると、PicoのGPIO端子とGNDをプルアップ(ダウン?)抵抗で繋いで → 電源と繋げるスイッチ → GNDの回路を4つと、GPIO → 電流制限抵抗 → LED → GNDの回路があるだけで、使っている抵抗もちゃんと計算したものではなく、とりあえず唸るほどある330Ωの抵抗を場当たり的に使っていたり、実はそれほど大した回路ではないということに思いを致すことも人生で大切なことである。

※(ここまで書いてきて、ソースコードでGPIOピンの定義でPULL-UPオプションを指定していることに気がついて混乱して来た。本当にこのままで良いのだろうか…動いているからこの場では良しとすることにする)

以下はリスク対策のためのソース(Micropython)

# ボタンを押すとサーボーモータがランダムな値を示し、作動中はLEDが点灯
# Raspberry Pi Picoで作動
# MycroPython上で稼働
# Servo Motor GP0
# 緑GP3 赤GP7 黄GP11 青GP15
# LED GP28

from machine import Pin
import time
import math
import random

pin28 = machine.Pin(28, machine.Pin.OUT)

def servorandom_dice_Pico():
    # 可動範囲は0°~約120°(Duty比で2300~7530)
    # 1~10のサイコロの目をサーボモータで表示する

    pin0 = machine.Pin(0, machine.Pin.OUT)
    servo = machine.PWM(pin0)
    servo.freq(50)

    m = random.randint (6, 10)
    n = 1
    while n <= m:
        dice = random.randint (0, 9)
        pulse = (523 * dice + 2300)
        servo.duty_u16(pulse)
        time.sleep (0.3)
        n += 1

n = 1
while True:
    pin = machine.Pin(3)
    pin = machine.Pin(3, machine.Pin.IN,machine.Pin.PULL_UP)
    if pin.value():
        pin28.value(1)
        servorandom_dice_Pico()
        pin28.value(0)

    pin = machine.Pin(7)
    pin = machine.Pin(7, machine.Pin.IN,machine.Pin.PULL_UP)
    print ("Pin5 (R) : ", pin.value())
    if pin.value():
        pin28.value(1)
        servorandom_dice_Pico()
        pin28.value(0)

    pin = machine.Pin(11)
    pin = machine.Pin(11, machine.Pin.IN,machine.Pin.PULL_UP)
    print ("Pin10(Y) : ", pin.value())
    if pin.value():
        pin28.value(1)
        servorandom_dice_Pico()
        pin28.value(0)

    pin = machine.Pin(15)
    pin = machine.Pin(15, machine.Pin.IN,machine.Pin.PULL_UP)
    print ("Pin15(B) : ", pin.value())
    if pin.value():
        pin28.value(1)
        servorandom_dice_Pico()
        pin28.value(0)

    print (n ,"---- ")
    n += 1
    time.sleep (.2)

MicropythonとPythonではライブラリの提供の内容が違うのか?よくわからないながらコーディングをした。途中で関数の定義と言う、私にとっては大きな飛躍を遂げた(すぐ忘れるけどな)。電子回路でプルアップという考え方にも触れた。これで一つの山を越えた。あとは使い方を考えて基板と筐体をどうやって作るかだ

2021/09/12
んねぞう

ラズパイで人生ゲームのルーレットを作って見た

人生ゲームというゲームがある。我が家にも、子供たちが小さいときに買ったものがある。子供たちと遊びながら、人生の不条理についてしみじみ思いを致したものだ。このゲームは息が長く、時代に即していろいろなバリエーションがあるようだ、インターネットで調べて見ると「目指せインフルエンサー!」とかいうのもあった。今の子供たちのなりたい職業の上位にYou tuberがあるということなので、世相を映したものなのだろう。

変遷をたどって来たその人生ゲーム、而してその中で変わらざる要素にルーレットがある。如何にして希望の目を出すか、勢い込んで回すとかえって詰まってしまってポテンヒットみたいになったり、それでは、ということで自然体で、或いは天邪鬼は俺は他人とは別の道を歩むのだとばかりに逆に回してみたりとか、人それぞれにいろいろ工夫を凝らして人生を賭けて祈り、願望を込めて回していたのではないだろうか。(逆回しは私もかつてやってみたがこれがまたストッパーのヒゲがうまくできていて、回しても2,3コマで止まってしまう。やはりある程度回転が持続するほうが楽しい。あえて逆に回そうという人は、周りの人間もつまらなくさせてしまうので、そこまでやるのならばゲームをやめて自分から仲間外れになっていれば良い。)

しかしである、今日のデジタルトランスフォーメーション、IoT、AIが社会にいつの間にか浸透している時代、そのようなアナログなことで良いのだろうか。人生もデジタル化の波に洗われる中、いつまでも手先の力加減に人生の岐路の選択を任せていて良いものだろうか。

否。このような旧態依然とした姿では、世相の最前線も具現化せんとする人生ゲームのありかたとしておかしいだろう。ここでは、そのアンチテーゼとして、デジタル技術を応用したルーレットを作成して、これまでの人生ゲーム界に一石を投じたい。

…もっともらしい理屈を捏ねたが、実は暇なのでラズベリーパイで作って見たいというだけのことだ。

で、作って見た。Pythonでプログラムを組んでサーボモータを回す。本当は360°回転してほしいのだが、手持ちのモータは170°程度の可動範囲しかないので、その範囲で均等に割り振る。文字盤はExcelで良い塩梅に数字が割り振られるように円グラフを作り、これをPower Pointに持ち込んでお化粧を施して写真専用紙にプリントした。

プログラムは、ランダム関数で目の数値(1~10)を決定し、何回かの表示をさせて最終確定する。表示回数は10~16回の範囲で乱数的に選択するので、針の指し示す回数も異なって来る。具体的な動きは次の動画を見てほしい。

さあ、賽は投げられた(コマンドは発行された)

実は内部で出す目の数と、文字盤の数字が合っていない。どういうことかというと、プログラムで出した目の数が1の時は、文字盤は10、逆に目の数が10の時は、文字盤は1を指すということだ。サーボモーターに文字盤を合わせるときにはじめて気が付いた。良かろう、人生はこのように落とし穴だらけなのだ。ただしランダム性は損なわれていない(と思う。何方か数学の得意な方、証明をお願い致します)。

実際にゲームをやって見たかって?
誰もこんな面倒くさい物使いはしないって。

2020/07/19
んねぞう