オームの法則すら

ラジオを作るといっても、誰かの設計した回路を、部品も指定されたものを使って、組み立てているだけだ。自分が創意工夫したりすることは一切ない。

この抵抗がなぜ1KΩなのか、このコンデンサがなぜ0.47μFなのか、
などの理由すらわからない。

わかるのは電池のプラスマイナスとか、ダイオードや電解コンデンサには極性があるとか、そんなことでしかない。

頻繁につかわれかつキーとなる部品であるトランジスタについては、何度もその動作原理や効果を調べているのだが、正直言っていまだにさっぱりわからなくて、情けなくなる。

これは、おそらくものすごく基本的なことが欠けているからだと思う。

たとえば、先日、こんな疑問を持った。

オームの法則というのがある。乾電池1個を回路につなぐと1.5Vの電圧がかかる。
そして電流が流れる。

その時流れる電流は、電圧÷抵抗値で求められる。

抵抗が100Ωであれば、1.5/100=0.015Aだ。

しかし、実際にテスターで電流を測ってみると計算通りの値にならない。
テスターが壊れてんのか?
電圧は1.5Vマンタンではないがそれくらいの値を示す。

わたしはテスターを電池切れ確認装置として使っていたから、それはわかっている。
しかし電流を測ることはまずない。

そもそも、抵抗が全くない状態で、電池の両極を電線でつないだらその電線にはどれくらいの電流が流れるのか?

E=I*Rの Rがゼロの場合だ。

数学的に言えば無限大ということになる。

が、実際には抵抗ゼロというのはあり得ず、抵抗をつけていない電線にも抵抗はある。

さらに、電池そのものにも内部抵抗というものがある。

テスターのツマミをDCmAの500にして、電池の両極に触ってみると、
400くらいで止まる。

400mAしか流れていない?電線や電池の内部抵抗があるとはいっても、
400mAしか流れないということはその抵抗は

400mA=0.4A
1.5=0.4*R
R=1.5/0.4=15/4=3.75Ω

そもそもなんでテスターの電流は500mAまでしか測れないのか。

自分の持ってるのは安物だからだろうと買おうとしてわかったのだが、私の持っているのはSANWAのCP-7Dという定番商品で、もう20年以上前に買ったものだが今買うと4000円くらいするそこそこのモノだ。

1000円とかのテスターもあるし、そんなに安物ではない。

先ほどの計算での3.75Ωというのは、大きいのか小さいのか。
内部抵抗など0.01Ωとかだと思っていた。

1.5=A*0.01
A=1.5/0.01

電池を直結したら150Aくらい流れるかと思っていたのだ。
150Aってどれくらいなのか電気の強さはボルトで表すが、電流はなんなのか。
強さではなく量なのか。

・・・・などということを疑問に感じている。

「オームの法則くらい知ってるよ」と思っていたが、それすら危ういのだ。

ラジオを作るきっかけ

最近ラジオを作っている。

私はもともとソフトウェア開発者で、今はネットワークエンジニアまたはシステムインテグレータみたいなことをしている。

何も知らない人はそういう仕事は「理系」の人がやることだと思っているが、そうではない。確かに理系の人のほうが向いているかもしれないが、数学も物理も必要ない。

でも触っている装置は精密機械であり電気仕掛けであるから、その動作原理などは知っておくにこしたことはない。

しかし、まったくと言っていいほど知らない。

私だけでなく、IT、情報通信産業というものに従事しているほとんどの人は、非常に簡単な、低級なことしかやっていない。


その割には「技術者」と呼ばれ、時代の最先端を行っているかのようなイメージを持たれて、悪い気はしないが、自分の薄っぺらさや無能さは痛感している。

どんな仕事だって長くやっていれば同じことの繰り返してアタマを使うこともなくつまらなくなるのだろうとも思うが、自分がダメなだけかもしれない。


話が長くなりそうなので本題に移るが私がラジオを作るようになったきっかけはraspberry piである。

piは、小さなコンピュータである。

だが、それだけではない。piにはGPIOというインタフェースがついている。

それを使って、さまざまな装置を制御できる。


だいたい最初はLEDをつける。

くだらない。ただの豆電球じゃねえか。


最新のテクノロジーを使って、LEDを点滅させて喜んでんのか。アホらしい。


という気分になった。



LEDを買いに電子部品の店に行って、いろんなパーツを見る。

人もたくさんいる。


そういえば中学生のころ授業でラジオを作ったっけ。


家には半田ごてやテスターもある。


ちょっと基本的な電子回路くらい理解しておこうか、

という感じでラジオを作ってみることにした。

スピーカーとボリューム




スピーカーとボリュームがついた。

ボリュームはスイッチも兼ねている。

写真ではスピーカーがトランスに直結しているが、

本当はイヤホンジャックがあって、イヤホンと切り替えられるようにしている。


最初に作ったときはスピーカーがならず、イヤホンをささないと鳴らなかった。


それから、初めて半田付けをした。

今までブレッドボードにさしていたが、ちょっと複雑になってはんだ付けしてしまったほうがかえって楽だと思った。

だがはんだ付けは慣れていないのでなかなかうまくいかなくて、汚くなってしまいとても見せられるようなものではない。


組み立てが終わってスイッチを入れても鳴らなかった。

さて、何が原因なのか、どうやって確認していけばいいのかわからず途方にくれた。


とりあえず回路図と突き合わせて誤配線や部品の間違いがないかを確認する。

半田付けが不十分なところを再度つける。


耳をすますと、スピーカーがプーンとかピーンとかいう音をかすかに立てている。


アンテナコイルの細い線のはんだ付けがしっかりできてないのではと思いやり直す。


イヤホンジャックにクリスタルイヤホンをさしたら、爆音で鳴った。


ジャックをさしたらスピーカーが切れてイヤホンで鳴る、という配線ができていない。

でもイヤホンで鳴るのだから、ラジオ自体は完成している。


とりあえずスピーカーを鳴らしたかったので、イヤホンジャックを外してスピーカーを直結したら鳴った。


けっこうな達成感だ。



一晩中つけっぱなしで寝た。


さあ、それではケースに入れて持ち歩こう、と思った。

が、それにはイヤホンを使えるようにするのは必須だ。


そこは自力でなんとか解決した。


ケースを買ってきた。ピンバイスやホットボンドも買った。


が、穴あけは結構めんどうくさい。


ピンバイスで開けられる最大の穴は3mm。

バリコンやボリュームを出すには7mm程度の穴をあける必要がある。


ドリルや大きい穴を開けられるピンバイスを探したが安くて手軽なものがない。



WEBに情報を公開している人はピンバイスで開けてからヤスリで広げる、などと言っているが

やっぱりそれしかないのか。

apacheでhttpsを使う

httpsを使いたい。

別にセキュアにしたいわけではなく、httpsでのアクセスを確認したいだけ。

macでやってみて証明書も自分で発行できて簡単でopensslとかならcentosも同じだろうと、やってみた。

ちょっとゴタゴタしたので、メモしておく。

# which openssl
/usr/bin/openssl

opensslは入っている。


# which mod_ssl
/usr/bin/which: no mod_ssl in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mod_sslは入ってない。

じゃあ、入れよう。

# yum install mod_ssl
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package mod_ssl.x86_64 1:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd = 2.2.15-54.el6.centos のパッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd = 2.2.15-54.el6.centos
            インストール: httpd-2.2.27-1.el6.x86_64 (@CentALT)
                httpd = 2.2.27-1.el6
            利用可能: httpd-2.2.15-53.el6.centos.x86_64 (base)
                httpd = 2.2.15-53.el6.centos
            利用可能: httpd-2.2.15-54.el6.centos.x86_64 (updates)
                httpd = 2.2.15-54.el6.centos
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


入らない。

apacheのバージョンが新しすぎるようだ。

別にバージョンなんかなんでもいいので、ダウングレードしよう。


yum downgradeをやってみたができないので、消して入れなおす。

# yum remove httpd

消えた。

インストール

# yum install httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd.x86_64 0:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd-tools = 2.2.15-54.el6.centos のパッケージ: httpd-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: httpd-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd-tools = 2.2.15-54.el6.centos
            インストール: httpd-tools-2.2.27-1.el6.x86_64 (@CentALT)
                httpd-tools = 2.2.27-1.el6
            利用可能: httpd-tools-2.2.15-53.el6.centos.x86_64 (base)
                httpd-tools = 2.2.15-53.el6.centos
            利用可能: httpd-tools-2.2.15-54.el6.centos.x86_64 (updates)
                httpd-tools = 2.2.15-54.el6.centos
            利用可能: httpd24u-tools-2.4.23-2.ius.centos6.x86_64 (ius)
                httpd-tools = 2.4.23-2.ius.centos6
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


できない。

httpd-toolsとやらがひっかかってる。

こいつも消す。



# yum remove httpd-tools
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd-tools.x86_64 0:2.2.27-1.el6 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 パッケージ                    アーキテクチャ           バージョン                     リポジトリー                容量
========================================================================================================================
削除:
 httpd-tools                   x86_64                   2.2.27-1.el6                   @CentALT                   137 k

トランザクションの要約
========================================================================================================================
削除                 1 パッケージ

インストール済み容量: 137 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1
  Verifying               : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1

削除しました:
  httpd-tools.x86_64 0:2.2.27-1.el6

完了しました!


「will be 削除」(笑い)


インストール

#yum install httpd

はいった。



# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 18 2016 15:24:00


mod_sslをインストール

# yum install mod_ssl

はいった。


「will be インストール」(笑い)



これで必要なものはそろったので設定をしていく。


httpsサーバを動かすには証明書が必要。

証明書といっても、テストでhttpsアクセスするだけならお金を払って発行してもらう必要はない。

そういう場合は自己署名証明書というものを使う。

いわゆる「オレオレ証明書」である。


(参考)
http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A


apache + ssl 設定の方法はいろんな人が書いているが、内容は微妙に異なる。



秘密鍵を作る。

よくわからないが、これがないと証明書が作れないし、簡単に作れるので作る。

暗号の強度とかはどうでもいいがいまどき 3desとか1024は古いのでナウくする。

パスワードを要求されるので2回入力する。

# openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...............................................................................................................................................................................................................................+++
..............................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:


CSRを作る。

CSRとは証明書を発行する元ネタのようなものだ。
国だの組織名だのいろいろ聞かれるが全部適当でよい。

challenge password、emailだのは入れなくてよい。
というか、確認してないが必須項目はCNのみじゃないだろうか。

CNとはサーバのfqdnだが、自己署名証明書なので一致してなくても関係ないと思う。

一応、本当のfqdnを登録した。

下記のkintamaはもちろんサンプルである。


# openssl req -new -key server.key -sha256 -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:kintama
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kintama.net
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


秘密鍵とCSRがそろったら、証明書を発行する。

有効期間10年。100年とか1000年とかでもできるのだろうか?確認してない。

-in に作成したcsr、 -signkey に作成した秘密鍵の名前を指定する。

-out で指定した名前で作成される。


秘密鍵を作ったときに設定したパスワードを入力する。


# openssl x509 -in server.csr -days 3650 -req -signkey server.key -sha256 -out server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Tokyo/O=kintama/CN=kintama.net
Getting Private key
Enter pass phrase for server.key:


証明書ができたら、ssl.confを編集する。

(参考)
http://www.ryouto.jp/linux/linux_44.html


vi /etc/httpd/conf.d/ssl.conf

変更するのは以下

DocumentRoot "/var/www/html/" #コメントを外す
ServerName kintama.net:443 #サーバ名
SSLCertificateFile /home/kintama/ssl/server.crt #コメントを外して証明書の場所を指定
SSLCertificateKeyFile /home/kintama/server.key #コメントを外して秘密鍵の場所を指定



DocumentRootは任意の場所を指定できる。

つまり、httpとhttpsで違うページを表示できる。

証明書と鍵はさっき作成したものを指定する。

場所と名前はなんでもよいがもちろんそこに先ほど作った秘密鍵と証明書がないとだめだ。



httpdを再起動する。

さっき設定したパスワードを入力する。

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server kintama.net:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

iptablesで443を開ける。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT


おわり。


おまけ

httpdを再起動するたびにパスワードを入力するのがウザい場合は、
下記で無効にできる。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

無効にするときにパスワードを聞かれてイラっとするが、これが最後なので我慢する。

centosは6です。

正式なバージョンは.....

# cat /etc/redhat-release
CentOS release 6.8 (Final)