Quantcast
Channel: 波動砲口形状研究
Viewing all 292 articles
Browse latest View live

コスモガン改造記 その17 これにて一区切り

$
0
0
動画を作った。Windowsからムービーメーカーが消えてしまって面倒くさくなってしまったのもあり、こういうのも大分久しぶりの作業だ。



ブログで記事にしていないこともあったりするので、よろしければ見てくださいな。

それにしても今回は思った以上に長丁場だった。PICとDFplayerの組み合わせ、電池駆動、銃の塗装、ベルトやケースの作成と、初めてやることが多く、試行錯誤の連続だった。

ベルトやケースのような紙と布系は嫁さんにも大分助けてもらったし、MKさんや旦那さんにも手伝ってもらったり教えられたりした。周りの人のおかげで欲しいものを実現できたわけなので、ありがたいと思う。

去年あれがやれるらしいと書いてから一年余り、とうとうできるようになったわけだ。

しかし終わってしまうと、この問題をどうしようかと考えながらネットや店をめぐる楽しみもなくなってしまって、一抹の寂しさもある。

まあしかし、そのうちまた次のいいネタと出会うだろう。それより仕事の方を頑張らないとね。

箱庭の中のコロナ

$
0
0

コロナのせいで仕事にも大分影響が出ている。今後どうなるのかの見通しが欲しいのだが、そういうことは誰も教えてくれない。

 

しょうがないので傾向だけでも探ろうと、厚労省の発表するデータをエクセルに落とすようになった。

 

データは数が少ないうちはあまり当てにならないが、多くなると多少ブレがあってもそれなりに信用できるようになってくる。その意味で、感染者が増えたこの数週間のデータは傾向を知る重要な手がかりだ。

 

私がとりあえず注目しているのが、「感染者が2倍になるのにかかる日数」だ。

 

 

3月の下旬では2週間くらいかかっていたのが、段々短くなってきて、4月に入ってからは大体1週間で2倍になっている。

 

昨日(4月12日)の厚労省のデータで感染者が約6千6百人なので、このペースが落ちない限り今週末には1万3千人、次の週には2万6千人を超える。

 

2万6千人というと相当な人数だが、日本全体の人口で割ればまだ割合が少ないので、免疫を持っている人はほとんどいない。ウイルスは手当たり次第感染し放題だ。

 

しかしある程度感染者が増えると、感染させられる相手が減ることで徐々に新規の感染者は減ってゆく。

 

このあたりのしくみは私のような素人でも思いつくものだが、調べてみるとちゃんと名前があってSIRモデルと呼ばれているようだ。https://ja.wikipedia.org/wiki/SIR%E3%83%A2%E3%83%87%E3%83%AB

 

とりあえず4月10日の感染者数と退院者数(4461名、697名)を初期値にして、総感染者数は1週間で約2倍、新規の感染者は3週間ほど(20日)で免疫獲得者になるというパラメーターにしてSIRモデルでざっと数字を作ると、新規感染者数の推移は次の図のようなものになる。

 

 

秋口にはほぼ収束して、来年のオリンピックも無事開催できるわけだ。

 

ただし、8月には1日に200万人の新規感染者が出るというとんでもない事態になる。

 

さて、昨今外出自粛で人との接触の8割減が求められている。

 

感染の確率が8割減るとどうなるだろうか。およそ2週間後の4月下旬からその効果が出るとして、試算結果はこうなる。

 

 

たちまち収束だ。

 

ただしこれは本当に接触を8割断つということをずっと続けるという前提での数字だ。

それでは経済活動もままならない。

 

そこで、2か月後に再び経済活動が元に戻り、感染の確率も元に戻るとしよう。するとこうなる。

 

 

見ての通りで、ピークが2か月後ろにずれるというだけの効果しかないのだ。

 

これらの試算結果はどうにも非現実的に思える。しょせんは素人計算か。

 

・・・と思ったのだが、厚生省クラスター対策班の西浦博教授の試算(10万人規模の都市で、3日で2倍というドイツと同程度の速さで感染が広がった場合、1日当たり最大で5400人以上の新規感染者が出る)をこのモデルで追試するとだいたい似た結果になる。それほど荒唐無稽というわけではないようだ。

 

結局、この問題の対応策というのは2つのうちどちらかしかない。

 

1つ目は早期収束を狙って感染爆発を放置し、その結果亡くなる人がでてもしょうがないと諦めることだ。これなら年内に国内の経済活動を元に戻すことができる。

 

2つ目はなんとか経済活動への影響を最小限に抑えつつ、感染も制御するという綱渡りを続けるという策だ。この場合、収束には何年もかかるし、経済活動への影響も相当長く続く。


政府が何を考えているのかいまいちよく分からなくて、オリンピックや習近平訪日がなくなってもなおその場しのぎの対応をしているときには1つ目を狙っているんじゃないかと疑っていたのだが、昨今はしぶしぶと2つ目に舵を切ってきているようだ。

 

 

ただこれはこれで危険な戦略だ。収束には何年もかかるのに、それを続ける体力の方が持たないということになりかねない。
 
どちらにせよ大変なわけだが、政府がどういう見通しを持っていてどういうゴールを目指しているのかという説明はもっとしてほしいものだと思う。それがないと、政府が(たとえ本気でやっているとしても)その場しのぎでやっているようにしか見えなくなる。
 
まあしかし、長期的な見通しということに関しては不確定な要素がすぎて、はっきり言えないのはしょうがない面もある。季節性の影響で夏には自然収束するかもしれない。あるいはアビガンが有効ということになって、それほど恐ろしい病気でなくなるかもしれない。
 

ただ、割とはっきりしていることはある。外出自粛の効果が出るとしてもまだまだ先で、1週間で2倍というペース自体はしばらく変わらないだろうということだ。

 

つまり今週には感染者は1万人を超え、次の週には2万人を超える。退院者数の増加ペースは新規感染者数の増加ペースよりもずっと遅いので早晩病院はパンクする。どんなことよりまずこの患者数をとうさばくのかという対策が最優先だと思う。

 
 
ちょっとだけ蛇足を。

 

私は「人間に対する信仰心」は持たないようにしたいと思っている。

 

つまり、

 

「特定の誰かの言う事ややることは何もかも絶対正しい」

 

と妄信するようなことはしないということだ。

 

私に限らず、大抵の人がそうじゃないかと思う。同時に、

 

「特定の誰かの言う事ややることは何もかも絶対間違っている」

 

と信じることも、向きが逆なだけで人間に対する信仰心と同じ種類のものだ。やるべきじゃないと自分に戒めている。

 

今回の内容とらえようによっては政権批判に聞こえるかもしれないが、それで安倍やめろという話をしたいわけじゃなく、単純に政策に関する要望を書いているだけなのだということはご了解いただきたい。

 

箱庭の中のコロナ2

$
0
0

2週間前に、このペースなら今頃は感染者が2万人を超えているはずだと書いたが、幸いにして外れた。

 

感染者が倍になるのにかかる日数はあれから徐々に伸びてまた2週間程度に戻ってきている。

 

そもそも感染者をちゃんと拾えているのかという問題はあるので、ある程度割り引いて考えないといけないのだが、厚生省の統計を見ると検査数自体は増えていっているので、

検査数を絞ってその結果統計に表れる感染者数が減っているのだというわけではないのだろう。

 

この調子で行ってほしいものだ。

 

タイトルの箱庭のというのは現実じゃなくて仮想の環境のという意味なのだが、今回は前回のシミュレーションとは違う箱庭の話をしたい。実験経済学や行動経済学と呼ばれる分野の話だ。

 
社会的ジレンマという言葉をご存じだろうか。世の中にはみんなが協力すれば全員幸せになれるが、それがなかなか実現しない状況というのがある。
 
今回のコロナの外出自粛要請などはそれにあたるだろう。
 
皆が自粛すれば感染は収束して皆にとってハッピーな状態になる。逆に外出を続ければすべての人が命の危険というリスクを多少なりとも負うことになる。
 
社会的には全員が自粛するのがベストだ。だが個人レベルでは違う。
 
もしほかの人たちが我慢して自宅にいるなら、外を出歩くのは実はお得な選択だ。閉じこもる我慢をしなくていいし、感染のリスクもない。
 
そう思って一人が外を歩く。すると別の誰かも考える。外を歩くのが1人から2人に増えたってリスクはほとんど変わらない。自分が我慢する理由なんてあるだろうか。
 
こうして外を出歩く人が増えると、もう自宅にとどまる理由はなくなる。我慢して自宅にいても、出歩く人たちのせいで社会全体の感染のリスクは全然減らない。閉じこもって収入の機会を失っている分だけ損になるのだ。
 
こうして自粛要請は有名無実化する。
 
こういう社会的ジレンマは様々な例がある。環境汚染の問題などは典型的な例だ。
 
もっと身近な例ならばチームで仕事の成果を共有するようなときがそれにあたる。他の人の努力に甘えようとする奴が結局一番得になってしまうと、全員がやる気を失い、成果が上がらない。
 
ゲーム理論はこのような社会的ジレンマの状況では社会的協調は必ずや破綻すると予言する。
 
まあしかし現実にはそうした状況で自発的に協力する人は結構いる。そこにはモラルや人間関係といった目先の損得だけでない要因が絡んでくる。
 
ならばモラルや人間関係に縛られない状況を仮想的に作れば、人間の行動の本質をあぶりだせるかもしれない。
 
そのうえでどういう要素が協力を引き出すのか条件をコントロールすれば明らかになるかもしれない。
 
そういう実験が心理学や経済学の分野で数多く行われている。
 
実験の内容は簡単で、被験者に集まってもらい、PCのネットワーク上で匿名のままゲームをしてもらう。ゲームでは数名が一組になる。皆が2種類のカードを持たされて(例えば〇と◇)どちらを出すかを決めるように言われる。
 
全員が〇を出せば全員が100円もらえる。
全員が◇なら全員50円だ。
他の人が〇を出しているときにある人が◇を出したら、◇を出した人は150円、〇の人は10円もらえる。
 
この〇が自粛要請に応じることで、◇が無視することだというのはお分かりいただけると思う。全員が〇を出せば明らかに全員◇よりよい状況になる。
 
しかし他の人達が〇を出すかもしれない状況なら、◇を出したほうがずっとお得だ。そして他の人達が◇を出すかもしれない状況なら、◇を出さないとひどい目に合う。
 
つまりこのゲームのルールは◇を出して他の人を裏切るように誘導している。この条件で実際にゲームをしてもらうとどうなるか。
 
(ちなみにこういう実験ではプレイヤーがゲームで稼いだ金額を実際に謝金として払う。お金がかかっていないと真面目にやらないかもしれないからだ。)
 
世界中の様々な国でこの実験は行われている。被験者は大学生が多いが、社会人を対象にしたものもある。金額もいろいろなバリエーションがあるのだが、結果は大体は似ていて、半分かそれ以上の人が〇のカードを切る。
 
ただし、10回同じゲームを繰り返すと、〇を出す人の割合はどんどん減ってゆく。
〇を出して割を食った人は、段々あきらめて◇を出すようになるのだ。
 

(…今回長いなあ!普段なら長くなると項を分けるのだが、今回このまま続けます。)

 
さてそうした研究の中で明確になってきたのが、人の行動パターンだ。人がどの状況でどう行動するかを、厳密な管理のもとで検証する地道な研究の積み重ねで、およそ人間というのはざっくり言って
 
1)他の人が協力するなら協力する、条件付き協力者
 
が大多数で、全体の半分かそれ以上
 
2)何があっても協力しない、他者の努力へのただ乗り狙い(フリーライダー)
 
が3割くらい
 
いるということが分かってきた。残りは両者の中間に位置したり、分類が難しいパターンを示す人だ。
 
2)のただ乗り狙いの人は、他の人が協力して〇を出しているからと言って、
 
「あ、じゃあ自分も次は〇にするか」
 
とならない。ある種の信念を感じるレベルで◇を出し続ける。
 
その存在によって、自分が割りをを食うということを理解した条件付き協力者はやがて協力するのをあきらめてしまう。
 
必ず現れるフリーライダーを何とかする方法はないか。これも実験で確かめられている。
 
もっとも簡単なのはただ乗り狙いの行動をしたものに罰(得点の棒引き)を与えることだ。これをやると劇的に改善する。
 
それよりもマイルドな方法としてプレイヤー同士で会話をさせるというのがある。非対面のチャットで人間関係がそこから生まれないと分かっていても、会話があると裏切りは減る。
 
これも世界中で同様の実験がされていて、結果はどこでも大体同じだ。
 
さて、こういう研究を知っているので私は昨今の自粛要請の効果に懐疑的だった。実験室で〇を出す人の割合は日本の研究結果でもさして変わらない。むしろ欧米よりもやや悪いくらいだ。それに加えて現実世界では協力する気があっても仕事の都合で外出自粛が不可能な人も多い。
 
協力しないであろう3割をかなり確実に抑えつける罰金つきの規制は日本の社会では法改正の高い壁が立ちはだかる。
 
会話も効果は期待できない。そもそも協力しない人は協力しない人同士で普段会話しているだろう。そこから社会的な責任を自覚するのも難しい。
 
日本人特有の同調圧力に期待するにしても、8割減とか、無理でしょ。
 
そう思っていた。
 
しかし主要駅の人出のデータの報道を見ると、実際には私が思っていたよりも状況は良いようだ。(コロナに限らず、株価からヤマトのストーリー展開まで、私の予想は当たらないのだ…)
 
ただパチンコ店の報道にも表れているように、限界はある。
 
中途半端に感染者は出つつ、経済は止まったままという状況が長く続くのは避けたいところなのだが、どうにも予断は許さない。
 
現状の人の善意にあてにしたやり方は限界がある。それ以上となると政府の強権が必要だが、やたらそれを与えていいと言えるほど信用できる政府でもない。
 
このビミョーなジレンマの中での落としどころを探さなくてはいけないのが日本人の置かれている状況なのだ。
 
 
*今回の話は実際の研究をかなり簡約化して説明している。厳密な話はここやそこからたどれる研究を見てほしい。

DFPlayerをPICで操作する その0 DFPlayerにPICはお勧めできない

$
0
0

模型電飾に音を加えたいなら、DFPlayer一択です。

 

 

価格は安く、アマゾンで手軽に買える。

サイズはコンパクト。アンプがついているのでスピーカーをつなぐだけで十分な音量が出る、と文句の付け所がありません。

 

そして、DFPlayerを使って電飾をするなら、Arduinoと組み合わせるのが一番です。

 

DDFPlayer用の完全なライブラリがあるので、音量や選曲をArduinoから自由に指示できます。純正品は高いのですが、互換品なら価格もお手頃

 

LEDもArduinoからコントロールできますから、ArduinoとDFPlayerで音声付電飾は完成します。

 

ArduinoならPICより初心者にやさしく、参考資料はネット上にいっぱい。PICでプログラムを作るのに比べれば労力は1/10で済みます。

 

ArduinoとDFPlayerの組み合わせで電飾できるようになったとき、私は

 

「もうこれで電飾関係で新しく勉強することはなくなったな」

 

と思ったものです。これ以上のことを自分が将来必要になることなんてありえないと。

 

ところがその日が来てしまいました。コスモガンに音と光を組み込もうとすると、Arduinoシリーズの中でも相当小さいnanoですら、収まってくれませんでした。

 

 

DFPlayerは電飾用音源としてはぼぼ完全無欠ですがただ一つ、やたらと電力を喰うという欠点があります。

 

模型に電池も内蔵しないといけない場合、ボタン電池のようなものではあっという間に電池切れになってしまいます。ですので電池のスペースは削れない。

 

やむを得ずPICでDFPlayerをコントロールするという茨の道に乗り出すことになりました。

 

 

その結果分かったことをこれからしばらく書いてゆきます。まあ2度と自分はこの知識使わないんじゃないかという気がするんですが、どなたかのお役に立てればということで。

 

ただ、これに興味を持った方に対して、老婆(爺)心からあらかじめ申し上げておきたいのです。

 

お若いの、要らぬ苦労をすることはない、スペースにゆとりがあるなら、悪いことは言わないからArduinoをお使いなせえ、と。

 

DFPlayerをPICで操作する その1 DFPlayerひとりでできるもん

$
0
0

DFPlayerはいかにも電子パーツ然とした姿をしていますが、電源とスピーカー、スイッチをつなげば単独でプレーヤーとして機能します。

 

今回はまずそれを説明しておきます。

 

その前にマニュアルから、写真をコピペしておきます。このブログで使うのは枠で囲ったところだけです。

 

 

ブレッドボードの上下のプラスとマイナスをそれぞれつないで、

 

DFPlayerの切り欠きのある方を左にして、18~25の列に差し込み、VCCをプラスに、GNDをマイナスにつなぎます。

 

スピーカーはSPK1にプラス、SPK2にマイナスをつなぐのですが、そのままだとフルパワーで出力するのでかなりうるさいです。

 

そこで間にボリュームを挟みます。

 

ボリュームは多分1キロオームのものがちょうどいいくらいなんじゃないかと思います。脇に「102」と書いてあるやつです。

 

今手元にないので10キロオームを使います。

 

こういう基板用の抵抗は足が2等辺三角形の形に生えているのですが、2等辺を下向きにおいて、左から1,2,3と番号を仮につけておくことにします。

 

それをブレッドボードの27~29の列に左から足番号1,2,3になるように挿します。

 

そのうえで、SPK2から2番の足につなぎ、3番の足にスピーカーのマイナス線をつなぐと、可変抵抗を右に回すと音が大きく、左に回すと小さくなる配線になります。

 

 

写真では1番とSPK2をつなぐ青い線もありますが、これは可変抵抗内の接触部が壊れたときの保険で、これがあると壊れても最小限の(ボリュームを最小に絞ったときの)音は出ます。まあでもそうそう壊れないので、私普段はこの線付けていません。
 
つぎに、ADKEY1から線を引っ張ってきて(写真緑色の線)、タクトスイッチを介してマイナスに落とします。
 
あとはマイクロSDカードにMP3で音源を用意して差し込み、電源をつなげばOKです。
 
マニュアルによると3.2~5ボルトで動くそうですので、乾電池3本で足りるでしょう。
 
 
準備できたらボタンを押してみてください。カード内のファイルが再生されるはずです。
 
これでできあがり。簡単なものです。しかしこれだけでかなりのことができてしまいます。
 
以前水鉄砲に発光と音を仕込むために苦労した記事を書きましたが、あれは余計なことをいろいろしたためで、実は「引き金を引いたら音と光が出る」ということだけを求めるなら、これでもう大丈夫です。
 
LEDの発光パターンをPICか何かで作り、発光開始のボタンと、このDFPlayerのボタンを兼用になるように配線すれば、それで音と光が同時に出る仕組みは出来上がります。
 
単機能ならばPICとの連携に頭を悩ます必要はないのです。
 
 
少し欲張って、出したい音が2種類ある、ボタンによって違う音にしたいという場合はどうしましょうか。
 
マニュアルを見てください。
 
我々が今作ったのが赤の矢印のところです。ADKEY1からスイッチを介してGND(マイナス)に落とすと、Segment1つまり一つ目のファイルが再生されます。
 
2つ目のファイルを再生したいなら、青の矢印のように、ADKEY1とスイッチの間に3キロの抵抗を挟めばいいのです。
 
やってみましょう。3キロの抵抗というのは持っていないので、手元にある1キロの抵抗3本直列で代用します。
 
回路はこんな感じになります。
 
新たに追加した抵抗とボタンが、ひとつめのボタンを経由してつながっているように見えて変に思えるかもしれませんが、そもそもブレッドボートの同じ列は下で電気的につながっているので、抵抗とADKEY1が直でつながっているのと実質同じです。
 
つまりこうですね。赤い部分が1キロを3つ直列した3キロ分の抵抗、それがADKEY1に繋がっている、ということでさっきの青矢印の図と同じになっていることがお分かりにいただけるでしょうか。
 
これで左のボタンを押すと2曲目が流れます、右のボタンを押すと1曲目です。
 
(この抵抗値を変えることで、選曲や演奏スキップ、ボリューム調整などもできるので、自分で好みの機能のボタンを実装した携帯プレーヤーを作ることもできてしまうわけです。)
 
というわけで、模型から音を出したい皆様、ここまでのことを知っていればもう何の憂いもありません。適宜模型に組み込んで楽しんでみてください。
 

ここから先は、少し凝ったことをするためだけに茨の道を進むことを厭わない、そんなマゾヒスティックな向上心あふれる皆様向けの記事ということになります。

 
 

DFPlayerをPICで操作する その2 PICとDFPlayerを繋ぐ

$
0
0

これ以降の記事は、PIC+DFPlayerをおもちゃの銃に仕込みたいという人には、まあまあ役に立つはずです。

逆に言えばそうでない人にはさして役に立たない。

 

もっと一般性のある、様々な用途に対応できる記事を書いたほうがきっと多くの人に役に立つのです。

でも、一般性を持たせようとするほどに、書くべき内容は爆発的に増えてゆきます。

 

しんどいです。

 

逃げちゃだめだなんて贅沢なこと言っていいのは若い時だけです。人生の残りの方が少なくなったら効率的に逃げを打つべきなのです。

 

何の話だ。

 

えーと、PICからDFPlayerをコントロールします。銃に仕込むなら小型のPICが望ましいので、12Fを使います。

 

以前のPICの記事では12F683を使いました。しかしこれはシリアル通信のモジュールがないので、DFPlayerのコントロールに向いていません。

 

なので、より新しい12F1822を使ってゆくことになります。手持ちの12F683 もなくなったので、以降このブログで8本足のPICを使うときはこれを使います。

 

基本的には12F683でできたことは12F1822でもできるようなので、上位互換だと言っていいと思います。

 

ただ、気を付けるべきことのひとつとして、足の番号が12F683 だとGP0~GP5だったのが、12F1822だとRA0~RA5と変わっていることがあります。プログラム上でもそのように書かないといけません。

 

PICとDFPlayerの間はシリアル通信でやり取りします。

シリアル通信の発信側の端子はTX,、受信側の端子はRX、と呼ばれます。

 

TXが命令したり情報を伝える口、RXがそれを聞く耳です。

 

というわけで、PICとDFPlayerをつなぐのですが、その前にPICの方の準備をします。

 

ブレッドボードに12F1822を挿して、電源とPICkitからの書き込みの配線を作ります。

このあたりは12F683のときと全く同じです。今回はDFPlayerと同居しないといけないので全体的に左に寄せて作っています。

 

つぎに、PICのTXとDFPlayerのRXをつなぎます。

 

12F1822のTXはプログラム上で設定できます。

マニュアルによると、RA0とRA4がTXとして使えると書いてありますので、ここではRA0を使うことにします。

 

 

DFPlayerの方のRXは決まっています。橙色の枠のところの足ですね。

 

繋ぐときには1kΩの抵抗を挟まないといけないので、抵抗をそのまま配線に使ってしまいます。

 

 

こんな感じですね。

 

今回DFPlayerのTXとPICのRXの配線はしません。

DFPlayer側の状態をPICに伝えなきゃいけない状況なんて、電飾で使う限りまずない。

 

足の数がただでさえ少ないんですから、節約しなきゃ。ひとつで十分ですよ。わかってくださいよ。

 

あとはタクトスイッチをRA3,RA4につけておきます。

 

ちょっと配線が入り組んでしまっているのですが、

 

RA3はピンクの線、RA4は黄色の線を伝ってマイナスに繋がります。

 

これで回路の方は出来上がりです。次の回で、プログラムの方の話をしたいと思います。

 

DFPlayerをPICで操作する その3 関数に関心を

$
0
0

 回路ができたので次はプログラムですね。まずは左のボタンで1曲目、右のボタンで2曲目が流れるものを載せておきます。一番下にありますので、コピペ、ビルド、書き込みをして動くか確かめてみてください。

 
 解説も一応しておきます。が、これ読む人いるのかなあ…
 
 そういえばブログテーマ「模型電飾の為だけのPIC」では、見て参考にしていただくのが目的なので、何の役にも立たない、個人的なつぶやきや愚痴は書かない方針なんです本当は。でもこのPIC+DFPlayerのシリーズでは気がつくとやたらそういうのを書いてる。
 
 もうね、勝手に漏れるんですよ頭から。なんででしょうね。年ですかね。今回もいつの間にかそういうの書いているんで大分消しましたよ。

 

 

・シリアル通信関係の設定

 PICからDFPlayerへ命令するためにはシリアル通信を使います。DFPlayerは①一度に送るデータの大きさ、②データのやり取りの方法③やり取りの速さ、のそれぞれで

 

①8ビット ②非同期 ③9600ボー

 

というので通信しないと分かってくれません。DFPlayerにはほとんど柔軟性がないのでPICの方で合わせてあげる必要があります。

 

 プログラム中、オレンジにしているのがそれに関する設定です。①については特に指定しなければPICも8ビット通信のようです。②の非同期に関する設定はオレンジでアンダーライン、③9600ボーで送信させる設定はオレンジで太字にしています。

 

 細かい注釈をコメントとして入れていますが、これらは全部削除してもらっても動作には影響しません。全部省くと実は必要なのは

 

        //シリアル通信の初期設定
            TXSTA = 0b00100100 ;
            SPEN = 1;
            SPBRGL = 51 ;
            TXCKSEL = 0 ;
        //シリアル通信の初期設定ここまで

 

これだけです。

 

 

・シリアル通信(発信)を行う関数

 C言語(にかぎらず様々なプログラム言語)では特定の作業を行う小さなプログラムに名前を付けて「関数」と呼ぶ習わしがあります。

 

 関数名はこれ、その中身はこれ、という定義を書いておくと、以降は関数名を書きさえすればいつでもどこでもその小さなプログラムの機能が呼び出せます。

 

 ところで扱うのがデータだけなら、特定のデータをそこに放り込むと、作業の結果加工された別のデータになって戻ってくるので、関数という名前もまだわかります。

 

 しかしPIC上では、物理的というか電気的な動作もその関数をつかってやらせたりするので、関数というのは実のところどうもピンとこない名前です。

 
 まあ世間に逆らってもしょうがないのでここでもそう呼びます。
 

 シリアル通信の機能は、UART_Write(char data)という関数を定義してやっています。この関数は以下の太字のように定義されています。 

 

    void UART_Write(char data)
    {
      while(TRMT==0);

      {

      TXREG = data;
      }

    }

 

 シリアル通信のモジュールのイメージは、戦闘機のカタパルトです。データという戦闘機が、カタパルトに乗せられて次々と打ち出されてゆきます。

 

 PICには、TSRという、自動で戦闘機を打ち出すカタパルトがあります。しかしここにユーザーは直接戦闘機を送り込むことはできません。

 

 その手前のTXREGというエレベーターにデータを置くことで、TSRというカタパルトにデータが移され、打ち出されます。

 

 (各レジスタ、ビットのもう少しまともな説明は、データシートのP275~あたりを見てください。)

 

 問題はTXREGにデータを置いた後、次のデータを置くタイミングです。まだTSRにデータが移っていないのにTXREGに書き込んでしまうと、意図したように動かなくなります。

 

 それを防ぐのに役立つのがTRMTというこれまた自動で動く信号機です。この信号機は、TSRがデータを打ち出すと一旦赤(TRMT=1)になり、TXREGからTSRにデータが移されると青(TRMT=0)になります。

 

 つまり、TXREGにデータを置きなさい、でもそれは信号が青(TRMT==0)のときだけだよ、という指示をするのが、 この関数の役割です。

 
*これは許可されてないのにエレベータに載っちゃうの図ですね。この後パイロットはえらい目にあいます。
 
 

・DFPlayerに指示する関数

 特定の機体番号の戦闘機を、特定の順番で送り込んでやると、DFPlayerは言う事を聞いてくれます。

 

 何をさせたいかで送る番号は変わってきます。その一覧はデータシートに載っています。

 

 SDカードの一つ目のファイルを再生してほしいなら、7E FF 06 03 00 00 01 EF です。太字にした0102に替えれば、二つ目のファイルを再生します。

 

 DF_SpecifyPlay(int n)関数は、7E、 FF、 06、・・・と順番に戦闘機を送り出す指示をやっています。指示を受けて実際にエレベーターにデータを載せる作業を請け負っているのがUART_Write(data)です。

 
    //ルートディレクトリのn番目の曲を再生する関数

    void DF_SpecifyPlay(int n)

  {
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x03);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);

    }

 

 ここでは指定した番号の曲を再生する関数しか作っていないのですが、同じ要領で例えば 7E FF 06 06 00 00 1E EF と送る関数を作ってやると、それでボリュームを指示できます。1Eのところの大きさを変えるとボリュームが変わるわけです。

 

 

というわけで、これでPICからDFPlayerを操作できるようになりました。次回は、DFPlayerに入れるデータについて説明します。

 

 

↓↓↓↓プログラムここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

#include <xc.h>
#define _XTAL_FREQ 8000000 //8Mhzで動かすので_XTAL_FREQは8000000 これ書いとかないとdelayが使えない。


//コンフィグ設定
#pragma config FOSC = INTOSC //内部クロック使用
#pragma config WDTE = OFF    //ウオッチドッグタイマーなし
#pragma config PWRTE = ON    //電圧の立ち上がり後の安定待ちをする
#pragma config MCLRE = OFF   //RA3をリセットに使わない
#pragma config CP = OFF      //プログラムメモリ保護なし
#pragma config CPD = OFF     //データメモリ保護なし
#pragma config BOREN = ON    //電圧降下したらPIC停止(許容する程度はBORVで指定)
#pragma config CLKOUTEN = OFF//クロック出力無効
#pragma config IESO = OFF    //2段階起動モードON
#pragma config FCMEN = OFF   //外部クロック監視をしない
#pragma config WRT = OFF     //書き込み禁止しない
#pragma config PLLEN = OFF   //高速クロック(32MHz)使わない
#pragma config STVREN = ON   //スタックがオーバーフローしたらリセット
#pragma config BORV = HI     //PIC停止電圧設定HIGH
#pragma config LVP = OFF     //低電圧プログラミングしない


//関数のプロトタイプ宣言
void UART_Write(char data);
void DF_SpecifyPlay(int n);

//メイン関数ここから
    void main(void) {
        //特殊レジスタの設定
             OSCCON     = 0b01110010 ; // 内部クロックは8MHzとする
             OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
             ANSELA     = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
             TRISA      = 0b00011000 ; // RA4、RA3は入力その他のピンは出力
             WPUA       = 0b00011000 ; // RA4、RA3には内部プルアップ抵抗をつなぐ
             PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)    

        //シリアル通信の初期設定
            //送信(TX)関係 8ビット、非同期、9600ボーで通信する設定
            TXSTA = 0b00100100 ;

            //上記TXSTAによる設定は下記丸印のビットを個別にセットしてもOK
                //  bit7 CSRC= 0: クロック源(非同期なのでここは無視される) 
                //○bit6 TX9=  0: 8ビット送信 
                //◎bit5 TXEN= 1: 送信有効
                //○bit4 SYNC= 0 EUSARTモード非同期 
                // bit3 SENDB=0: ブレーク文字送信ビット
                //◎bit2 BRGH=1: 高ボーレート選択ビット非同期の場合のハイレート
                //  bit1 TRMT= 0: 送信シフト レジスタ ステータス
                //  bit0 TX9D= 0: 送信データの9ビット目
            //以上8つは数値をセットしなければデフォルトはゼロ(のはず)なので本当に書く必要があるビットは◎だけ。
            
            SPEN = 1;
            //シリアルポートのON、OFFを操作するレジスタ
            //EUSARTトランスミッタを非同期モードとして有効化するには、3 つの制御ビットを以下のように設定します。TXEN = 1, SYNC = 0, SPEN = 1(データシートP287)
            
            BRG16 = 0 ;
            //8ビット・非同期送信の場合、BRG16 = 0とBRGH=1の組み合わせでのボーレートの計算式は(1)ボーレート=クロック数/(16 (n+1))であり(データシートP298)、
            //算出された値をSPBRGLに格納することでボーレートを指定できる。(これもセットすべき値がゼロなので書かなくても大丈夫)  

            SPBRGL = 51 ;
            //DFPlayerのボーレートは9600で固定されている。PICの方も9600にするためにここの数値をセットする。
            //クロック数4Mhzなら:25、8Mhz:51、16:Mhz:103、32Mhz:207これらの数値の計算式は既述の(1)式の通り。

            //PIC12f1822専用の設定項目
            TXCKSEL = 0 ;   // 7番ピン(RA0)をTX(送信)ピンにする。ここを1にすると3番ピン(RA4)がTXに
            //RXDTSEL = 0 ;   // 6番ピン(RA1)をRX(受信)ピンにする。ここを1にすると2番ピン(RA5)がRXに RX使わないのでコメントアウト
      //シリアル通信の初期設定ここまで

            
       while(1) {

        if (RA3 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(1) ;//関数DF_SpecificPlayに曲番号1を送る
                __delay_ms(1000);//
            }  
        
        if (RA4 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(2) ;//関数DF_SpecificPlayに曲番号2を送る
                __delay_ms(1000);//
            }  

 
       }//while(1)ここまで)

    }//メイン関数ここまで



//シリアル通信書き込み用関数
    void UART_Write(char data)
    {
      while(TRMT==0);

      {

      TXREG = data;
      }

    }

//シリアル通信書き込み用関数ここまで

 


//DFPlayer用の関数
    //ルートディレクトリのn番目の曲を再生する関数
    void DF_SpecifyPlay(int n){
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x03);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);

    }

//DFPlayer用の関数ここまで

DFPlayerをPICで操作する その4 日本じゃあ、2番目だ。

$
0
0

 前回、ボタンによって1曲目、2曲目を演奏するプログラムを紹介しました。

 

 ところで、DFPlayerの中では何が1曲目で、何が2曲目なのか。

 

 実はこれ、落とし穴です。

 

 MP3ファイルに001,002…とつけて、SDカードにコピーして、前回のプログラムで再生させると、1曲目を指示したボタンなら001とついた曲がかかりますし、2曲目用のボタンでは002とついた曲がかかります。

 

 

 なので、DFPlayerはファイル名で判断しているように見えるのですが、違うのです。

 

 DFPlayerにとって1番目の曲は、そのSDカードに1番最初に書き込まれた曲です。ファイル名関係ありません。

 

 なので、002から始まるファイル名を先に、001からのファイル名を後に書き込むと、1番目の曲を再生しろという命令を受けたとき、DFPlayerは002のファイルを再生します。

 

「001.mp3ファイル。その名前から自分が1番のつもりかもしれないが、このSDカードの中じゃあ、2番目だ」

 

というわけですね。

 

 まあ事前にPC上で001, 002, というファイル名で用意してSDカードにコピーすると、001, 002, という順番でコピーされるので、普通はそういうこと起きない。のですが、後からファイルを入れたり消したりしてると、順番が名前通りでなくなってそういうことが起こります。(起こってしばらく悩みました。)

 

 音声ファイル関係の話ついでに、私は音声ファイルの作成にAudacityというソフトを使っています。PCでそのとき再生している音を録音してくれるというもので、これで銃の発射音を拾い、同じソフトで適宜加工して使いました。

 

 似たような機能のソフトはいろいろあるようなので、これが一番よいかどうかはわからないのですが、私はありがたく使わせてもらっています。

 

 ほんと興味のない人にはどうでもいい話だと思うのですが、無印ヤマトと2199ヤマトでコスモガンの発射音が違うとか、工作のために録音して初めて知りましたよ。

 

 

 今回もプログラムを載せておきます。中身は前回と同じなのですが、シリアル設定のところの冗長な注釈を省いたのと、DFPlayerのボリュームをPICから指定できるように関数を書き足しているところだけ違います。プログラム中赤色の部分です。

 

 DFPlayerのデータシートを見て、欲しい機能があればをこれを参考に自分で関数を作って書き足してやることで、PICからDFPlayerに指示させることができる内容は追加してゆくことができますよ、という参考例です。

 

次回は、省電力について。

 

 

/////////////////////////////////////////////////////////////////

 

#include <xc.h>
#define _XTAL_FREQ 8000000 //8Mhzで動かすので_XTAL_FREQは8000000 これ書いとかないとdelayが使えない。


//コンフィグ設定
#pragma config FOSC = INTOSC //内部クロック使用
#pragma config WDTE = OFF    //ウオッチドッグタイマーなし
#pragma config PWRTE = ON    //電圧の立ち上がり後の安定待ちをする
#pragma config MCLRE = OFF   //RA3をリセットに使わない
#pragma config CP = OFF      //プログラムメモリ保護なし
#pragma config CPD = OFF     //データメモリ保護なし
#pragma config BOREN = ON    //電圧降下したらPIC停止(許容する程度はBORVで指定)
#pragma config CLKOUTEN = OFF//クロック出力無効
#pragma config IESO = OFF    //2段階起動モードON
#pragma config FCMEN = OFF   //外部クロック監視をしない
#pragma config WRT = OFF     //書き込み禁止しない
#pragma config PLLEN = OFF   //高速クロック(32MHz)使わない
#pragma config STVREN = ON   //スタックがオーバーフローしたらリセット
#pragma config BORV = HI     //PIC停止電圧設定HIGH
#pragma config LVP = OFF     //低電圧プログラミングしない


//関数のプロトタイプ宣言
void UART_Write(char data);
void DF_SpecifyPlay(int n);
void DF_Volume(int n);


//メイン関数ここから
    void main(void) {
        //特殊レジスタの設定
             OSCCON     = 0b01110010 ; // 内部クロックは8MHzとする
             OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
             ANSELA     = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
             TRISA      = 0b00011000 ; // RA4、RA3は入力その他のピンは出力
             WPUA       = 0b00011000 ; // RA4、RA3には内部プルアップ抵抗をつなぐ
             PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)    

        //シリアル通信の初期設定
            TXSTA = 0b00100100 ;
            SPEN = 1;
            SPBRGL = 51 ;
            TXCKSEL = 0 ;
        //シリアル通信の初期設定ここまで
            
            DF_Volume(31);//ここの数値を変えるとボリュームが変わる(0~31)

       while(1) {

        if (RA3 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(1) ;//関数DF_SpecificPlayに曲番号1を送る
                __delay_ms(1000);
            }  
        
        if (RA4 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(2) ;//関数DF_SpecificPlayに曲番号2を送る
                __delay_ms(1000);
            }  

        }//while(1)ここまで)

    }//メイン関数ここまで



//シリアル通信書き込み用関数
    void UART_Write(char data)
    {
      while(TRMT==0);
      {
      TXREG = data;
      }
    }
//シリアル通信書き込み用関数ここまで


//DFPlayer用の関数
    //ルートディレクトリのn番目の曲を再生する関数
    void DF_SpecifyPlay(int n){
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x03);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);
    }
    //ボリュームをコントロールする関数
    void DF_Volume(int n){
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x06);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);
    }

    
//DFPlayer用の関数ここまで

 

 


DFPlayerをPICで操作する その5 PIC寝ろ、DFPlayer寝てろ

$
0
0

今回は節電についての話です。

 

DFPlayerは音を出していないただの通電状態でも結構な電力を消費します。 

 

 具体的にどれくらい消費するのか数字で示せるといいのですが、私はこんな記事を書いてるくせに電流計を持ってない。まあなんとなくの実感でいうと、単4電池3本なら3日で再生ボタン押しても音が出なくなるくらい。

 

 うっかり電源スイッチを切り忘れるとあっという間に電池がなくなります。

 

 しばらく誰も操作しないならスリープに入らせて節電するというのが一つの手.なのですが、DFPlayerに関していえば、スリープさせてもあまり消費電力が減らないので、意味がありません。

 

 そこで、PICの方に電源管理を任せるという手を使います。

 

 しばらく操作がないと、PICがDFPlayerへの通電を止める。ついでにPICの方もスリープに入る形にする。

 

 スリープ時のPICの消費電力はナノアンペアレベルだそうですので、通電したままでも痛くもかゆくもない。テレビやエアコンのリモコンは通電しっぱなしでも電池なかなか切れないですよね。スリープしている限りあれくらいのレベルで電池はもつはずです。

 

 というわけで、そういう工作とプログラムです。

 

 まずはDFPlayerへの電源管理ですが、以前携帯型MP3プレイヤーを音源にする記事で使ったトランジスタスイッチングを使います。

 

 トランジスタのベース、エミッタ、コレクタをそれぞれ16,17,18の列に挿し、(上の写真のトランジスタとは表裏向きが逆ですので気を付けてください)ベースをPICのRA1と、コレクタは電源とつなぎます。エミッタは18列に挿した時点でPICのVCCにつながっています。

 

 

 工作はこれだけ。これでPICのRA1から緑の矢印のようにトランジスタのベースに電圧が来ると、黄色の矢印のようにトランジスタのコレクタ、エミッタを通じてDFPlayerに電流が流れます。

 

 あとはプログラムです。また下に置いていますので、コピペして書き込んでください。

 

(ところで、この記事のために確かめていたところ、なぜかうまくPICに書き込みできないということが起こりました。同じように書き込みできなかったら、書き込みの時だけトランジスタを外して、書き込みができたらまた挿してください。)

 

 

以下プログラムの解説です。

 

 まず、メインのプログラムの中でRA1=1と書いて、RAから電流を流します。これがコレクタに流れて、電源からDFPlayerに通電します。

 

 ボタン操作がなくなって何分か後に電源が切るわけですが、 その経過時間は割り込み関数を使って測っています。

 

 あとでLEDのPWMにも使う事も考えて、5ミリ秒ごとに1回割り込み関数のところに飛ぶことにし、5ミリ秒を200回カウントしたら1秒経過したという計算で何秒経ったかを計算しています。このあたりの処理は緑色になっています。

 

 そしてなにかボタンが押されるたびに秒数カウントをリセットしています。

 

 この秒数カウントが300秒になったら、スリープに入ります。スリープ処理のところはオレンジ色にしています。PICのスリープに関しては一応調べたのですが私いまいち理屈がよく分かっていません。こちらのページを参考にさせていただきました。

 

 スリープ解除はRA4に繋がっている、右側のボタンです。

 

 また、スリープに入ったときと立ち上がったときにそうと分かるシグナル音を鳴らすプログラムにしています。鳴らす音の番号は004と005です。もちろんこのあたりは削除しても動作には影響しません。

 

 

 

 ところでこの例では300秒操作がなかったらスリープ、という処理にしていますが、基本スリープのままで、ボタンを押す押す⇒スリープ解除⇒DFPlayerに通電、音鳴らす⇒終わったら即スリープというプログラムにしてもいいと思います。

 

 そうすれば電源スイッチなしでも、ボタンを押したら音が鳴り、操作していないときはほぼ電力を使わない回路になります。ただその場合、スリープ解除のところで少し時間がかかるので、ボタンを押した瞬間に鳴らなくてもいいならばという条件が付きます。情景モデルに音を付けたいとかなら使えるかもしれません。

 

 これで大体、今回の銃の工作のために私が覚えたことは書いたんじゃないかと思います。あとは補足的な話です。

 

 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

#include <xc.h>
#define _XTAL_FREQ 8000000 //8Mhzで動かすので_XTAL_FREQは8000000 これ書いとかないとdelayが使えない。


//コンフィグ設定
#pragma config FOSC = INTOSC //内部クロック使用
#pragma config WDTE = OFF    //ウオッチドッグタイマーなし
#pragma config PWRTE = ON    //電圧の立ち上がり後の安定待ちをする
#pragma config MCLRE = OFF   //RA3をリセットに使わない
#pragma config CP = OFF      //プログラムメモリ保護なし
#pragma config CPD = OFF     //データメモリ保護なし
#pragma config BOREN = ON    //電圧降下したらPIC停止(許容する程度はBORVで指定)
#pragma config CLKOUTEN = OFF//クロック出力無効
#pragma config IESO = OFF    //2段階起動モードON
#pragma config FCMEN = OFF   //外部クロック監視をしない
#pragma config WRT = OFF     //書き込み禁止しない
#pragma config PLLEN = OFF   //高速クロック(32MHz)使わない
#pragma config STVREN = ON   //スタックがオーバーフローしたらリセット
#pragma config BORV = HI     //PIC停止電圧設定HIGH
#pragma config LVP = OFF     //低電圧プログラミングしない

int Counter, MSecCounter, SecCounter;//カウンター変数宣言

//関数のプロトタイプ宣言
void UART_Write(char data);
void DF_SpecifyPlay(int n);
void DF_Volume(int n);


//メイン関数ここから
    void main(void) {
        //特殊レジスタの設定
             OSCCON     = 0b01110010 ; // 内部クロックは8MHzとする
             OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
             ANSELA     = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
             TRISA      = 0b00011000 ; // RA4、RA3は入力その他のピンは出力
             WPUA       = 0b00011000 ; // RA4、RA3には内部プルアップ抵抗をつなぐ
             PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)    

        //シリアル通信の初期設定
            TXSTA = 0b00100100 ;
            SPEN = 1;
            SPBRGL = 51 ;
            TXCKSEL = 0 ;
        //シリアル通信の初期設定ここまで
            
        // タイマ2設定 5ミリ秒ごとに割り込み関数へ飛ぶ
            T2CON=0b00000100;//?プリスケール1、?ポストスケール1
            PR2=99;//?PR2初期値99に
            TMR2IF = 0; //タイマ2割り込みフラグゼロに
            TMR2IE=1;//タイマ2割り込み許可
            TMR2ON=1;//タイマ2スタート
            PEIE=1;//周辺割り込み許可
            GIE=1;//全体割り込み許可    
        // タイマ2設定ここまで

            
            RA1=1;//DFPlayer電源供給
            DF_Volume(31);//ここの数値を変えるとボリュームが変わる(0~31)

       while(1) {

        if (RA3 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(1) ;//関数DF_SpecificPlayに曲番号1を送る
                __delay_ms(1000);
                SecCounter=0;//スリープに入るまでの時間カウントリセット
            }  
        
        if (RA4 == 0 ) { //ボタンを押すと
                DF_SpecifyPlay(2) ;//関数DF_SpecificPlayに曲番号2を送る
                __delay_ms(1000);
                SecCounter=0;//スリープに入るまでの時間カウントリセット            
            }  

        
// SLEEP:電源入力、もしくは最後のボタン操作からN秒後にスリープに入る。
            if (SecCounter==300) {      // 300秒経過したか?

                DF_SpecifyPlay(4) ;//スリーププロセス開始シグナル音
                __delay_ms(1000);
                        RA1=0;//DFPlayer電源オフ
                        __delay_ms(200);
                        //PIC スリープの準備
                        PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)  
                        GIE=0;//全体割り込み禁止。タイマをオフにしないと状態割り込みが機能しないっぽい。
                        IOCAN4=1; //RA4の立下りエッジ(RA4==0)検出ON(データシートP133)
                        IOCAF=0; //割り込みフラグのリセット
                        IOCIE=1; //このレジスタONで、状態割り込みシーケンスがデバイスをスリープから復帰させる(P133)

                            //PICスリープ
                            NOP();
                            SLEEP();//PICを寝かしつける
                            NOP();

                        //PIC復帰(RA4の立下りエッジを検出したら復帰する。復帰すると以降のステートメントが実行される)
                        IOCIE=0;//割り込みシーケンスによるデバイス復帰を解除
                        GIE=1;//全体割り込み許可

                    RA1=1;//DFPlayer起動
                    __delay_ms(500);//200ms以上待つようにデータシートに記載がある
                    DF_SpecifyPlay(5);//DFPlayer復帰シグナル音
                    __delay_ms(500);
                    while (RA4==0){}//ボタン押しっぱなしの場合離すまでここで足止め
                    __delay_ms(50);//ボタンを離した瞬間のチャタリング吸収

                SecCounter=0;//タイムカウンターリセット

            }//sleep処理ここまで        

        
        }//while(1)ここまで)

    }//メイン関数ここまで


//タイマ割り込み関数
    void __interrupt()XXX(void)//コンパイラのバージョンが2.0以降ならこっち
    //void interrupt XXX(void)//それ以前ならこっちをつかう
    {
        if(TMR2IF)//タイマ2による割り込み
        {
            PR2=99;//PR2初期値99にもどす

            Counter=Counter+1;//カウントアップ

            if (Counter==100)//カウント100になったら
            {
                Counter=0;//?リセットしてカウントを0に
                MSecCounter=MSecCounter+5; //スリープ用ミリ秒カウンタに5ミリ秒加算
            }
            if (MSecCounter>=1000) {//1000ミリ秒経ったら
                MSecCounter=0;//ミリ秒カウンタリセット
                SecCounter=SecCounter+1;//スリープ用秒カウンタ-に1秒加算
            }

           TMR2IF=0;//タイマ2による割り込みリセット
        }
    }



//シリアル通信書き込み用関数
    void UART_Write(char data)
    {
      while(TRMT==0);
      {
      TXREG = data;
      }
    }
//シリアル通信書き込み用関数ここまで


//DFPlayer用の関数
    //ルートディレクトリのn番目の曲を再生する関数
    void DF_SpecifyPlay(int n){
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x03);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);
    }
    //ボリュームをコントロールする関数
    void DF_Volume(int n){
    UART_Write(0x7E);
    UART_Write(0xFF);
    UART_Write(0x06);
    UART_Write(0x06);
    UART_Write(0x00);
    UART_Write(0x00);
    UART_Write(n);
    UART_Write(0xEF);
    }
    
//DFPlayer用の関数ここまで

 

 

 

 

 

 

 

 

ひおあきらの宇宙戦艦ヤマトを再読する その1

$
0
0

ブログもご無沙汰なのだが、なかなか書く意欲もわかない。PIC記事についてはその気になったら残りを書くことにして、しばらく前に再入手したひおあきらのコミック版宇宙戦艦ヤマトについて。

 

ビデオもディスクももちろん配信もない時代、こういうアニメのコミカライズは好きな番組を反芻するよすがだった。

 

私も持っていたのだが、このひおあきらのヤマトはなかなかに独特のクセがあった。

 

ヤマトがどえらく下膨れるのもそうなのだが、

 

お話も後になるほどどんどんアニメの話からずれてゆくのだ。

 

しかしそれはそれで独特の面白さがあって、印象に残った。最近再入手してその思いを新たにしたので、ここで何回かに分けて紹介したいと思う。

 

全3巻だが、導入部に当たる1巻はほぼ原作のアニメ版に則した内容になっている。

 

冒頭は地球の置かれている状況が説明され、地球艦隊の絶望的な戦いが始まる。

 

 

沖田艦長が早速登場。

降伏勧告や「バカメ」のくだりは残念ながらない。

 

地球艦隊はすぐに撤退する羽目に。守が最後まで戦うと意地を見せ、集中砲火を浴びる。

謎の船が火星に不時着し、古代、島が調査に向かう。

 

 

…と、おなじみの展開がつづく。

地球に戻った古代が沖田に詰め寄ったり、大和の残骸に驚いたりしつつ、いよいよヤマト発進。

 

 

このときには全然下膨れてなくて、バランスの取れた形。ところが大型ミサイルを主砲で撃ち落とすと…

 

 

あ、やばい。もう変形し始めてる。

 

そうか、ミサイルの高熱で歪んで下膨れてしまったのか…

 

さてそこから先は初ワープ、火星で修理、木星での初波動砲、と順調にエピソードを重ねていよいよ冥王星基地戦。

 

反射衛星砲はでてこず、上空で激しい艦隊戦をやっている間に、古代たちが超低空飛行で基地を爆撃する、という作戦が敢行される。

 

ちょっと2199を思わせる展開だ。

 

爆撃は成功。ヤマトと戦うガミラス艦隊は追い詰められて体当たりを敢行する。

シュルツは基地と運命を共にしているので、艦隊の司令官は残念ながら名無しさんで、名演説もなし。

 

沖田の指示で体当たりをかわし切って、冥王星基地攻略はめでたく成功。

古代たちもお褒めの言葉をいただく。

 

え?お前が加藤なの?という驚きで1巻は終了。

ひおあきらの宇宙戦艦ヤマトを再読する その2

$
0
0

2巻に入り、役者がそろってくる。

 

敵の追撃をアステロイドベルトでかわし、宇宙機雷を沖田の指示で文字通りすり抜けたヤマトにデスラーはついにガミラス随一の将軍、ロメルを差し向ける。

 

ドメルとはキャラデザインも違うが、戦い方も大分違うこのロメル、物語の終盤までヤマトの脅威として立ちはだかり続ける。

 

その戦い方は、艦隊を自分の手足のように扱い、隙のないフォーメーションで敵を圧倒するというもの。

ヤマトはたちまち窮地に陥り、沖田艦長も顔面蒼白。

 

しかしそこに謎の宇宙船が現れ、果敢にロメル艦隊に割って入り、フォーメーションを崩してゆく。その隙にヤマトは辛くも脱出。

 

もちろんその船の艦長は…

キャプテン・ハーロック。キャラデザインにちょっと戸惑ってしまうが。

 

求められた物資を届けに来た雪に「さっき古代と言っていたが、古代進のことかね」と、正体バレバレなことをつい尋ねちゃったりしつつ、去ってゆく。

 

そしていよいよ2巻前半の個人的ハイライトへ。再びロメルの急襲を受けたヤマトは、ワープで逃げようとするのだが、ロメルも追ってワープを敢行。

 

ワープで振り切ったと安心していたところに、ロメルの攻撃が!

 

 

ワープ中に何度か同じ空間にかち合う。その瞬間に砲撃しあうという緊張感あふれる激熱の展開に。

 

 

お互い決め手のないままワープが終わり、傷つきながらも追撃に備えるヤマトだが、ロメルは正々堂々とした戦いを求めてそのまま矛を収める。

 

 

読者もここでようやく一息だ。

 

・・・というわけで、ピンチになったらワープで逃げちゃえばいいじゃん、なんでしないの、というお約束の突っ込みを、相手によってはそれができないのだと示し、ワープ中という特殊な条件での息をもつかせぬ戦いを描く演出。

 

ひおあきら版オリジナル展開の真骨頂のひとつだ。

 

ドメルがいなくてもちゃんとおもしろい。でもどうせならあの人も出てきてほしいなあ、でてくるの?というところで項を分けたい。

 

 

ひおあきらの宇宙戦艦ヤマトを再読する その3

$
0
0

天才肌のロメルは、それゆえのムラッ気があって扱いにくい。
デスラーはもう一人の将軍をヤマトに差し向けることに。

 

ということでいよいよ登場ゲール!

 




…じゃなくてゲル、なのね。

ゲルはロメルにライバル心をたぎらせるものの、攻撃方法は芸のない力押しなので、毎度ヤマトにしてやられる羽目に。

 

バラン星でもロメルに先んじてヤマトに当たるものの、やっぱり突破されてしまう。

だがそこにロメル艦隊が立ちはだかる。

 

どうせヤマトはゲル艦隊を突破してくると読んだロメルはわざと遅れて発進していたのだ。ヤマト大ピンチ。

 

しかしそこにまたもやキャプテンハーロックが。


それにしてもこの敵艦の群れのただなかに果敢に飛び込む戦い方、冥王星海戦から変わらぬ、お兄ちゃん戦法だなあ。

 

しかしフォーメーションとチームワークが命のロメル艦隊にとっては、足で攪乱してくるハーロックは天敵ともいえる相手なのだ。

ロメル艦隊をすり抜けバラン星に突入したヤマトは海に潜水して敵からの攻撃をかわしつつ、

 

艦隊がお留守になった地上基地を上陸部隊が制圧するという形で、アニメ版の冥王星基地戦のモチーフをここで一部回収。


ロメルはヤマトを追撃しようとするが、ゲルとなあなあの仲のヒスに邪魔されると、ばかばかしいとばかりに艦隊を引いてしまう。

ゲルは手柄ごっつあんでーすとヤマトに襲い掛かるが、反撃に転じたヤマトに波動砲で艦隊の大半を吹き飛ばされて大慌てで退却。

こうしてバラン星攻略戦はめでたく完了。

バラン星から雄々しく飛び立つヤマト。

 

しかしその腹回りはメタボ化が極まりきった膨らみようだし、波動砲まわりなどもはや初登場時の面影もない。

 

「クセが、クセがつよいんじゃあ~!!」

と千鳥ノブの声が頭の中に響き渡る中、2巻は終了。

ひおあきらの宇宙戦艦ヤマトを再読する その4

$
0
0

ひおあきら版ヤマトは、アニメ版のモチーフの大胆な翻案がそこかしこに見られるのだが、その中でもドリルミサイルには度肝を抜かれる。今回はそこを紹介したい。

3巻に入って、古代と島の対立、沖田の健康不安の深刻化とヤマトの中に不穏な空気がただよう。

 

そんなさなか、ワープから出たばかりの隙をついてヤマトに大型のミサイルが襲いかかる。

 

どっかで見たことあるようなデザインのこのミサイル、ヤマトの船底にがっつり刺さり、ぐいぐいと自分の体をねじ込んでくる。

ヤマト大ピンチ!

そういえばアニメ版だとなにかと活躍する真田さんだが、ひおあきら版ではちょっと影が薄い。

 

今回も回路をいじって逆回転、とかしてくれない…のだが、

そのかわりにとんでもない奇策を打ち出す。

 

それは、ドリルの回転方向に、ドリル以上の速さでヤマトを回せば、相対的には逆回転になるので抜ける、というもの。

 

古代はあっさり納得。

 

そしてさっそく実行!

 

ヤマトだけでなくみんなの目も回ったものの、なんとか成功する。

どうですかこれ。まさにコペルニクス的転回、ドリルの相対性理論ですよ。

物理的にそんなことができるのかどうかは、そもそもドリルが回転トルクをどうやって得ているのか、つまりねじ込む回転と逆向きに生じるトルクを何が受け止めてドリルは回転できているのか…を考えないといけないのだろうが、まあ設定があるわけでもないだろうし深く考えてはいけない。

このあと実はそのミサイルに隠れていた工作員がヤマトに潜入したとか、ゲルとヒスがクーデターをたくらんであえなく失敗、とかいろいろあるのだが、

 

もうこのドリルの回転抜きのインパクトで3巻前半はお腹一杯だ。

やっぱりヤマトにはドリルミサイル。だがひおあきら版はアニメ版とはまったく別種の衝撃を与えてくれる。

 

ひおあきらの宇宙戦艦ヤマトを再読する その5

$
0
0

いよいよ物語は最後の局面へ。

イスカンダルを目前にしてヤマトはガミラスとの最終決戦に臨む。

ガミラス防衛に立つロメルに再び大苦戦、もはや事態は絶望的かと危ぶまれるほど追い込まれるヤマト。

 

しかしそこにいつものように登場ハーロック。

 

そしてロメルがついに我慢の限界に達したか、現場の指揮をさしおいてハーロックと対峙する。

ここからの息詰まる戦いは特筆もの。

どうしても宇宙戦艦同士の戦いというと、撃つ→あたるor外れる 撃たれる→あたるor外れる、という単調な描写になりやすいが、

巧者同士のスリリングなつばぜり合いだって描けるのだ、というお手本のような展開をみせる。

 

とはいえロメルにしてみれば単艦同士での決闘になった時点で相手の土俵に乗ってしまったようなもの。

数知れぬ死線を潜り抜けて培った度胸と、

一度先手を取ったら譲らないスピード感、

 

 

そして先読みの巧みさで押され、

 

最後の意地でヘッドオン同士での撃ち合いに持ち込むものの

 

ついにハーロックに敗れてしまう。


ロメルが倒れたことで艦隊は混乱。ヤマトはそのすきにガミラス首都を爆撃で壊滅させる。

アニメと比べると大分冷静な古代君。

いざイスカンダルへ。

ひおあきらの宇宙戦艦ヤマトを再読する その6

$
0
0

さていよいよ、デスラー対ヤマトの直接対決。

 

ひおあきら版では私の最も好きなシーンで、この「再読」シリーズも、今回のために書いてきたようなものだ。

最後の戦いを挑んでくるデスラー。
 

 

僅かな随伴艦もあっという間に大半を失い、ガミラスお得意の特攻を指示。自らもヤマトと共に滅びようとする。

そして迎えるクライマックス。

ヤマトが他の船を必死にかわしている隙をついて、

 

デスラーはヤマトのどてっぱら、そうあのメタボの極まった丸々したお腹にその尖った舳先を突き立ててくる!

ハーロックの助太刀の一撃も間に合わず。



絶体絶命のピンチに古代は船をロールさせるように指示。


 

するとなんと、くるっと回転するヤマトにデスラー艦の舳先は滑ってはじかれてしまうのだ!


いやー、奥さんご覧になりました?デブヤマトのこの鮮やかな身のこなし。

踊れるデブ、芋洗坂係長のような。

戦えるデブ、サモハンキンポーのような。

どてっぱらに突き立てられんとする凶器を、そのデカ腹をひらりと回転させていなす。

デブであればこそ映えるこの戦い方。

 

まさにひおあきら版ヤマトにふさわしい戦い方が、最終決戦で展開されようとは。

私は確信したのですよ。ひおあきら先生はきっとこのクライマックスシーンを描くためだけに、ヤマトを太らせてきたのだと。

とどめはハーロック。ロメルといいなんだかハーロックは美味しいとこどりがすごい。

 

この後も少しあるがまあ省略。

ラストはそのデカ腹を堂々と突き出すヤマトで締め。

いかがだったろうか。ひおあきらヤマト。ここで語りつくせなかったことも多いので、読んだことがない方はぜひ読んでみていただきたい。

おおっ!という興奮と、おお…お?という戸惑いが交互にやってきてジェットコースターよろしくあなたのテンションを上下に揺さぶるだろう。

そして項を重ねるたびに着実に太ってゆくヤマトも、最終決戦の後には悪くないと思えるようになっていはずだ!(?)


上下分割方式

$
0
0

最近は模型を作らず、作りかけても放置ということが続いていたのだが、片付けもかねてメカコレ2202を仕上げた。

 

メカコレの箱をそのまま収納を兼ねた箱として使っていて、フタを開けると

 

こんな感じになる。

 

作りかけで放置しているうちに第三艦橋がどこかに行ってしまっていたので、船体の上下分割に合わせてノズルも真っ二つにしてウオーターライン化することにした。

 

海面はプラバンに台所用のゴミネットをかぶせて青を塗る、いわゆるマスク塗装を施して作っている。

写真だと白っぽく見えるが肉眼ではもう少しちゃんと青い。

 

タカラトミーから断続的に1/2000でガシャポンの日本海軍の船が出ていて、いくつか持っているのだが、

ウオーターライン化したのはこれに合わせるためでもある。

 

メカコレヤマトのサイズは1/2000の大和に近いので、こんな感じでヤマトと大和を並べられるわけだ。

 

残った下半身に

 

大和を乗せれば新戦艦ヤマトのような、

 

あるいはギンガ、ギンガ、ギンガのような。

 

悲劇の空母信濃も宇宙空母シナノとして復活。

 

とかなんとか遊べたりして、メカコレサイズはなんかやっぱり楽しいのだ。

エヴァンゲリオンの感想を見る前に妄想で書いてみる

$
0
0

エヴァンゲリオンに関しては、以前このブログでも書いていて、もうそれで自分の中では終わっている。いつだったかなあと思って探してみたらなんと10年前だ。10年!

 

というわけで物語の結末に興味は全く持っていないし、今回のもわざわざ映画館に見に行くつもりはなかった。


状況が変わったのはアマプラで新劇を見た子供が行きたいと言い出したからだ。もう子供も中学生で映画など父親と行きたがらなくなるだろう。多分これが最後だ。ならば連れて行くではないか。

地上波放送をしていたころ、自分はまだ半分学生みたいな立場だった。何者でもなく、未来は何も見えていなかった。今や嫁さん子供もいて家のローンも終わっている。通勤の途中で定年まであと何年あるのかふと考えたりするような年になってしまった。

いつの間にやら自分の子供がシンジたちとほぼ同じ年になってしまっているのにはさすがに驚く。

見に行くのは週末なので、ここから先はまだ見てないのに多分こんなんだろーなーという思い込みと決めつけで書いた感想だ。ネタバレがないので安心だが読んでも何の役にも立たない。すみません。

エヴァンゲリオンには大きな物語と小さな物語がある。大きな物語は人類存亡の危機で、小さな物語はシンジの生き辛さ問題だ。

母を失い父親に拒絶されて育ったシンジにとって、世界は居心地の悪い場所だ。しかしエヴァに乗って戦っている間は皆に必要とされるし、父親にも評価してもらえる…エヴァンゲリオンは大きな物語と小さな物語の両方を駆動する道具として物語の中で機能する。

いよいよ映画も最後ということで、見ている観客はこの大きな物語と小さな物語の両方、あるいは少なくともどちらかに決着がつくことを期待している。

ところがここで問題になるのがQだ。Qの時点で世界は壊滅状態で、その責任を押し付けられてトチ狂ったシンジが事態を悪化させているような有様なので、大きな物語でシンジに救いが与えられることはもう期待できない。

 

そしてパイロット仲間との関係も引き裂かれてしまっているので、手を取り合って新しい未来を作る仲間を得る、という形の救いも遠のいた。

父親からの承認も今更だ。基本的に能力は高いが幼稚、というような人なので、息子を愛する対象として改めて受け入れるというのもありえない。

シンジにとって世界は居場所がないままだ。

父親や大人たちといった自分を取り巻く世界に認められ、受け入れられるという道が閉ざされている以上、シンジの救いは、世界なんぞくそくらえ、もうお前には依存しない、という、「自分自身に拠って立つ強さ」を手に入れることにしかない。

もしそれを手に入れることができたなら、それは小さな物語の決着であり、シンジに寄り添う観客の心にも救いが与えられるだろう。

登場人物たちが交わす説明不足の謎用語や色々な勢力のつばぜり合いの複雑さ、具体的に何が起きているのかよく分からないシーンの数々に観客は目くらましを食らうが、そこに注目してみてみれば、実は話はそう複雑ではない。

映像は綺麗だ。音響も素晴らしい。胸躍る活劇と呼べるシーンも少なくない。だが、結局救いはあるかといえば絶望的だ。シンジにも観客にも。期待できるのはせいぜい解釈次第では小さな希望のかけらがある、という程度。

だからたっぷり見たというお腹一杯感はあるが、満足感はうすい。

テレビ、旧劇、と、シンジは何度も打ちのめされてきた。そして毎度最後まで自分を打ちのめしてきた相手を殴り倒し、世界を踏みつけ、自らを拠り所として立ち上がることはできなかった。

今回が最後のチャンスだ。もし今度もダメなら、観客が四半世紀かけて付き合ってきたのは、世界にサンドバッグにされつづけた少年という、随分気の滅入るお話だったということになる。さてさて、どうなるのだろうか。

エヴァンゲリオンを見たので感想を書いてみる

$
0
0

*シン・エヴァンゲリオン劇場版:||のネタバレを含みます。

 

帰りの車内。私、嫁、子供1(一緒に見た)、子供2(興味ないからと母親と買い物)
 

私「感想はブログにでも書くかあ」


嫁「あ、そうなの。ここでは話さないの」
 

私「だって話しても誰も聞いてくれないだろ」
 

子供1「聞き流すよ」
 

子供2「うん」
 

私「じゃあ、聞き流して。1ちゃん、終わり際のシンジが海辺にいるシーンで、突然セルでなくなって、紙に鉛筆で書いた絵がそのままになってたところあったろ。あれはテレビ版の最終回、スケジュールが間に合わなくて線画で済ませたことのセルフパロディなのよ」
 

子供1「へえ」
 

私「テレビ版の終わりってグダグダで、敵である使徒との戦いはなんだけよく分からない状態のまま、急にシンジがみんなに囲まれておめでとうって言ってもらって、にっこりして終わる。」
 

子供2「なにそれ、意味不明」
 

私「そういう、まあすっきりしない終わり方なもんだったから、映画版で真のラストをやるよ、ということになってみんな期待したわけ。公開が延び延びになったり、色々あったわけけど、まあとうとう真のラストってところで、人類補完計画とかいうのが起きて、人間はみんな溶けて赤い海になっちゃう。シンジはそこで皆と一緒になって溶けるのを拒否して、一人赤い海の波打ち際に残される。もうひとりパイロットでアスカって子がいて」
 

子供2「知っているよ」
 

私「OK。んで、その子も人として残るんだけど、シンジに対して『気持ち悪い』って言って、それで映画版は終わり」
 

子供2「なにそれ!意味わからん」
 

私「で、その補完計画で世界が大変な時にシンジ君は何もしないわけ。みんなが大変な時に『僕が戦います』って言って飛び出して、敵の心臓部を一突き、空は晴れ渡り、みんなハッピー、みたいなことを期待しているのに、全然そうならないわけ。

 

少年が主人公の物語なんだから、成長をして欲しいわけよ、お父さんとしては。それなのに、いつまでも受け身で、成長しない。というか、させてもらえなかったんだよねシンジ君は。

 

テレビ版でもみんなにおめでとうと言ってもらってにっこり、だからね。

 

だもんでお父さんは、庵野という人はハッピーエンド作りたくないんじゃないか、今回のもそうなっちゃうんじゃないかと思ってたわけ」
 

子供2「で、どうだったの」
 

私「シンジ君無茶苦茶成長しました。お話はハッピーエンド」
 

子供2「よかったじゃん」
 

私「それが成長しすぎなのよ。映画の始まりの時点では自分は何やってもダメだ、報われない、イジイジ、なのに最後に急に成長して、しすぎて神様みたいになっちゃう。

 

そんで父親に自分の人生を総括させて、傷ついた仲間たちの心をいやしてあげて、しまいには滅んだ世界をきれいに修復しちゃうわけ。

 

いやそこまで成長しなくていいから!せいぜい自分を足蹴にしてきた父親を一発ぶんなぐって、もうおまえになんか依存しないと言ってやるくらいでいいのよ、たかだか中学生なんだから。神様にまでならなくていいのよ!」
 

子供2「げらげら」
 

真説「高熱隧道」

$
0
0

吉村昭の「高熱隧道」は黒部第三ダム建設のためのトンネル工事における困難を描いたもので、山岳小説、記録文学両方の面で名高い。

...という評価だそうだが、実は私はつい最近初めて読んだ。

 

ハイライトは2つあって、一つは掘り進めるほどに岩盤の温度が上がってゆく地層にあたってしまい、工事が進められなくなるという困難をいかに乗り越えるか。

 

もう一つが、山中に建てられた労務者の宿舎を一度ならず襲った「ホウ雪崩」と呼ばれる、爆風を伴う雪崩だ。

 

小説としては非常に面白いので、一読お勧めしたいが、気になったのが、これらがどれほど本当のことだったのかということだ。

 

特にホウ雪崩については、コンクリート製の建物が、その爆風で建物ごと飛ばされ、対岸の尾根を越えたさらに先、600メートルも離れた岩壁にたたきつけられた、とか、

 

別のホウ雪崩では、爆風で吹き飛ばされた木が何本も飛んできて垂直に宿舎を刺し貫いたとか、

 

ちょっとマンガ的なまでに極端な状況描写が出てきて違和感を覚えた。

 

小説なので必ずしも事実そのままである必要はないわけだが、事故そのものは事実としてあるわけなので、記録があるはずだ。

 

そう思って検索してみると、果たして、北大の清水弘という先生が本業のホウ雪崩の研究の傍ら「高熱隧道」作中の事故についても調査をされていた。

 

https://www.hokkaido-nds.org/pdf/vol.7/713.pdf

 

拝見すると真実はやはり違ったようで、建物が丸ごと飛んだというようなことはなく、一部の残骸が対岸まで届いたというくらいだし、木は飛んできて刺さったわけではなく、すぐそばの木が建物の上に倒れ掛かったというのが本当の出来事だったらしい。

 

小説的にまあ、「話が盛られていた」わけだ。

 

ただ、それを調べるのには相当苦労をされている。施工した会社に残されていたはずの多くの資料が戦争で焼けてしまっているのだ。

 

そのため、何十人もの当時の経験者を探し出しては個別に話を聞く、それでは個人的な記憶違いや思い込みは避けられないので、複数の人から同じ証言を得られたり、ほかの人の証言とつじつまが合うものを残してゆく、という地道な作業を重ねられている。

 

個人的にはこの調査に対する研究者らしいフェアな方法論に感銘を受けた。

 

一方で、吉村昭の誇張された描写をそのまま信じている人が結構いるらしいことを知り、うーんと思わされた。

 

(吉村昭は関係者数名に話を聞いただけで書き上げており、取材に協力した施工会社の人も激怒したそうだ)

 

よく調べると怪しいことなのに、一度本になって人に知られてしまうと、もうなかなか覆せない。

 

そういうことは珍しくないのだろう。以前ヤマトの反乱劇を追う過程の中で感じたことが思い起こされる。

 

なぜ人はカルトに惹かれるのか―脱退支援の現場から

$
0
0

 

二十歳前後の頃、大阪でも東京でも、駅を一人で歩いていると宗教の勧誘に声をかけられる経験を何度かした。基本若者がターゲットだったのだろう、今やそういう経験もずいぶんご無沙汰だが、まだそうした活動は行われているのだろうか。

 

著者は浄土真宗親鸞会という、一見伝統宗教のような名前の宗教団体に属し、そこでの過剰な資金集めや詐欺的な手法の勧誘に疑問を抱いて脱会した経験を持つ。今は真宗大谷派の僧侶となってアレフ脱会の支援活動をしている。

 

カルト宗教にはまる人というのを我々は、何か考えが足らない、どうしようもない人のように捉えがちだが、実はむしろ、まじめに生きる目的とはというようなことをいつも考え悩んでいる人の方がはまり易い、と著者は指摘する。

 

本文中の表現を借りれば、「真面目な人ほど一度しかない人生に間違いのない真理や正義を見つけて、全力でそれに向かって進みたいという衝動を抑えることができない」のだ。

 

この手の本の中では面白いというか、ユニークだと思ったのが、信者がカルト宗教に依存する心理の解説に「宗教体験」の視点があることだ。

 

肉体的に厳しい修行を重ねると、まれにこの世の真理を深く理解した、という精神状態になることがある。

 

実はこれは、セラピーやヨガなどでも到達しうる精神状態なのだが、非常に強い実感を伴うため、修行の中でたどり着いたものであったりすると、自分の信仰に確かな証が与えられたように感じられる。

 

(こうした経験は私も少し覚えがある。二十代の頃、ソファでうとうとしていたら頭上で二人の何か神的な存在が対話を交わし始めるのを感じた。対話の内容はやり取りを重ねるほどに精緻な論理性をもって高まり、ついにはこの世の真理に到達した。私もその対話に導かれて、世界を理解したと感じた。

…というところで目を覚ました。私の宗教体験は「夢か」の一言で終わったが、もし何かの修行中にこの夢を見たら話は違ったかもしれない。)

 

ところがそうした実感は月日と共に薄れてゆき、本当だったのか不安になってくる。世界の真理を理解したという証、私が救われるという証は確かなものだったのか。

 

「自分がした経験が確かなものかわからないという『わずかなほころび』を信者が自覚したとき、そのほころびを埋める最終的な判断を『師』や『グル』に求めずにはおられないのだ」と著者は指摘する。

 

カルト宗教がらみの本は他にも読んだことはあるが、こうした「師の指導のもとでの宗教体験とそれを補強するための師への依存」という関係の指摘はこの本で初めて見た。興味深いポイントかもしれない。

 

もうひとつ、この本のポイントは、カルトにはまっていない、「こちら側」の危うさを指摘していることだろう。

 

2018年に麻原が死刑になったとき、マスコミは信者が過激化するのではないかとあおった。アレフの内情をよく知る著者はその可能性がないこと知っており、マスコミに問われてそのように伝えたが、それは報道されなかった。それどころか、あるテレビ局は渡した資料を逆に解釈して危険が増したように報道した。

 

現在のアレフは新しく入ってくる信者には、マスコミの言うことはことごとくでたらめで、過去のサリン事件も国家ぐるみの陰謀だと教えているという。とんでもない話のようだが、当のマスコミがこの調子で、アレフのやっていることを笑えるのか、と著者は怒る。

 

単にマスコミがけしからんという話ではない。自分が正義だと信じるものに異様なまでにこだわり、別の意見に耳を傾けようとしない態度は今のネット上にいくらでも見出すことができる。正しさへの妄信と依存はわれわれの日常の中にある。自分は、あるいは家族は大丈夫だなどとは誰も言えないのだ。

 

この本の最後の章は、家族がカルトにはまった時のあるべき対応について書かれている。4月は、新しい環境に不慣れで心細い思いをする若者が街にあふれる。それはカルト宗教の新規勧誘の書き入れ時でもあるそうだ。そうした家族がいる方は読んでおくのもいいかもしれない。

 

以下はより個人的な感想。

 

正しさへの依存や妄信の背景にあるのは不安だ。生きている限りだれしも不安からは免れられない。そしてそれをどう処理するかでその人の生き方の大筋が決まってしまう。

 

私は宗教であれ、政治的イデオロギーであれ、何かを素直に信じることができ、それに向かって進むことができる人はそうした不安を感じずに済むのでさぞ楽だろうし、それゆえに宗教やイデオロギーは麻薬的に人を捉えるのだろう、と思っていた。

 

しかしこの本で気づかされたのは、宗教やイデオロギーに傾倒する人々もしばしば本当にこの考えは正しいのかという不安を感じているということだ。

 

だからカルトにはまっている人に教祖やリーダーの言っていることはこんなにもおかしい、矛盾しているということを指摘したってその人の目を覚まさせることはできない。そんな疑問はとっくに自分で自分に問うている。

 

むしろその問いにぐらぐらしているからこそ厳しい修行に専念したり、リーダーの指示をかたくなに守ることに熱中してしまうわけだ。

 

この困ったメカニズムはカルトに限らず存在する。そしてそれが世の様々な歪みを生んでいる。もしかすると不安と依存は、現代のほとんどあらゆる社会現象を説明できる人間の本質なのかもしれない。

Viewing all 292 articles
Browse latest View live