かまりくんの遊び場

電子工作とか

モンテカルロ法を使った円周率を求めるpythonプログラム

import random
gco = 0
#nは求めたい桁数
n = input("求めたい桁数を入力しようね!")
for i in range(pow(10,n)):
    x = random.random()
    y = random.random()
    a = pow(x,2)+pow(y,2)
    i = i - 1
    if(a<=1):
        gco = gco + 1

pi = 4*gco/(pow(10,n))
print(pi)

さて、このプログラムの解説に入ろう。このプログラムで一番大事なのはファイル名である。まずpythonでプログラムを書いているので拡張子は".py"となり、そして円周率はπ(pi)である。つまりファイル名は"pi.py"となる。

マルチバイブレータで遊ぼう1



はじめに

どうも、かまりです。

この「マルチバイブレータで遊ぼう」シリーズでは名前の通りマルチバイブレータについて扱います。特にこの記事では双安定マルチバイブレータについて扱います。

マルチバイブレータってなぁに

ja.wikipedia.org

今回作った双安定マルチバイブレータ 

さて、マルチバイブレータについて多少わかっていただいたところで、双安定マルチバイブレータの動作についてそこそこ丁寧に説明します。イメージわかない人もいると思うので動画はっつけときます。

動画だとこんな感じの動作です↓

https://twitter.com/kamarikun/status/1104713583001165825

 

ここからの説明は下の画像を見ながら読んでください。

  1.  最初はどこにも電流が流れていない。
  2. Sに電流をオンにする。
    すると、Q4がオンになりQ4のコレクタエミッタ間に電流が流れる。これと並列につながっているQ5のトランジスタのベースもオンになる。
    このときQ5とR6は並列であるが、Q5のほうは抵抗がないのでR5には電流が流れずQ5のみに電流が流れる。ゆえにQ2のトランジスタはオフのままになる。
    またR1とR3は並列なのでR1にも電流が流れ、Q1はオンになってOUTPUTに電流が流れる。
  3. Sの電流をオフにする。
    Q4に電流は流れなくなるが、Q5には電流が流れているので2の状態をキープする。
  4. Rの電流をオンにする。
    すると、Q3がオンになりQ3のコレクタエミッタ間に電流が流れる。これと並列につながっているQ2のトランジスタのベースもオンになる。
    このときQ2とR3は並列であるが、Q2のほうは抵抗がないのでR1、R3には電流が流れずQ2のみに電流が流れる。ゆえにQ5、Q1のトランジスタがオフになる。 また、OUTPUTに電流は流れなくなる。
  5. Rの電流をオフにする。
    Q3に電流は流れなくなるが、Q2には電流が流れているので4の状態をキープする。
  6. 以後繰り返し

f:id:kamarikun:20190317185917p:plain

双安定マルチバイブレータ

RSフリップフロップ回路

動作原理について理解してもらったところでこんな回路何に使うんじゃと思った方、察しがついた方いると思います。

そうです、ファイナルファンタジーではありません。

この双安定マルチバイブレータはRSフリップフロップとして機能します。

RSフリップフロップとはなんぞやという方、黙って真理値表をみましょう。

真理値表は以下です。

 

R S OUTPUT
0 0 保持
0 1 1
1 0 0
1 1 禁止

 

フリップフロップとは記憶する論理回路で、コンピュータのメモリには欠かせない回路です。

Sに1を1度入力すると、Rに1を入力するまで1を出力し続ける。逆にRに1を1度入力するとSに1入力するまで0を出力し続けます。また、1、1のときに禁止なのは意図しない動作をする可能性があるからです。

ちなみにSとRはSETとRESETの頭文字です。わざわざRSフリップフロップと書いているのは、ほかにもJKフリップフロップとかもあるからです。興味のある方はぜひ調べてみてください。

 

今更ですが、今回の記事はフリップフロップを作るということで始めたのですが、結局は双安定マルチバイブレータを作ることに至りました。

苦戦したところ

今回の双安定マルチバイブレータですが、OUTPUTの仕方でとても苦戦しました。というのも、双安定マルチバイブレータ自体はネット上に回路がたくさん上がっていたのでそのまま参考にして回路を組んでみたのですが、その元の回路は上の図でいうR2、R7と直列でLEDをつないでいるもので吐き出しの信号として使うにはどうやって出力すればよいのかわかりませんでした。そのうえ、R2、R7はオフの時でもベース電流として微弱な電流が流れているので完全に0Vにすることができず、信号としては使えそうにありませんでした。

さて、下の画像を見てください。僕のブログを読まれた方なら見覚えがあると思います。そうです、NOT回路です。OUTPUTに使ったのは前回のブログで書いたNOT回路です。上の画像のR1、R3が並列なのできれいにスイッチングできます。こうすることでしっかりとオンの時は5V、オフの時は0Vの電圧の信号が取れます。

f:id:kamarikun:20190317193520p:plain

NOT回路

おわりに

クソクソガバガバダブンダブンのダラダラ駄文を最後まで読んでいただきありがとうございます。計算機作ろう without IC プロジェクトの中で、まともに動くフリップフロップ設計できてよかったです。最初はマルチバイブレータなんて余裕やろと思っていたのですが、しっかりと設計しようとすると難しくて一週間くらい頭を抱えていつの間にかNPNトランジスタのコレクタピンだけペロペロするようになってました。

割と難しくて面白いので興味を持った方はぜひ作ってみてください。

 

次の「マルチバイブレータで遊ぼう2」では非安定マルチバイブレータ発振回路について扱います。お楽しみに!

 

なにかあったら、Twitterに報告してください。

twitter.com

論理回路をトランジスタで作ろう2

この記事の目的

NOT回路を前回紹介したのですが、改良しましたので紹介します。

 

どこが悪かったのか?

前回の回路(下図参照)は1石でNOT回路を作ったのですが、ブレッドボード上で動かしてみると少し出力のLEDの暗く、電圧が信号用として使うのには不十分でした。

電圧が低かった原因は、この回路だとコレクタの前に抵抗があるため、OUTPUTにかかる電圧が低くなってしまいます。

この場合だと1kΩと330Ωなので1.2Vくらいの出力です。

f:id:kamarikun:20190128165937p:plain

前回のNOT回路

 今回のNOT回路

そこで今回は、前回OUTPUTだった部分をトランジスタのベース電流にして信号を増幅しました。(下図参照)

この回路図での出力はコレクタに抵抗が付いていないので出力は5Vあります。

f:id:kamarikun:20190310234434p:plain

今回のNOT回路

終わりに

やはり回路の計算は大事ですね。前回のガバガバ設計だと組み合わせたときに途中でうまく動作しなくなってくるはずなので早めにしっかり計算しといて正解でした。AND回路やOR回路も実は抵抗値とか少し変えてて一番出力で高い電圧が出るようにしてます。ぜひ計算しましょう。

 

次の記事ではXOR回路について説明しようと思います。

楽しみにしててね。

 

 

なにかあったら、Twitterに報告してください。

twitter.com

論理回路をトランジスタで作ろう1

こんにちはかまりです。今回はトランジスタ論理回路作ってみたので紹介します。いろいろ調べたのにあんまり論理回路についての記事がなかったから紹介します。

電子工作初心者なので間違ってることあるとおもうので、見つけたらコメントするかTwitterで教えてください。

 

論理回路ってなあに

論理回路ってのは要するにANDとかORとかNOTとかそういった類の論理演算子を実際に電子回路で作ろうねっていうやつです。

まあ、超適当にいうとコンピュータに使われてるICを再現しよう見たいな感じです。0と1で情報を表すやつ。

 

ANDとOR

多分知ってると思いますが、ANDは日本語で言うところの「かつ」で、ORは「または」です。

そのANDとORの回路ですが、結論から言うとANDは直列回路ORは並列回路です。

豆電球を考えればすぐわかると思います。

直列つなぎの時は片方だけ豆電球がつながってても電気流れませんよね。だから、直列がAND。並列の時は片方だけついててもと電気流れるのでORってことです。真理値表いちおう下に書いときます。(スイッチがオンの時を1、オフの時を0としてあらわす。)

P Q PかつQ PまたはQ
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1

 

まあ、こういうわけですよ。それで、じっさいに回路組むときにこれだけだったら単純にスイッチを直列並列にそれぞれつないでカチカチすればいいんですよ。だけど、ちょっと複雑になる(ほかの論理記号と組み合わせる)と応用が利かなくなる(さすがに全部手動でスイッチ押してらんないよー)ので、トランジスタつかってスイッチしようというわけです。

そういうわけで、LTSpiceで回路組んでみました。下の図みたいになります。

f:id:kamarikun:20190128162119p:plain

AND回路とOR回路

見ての通り直列と並列です。

で、多分AND回路の二個目のNPNトランジスタのコレクタについてる抵抗(R17)ってなんで必要なの??ってなった人いると思います。これは二個目のトランジスタだけがonになってるときに本来ならば電流は流れていないはずなのに、ベースからわずかながらに電流流れちゃうからなんですよね。

AND単体ならほぼ問題ないですが、出力した電流拾ってほかのトランジスタのベース電流とかに使うと、増幅されてあとでよくわかんないところで電流流れるみたいなことが起こるのでつけといたほうがいいです。

実際にあとで説明するのですが、NAND回路組んだ時に真理値表通りに動かなくて苦しみました。

二度と同じ苦しみを味わう人間がこの世からいなくなるように世界平和を祈ろうと思います。

 

NOT

さて、NOT回路です。

NOT回路はプログラミングでいう if文みたいなのをトランジスタで再現すればできます。

こんな感じです。

f:id:kamarikun:20190128165937p:plain

NOT回路

ようするに、ベースに電流が流れるときは電流がエミッタに流れて、ベースに電流が流れないときはコレクタにエミッタに流れないでOUTPUT(R95)のほうに電流が流れるというわけです。

そこまで複雑じゃないです。

 

NOTをANDやORとうまいこと組み合わせるとNAND、NOR、XORなどどんな論理回路でも作れます。ちなみにNANDだけで全部の論理回路が組めるらしいですよ。気になる人はググってください。

 

終わりに

本当はXOR回路を作った話を自慢しようと思って書き始めた記事だったのですが、疲れたのでここまでにしたいと思います。次の記事ではXOR回路とかについて多分書くと思います。

あと、二進数の足し算計算機をロジックIC使わないで作ろうプロジェクト始めたのでできたら報告しようと思います。

 

なにかあったら、Twitterに報告してください。

twitter.com