PIC10FでソフトUART

PIC10F2xxの使い道として、PIC10F222のA/DコンバータでA/D変換した値をUARTで送信する使い方を考えてみました。ターゲットはアナログジョイスティックで、実験用に値をA/D変換してPCに送りつける使い方です。で、まずその準備としてPIC10F200でソフトウェアUARTを作ってみました。(送信だけなので正確にはUARTではないですが・・・)

これで1200bpsで文字を送信してくれます。なお、真ん中あたりに71回の無駄なループがありますが、これで送信速度(1bitの時間)を調整しています。調整はオシロスコープを見ながら現物あわせです。現物あわせですから、コンパイラのバージョンが変わると速度が合わなくなってしまう可能性もあります。TMR0を使ってきちんとタイミングを取る方法で作りかけたのですが、サイズが大きくなるのでやめました。

作成途中ではまったのは、以下の点です。

  1. 1ビットの時間が安定しないと思ったら、ウォッチドッグタイマが動いていた。
    MPLABのメニューのConfigure設定で禁止していると思ったら、禁止できていなかったです。やはりソース内に記述してしまうのが安心です。記述方法はHITECH-Cのマニュアル(PDFファイル)内に記載があります。
  2. OSCCALの値が破損していた。
    リセット解除するたびに1ビットの時間が 大きくばらつくので、やはり使い物にならないかと思ってあきらめかけたのですが、よく考えるとクロックの周波数自体は1%の精度が保証されているので精度としては十分なはずです。何が起きているのかと思ったら、ROMの最終番地に書かれているMOVLW命令が破損していました。つまり、リセット解除時の不定なWレジスタの値がOSCCALレジスタに書かれていたわけです。PicKit2のToolsメニューの中に、OSCCALの値を復活させる機能があるので、それで復旧したところ綺麗に直りました。

・・・・が、これだけで10F200の256バイトのROMのうち167バイト(65%)、16バイトのRAMのうち10バイトを使ってしまいます。10F222ならもう少し大きくなるとはいえ、数値を文字列に変換することなどを考えると苦しそうです。数値をバイナリで送るとかであれば何とか使えるかもしれません。

PIC10Fシリーズ

加速度計で地震がそれなりに検出できそうなので、揺れを検出したらブザーを鳴らしたいと思ったのですが、Arduinoではタイマーはすでに使われていて、500HzのPWM信号しか出力できません。そこで、ブザー自体を外部で生成することを考え、手持ちの米粒マイコンPIC10F200/222を試してみました。

SOT-23なので、変換基板を介してブレッドボードに実装してテストしました。残念ながら直接タイマーから出力できないのでタイマーを監視しながらソフトウェアでポートを制御することになります。本当にブザーだけであればまあまあですが、周期の精度が多少バラつくのか今ひとつ濁った音になります。

こちらはまだ動かしていませんが、PIC10F222です。ROM容量が倍の512バイト、RAM容量が約1.5倍の23バイト、8bit A/Dコンバータ内蔵です。

写真の編集

WordPressにアップロードする写真はあまり大きいと見る人の負担になってしまいます。なので、適切なサイズに処理してあげなければなりません。従来はIrfanViewの一括変換でまとめてリサイズ後、Ubuntuに持ってきてからjpegのヘッダを落としてアップロードしていたのですが、最近はUbuntuで閉じた作業を始めているので、Windowsを起動するのが億劫になってきました。そこで、Ubuntuでもできないか調べてみました。

結果は非常にベタで申し訳ありませんが、ImageMagickのconvert/mogrifyコマンドでOKでした。自分が使うコマンドは以下の通りです

$ convert -geometry 900×900 元ファイル名 保存ファイル名

です。geometryは900×900と指定するとその範囲に収まるように縦横比を変えずに縮小してくれます。
その後、カメラによってはGPS情報が含まれているので、JPEGの余計なヘッダを落とします。

$ jhead -purejpg *.JPG

で完了です。ローテーション情報(縦位置、横位置の情報)がまだおかしいことがあるようですが、WordPressでも修正可能なので、そちらで修正します。

Arduinoベースの湿度計

調子に乗って、湿度計の方もまとめてみました。

基本的には同じ構成ですが、ブレッドボードで動作確認した後で気圧計も載せたいと思っているので、センサ類は暫定で載せています。あとで、LCDの下に移設しないと気圧計が入らないと思うので、まとめて0.2ミリの厚さの表面実装部品用ユニバーサルボードに載せてます。この0.2ミリ厚のボードはハサミでチョキチョキ切れるのが便利です。ちなみに、ATmega周り、レギュレータ周りなどもコンデンサ類はチップ品を使っています。1608サイズのチップは2.54ミリピッチのユニバーサル基板と相性がいいのでお勧めです。

センサ部分は奥からLM35DZ、0.22uFのフィルムコンデンサ、HS-15Pの順です。スイッチは電源スイッチで、その奥にあるのが5VのCMOSレギュレータのXC6202P502です。パスコン類は半田面側に4.7uFと10uFのチップコンデンサをつけてあります。

先に作った加速度計と並べてみました。

余震について

昨日(3/22)は比較的大きな余震が何度かありました。気象庁でも余震活動の予測を変更したようです。リンクされているPDFファイルを見ると、余震の発生が予測の範囲から外れて余震活動が活発になっている様子が見て取れます。

それはそうとして、本震後しばらくは余震が非常に多く、部屋に置いてある物(正確には吊ってある物)も頻繁にユラユラとゆれていて気持ち悪かった状況が続いていました。しかし一週間くらいたつとそれもほぼ収まっていたのですが、昨日の余震活動活発化以降は再び部屋の物はユラユラ揺れるようになりました。さらに再び揺れによる気持ち悪さ、眩暈が出てきました。なんとなく気持ち悪い、眩暈がする、と思うと、部屋の中の吊ってある物が揺れているのです。ごくわずかではありますが、なんだかいつも揺れているような感じです。

吊ってある物も揺れているので「気のせいではない」と理解できるんですが、かなりのストレスになりそうです。

Arduinoベースの加速度計

Arduinoと加速度センサの組み合わせで液晶表示ができるようにしましたが、ブレッドボードのままでは実用には程遠いので、秋月のユニバーサル基板にまとめてみました。

電源は9Vの角電池で写真に写っているのはだいぶ前に秋月で使用期限直前とかで箱で安売りしていたものです。この他に角電池タイプのNiMH電池も手持ちにあります。今回は配線量を減らしたいので、角電池からCMOSの三端子レギュレータ(XC6202P502)を使って5Vを生成してATmega328に供給しています。

肝心の地震の検出ですが、モジュールそのままでは高周波の振動ノイズを拾うのか、値のバラツキが大きく上手くいきません。データシートにもあるようにXYZの各出力端子に1uFのコンデンサをつけて、帯域を制限してやることで、上記の様に比較的に静かな環境では値が落ち着くようになりました。計算上は5Hzくらいのところで帯域制限しているはずです。(なお、表示している数値の単位は「計算上は」ガルです)。

で、実際、今回の地震の余震のゆっさゆっさした揺れだと、下の値がじっとしていると気づくものでも5程度、はっきりわかるものだと10程度にはなります。何もない状態だと2~3には収まるようですので、とりあえず体感できる地震があったかどうかくらいは検出できそうです。

原子力発電との付き合い方について

炉心に海水を注入した福島第一原子力発電所は予想した通り、廃炉にする方向のようです。しかし今回の地震と津波を引き金とした原子力発電所の事故の影響は大きく、点検中の浜岡原子力発電所3号機の点検後の再開や建設中の原子力発電所の見直しがニュースになっています(asahi.comの記事)。

今回事故を起こした福島第一原子力発電所のは1970年代に営業運転を始めた古い原子力発電所ですので、そう遠くないうちに運転終了、という時期だったのではないかと思います。そのような時期の被災ということで不幸としかいいようがありません。

今回の地震と津波で頻繁に対比される浜岡原子力発電所の方は、緊急事態に対する備えも強化されているようです。福島第一原子力発電所で津波によって被害を受けて事故のそもそもの原因になった非常用発電機も頑丈な原子炉建屋内にあるそうです。(asahi.comの記事

新しい発電所ほど想定されるリスクも増えている(=対策もされている)ので、古い発電所は早めに更新する方がよいのでしょうが、原子力発電所の立地は非常に難しく、なかなか進まない(特に今後しばらくは難しい)でしょう。新しい発電所が完成して、供給体制が整わなければ古い発電所も止められないので、リスクは高いまま残る。そんな状態がしばらく続いてしまうのでしょうね。

日本は残念ながら化石燃料には恵まれていないし、面積のわりに人口も多い。現実解としてどうにかして原子力発電とは付き合っていくしかないと思うのですが・・。

原子力発電は地方への立地が多く、地方への押し付けだという意見もありますが、一方で見返りとして、インフラ整備や補助金、雇用の形などがあったのも事実です。(そのために、一度補助金を受けた地域が継続的に補助金が欲しくなるので原発銀座ができる、という話も聞きました)
目に見えない形でも、その地域の農産物の消費地が都市であったり、インフラが整ったことによりその地域への工場などの進出が増えて、地方への外注・下請けなどの形で都市と地方の経済が回っていたりします。

原子力以外のすべてのことも含めて、どこかで折り合いを付けていかなければならないのだと思います。。

Arduino+加速度計

ずいぶん前に買ってPSoCにつないで遊んだ加速度センサがあったので、今度はArduinoにつないでみました。

見ての通り、湿度計の回路に同居させてます。XYZの成分を細かく表示してもそもそもきちんと固定できてきないので意味がありません。そこで、XYZ成分それぞれについて、過去2~3秒程度の平均値を零点として、そこからの差分を取り出してこれをXYZをベクトル量として、そのベクトル長さを計算(単に二乗和の平方根をとっているだけですが・・・)し、表示させました。これだけだと表示が早すぎて見えないので、過去2~3秒の最大値も同時に表示させるようにしました。

うーん、ずっと放置してあっただけあって、埃で汚いですね・・・。

最初は震度計にできるかな、と思っでいたのですが、調べてみたら計測震度の計算は結構大変で、加速度波形をフーリエ変換して、フィルタをかけて、逆フーリエ変換、波形のスキャンをかける、ということなので、Arduinoで持っているメモリでは到底無理そうです。

なので、地震の揺れがこんなセンサで検出できるかな、というところまででおしまいです。幸い余震も減ってきているので、実際にどのくらい見えるのかはいまのところわかりません。

余震発生状況をアニメ化したサイト

DNA(ディリィ・ニュウス・エィジェンシィ)というサイトで紹介されていたのですが、東北関東大震災の地震発生状況をアニメ地図にした「Japan Quake Map」というサイトがあるのを知りました。これをみていると、前震と思しき地震の後、巨大な本震が起きて、その後はM5前後の余震がまるで花火のスターマインの如く発生し、時折ひときわ大きなM6クラスの余震がおきているのが視覚的にわかります。

福島第一原発にロボット投入?

GIZMODEで見たのですが、福島第一原発に米国製ロボットが投入されるようです。よくロボット技術では日本の技術が云々、などということが言われることがありますが、日本で報道されるものは古くからある産業用ロボットを除くとほとんどがデモンストレーション止まりで事業化が軌道に乗りそうな感じがしないものが多いように思います。

やはり具体的な軍事マーケットなどがある分だけ実フィールドでの実用化・商品化は米国の方が進んでいることを感じさせられます。リンク先に貼られているプロモーションビデオを見ても、日本でデモンストレーションが報道されるようなロボットのような突飛さは全くありません。その代わり、量産コストはそれほど高価なものではなく、実フィールドでの性能・安定性・メンテナンス性に優れているであろうと感じさせられるものになっています。