前回の続きでRTC8564と定周期割り込みライブラリの詳細。 | ||||||||||||||||||||||||||||||||||||
< 資料 > Sketch: Rtc8564AttachInterruptSleep ▼Library Code: Rtc8564AttachInterrupt.h ▼ Rtc8564AttachInterrupt.cpp ▼ Download: Rtc8564AttachInterrupt.zip |
||||||||||||||||||||||||||||||||||||
< Arduino と RTC8564 > 1. スレーブアドレスの指定 ArduinoでRTC8564モジュールを使用するには WireライブラリでI2C通信を行う必要がある。 RTC8564のスレーブアドレスは『0xA2』固定だが、Wireライブラリでは7ビットでデバイス特定をするため、 右に1ビットシフトさせて指定している。 Rtc8564AttachInterrupt.cpp line10
2. 回路接続 |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
Arduinoではアナログ4ピン(SDA:データライン)、アナログ5ピン(SCL:クロックライン)を使う。 前回のHoneypotシールドではタイムスタンプ保存のための外部EEPROMにI2C通信を用いていたが、 その回路をRTC用に入れ替えればよい。 RTCからの外部定周期割り込み信号を受信するためには、Arduinoの割り込みピンであるデジタル2ピンをプルアップで接続する。 タイマーを設定されたRTCは、カウントダウンが終了するごとにRTC3ピンからArduino2ピンにLOWレベル(0V)の信号を発信する。 その0V信号を受信するために、スケッチでは以下の部分で設定をしている。 // 割り込み設定 pinMode(RTC_INTERRUPT_PIN, INPUT); digitalWrite(RTC_INTERRUPT_PIN, HIGH); 3. スリープ SleepClass::powerDownAndWakeupExternalEvent()メソッド内で attachInterrupt()関数を使用してArduinoの割り込みピンを指定している。 なんでも作っちゃう、かも。さんのブログによると、このメソッドは「パワーダウン+外部割り込みによる復帰モード」であり、 スリープした後に指定したピンにLOWレベルの割り込み信号があった場合にスリープから復帰する、とある。 // スリープ開始 SleepClass::powerDownAndWakeupExternalEvent(0); つまり、 スリープ RTCからの定周期割り込み信号によってスリープから復帰 なんらかの処理をさせる スリープ ... というサイクルが可能になる。 |
||||||||||||||||||||||||||||||||||||
< RTC8564 各種設定レジスタへの設定方法 > 1. レジスタ一覧 RTC8564は様々な機能を設定するためのレジスタを持っている。 詳細は、『RTC-8564NB アプリケーションマニュアル』を参照。
|
||||||||||||||||||||||||||||||||||||
2. Wireライブラリによるレジスタの設定方法 一覧の上から順に機能を挙げると
となる。 レジスタごとに、0〜7のbitへ 1 か 0 を指定することにより、RTC8564モジュールを制御する。 Wireライブラリを使用した指定の仕方は以下のようになる。 // Control2レジスタ(定周期タイマの繰り返し・割り込み時の信号発信設定) Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x01); // Control2 address Wire.send(0x11); // TI/TP:1(繰り返し割り込みモード),TIE:1(定周期割り込み時、Lレベルの割り込み信号を発生させる) Wire.endTransmission(); 上記は、割り込み動作設定レジスタの『0x01』(Control2) に16進数でいう『0x11』(2進数では "10001")をセットしている。 ※ "RTC8564_SLAVE_ADRS" は、定数としてデバイスのスレーブアドレスを指定している。
|
||||||||||||||||||||||||||||||||||||
2進数、8進数、10進数、16進数相互変換 次回は、Rtc8564AttachInterruptライブラリの詳細を書いてみる。 |
2011年3月21日月曜日
Arduinoとリアルタイムクロック -2: 定周期タイマー割り込み & スリープ
2011年3月20日日曜日
Arduinoとリアルタイムクロック -1: 定周期タイマー割り込み & スリープ
|
||||||||||||
< Arduino と RTC8564 > 畑にセットしていた定点観測データロガーHoneypot。 一週間後にSDカード内のデータをチェックしてみると、タイムスタンプ情報が大幅に狂っていた。 チェックしてみた時刻と14時間近くのずれがある。 どうも気温によってArduinoのクロック振動数がかなり変動してしまうらしい。 1日1分程度のずれが生じるらしく、定期的に正確な時刻カウントを継続させるという用途には向いていない。 正確な計測時刻を継続させるにはハードウェア的に無理がある。 RTC(リアルタイムクロック)は、そのような問題を解決してくれる。 Arduinoとは別系統の正確なクロックモジュールを使用するので、時間系の処理はすべて一任できる。 今回調べてみるまでRTCのバックアップ回路の存在を知らなかったので、観測用シールドに組み込むべくいろいろと調査してみた。 以下の回路では、電源をOFFにしても5.5V 1Fの電気二重層コンデンサに溜められた電力によってRTCはカウントを持続できる。 外部EEPROMにタイムスタンプを記録して無理矢理時刻情報を繋げたり、SDカードと電池交換時のタイムラグが発生したりする問題がすべて解決する。 |
||||||||||||
|
||||||||||||
Sketch: Rtc8564AttachInterruptSleep ▼/* * sketch name : Rtc8564AttachInterruptSleep * summary : RTC8564で定周期タイマー割り込み & スリープ * releases : 2011/3/15 */ #include <Wire.h> #include <Rtc8564AttachInterrupt.h> #include <Sleep.h> /* RTCタイマ開始日付時刻 */ #define RTC_SEC 0x00 // 秒 #define RTC_MIN 0x18 // 分 #define RTC_HOUR 0x23 // 時 #define RTC_DAY 0x15 // 日 #define RTC_WEEK 0x02 // 曜日(00:日 〜 06:土) #define RTC_MON 0x03 // 月 #define RTC_YEAR 0x11 // 西暦 byte date_time[7] = { RTC_SEC ,RTC_MIN ,RTC_HOUR ,RTC_DAY ,RTC_WEEK ,RTC_MON ,RTC_YEAR }; /* 電源リセット確認フラグ */ boolean init_flg = false; /* 計測間隔(RTC割り込み間隔) */ #define RTC_INTERRUPT_TERM 10 /* 外部割り込みピン */ #define RTC_INTERRUPT_PIN 2 /* 定周期タイマ間隔設定単位 0:秒/1:分 */ #define RTC_INTERRUPT_MODE 0 void setup() { Serial.begin(9600); // 日付時刻初期化 Rtc.initDatetime(date_time); // RTC開始 Rtc.begin(); // 定周期割り込みタイマ継続確認 if (!Rtc.isInterrupt()) { // 割り込み設定 Rtc.syncInterrupt(RTC_INTERRUPT_MODE, RTC_INTERRUPT_TERM); } // 割り込み設定 pinMode(RTC_INTERRUPT_PIN, INPUT); digitalWrite(RTC_INTERRUPT_PIN, HIGH); } void loop() { // 初期化(電源OFF=>ON)すぐ後は計測しない if (init_flg) ReadRTC(); init_flg = true; // スリープ開始 SleepClass::powerDownAndWakeupExternalEvent(0); } void ReadRTC() { Rtc.available(); Serial.print(0x2000 + Rtc.years(), HEX); Serial.print("/"); Serial.print(Rtc.months(), HEX); Serial.print("/"); Serial.print(Rtc.days(), HEX); Serial.print(" "); Serial.print(Rtc.hours(), HEX); Serial.print(":"); Serial.print(Rtc.minutes(), HEX); Serial.print(":"); Serial.print(Rtc.seconds(), HEX); Serial.print(" "); Serial.println((int)Rtc.weekdays()); Serial.println(); } スケッチ実行には、以下の二つのライブラリが必要となる。
< Arduino RTC8564用定周期タイマー割り込みライブラリ > なんでも作っちゃう、かも。さんのRTC8564のライブラリを使わせて頂きました。 ありがとうございます。 RTC8564用ライブラリには定周期タイマー割り込みのメソッドが含まれていなかったので、改造してみた。 以下は RTC8564ライブラリをもとに僕が追記したRTC8564定周期割り込みタイマーライブラリである。 ■ Rtc8564AttachInterruptライブラリ Download: Rtc8564AttachInterrupt.zip Library Code: Rtc8564AttachInterrupt.h ▼ #ifndef Rtc8564AttachInterrupt_h #define Rtc8564AttachInterrupt_h #include <inttypes.h> class Rtc8564AttachInterrupt { private: void init(void); uint8_t _seconds; uint8_t _minutes; uint8_t _hours; uint8_t _days; uint8_t _weekdays; uint8_t _months; uint8_t _years; bool _century; public: enum { BCD = 0, Decimal = 1, }; Rtc8564AttachInterrupt(); void begin(void); void beginWithoutIsValid(void); void initDatetime(uint8_t date_time[]); bool isInitDatetime(void); void sync(uint8_t date_time[],uint8_t size = 7); void syncInterrupt(unsigned int mode, unsigned long term); bool available(void); bool isvalid(void); bool isInterrupt(void); uint8_t seconds(uint8_t format = Rtc8564AttachInterrupt::BCD) const; uint8_t minutes(uint8_t format = Rtc8564AttachInterrupt::BCD) const; uint8_t hours(uint8_t format = Rtc8564AttachInterrupt::BCD) const; uint8_t days(uint8_t format = Rtc8564AttachInterrupt::BCD) const; uint8_t weekdays() const; uint8_t months(uint8_t format = Rtc8564AttachInterrupt::BCD) const; uint8_t years(uint8_t format = Rtc8564AttachInterrupt::BCD) const; bool century() const; }; extern Rtc8564AttachInterrupt Rtc; #endif extern "C" { #include <stdlib.h> #include <string.h> #include <inttypes.h> } #include <WConstants.h> #include <Wire.h> #include "Rtc8564AttachInterrupt.h" #define RTC8564_SLAVE_ADRS (0xA2 >> 1) #define BCD2Decimal(x) (((x>>4)*10)+(x&0xf)) // Constructors //////////////////////////////////////////////////////////////// Rtc8564AttachInterrupt::Rtc8564AttachInterrupt() : _seconds(0), _minutes(0), _hours(0), _days(0), _weekdays(0), _months(0), _years(0), _century(0) { } void Rtc8564AttachInterrupt::init(void) { delay(1000); Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x00); // write reg addr 00 Wire.send(0x20); // 00 Control 1, STOP=1 Wire.send(0x00); // 01 Control 2 Wire.send(0x00); // 02 Seconds Wire.send(0x00); // 03 Minutes Wire.send(0x09); // 04 Hours Wire.send(0x01); // 05 Days Wire.send(0x01); // 06 Weekdays Wire.send(0x01); // 07 Months Wire.send(0x01); // 08 Years Wire.send(0x00); // 09 Minutes Alarm Wire.send(0x00); // 0A Hours Alarm Wire.send(0x00); // 0B Days Alarm Wire.send(0x00); // 0C Weekdays Alarm Wire.send(0x00); // 0D CLKOUT Wire.send(0x00); // 0E Timer control Wire.send(0x00); // 0F Timer Wire.send(0x00); // 00 Control 1, STOP=0 Wire.endTransmission(); } // Public Methods ////////////////////////////////////////////////////////////// void Rtc8564AttachInterrupt::begin(void) { Wire.begin(); if(isvalid() == false) { // RTC初期設定 init(); // 日付時刻プロパティがセットされていたら、その時刻をセット if (isInitDatetime()) { byte date_time[7]; date_time[0] = _seconds; date_time[1] = _minutes; date_time[2] = _hours; date_time[3] = _days; date_time[4] = _weekdays; date_time[5] = _months; date_time[6] = _years; sync(date_time); } } } // RTC日付時刻継続確認なしの日付時刻初期化 void Rtc8564AttachInterrupt::beginWithoutIsValid(void) { Wire.begin(); // RTC初期設定 init(); // 日付時刻プロパティがセットされていたら、その時刻をセット if (isInitDatetime()) { byte date_time[7]; date_time[0] = _seconds; date_time[1] = _minutes; date_time[2] = _hours; date_time[3] = _days; date_time[4] = _weekdays; date_time[5] = _months; date_time[6] = _years; sync(date_time); } } // 日付時刻のプロパティセット void Rtc8564AttachInterrupt::initDatetime(uint8_t date_time[]) { _seconds = (date_time[0]) ? date_time[0] : 0x00; _minutes = (date_time[1]) ? date_time[1] : 0x00; _hours = (date_time[2]) ? date_time[2] : 0x09; _days = (date_time[3]) ? date_time[3] : 0x01; _weekdays = (date_time[4]) ? date_time[4] : 0x01; _months = (date_time[5]) ? date_time[5] : 0x01; _years = (date_time[6]) ? date_time[6] : 0x01; } // 日付時刻プロパティセット確認 bool Rtc8564AttachInterrupt::isInitDatetime(void) { bool flg = false; if ((_seconds & 0x00) != 0x00) flg = true; if ((_minutes & 0x00) != 0x00) flg = true; if ((_hours & 0x09) != 0x09) flg = true; if ((_days & 0x01) != 0x01) flg = true; if ((_weekdays & 0x01) != 0x01) flg = true; if ((_months & 0x01) != 0x01) flg = true; if ((_years & 0x01) != 0x01) flg = true; return flg; } // 日付時刻の初期化 void Rtc8564AttachInterrupt::sync(uint8_t date_time[],uint8_t size) { // 時計機能ストップ Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x00); // Control1 アドレス Wire.send(0x20); // 00 Control 1, STOP=1 Wire.endTransmission(); // 日付時刻設定 Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x02); // Seconds アドレス Wire.send(date_time, size); // 日付時刻セット Wire.endTransmission(); // 時計機能スタート Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x00); // Control1 アドレス Wire.send(0x00); // 00 Control 1, STOP=0 Wire.endTransmission(); } // 定周期割り込みタイマの初期化 // param // mode: 割り込み周期モード選択フラグ / 0: 1秒(1Hz)周期, 1: 1分(60Hz)周期 // term: 割り込み周期(0〜255) mode:0 選択時は単位は「秒」、mode:1 選択時は単位は「分」 void Rtc8564AttachInterrupt::syncInterrupt(unsigned int mode, unsigned long term) { // Control2レジスタ(定周期タイマの繰り返し・割り込み時の信号発信設定) Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x01); // Control2 address Wire.send(0x11); // TI/TP:1(繰り返し割り込みモード),TIE:1(定周期割り込み時、Lレベルの割り込み信号を発生させる) Wire.endTransmission(); // 定周期タイマ設定 byte buf[2]; if (mode == 1) { buf[0] = 0x83; // TE:1(タイマON), TD1:TD0/1;1(カウントダウン周期を60Hz/1分に設定) } else { buf[0] = 0x82; // TE:1(タイマON), TD1:TD0/1;0(カウントダウン周期を1Hz/1秒に設定) } buf[1] = term; // タイマ周期を設定 Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x0E); // Timer Control address Wire.send(buf, 2); Wire.endTransmission(); } bool Rtc8564AttachInterrupt::available(void) { uint8_t buff[7]; Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x02); // write reg addr 02 Wire.endTransmission(); Wire.requestFrom(RTC8564_SLAVE_ADRS, 7); for(int i=0; i<7; i++){ if(Wire.available()){ buff[i] = Wire.receive(); } } _seconds = buff[0] & 0x7f; _minutes = buff[1] & 0x7f; _hours = buff[2] & 0x3f; _days = buff[3] & 0x3f; _weekdays = buff[4] & 0x07; _months = buff[5] & 0x1f; _years = buff[6]; _century = (buff[5] & 0x80) ? 1 : 0; return (buff[0] & 0x80 ? false : true); } bool Rtc8564AttachInterrupt::isvalid(void) { Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x02); // write reg addr 02 Wire.endTransmission(); Wire.requestFrom(RTC8564_SLAVE_ADRS, 1); if(Wire.available()){ uint8_t buff = Wire.receive(); return (buff & 0x80 ? false : true); } return false; } // 定周期割り込みタイマの継続確認 bool Rtc8564AttachInterrupt::isInterrupt(void) { Wire.beginTransmission(RTC8564_SLAVE_ADRS); Wire.send(0x01); Wire.endTransmission(); Wire.requestFrom(RTC8564_SLAVE_ADRS, 1); if(Wire.available()){ return ((Wire.receive() & 0x04) != 0x04 ? false : true); } return false; } uint8_t Rtc8564AttachInterrupt::seconds(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_seconds); return _seconds; } uint8_t Rtc8564AttachInterrupt::minutes(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_minutes); return _minutes; } uint8_t Rtc8564AttachInterrupt::hours(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_hours); return _hours; } uint8_t Rtc8564AttachInterrupt::days(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_days); return _days; } uint8_t Rtc8564AttachInterrupt::weekdays() const { return _weekdays; } uint8_t Rtc8564AttachInterrupt::months(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_months); return _months; } uint8_t Rtc8564AttachInterrupt::years(uint8_t format) const { if(format == Decimal) return BCD2Decimal(_years); return _years; } bool Rtc8564AttachInterrupt::century() const { return _century; } // Preinstantiate Objects ////////////////////////////////////////////////////// Rtc8564AttachInterrupt Rtc = Rtc8564AttachInterrupt(); Rtc8564AttachInterrupt.zip をダウンロード & 解凍し、Arduino/libraries/Rtc8564AttachInterrupt として保存する。 追加したメソッドは以下。
次回は、RTC8564についてもうちょっと詳しく書いてみる。 |
マザー・テレサの言葉
思考に気をつけなさい、それはいつか言葉になるから。 言葉に気をつけなさい、それはいつか行動になるから。 行動に気をつけなさい、それはいつか習慣になるから。 習慣に気をつけなさい、それはいつか性格になるから。 性格に気をつけなさい、それはいつか運命になるから。 〜 マザー・テレサ 〜 読んでいた記事のなかで唐突に出会った言葉。 思わずドキッとしてしまった。 ベンチャービジネス千里眼より。 |
2011年3月19日土曜日
ちょっと気になる震災復興支援関連プロジェクト
ものづくり系Makerの人達が関われそうなプロジェクトが Make:Japan に掲載されている。 二つのサイトの連携による震災復興支援プロジェクト。 被災地で役立つ情報を日本語化するFab For LifeプロジェクトとOLIVE OLIVE : 震災被災地での生活を助けるデザインやアイデアを集めるデータベースwiki。 Instructables : DIYものづくりノウハウ共有サイト(英語)。 (1) Instructablesに掲載されている有益なアイディアの翻訳 (2) 世界のFabLabとの連携による新規アイディアの投稿 (3) OLIVEのテキスト情報のビジュアル化 このサイトを通じて募金すると、自分のTwitterアイコンを表示できる。 募金した金額によってアイコンの大きさが異なる。 ユーザーインセンティブと震災復興支援活動をシンプルに結びつけた発想力。 募金にはPaypalアカウントが必要。 物理データ共有サイト Pachube によるガイガーカウンター情報の共有プロジェクト。 Pachube開発チームがセキュアな共有鍵や制限なしのAPIリクエストなどの提供を用意してくれたみたい。 復興支援ではないけれど、気になったのでチェック。 Arduino × Ethernet Shield × ガイガーカウンターで作れそうだけど、分解していじれそうな手頃なガイガーカウンターが見つからない。 ストロベリー・リナックスのUSBガイガーカウンターはまめにチェックしているけど、納品は1ヶ月後とのこと。 APIリクエストを受け付けているということは、アカウント登録すれば自分のサイトにも共有データを表示できるのかも。 XML: http://api.pachube.com/v2/feeds.xml?tag=sensor:type=radiation&lat=35&lon=139&distance=2000 JSON: http://api.pachube.com/v2/feeds.json?tag=sensor:type=radiation&lat=35&lon=139&distance=2000 CSV: http://api.pachube.com/v2/feeds.csv?tag=sensor:type=radiation&lat=35&lon=139&distance=2000 |
放射能についての最低限の知識
放射線についてあまりに知らなさすぎたので少し調べてみる。 全国の放射能濃度一覧 放射線監視モニタ 武田邦彦 「原発、緊急情報」 Gigazine 「ミリシーベルト」「マイクロシーベルト」とはどんな単位なのか、どのくらいから危険なのか?放射線量計測単位のまとめ サイエンス・メディア・センター Q&A 風向き情報 気象庁アメダス:東北地方(南部) 日常生活では、1年間にだいたい平均して 2.4mSvの放射線を浴びるそうだ。 これは、1時間に換算するとだいたい 0.27μSv。 1日だと 6.57μSv。 注意しなければならないのは、メディアで耳にする400mSvだとかの数値が どんな時間の幅のなかで計測されたものなのかということだ。 それは瞬間的なものなのか、1時間のものなのか。 それとも1ヶ月、もしかしたら1年間のものか。 またはレントゲンの放射線量に対しての比較値なのか。 例えばある空間の放射線量が 10μSv/h(1時間に10μSv)であるならば、その場所に1日留まると240μSv 被曝する。 それが1年間では 87.6mSvと、基準を上回まわる。 メディア媒体で放射線量の数値を目にしたときは、その数値がどのような計測をされた値なのか、 少なくとも一度は考えてみなければならない。 |
政府への静かな批判
Twitterを始めとして様々なメディアで政府の対応と東京電力の危機管理のなさが非難されている。 Ustreamでは実況に対しての非難がリアルタイムで流れている。 彼らは非難されて当然だと思うし、こういう状況では張りつめた鬱憤を彼らに吐き出したくなる。 放射能濃度が危険だからという理由で物資が被災地に届いていないことや、 政府が正確な情報を出さない事に対して無力感を感じている。 しかしいま情報発信をしている人達の多くは、僕を含めて、現時点では、とりあえず直接的な被害を被っている地域に居るわけではないと思う。 被災者の方々よりも体力と気力がある分、冷静な対応をするべきだと思う。 記者は政府と東京電力に対して、どういう質問をしたら最も効率的に具体的な情報を引き出せるのか考え抜いて質問をしなくてはならない。 とりあえずの「安全圏」に居る僕達は、自分のできる範囲で被災地への支援(募金や物資を送る)をして 使わない家電製品のケーブルを抜き、なるべく余計な情報を発信せずに日常生活を遅ればいいと思う。 ある程度のプレッシャーは政府と東京電力に与え続けるべきだけど、 それがただの罵りに終始するのではエネルギーの無駄だ。 それどころか、政府に対する無駄なプレッシャーは被災地や原発への対応を鈍らせてしまうかもしれない。 自分の命の危機を感じるなかで原発の冷却作業にあたっている作業員の心の中に余計なノイズを届けてしまうかもしれない。 バカだの死ねだの言われ続けながら、それでも死ぬ気で頑張れるほど人は強くないと思う。 国の為に動く立場にいる人達が、本当に大事な局面で保身や利益云々を超えて正確な一歩を踏み出すために必要なのは、 心ない非難を受けることではなく、プロとしてのプライドを取り戻せるような周囲の冷静な批判力だ。 余計な情報が、実際に原発の対応にあたっている東京電力や自衛隊の方々の耳に入らない事を祈る。 心に残ったメッセージ。 心に残るつぶやき 村上龍のニューヨーク・タイムズへの寄稿文 「危機的状況の中の希望」 |
2011年3月12日土曜日
東北地方太平洋沖地震災募金
地震発生時、会社の同僚とともに近くの公園に避難した。 鉄筋コンクリート製であるはずの会社の建物の壁とガラス窓が水面のようにうねっているのを見た時に、 初めて恐怖を感じた。 ある程度揺れがおさまり、会社に戻ってネットで情報を集めてみる。 仙台出身の同僚が家族に電話・Twitter等で連絡を試みていたが、通じる気配がないようだった。 その時はまだあの火の海になった気仙沼や濁流に飲み込まれる若林区の映像は流れていなかった。 そのせいか、まだ彼の顔には若干余裕が感じられた。 会社からは帰宅の許可が出たので約3時間ほどかけて自宅まで帰った。 その頃にはもう次々とアップされていく被災地の映像が流れていた。 僕の会社には非常用ヘルメットは用意されていない。 避難した公園には大勢の人達がいたが、その中でヘルメットをしている人は1割にも満たなかった。 地域の災害訓練にも参加したことがない。 もし震源地が東京だったら自分は生きていられるだろうかと思わずにはいられない。 微力ではあるけれど、僕も寄付をした。 災害時には募金詐欺が多発するらしいので、なるべく政府の窓口を利用するのが確実である。 民主党 東北地方太平洋沖地震災害募金の受付を開始 ※5/14 政府の犯罪的無策ぶりに頭に来たので、取り消しをする。 他にも以下に災害募金先情報が載っている。 募金情報まとめ 東北地方太平洋沖地震の義援金、募金先の情報まとめ 亡くなられた方々のご冥福をお祈りします。 そして、少しでも多くの被災者の方々が救われますように。 |
登録:
投稿 (Atom)