見出し画像

デザフェス58の展示物紹介~~~!!!

こんにちは、いむかt(@Show_D_null)です。
今回はデザフェス58 Q-402 科学雑貨Scientiaで展示していた謎のボタンについて説明します。

作品、背景紹介

今回僕のイベントへの出展は2回目になります。
前回のコミティアでは本『Liberty of Spiritual Drugs』の執筆でScientiaの一作品を担いましたが、今回は謎のボタンを作品として展示しました。

謎のボタン

なんか科学っぽい物を作れないかと考えたところ、僕が中高のころ物理部無線班という部活動に入っており、少しだけ電子工作ができるのでなんかしらを作ろうと考えて小さなゲームでも作ろうかと思ったのですが、量産するには時間がなく、一つの展示物を作るに至ったわけです。

科学というより工学的なものだと思うのですが、アイデアを話したらcorvusが置いたら楽しそうというので作って置くスペースをもらいました。

このボタンは押すと数字が1進み、たまに10進むという簡単な構造で、ある数字になったら回りのLEDが光り、当たりを演出してくれます。
よく漫画である「あなたは○○人目のお客様です!大当たり~!」をやりたかったわけです。

当たりの数字解説

当日展示してある紙にも書いてあるのですがより詳細な説明を以下に、理系に興味がある中学生くらいの年齢向けに書いてますが、あまり知識がなくても「ほーん」ぐらいに見てくれると嬉しいです。

1.61 黄金比φ

黄金比は有名な比率ですが、1:$${\frac{1+\sqrt{5}}{2}}$$で表されるものであり、$${\frac{1+\sqrt{5}}{2}=1.61…}$$から1.61を当たりにしました。
下の長方形全体がその比率でできています。

黄金比の長方形

黄金比の長方形はその長方形から正方形を切り取ると、切り取った後の長方形と元の長方形が相似となる(⇒拡大すると重なる)性質を持っています。
図でいうと全体の長方形から青い部分の正方形を切り取った、残りの赤い長方形が全体の長方形と縦横の比率が同じになる、というものになります。
このことについて注意してyについての2次方程式を解くと以下のようになります。

$$
\begin{align*}
x : y &=y-x : x \\
y(y-x) &= x^2 \\
y^2 -xy-x^2 &=0 \\
y&=\frac{x \pm \sqrt{1+4x^2}}{2}
\end{align*}
$$

比率を知りたいのでx=1として、yの値が正になることから
x=1
y=$${\frac{1+\sqrt{5}}{2}}$$
であることがわかります。
この1:$${\frac{1+\sqrt{5}}{2}}$$が人の目にも綺麗に見えることから、古代の建造物にも見受けられる比率となります。

2.71 ネイピア数e

ネイピア数は自然対数の底とよく言われていますが、

$$
e=\lim_{n \to \infty}\Big(1+\frac{1}{n} \Big)^n
$$

で定義される値のことです。例えばこの値は銀行などの利息の複利計算と関連があります。100万円を年利100%(!?)で預けると一年後には200万円となります。
ですが、半年預けてそこで利息が付き、複利として計算すると最初の利息は半年しか預けてないので50万しか利息が付かないので半年経過時点では150万円となります。
その後また半年預けると150万の半分、75万円が入るので一年後の合計が225万円となるわけです。この額は分割数が大きくなれば大きくなるほど大きくなります。気になる人は証明してみましょう。
実際の制度ではこのようなことはあり得ませんが、数学的にこの制度が存在したとして、半分ではなく無限大に分割し無限に細かい複利をつけた際どうなるか、が上の式であらわされるeであり、2.71…という数です。

3.14 円周率π

$$
円周率が3.05より大きい事を証明せよ \\
東京大学 2003 問6
$$

円周率とはある円の直径と円周の長さの比率であり、3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679…と続く数で、あらゆる歴史がありその求める過程で$${\pi=\frac{22}{7}}$$であるとされていたりしました。
原始的な求め方では円に内接、外接する正N角形を考えて、
円周の内側の正N角形の外周の長さより円周は長く、外側の正N角形の外周の長さよりは短い、という方法で求められます。上の†東京大学†の問題は正12角形を考える事で分かります。これで全員東大に受かりますね。(いむかtは英語と国語の偏差値が30くらいだったので出願をあきらめt…)

4.18 カロリー 1[cal] = 4.18[J]

カロリーとだけ言われても何のこっちゃという感じですが、これは単位系の換算の話です。カロリーとは今では食品の中に含まれる栄養か何かのダイエットの指標にされているものですが、カロリーとはエネルギーを表す単位の一つで、1カロリーとは常温常圧で水1mlを1℃上げるのに必要なエネルギーを表しています。
右辺のJとはジュールという単位で約100gの物体を1m持ち上げる事に必要なエネルギーを表しています。
その「エネルギー」を表す同じ意味を持った単位の換算が1カロリー=4.18ジュールだという事です。
なんのこっちゃという人は、メートルとフィートの違いだと考えてもらえばわかりやすいと思います。
同じ長さのものを測る物差しの目盛りがどうついているかの違いです。
なんでこんな単位換算しなきゃならねえんだよと言われましても、昔の単位のつけ方が身近な物を基準にして決めていたことがあります。
例えば温度を表す℃について、聡明な方ならご存じ°Fという温度表記がありますが°Fを作る際に外気温のめちゃめちゃ寒かった気温を0°Fとして自分の体温を100°Fとするように決めたという話があり、これは日常生活で使われる温度がマイナスにならないように決めたそうです。
他にもメートルなどは地球の4分の1周を100000000mとしたことからそれを基準にしていますし、長さの基準でいえばヨーロッパ圏でのフィートは足の長さを基に決められています。

5.39 プランク時間

$${t_p}$$ = $${5.39 ×10^{-44}}$$ [s]
プランク時間$${t_p}$$とは$${5.39×10^{-44}}$$秒というクソ短い時間のことです。$${10^{-44}}$$とは0.000…1(0が43個付いた小数)のことです。
この時間が何を意味するかというと量子力学における不確定性原理との関係上、物理学の意味を持つ計測可能な最小の時間単位です。(物理に詳しくなくてあまりわからなかったです)

6.02 アボガドロ定数

$${N_A}$$ = $${6.02×10^{23}}$$[mol$${^{-1}}$$]
アボガドロ定数$${N_A}$$とは物質量の1molを構成する定数で、原子や分子が$${6.02…×10^{23}}$$個集まったものを1molとして扱っています。
(応用化学科なのに何も面白い話ができない…)

7.77 ラッキーセブン

(何も思いつかなかった…高校生くらいでもわかりそうな定数で7くらいの値はなかった)

8.31 気体定数R

$${R}$$ 8.31 [JK$${^{-1}}$$mol$${^{-1}}$$]
気体は$${温度T、圧力p、物質量n、体積V}$$について、
$${pV=nRT}$$
という等式が成り立ち、これを状態方程式といいます。しかしこれは理想的な気体(体積が0、分子間力が0など)について成り立つ式です。なので理想気体の実際の気体についての式は様々にあり、例えばファンデルワールスの状態方程式などがあります。

9.81 重力加速度g

$${g}$$ 9.81 [ms$${^{-2}}$$]
これは地球上で物体を落とした際にその物体の速度がどれだけ速くなっていくか⇒加速度、を表したものです。
一般に重力と呼ばれている力ですが、地球上の様々な場所で測ると変わってしまうものであり赤道上と極地では0.5%程違うそうです。
この誤差があると問題になってしまうので、SI単位系という定義があります。

セシウムの超微細遷移周波数$${Δν_{Cs}}$$ 9192631770 [Hz]
真空中の光の速さ$${c}$$ 299792458 [m/s]
プランク定数$${h}$$ 6.62607015×10$${^{−34}}$$ [J s]
電気素量$${e}$$ 1.602176634×10$${^{−19}}$$ [C]
ボルツマン定数$${k}$$ 1.380649×10$${^{−23}}$$ [J/K]
アボガドロ定数$${N_A}$$ 6.02214076×10$${^{23}}$$ [mol−1]
視感効果度$${K_{cd}}$$ 683 [lm/W]

以上の7つをもうこの値とする、と定義したうえでこれらの定義値を組み合わせて他の単位を構成するというやり方で世の中の物理量を決めています。
例えば秒などはセシウムの遷移周波数の単位が [Hz] = [s$${^{-1}}$$]なのでセシウムから計測して、1秒がわかります。
1秒がわかったので、真空中の光の速さ299792458 [m/s]から1メートルの長さを決めることができる…といった話です。
昔の「使いやすいけど実は曖昧」だった単位の決め方で決めた値に近づくように決めたそうですが、秒を定義する際に上のセシウム遷移の周期の値を9192631770から9192631997に定義していればうるう秒が1972年以降3回しか必要ではなかった(現在ではうるう秒は27回実施されている)など、単位系の話はその単位ができた由来などを調べて見ると面白い小話があると思います。

もう作品と関係ない話になりますが、日本の旧暦(天保暦)の決め方に従って月を決めていくと太陽、地球、月の動きの関係上で2033年には8月と11月の間が1か月しかないという状態になり、9月と10月がどこに入るのか問題があるそうです。楽しみですね。

2038年1月19日3時14分7秒問題

時間の問題で他にも好きなものがあり、皆さんは2000年問題を覚えていますでしょうか。私は2000年に生まれたのですが知っています。2000年になる境目でコンピュータが誤動作を起こすというものでしたが、近い未来に起こる問題で2038年1月19日3時14分7秒問題というものがあります。
これはコンピュータの日付に用いられている数の扱いの問題なのですが、今現在のコンピュータの時間システムが1970年1月1日0時0分0秒から何秒経っているか、で計算しているのですが、そのカウンタが32bitなので2,147,483,647までしか数えることができず、1970年1月1日0時0分0秒から2,147,483,647秒経った時が2038年1月19日3時14分7秒なのです。ここから1秒経ってしまうとカウンタが0になってしまい、システム上では1970年1月1日0時0分0秒になってしまうという問題です。この問題は2000年問題より深刻で、というのも2000年問題はアプリケーションの側で対処できる問題でしたが、2038年問題はハード上の問題、OSの問題などシステムの深い部分に係る問題であり、解決が難しいとされています。
またこの問題が起きている原因を理解するにはある程度のコンピュータの専門知識が必要になり、大衆の理解がなかったり政治家などに問題がわかりづらく(若い人ならともかく今の政治家にはどう説明してもわかってもらえないだろう。)対処に必要な人材が不足するのではないか。
さらには2000年問題というキリの良い数字ではないため問題が起きそうだ、という大衆の意識さえ得られずめちゃくちゃなことになるのではないかと危惧しています。
実際にすでに問題は起きていて、時刻AとBの間の時間を求めるためにはAとBのカウンタの値を足し算して2で割り算すればよいのですが、その際に2,147,483,647より大きい値になってしまう所為で、値がおかしくなってしまうという不具合があります。これは2004年1月10日ごろに2,147,483,647の半分である1,073,741,824秒経った時です。もう我々はこの問題に対して解決していかないといけません。
さて、コンピュータといえば今回のボタンにもコンピュータは使われています。

回路図、プログラムなど


回路図(雑ですが)

今回はPIC16F886を用いて作りました。他にロジックIC 74HC47、74HC164を使いました。
数字の表示には7セグという7本のLEDで数字を表現するものを使っているのですが、74HC47は入力ABCDに対して二進数で入力するとその入力に対して対応している7セグのLEDを光らせる事ができるICです。例えばABCDに
1010と入力を送ると5に相当する7セグのLEDを光らせてくれます。
7本のLEDを制御するのに4つの入力で済む事が利点です。ロジックICだけで回路を組む際は他にも2進数カウンタの74HC193などを使うなどするのですが、今回は単に入出力ピンの節約で用いました。
PIC16F886はRA0~RA7、RB0~RB7、RC0~RC7の24ピンが入出力に使えるのですが、RA0~4を当たりの演出、RB0~RB6をスイッチの入力、RC0~RC6を7セグの処理に使っているので、入出力のピンに余りがあったのでこの74HC47はいらなかったかもしれないです。
行き当たりばったりで作っているのがわかりますね。
RC0~RC6が7セグの処理に使われていると聞いて、さっき74HC47のABCDしか入力が必要ないのになぜ0~6と7本も使っているのか?
と言われると、7セグを3つ表示させるためにABCD以外に3本使っているからです。LEDは+側とー側に分かれており、その片方が下の図のように7本で共通になっているのですが

共通になっている図

この共通になっているところを+かーにするかでその一つずつの7セグを光らせるかどうかを決める事ができます。7セグに流すための信号は同じ形式なので、回路図のように7セグの入力をすべて共通にして回路図中の7SEG1、2、3に対して+-をPIC側で切り替えてそれぞれの7セグに対して順番に数マイクロ秒ずつ表示させることで人の目にはあたかもずっと表示されているかのように見えるわけです。これをダイナミック点灯といいます。
この切り替えに3本のピンを使っているので7本を使っています。

74HC164は何の働きかというとシフトレジスタという働きですが、
これは何かというと入力された+-をQA~QHまでずれるように順番に出力するものです。これによりLEDが流れているように見えます。
74HC164は入力とクロック、クリアの3本が必要なのですがLEDのー側にPICからのピンをつなぎ、LED全体をオン、オフできるようにしています。

プログラムは下に置きました。C++とかが使えればよかったのですが、なんかPICが古の技術なのと、安いからと適当なPICを使ったのでCで書かれています。PICのconfigなどを省いていますが、そのあたりがわかる人なら何がやりたいかわかると思います。
わからんなあって人はすごいなあと思ってください。
わかる人からしたらガバガバなのがわかってしまうのですが、大目に見てください(改善点があればこの記事のコメントでこっそり教えてください)。
次のイベントではなんか小型のゲームを作る予定です。

char count=0;
char count2=0;
char seg[10]={0b00000000,0b00000001,0b00000010,0b00000011,0b00000100,0b00000101,0b00000110,0b00000111,0b00001000,0b00001001};
void display(char,char,int);

void led(){
    while(1){
        RA3=1;
        RA2=1;
        for(int i=0;i<=30;i++){
            RA1=1;
            if(rand()%4==0){
                RA0=1;
            }
            else{
                RA0=0;
            }
            if(30-i<=8)RA0=0;
            display(count,count2,15);
            RA1=0;
            display(count,count2,15);
            srand(rand());
        }
        for(int i=0;i<3;i++){
            RA3=0;
            display(count,count2,40);
            RA3=1;
            display(count,count2,40);
        }
        RA3=0;
        if(RB4==1){
            RA2=0;
            display(count,count2,10);
            RA2=1;
            count++;
            break;
        }
    }
}

void display(char count,char count2,int n){
    for(int i=0;i<n;i++){
    PORTC=seg[count%10];
    RC4=1;
    __delay_us(5);
    PORTC=seg[(count/10)%10];
    RC5=1;
    __delay_us(5);
    PORTC=seg[count2%10];
    RB5=0;
    RC6=1;
    __delay_us(90);
    RB5=1;
 /*   PORTC=seg[(count2/10)%10];
    RC7=1;
    __delay_us(5);
    PORTC=0;*/
    }
}

int main() {
    ANSEL = 0b00000000;
    ANSELH= 0b00000000;
    TRISA = 0b00000000;
    TRISB = 0b01011111;//0RESET 1+10 2-10 3+100 4gift 5 7segdp 6+1 
    TRISC = 0b00000000;
    PORTA = 0b00000000;
    PORTB = 0;
    PORTC =0;
    while(1){
        if(RB3==1){
            count2++;
        }
        while(RB3==1){
            display(count,count2,1);
        }
        if(RB1==1){
            count+=10;
        }
        while(RB1==1){
            display(count,count2,1);
        }
        if(RB6==0){
            if(rand()%15 == 0){
                int a=0;
                a=count2*100+count;
                if(a>=151 & a<=161)count+=161-a;
                else if(a>=261 & a<=271)count+=271-a;
                else if(a>=304 & a<=314)count+=314-a;
                else if(a>=408 & a<=418)count+=418-a;
                else if(a>=529 & a<=539)count+=539-a;
                else if(a>=592 & a<=602)count+=602-a;
                else if(a>=767 & a<=777)count+=777-a;
                else if(a>=821 & a<=831)count+=831-a;
                else if(a>=971 & a<=981)count+=971-a;
                else count+=10;
            }
            else count++;
        }
        while(RB6==0){
            display(count,count2,1);
        }
        if(RB2==1){
            if(count>=10){
                count-=10;
            }
            else{
                if(count2==0){
                    count=0;
                }
                else{
                    count2--;
                    count+=90;
                }
            }
        }
        while(RB2==1){
            display(count,count2,1);
        }
        if(RB0==1){
            for(int i=0;i<=400;i++){
                display(count,count2,1);
                if(RB0==0){
                    break;
                }
            }
            if(RB0==1){
                count=0;
                count2=0;
            }
        }
        while(RB0==1){
            display(count,count2,1);
        }
        if(count>=100){
            count-=100;
            count2++;
        }
        display(count,count2,35);
        if(count2==1 & count==61){
            led();
        }
        if(count2==2 & count==71){
            led();
        }
        if(count2==3 & count==14){
            led();
        }
        if(count2==4 & count==18){
            led();
        }
        if(count2==5 & count==39){
            led();
        }
        if(count2==6 & count==02){
            led();
        }
        if(count2==7 & count==77){
            led();
        }
        if(count2==8 & count==31){
            led();
        }
        if(count2==9 & count==81){
            led();
        }
        if(count2==10){
            count=0;
            count2=0;
        }
    }
    return (EXIT_SUCCESS);
}

2023年11月11日・12日の両日ともデザフェス58南4階Q-402にて出展しています!
いつもの構造式アクセサリーや文具類に加え、9月コミティアで出した本 (Liberty of Spiritual Drugs) もまた販売します。
アクセサリーと本を同時購入で合計金額から500円引き!ぜひ同時購入をご検討ください。

表紙
目次1
目次2
タイトルページ
睡眠薬の味見をし続けていたりする
タイトルの略がLSDだからちゃんとLSDの記述もある

科学雑貨Scientiaの中の人→corvus
この記事を書いた人→いむかt

この記事が気に入ったらサポートをしてみませんか?