2010年11月23日火曜日

定点観測データロガー -2 : EEPROMにデータを保存する


フィールド設置型の定点観測ロガーを作成する。

< 定点観測器の仕様 >
  1. 計測内容は、計測時刻・気温・湿度・温度・照度とする。
  2. Arduino Pro 328 3.3V 8MHz をスタンドアロンで動作させる。
  3. 単三乾電池4個を電源とし、最低一週間は稼働する省電力設計とする。
  4. 設定した間隔で持続的にデータを記録できるものとする。
  5. 定期的に記録データ媒体と乾電池を交換できる設計とする。
  6. 計測データの保存はSDカードを使用する。


< 持続した時刻情報の保存 >

前回のWatchdogとスリープ制御によって、定点観測ロガーの電力補給問題はなんとかなりそうである。
まだ実験途中だけど、スリープと乾電池4個を使えば最低でも1週間は持つだろう。

もう一つの問題は持続した正確な時刻情報の記録だ。
電池とデータ保存用のSDカードを交換する時には当然電源を切らなくてはならないけれど、
Arduinoには電源を切ってもカウントを続けるPCのような内蔵時計の機能はない。
しかしデータの計測にはある程度正確な時刻情報がともなっていないと意味がないのである。
例えばDatetimeライブラリを使用するとして、setup()関数で日付をセットしても、
電源を切った途端に日付情報は消えてしまう。
電池とSDカードを交換した後に、現在の時刻情報をもう一度スケッチにセットしてArduinoにアップロードしなくてはならない。
フィールドにPCを持ち歩くのは面倒なのでやりたくない。

解決方法として、ArduinoのEEPROMメモリ領域に時刻情報を記録することにした。
EEPROMはArduinoの電源を切っても消えないメモリ領域である(Arduino 日本語リファレンス EEPROMの項を参照)。
Arduino Pro 328 3.3V 8MHzの場合はATmega328チップなので、1024byteの情報を読み書きできる。
使い方は以下のようになる。
  1. SDカードに環境情報を記録するタイミングでEEPROMにも時刻情報のみを記録する。
  2. 電源を切る(電池とSDカード交換)。
  3. 起動。
  4. EEPROM領域に時刻情報が記録されていればそれを使い、記録されていなければDatetimeライブラリで初期化した時刻情報を使う(初めて畑にロガーをセットする時のみ)。setup()関数内に処理を書いておけばいい。

時刻情報はタイムスタンプとして記録する。
タイムスタンプとは1970年1月1日00:00:00からの経過秒数のことで、たいていの言語で簡単に日付時刻に変換できるので、
コンピュータの世界では時刻情報として利用されている。
例えば2010年11月23日14時8分40秒(日本標準時)のタイムスタンプは「1290456520」といった感じ。

UNIXタイムスタンプ変換ツール

タイムスタンプはlong型のデータ情報で、EEPROM領域を4byte使用する。
データ書き換え時に古いタイムスタンプ情報を上書きしてしまえばいいので、1024byteのメモリ容量でも十分である。


< タイムスタンプ情報(4 Byte値)をEEPROMに書き込み、読み込む >



/*
 * sketch name   : eeprom_r_w_4B
 * summary       : タイムスタンプ情報(4 Byte値)をEEPROMに書き込み、読み込む
 */

#include <EEPROM.h>
#include <DateTime.h>

// log start date
int year   = 2010;
int month  = 11;
int day    = 20;
int hour   = 18;
int minute = 53;
int second = 0;

long log_timestamp;

void setup(void) {
  Serial.begin(9600);
  DateTime.sync(DateTime.makeTime(second, minute, hour, day, month, year));
}

void loop() {
  log_timestamp = DateTime.now();
  Serial.print(" write timestamp / ");
  Serial.println(log_timestamp, DEC);
  
  eep4Bwrite(0, log_timestamp);  // 書き込み
  log_timestamp = eep4Bread(0);  // 読み込み
  
  Serial.print(" read timestamp / ");
  Serial.println(log_timestamp, DEC);
  Serial.println();
  
  delay(3000);
}

/*
 * func name  : eep4Bwrite
 * processing : 4byte値をEEPROMに書き出す
 * param      : int  address / 書き出し開始EEPROMアドレス
 *              long param   / 書き出す値
 * return     : 
 */
void eep4Bwrite(int address, long param)
{
  int  l_shift;     // 左シフトbit数
  long inleft;
  byte in_bytes;    // EEPROM格納用byte値
  int  eep_address; // EEPROM上のアドレス
  int  i;
  for (i = 0; i <= 3; i++) {
    l_shift     = 8 * (3 - i);
    inleft      = param  << l_shift;     // 左にシフト
    in_bytes    = inleft >> 24;          // 右にシフト
    eep_address = address + i;
    EEPROM.write(eep_address, in_bytes);  // 書き込み
    
    //デバック用
//    Serial.print(" eeprom address : ");
//    Serial.print(eep_address,DEC);
//    Serial.print(" / byte : ");
//    Serial.println(in_bytes,BIN);
//    Serial.println(" ");
  }
}

/*
 * func name  : eep4Bread
 * processing : 4byte値をEEPROMから読み出す
 * param      : int  address   / 読み出し開始EEPROMアドレス
 * return     : long ret_param / 4byte値
 */
long eep4Bread(int address)
{
  int  eep_address;   // EEPROM上のアドレス
  long inleft;        // EEPROM格納用byte値
  int  l_shift;       // 左シフトbit数
  long in_bytes;      // byte値格納用
  long ret_param = 0; // リターン値初期化
  int  i;
  for (i = 0; i <= 3; i++) {
    eep_address = address + i;
    inleft      = EEPROM.read(eep_address);  // 読み込み
    l_shift     = 8 * i;
    in_bytes    = inleft << l_shift;
    ret_param  |= in_bytes;
    
    //デバック用
//    Serial.print(" read test eeprom address : ");
//    Serial.print(eep_address,DEC);
//    Serial.print(" / byte : ");
//    Serial.println(ret_param,BIN);
//    Serial.println(" ");
  }
  return ret_param;
}


Arduino Pro 328 3.3V 8MHzにスケッチをアップロードするには3.3V動作Arduino製品向け小型USB-シリアルアダプタとUSBケーブル(Aオス-miniBタイプ)が必要である。
スケッチの実行は、Arduino Pro 328 3.3V 8MHzとPCをただ繋ぐだけである。

シリアルモニタで確認



スケッチは、以下のリンク先を参考にさせて頂きました。ありがとうございます。
Reflection of my mind arduinoのEEPROMテスト

リンク先のスケッチを理解してEEPROM書き込み関数を作成するにあたってビット演算を少し勉強する必要があった。
タイムスタンプを格納しているunsigned long型というのは符号なし整数型の4byteのデータ型だけど、
まずは"4byte"とはなんだ?というレベルからである。
およばずながら、理解できた範囲で確認してみる。

正の整数を格納するデータ型は

byte型(1byte)
unsigned int型(2byte)
unsigned long型(4byte)

がある。
これは2進数であらわすと、

■ byte型(10進数では255 〜 0、つまり2の8乗〜2の0乗。1byte。8bit。)
11111111 〜 00000000

■ unsigned int型(10進数では65,535 〜 0、つまり2の16乗〜2の0乗。2byte。16bit。)
11111111 11111111 〜 00000000 00000000

■ unsigned long型(10進数では4,294,967,2952 〜 0、つまり2の32乗〜2の0乗。4byte。32bit。)
11111111 11111111 11111111 11111111 〜 00000000 00000000 00000000 00000000

となる。

EEPROM.write()メソッドは1byteづつしか書き込めない。
ということは、タイムスタンプ型のunsigned long型は4回に分けて書き込む必要があるということになる。

eep4Bwrite()関数の

  for (i = 0; i <= 3; i++) {
    l_shift     = 8 * (3 - i);
    inleft      = param  << l_shift;     // 左にシフト
    in_bytes    = inleft >> 24;          // 右にシフト
    eep_address = address + i;
    EEPROM.write(eep_address, in_bytes);  // 書き込み
  }
の箇所でやっていることがそれである。

引数 "param"(4byteのタイムスタンプ情報)の値を仮に「1290456520」とすると、
2進数では「01001100 11101010 11001101 11001000」となる。

2進数、8進数、10進数、16進数相互変換

これを、「01001100」と「11101010」と「11001101」と「11001000」の4つの値(1byte)に分解して
EEPROM.write()メソッドで書き込む。

for文ループの0回目で、
「1290456520」を左に24bitシフトし、long型変数 "inleft" に格納する。
右に24bitシフトして、byte型変数 "in_bytes" に格納する。
ということをやっている。

←に24bitシフト
01001100 11101010 11001101 11001000
                                 ↓
11001000 00000000 00000000 00000000

→に24bitシフト
11001000 00000000 00000000 00000000
                                 ↓
00000000 00000000 00000000 11001000

できあがった値「00000000 00000000 00000000 11001000」は、
byte型変数 "in_bytes" に2進数で「11001000」という値として格納される。
それをすかさずEEPROMメモリアドレスの0番地に保存する。

同様に、

for文の1回目 : in_bytes = 11101010、EEPROMメモリアドレスの1番地に保存
for文の2回目 : in_bytes = 11001101、EEPROMメモリアドレスの2番地に保存
for文の3回目 : in_bytes = 11001000、EEPROMメモリアドレスの3番地に保存

と繰り返せば、long型のタイムスタンプ情報がEEPROMメモリアドレスの0〜3番地に保存できる。

読み込みの eep4Bread()関数ではこの逆の処理をやっている。
for文ループの0回目で、
EEPROMアドレス0番地の値「01001100」を読み込み、左に0bitシフトし、long型(4byte格納)変数 "in_bytes" に格納する。

←に0bitシフト
00000000 00000000 00000000 11001000
                                 ↓
00000000 00000000 00000000 11001000

そして、値0が格納されたlong型変数 "ret_param"(値は2進数で「00000000 00000000 00000000 00000000」)と
"|"(OR演算子)でbit演算した値を"ret_param"に格納する。

    ret_param  |= in_bytes;

は、わかりやすく書くと

    ret_param  = ret_param | in_bytes;

という処理をしている。
"|"(OR演算子)をかけると、

00000000 00000000 00000000 00000000 : ret_param
00000000 00000000 00000000 11001000 : in_bytes
----------------------------------------------------------------------
00000000 00000000 00000000 11001000 : ret_paramに格納

つまり、"ret_param" には「00000000 00000000 00000000 11001000」が格納される。
同様に、

for文の1回目 :
00000000 00000000 00000000 11001000 : ret_param
00000000 00000000 11001101 00000000 : in_bytes
----------------------------------------------------------------------
00000000 00000000 11001101 11001000 : ret_paramに格納

for文の2回目 :
00000000 00000000 11001101 11001000 : ret_param
00000000 11101010 00000000 00000000 : in_bytes
----------------------------------------------------------------------
00000000 11101010 11001101 11001000 : ret_paramに格納

for文の3回目 :
00000000 11101010 11001101 11001000 : ret_param
01001100 00000000 00000000 00000000 : in_bytes
----------------------------------------------------------------------
01001100 11101010 11001101 11001000 : ret_paramに格納

となり、long型変数 "ret_param" には最終的に「01001100 11101010 11001101 11001000」、つまりもとのタイムスタンプ「1290456520」が格納される。


< I2C通信を使い、タイムスタンプ情報(4 Byte値)を外部EEPROMに書き込み、読み込む >




ArduinoのEEPROMに値を格納できたけれど、ひとつ問題がある。
ArduinoのEEPROMの読み書き回数は、公称100000回だそうだ。
タイムスタンプ情報を一回書き込むためには4回の書き込みが必要である。
畑に設置する定点観測器で計測間隔を5分にするとして、1時間で48回、
1日で1152回もの書き込み処理が発生することになる。
つまり、たった86日間で書き込み限度回数に達してしまうのである。
三ヶ月弱でArduinoを買い替えるのは経済的に無駄である。
そこで、内部EEPROMの代わりに、Arduinoに外部接続できる非常に安価なEEPROM、24LC64を使用する事にする。
24LC64は公称書き込み限度回数1000000回、秋月だと60円で購入できる。
上記の計算だと28ヶ月持つ。
コストが安くて設置も簡単だけど、あえて欠点を挙げるならばアナログピンを二つ使用しなければならないところ。

回路は、以下のリンク先を参考にさせて頂きました。ありがとうございます。
なんでも作っちゃう、かも。 Arduino で遊ぼう - 大容量EEPROMに毎日の温度変化を保存する





/*
 * sketch name   : eeprom_I2C_r_w_4B
 * summary       : タイムスタンプ情報(4 Byte値)を外部EEPROMに書き込み、読み込む
 */

#include <Wire.h>
#include <DateTime.h>

// log start date
int year   = 2010;
int month  = 11;
int day    = 20;
int hour   = 20;
int minute = 45;
int second = 0;

#define EEPROM_DEV_ADDRESS 0x50  // I2CEEPROM 24LC64

long log_timestamp;

/* 計測時の確認用点滅LED */
#define LED_PIN 9

void setup(void) {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  Wire.begin(EEPROM_DEV_ADDRESS);
  DateTime.sync(DateTime.makeTime(second, minute, hour, day, month, year));
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  
  log_timestamp = DateTime.now();
  
  Serial.println("Timestamp is written to the EEPROM...");
  Serial.print("  DEC : ");
  Serial.println(log_timestamp, DEC);
  Serial.print("  BIN : ");
  Serial.println(log_timestamp, BIN);
  Serial.println(" ");
    
  i2cEeprom4BWrite(EEPROM_DEV_ADDRESS, 0, log_timestamp);  // 外部EEPROMにタイムスタンプ情報(4byte値)を書き込む
  log_timestamp = i2cEeprom4BRead(EEPROM_DEV_ADDRESS, 0);  // 外部EEPROMからタイムスタンプ情報(4byte値)を読み込む
  
  Serial.println("Time stamp read from the EEPROM...");
  Serial.print("  DEC : ");
  Serial.println(log_timestamp, DEC);
  Serial.print("  BIN : ");
  Serial.println(log_timestamp, BIN);
  Serial.println(" ");
  
  digitalWrite(LED_PIN, LOW);
  
  delay(5000);
}

/*
 * func name  : i2cEeprom4BWrite
 * processing : 4byte値をI2C外部EEPROMに書き出す
 * param      : deviceAddress      / I2C外部EEPROMのデバイスアドレス
 *              startMemoryAddress / EEPROM上の書き込み開始アドレス
 *              longParam          / 書き込む4byteのデータ
 * summary    : デバイスの0番目の番地 / 32〜25bit
 *                        1番目の番地 / 24〜17bit
 *                        2番目の番地 / 16〜9bit
 *                        3番目の番地 / 8〜1bit
 * return     : 
*/
void i2cEeprom4BWrite(int deviceAddress, unsigned long startMemoryAddress, long longParam)
{
  Wire.beginTransmission(deviceAddress);
  Wire.send((int)(startMemoryAddress >> 8));
  Wire.send((int)(startMemoryAddress & 0xFF));
  
  byte byteArray[sizeof(long)] = {
         (byte)(longParam >> 24),
         (byte)(longParam >> 16),
         (byte)(longParam >> 8),
         (byte)(longParam >> 0)
       };
  
  for (int i = 0; i < sizeof(long); i++) {
    Wire.send(byteArray[i]);
  }
  
  Wire.endTransmission();
  delay(5);
}

/*
 * func name  : i2cEeprom4BRead
 * processing : 4byte値をI2C外部EEPROMから読み出す
 * param      : deviceAddress      / I2C外部EEPROMのデバイスアドレス
 *              startMemoryAddress / EEPROM上の読み込み開始アドレス
 * return     : return_long        / 読み込んだ4byteデータ 
*/
long i2cEeprom4BRead(int deviceAddress, unsigned long startMemoryAddress)
{
  Wire.beginTransmission(deviceAddress);
  Wire.send((int)(startMemoryAddress >> 8));
  Wire.send((int)(startMemoryAddress & 0xFF));
  Wire.endTransmission();
  Wire.requestFrom(deviceAddress, sizeof(long));
  delay(5);
  
  long received_long;
  long return_long = 0;
  int  cnt = sizeof(long) - 1;
  
  for (int i = 0; i <= cnt; i++) {
    if (Wire.available()) {
      received_long = Wire.receive();
      return_long  |= (received_long << (8 * (cnt - i)));
    }
  }

  return return_long;
}


次回は入力するセンサについて実験してみます。


< 参考リンク >


定点観測データロガー -1 : Watchdogタイマーとスリープからの自動復帰


アウトドアに設置され、静かにデータを計測し続ける定点観測ロガー。
なぜか「定点観測」という言葉の響きからとてもロマンチックなイメージをしてしまう。
まるで毎晩天体望遠鏡で夜空の星を眺め続ける少年のような(それは天体観測)。
大自然の中に存在する、小さいけれどメカニカルな存在感を美しいと感じているんだと思う。
Arduinoを使い、一ヶ月くらい放置してもきちんと環境データを記録し続けてくれる定点観測ロガーを作成する。

八月から始めた畑は家から結構離れた郊外にある。
往復2時間かかるので、仕事帰りにちょっと野菜達の様子を観るということは無理である。
育成の観察や害虫駆除など本当は毎日でもしたいようなことができない分、農業はまだ身近に感じる事ができない。
だからというわけでもないけど、定点観測ロガーを設置する予定のフィールドは僕の畑である。

畑の面積は約16平方メートルで、これは六畳一間をひとまわり大きくしただけの広さだ。
堆肥の山の発酵熱は成分調整をうまくやれば季節を問わず摂氏80℃にも達する事があり、
また真冬の霜の降りた畝の表土は0℃を下回る。
それにキーホールガーデンや畝、池など、狭い空間なりにできるだけ多様な小環境を造成したので、
ベランダのプランターガーデンよりは複雑な微気象の変化を作り出せるのではないかと思う。
土の水分計測も考えたが、必要ないので止めた。
共同農園には水道の蛇口が一つしかないしから自動水分補給器のようなものをしかけることはできないし、
プランター栽培とは異なり、種まき後の発芽までの期間以外は自然の雨だけで水分補給は事足りてしまうからである。
計測対象となるのは気温と湿度、それに堆肥の山の発酵熱、土の表面温度、池の水温、照度とする。
温度センサと湿度センサ、フォトダイオードをしかける。
ちょっとした環境データを利用して、種まきの時期の把握とか、自分の畑に適する野菜の選別作業の足しになれば?幸いである。


< 定点観測器の仕様 >
  1. 計測内容は、計測時刻・気温・湿度・温度・照度とする。
  2. Arduino Pro 328 3.3V 8MHz をスタンドアロンで動作させる。
  3. 単三乾電池4個を電源とし、最低一週間は稼働する省電力設計とする。
  4. 設定した間隔で持続的にデータを記録できるものとする。
  5. 定期的に記録データ媒体と乾電池を交換できる設計とする。
  6. 計測データの保存はSDカードを使用する。

まずは電源である。
これはなんとかなりそう。
超最先端ハイテク技術でもない限りこういうことは既に先人達の解決方法があって、そのヒントはMake:Japanの記事の中に眠っていた。

スリープして電池寿命を延ばすArduino小鳥さえずり機

Watchdog Timerによる自動復帰スリープ機能を使って、電池寿命をなんと4日間から3年間に引き延ばしている。
この記事を読んで初めて、Arduinoでも外部からの割り込みなしにスリープからの自動復帰ができるということを知った。
スリープ状態の時には電力消費を限りなく低く抑え、設定したスリープ間隔に達したら自動復帰させて目的の処理を実行させ、
再び設定した間隔でスリープさせる。
畑には毎週、最低でも隔週間隔で通うので、電池4個を使って2週間持てばいい。


< Arduino スケッチ >

以下はテストスケッチである。
ArduinoのWatchdogとSleepのライブラリはなんでも作っちゃう、かも。から賜りました。ありがとうございます。

Watchdogライブラリ
リンク先からファイルをコピペし、Watchdog というディレクトリを作成してその中に保存。

Sleepライブラリ
リンク先から Sleep003.zip をダウンロード&解凍ファイルする。Sleep というディレクトリができる。

それぞれ、Arduino/libraries/ 以下に保存する。

参考サイトのスケッチをちょっといじった。
デジタル13ピンのLEDを3秒間点灯させた後、スリープさせて1秒後にスリープ復帰...を繰り返す。
Arduino Pro をUSBケーブルで接続して、スケッチをアップロード。



/*
 * sketch name   : watchdog_sleep_led
 * summary       : LEDを点灯させた後に指定の間隔スリープ、自動復帰させる
 */

#include <Watchdog.h>
#include <Sleep.h>

// オブジェクト作成
WatchdogClass WD = WatchdogClass();

void setup() {
  pinMode(13,OUTPUT);                   // 13ピンを出力に設定
  WD.systemResetEnable(false);          // スリープ復帰時にスケッチをリセットしない(setup関数を実行しない)ように設定
  WD.enable(WatchdogClass::TimeOut1s);  // スリープ間隔を1秒に設定
}

void loop() {
  digitalWrite(13,HIGH);        // LED点灯開始
  delay(3000);                  // 3秒間
  digitalWrite(13,LOW);         // LED点灯停止

  WatchdogClass::timerReset();  // Watchdogタイマーリセット
  SleepClass::powerDown();      // パワーダウン
}


Arduino Pro 328 3.3V 8MHzにスケッチをアップロードするには3.3V動作Arduino製品向け小型USB-シリアルアダプタ
USBケーブル(Aオス-miniBタイプ)が必要である。
スケッチの実行は、Arduino Pro 328 3.3V 8MHzとPCをただ繋ぐだけである。

データロギングは、

  digitalWrite(13,HIGH);
  delay(3000);
  digitalWrite(13,LOW);
の箇所で実行すればいい。
次回は、もう一つの問題点である、持続した時刻情報の保存を試してみる。


< 参考リンク >


2010年10月17日日曜日

コンパニオンプランツ 秋冬野菜


: 秋冬野菜のコンパニオンプランツ相関図。

現在、畑に植えている作物のみをリストアップした。
コンパニオンプランツの効果は科学的に照明されているわけではないけれど、面白そうなので参考にして植えてみる事にした。

2010年9月11日土曜日

農夫になる日 -3 堆肥作りに不具合発生


先々週から地道に作り続けている堆肥。
先週、土を切り返した時に放線菌(有効菌)が発生していたので安心していた。
しかし本日、農業指導員のIさんの指摘を受けた時にミスをおかしていたことが判明した。


ビニールを剥がした後の堆肥の山。
この一見順調にみえる堆肥の発酵具合がおかしいことに気付いたのは、山に鍬を入れて土の切り返しをした時である。


先週は土に鍬を入れるごとに見えていた放線菌がいっこうに見当たらない。
それに、むせ返るような牛糞堆肥の匂いがまったくしなかった。
堆肥の山に手をやると、火傷しそうになるくらい熱い。


先週の講義によると、うまく発酵がすすめば放線菌は姿を消して山の土の温度も下がるが、匂いは消えないはずである。
しかしまだ堆肥を仕込んでから二週間しか経っていないし、土の温度は下がっていないので、完熟したわけではない。
疑問に思って土を切り返してうちに、どうも土の質が以前よりも粘土質に近づいていることに気付いた。
鍬を入れると、鍬の先に土がねっとりとくっつく。
それに土の中がどうも青っぽい。

農業指導員のIさんに見てもらうと、どうも堆肥に仕込んだ水分が多すぎたようである。
そのせいで土は発酵というよりも腐敗してしまったようなのだ。
堆肥の山の水分は60%に保つのが理想である。
そしてその状態は『土をギュッと握ると固まるが、指で押すとパラリと崩れる』程度というが、素人にはいまいち解りにくい。
多すぎるに超したことはなかろうと堆肥一山にバケツ3杯の水を仕込んでしまったけれど、それが間違っていたようだ。
Iさんが言った。

「もう一度山を作り直したほうがいいですよ。」


*******************


失敗した堆肥の山を区画の四隅に避けて、余った土を再び耕した。
今週の中頃に来た台風9号のおかげか、乾いてみえるのは土の表面5cmくらいで切り返すとすぐに湿った土が見えた。
初めて耕した時とちがってずいぶん切り返しが楽である。
スコップがザックザックと入るので、およそ1時間程度で堆肥用の土の山を作る事ができた。
再び、米ぬかと腐植土を混ぜ込む。

先週から畑をやり始めたKさんから、堆肥に混ぜ込む肥料の役割を聞いたのでメモ。

■堆肥に混ぜ込む肥料の役割

  • 米ぬか:土の中の微生物の餌になる。土の表面に残しておくとアリが食べてしまうので、きちんと土の中に混ぜ込まなくてはならない。
  • 牛糞堆肥、腐植土:微生物が増える為の温床となる。

作り直した堆肥の山。

山から土を一すくい。
Iさんに土を見てもらうと、水分を混ぜ込まずにこのまま堆肥の山にビニールをかけてしまってもよいという。
台風のおかげか、水分の含み具合が丁度よいらしい。
写真の状態が『水分60%』。

土をギュッと握ると固まる。


指で押すと、パラリと崩れる。

思っていたよりさらさらの状態なので驚いた。
これが60%であるならば、先週の切り返し時にはおそらく90%近い水分を混ぜ込んでいたのではなかろうか。


完成。
水分を抜けばもう一度やりなおせるとのことで、区画の四隅には失敗した前の堆肥を敷いた。

またこれから三週間は様子見です。

2010年9月5日日曜日

農夫になる日 -2 畑に関する基礎知識


今日はマイファームの『秋冬野菜・座学講座』に行って来た。
農業指導員の方は畑には週二、三回くらいは来て頂けるが、時間帯が合わなかったりしてなかなか会えなかったりする。
まだ畑に触り始めたばかりの僕のような人間にとっては、日頃から聞きたかった知識をまとめて教えてもらえるよい機会である。
以下、忘備録と情報の蓄積も兼ねて。


****************************************
ノート(畑に関する基礎知識)
****************************************

畑に来たらまずやること

  • 観察する。畑全体をよく見て回る。歩き回るだけでなく、しゃがんで葉の裏や茎の太さ、色などもよく観察する。茎の下の方は、土中の栄養素と水分をやり取りしている箇所なので作物の状態が比較的見えやすい。
  • 水分補給水分は上からかけずに根がある箇所(地面)に直接やる。葉に水滴を当てない。
  • 異常の早期発見。異常を見つけたらすぐに適切な処置をする。
    1. 害虫の駆除。
    2. 病気になった箇所、株の削除。
    3. 余計な枝葉の剪定と間引き。例えば、トマトなどは放っておくと茎と葉をどんどん延ばして他の枝と競争するということになる。わき芽を見つけたらすぐに手で取り除く。はさみを使うと、病原菌などを移してしまうことがある。
  • 観察ポイント。
    1. 日照:あまり日光を当てないと、光を求めて茎は上へ上へと伸びて行ってしまう。結果、上の方の葉に邪魔されて下の方の葉に日光が当たらずに他の作物の茎も伸びるという悪循環が発生する。
    2. 空気
    3. 栄養
    4. 風通し
    5. 雑草:雑草の根は目的の作物が根を延ばす空間を狭めてしまう。マルチなどをして日光を遮断し、雑草を生やさないようにする。
苗選びのポイント
  • 茎が太いものを選ぶ。太ければそれだけ栄養素と水分を上に上げる事ができる(トマトは例外)。
  • 節と節の間が短いものを選ぶ。節間とは、本茎から分岐した枝の付け根と付け根の間の長さの事。
  • 同じ葉の枚数であるならば、葉の小さい物を選ぶ。葉を構成する要素数は、実はすべて同じ数である。そのため、大きい葉であるとその分だけ葉の構成要素の間にスキマがあり、そこに病原菌が入りやすくなる。葉が小さいとその分だけ厚みがあることになるし、下の方の葉にも光が当たりやすくなる。
土つくりに関して
  • 水をつかむような粒子構造をもつ土を作る。すぐに地下に浸透しないで、畑の土全体にまんべんなく水分がいき通り、水分を保持し続ける。
  • 朝霞の土はもと水田なので粘土質の土である。水はけはあまりよくなく、台風や集中豪雨の後は水たまりが出来やすい。もし水が引いたとしても、土の浅い深度の階層で水分が溜まっている事があるので、そのような時には畑に深い溝を掘って、土の中の余計な水分を逃がしてやる必要がある。
堆肥作りについて
  • 土の粒子が細かくなるように畑を耕した後に、腐植土と米ぬかと鶏糞を混ぜ込み、山を作る。水分を加え、水分が蒸発しないようにビニールマルチで覆いをしてやる。
  • まず始めに増殖するのは病原菌である。病原菌は作物には有害だが、土を構成する要素としては必要な物である。
  • 病原菌の増殖のピークが過ぎると、次に有効菌が発生する。これが作物に必要な微生物である。土を見て白い菌糸が確認できれば、有効菌が順調に発生している証拠である。有効菌が発酵を即すに連れて、土の温度はどんどん上がり続け、発酵臭も増す。時々、ビニールを剥がして堆肥の山を切り返してやる。これは、空気を入れ替えるためと、上がり続ける温度の調整のためである。水分60%、温度60℃を保ち続けるのが理想。
  • 最後に、青カビなどの細菌が発生する。
  • 堆肥は、この三種類の微生物の数が落ち着き、土の温度が上がらなくなったら完熟となる。有効菌が出す発酵臭が匂うのが望ましい。土の匂いとは、有効菌の発酵臭そのものだからである。


****************************************




本日の畑作業開始。
ビニールを剥がし、堆肥に水分を混ぜ込み、山を切り返す。


堆肥の山の表面に放線菌(有効菌)のだす白い菌糸を発見した。

山を切り崩した内部。
山を切り崩すと、土はざっくりと大きな塊になって崩れる。
土自体は柔らかくなっているものの、やはり粘土質の土であるせいか、土の粒子同士がくっつきやすい。
堆肥が完熟すれば、土も細かくなるという。

ここにも菌糸が張っている。
とりあえず発酵は順調のようである。

2010年9月4日土曜日

ベランダ菜園 -4 堆肥作り


途中放棄しかけたベランダ菜園だけど、もう一度チャレンジ開始。
以前使用したプランターの土は、きちんと対処すれば捨てる事なくもう一度使用できるということを知った。
自然のフィールドにある土と異なり、プランターの土は放っておいて肥沃になることはまず期待できない。
以前育てた野菜の種類に寄って土中の栄養素が偏った状態であり、かつフィールドでは拡散されるはずの病原菌の類いが圧縮されて増幅している可能性もあるので、適切な処置を施した上で再利用しなければならない。

梅雨開けごろにたまたま本屋で見つけた雑誌『男の隠れ家 2010年 07月号』で農業特集をやっていた。
これから農業をやってみようという人にはうってつけの特集で、貸し農園や自宅農園の情報など、人それぞれのスターティングガイドを始め、土の基本的な知識や野菜の特徴、農具の使い方など、結構細かく記載されている。
その中で、プランター土の再生方法というのを見つけた。

■プランター土の再生方法
  1. プランターの土をフルイにかけて大きい石ころや細かい根っこ類を取り除く。
  2. その土に、5%の割合で腐植土と米ぬかと鶏糞を混ぜ込む。
  3. 水分補給。手でギュッと握った土がかるく固まる程度の水分を混ぜ込む。
  4. ビニールに入れ、日光の当たる場所に2ヶ月ほど置いておく。時々土を切り返してやると、よりよく発酵が進む。
  5. 土をかき混ぜて、匂いがしなくなったら完成。市販のプランター用の土と半々くらいにして使う。
※大きめのプラスチック容器とプラスチックスコップがあると作業がはかどります。

上記内容をもとに実は7月半ばごろからプランター土の堆肥作りをしていたのでした。
設置しておいたビニールの封を開けてみると、仕込んだ時に匂った土の匂いがまったくしない。
かき混ぜてみると、土の奥のほうからもわっと匂ってきたが、おそらく溜まっていた発酵ガスが抜けているのだろう。

ホームセンターで買って来たプランター用の野菜培養土と半々に混ぜて、大きめのプランターを三つ、ベランダにセットした。
ここにはハーブ類を植える予定。


2010年8月29日日曜日

農夫になる日 -1 土を耕して堆肥を作る


先週末から農地を借りて、地道に土を耕している。
今年の四月に地元の区民農園に応募してみけれど、倍率が高かったのか落選した。
それ以来、いつかまた始めよう始めようと思いながら半年近く経ってしまったので、運動不足の解消も兼ねてそろそろ始めようと思い立っていろいろ調べるうちにマイファームという貸し農園を見つけた。
農園のポリシーとしては
  1. 化成肥料は使わずに有機肥料のみ。
  2. 最低1年間は続けてみようという契約。
  3. 農具と肥料は用意してあり、週に二、三回は管理人の方が農業指導をしてくださる。
区民農園は基本的に格安で1年間農地を借りることができるが、不特定多数の人が使うので、土の質が心配だ。
その点マイファームでは有機肥料のみ使用可という制限を設ける事で、ある程度は土の質が保証されている。
始めはもちろん自分の農地の土を自分で作っていかなければならないけれど、週数回、農業指導員によるアドバイスも受けられるので初心者には取り組みやすいかもしれない。

それまで農業は未経験ではないにしても、積極的にやってみたことはなかった。
一応家のベランダでいろいろやってみたけれど、ほとんど失敗してしまった。

■ベランダ栽培歴 4ヶ月
  • ミニトマト:皮が厚く、すっぱくて食べるに値しなかった。もっとおいしくする方法があるのだろう。
  • ミント各種:おいしいミントティーを飲む為に作ったが、アブラムシにやられた。
  • ホーレンソウ:葉がならずに茎だけ以上に伸びてしまい、枯れてしまった。
  • モロヘイヤ:同上
  • サツマイモ:植え込んだ後に徐々に膨らんで行く栽培袋を眺めて、スイートポテトでも作ってやろうと想像を膨らませていたが、掘り出してみたら根っこだけであった。
  • ゴーヤ:いくつかできたが、いつも収穫がおくれ、会社から帰って来たら黄色くなっていた、もしくは実がはじけていた。収穫した唯一のものでゴーヤチャンプルーを作ってみるも、知人に「あ、ごめん、これゴーヤチャンプルだったの?お肉の方が多かったので肉炒めかと思った」と言われショックを受ける。
  • パセリ:いくつかできたが、いつも収穫がおくれ、会社から帰って来たら…以下略。

これからは食物も含めていろいろなものが値上がりしていくという不安がある。
とくに都会では顕著だけど、お金をださないと物の質は保証されなくなっていって、生活の質の悪化はまず確実に食料に現れる。
一人暮らしを始めた時期に、スーパーの野菜の値段と質がかなり上下することに驚き、それまで母親の作ってくれたご飯の栄養バランスを思い出してしみじみ感謝してしまった経験のある方もおられるでしょう。
とりあえず今の半分くらいは自産自消できるくらいの正確な農業技術を知りたいなあということで、住んでいる場所からはちょっと遠かったけれど契約することにした。



農園風景。
全部で90区画あり、ひと区画あたりだいたい15㎡。
もとは水田であり、10年近く放置されていた場所だった。
マイファームがこうした耕作放棄地を地主から借受け、農園として貸し出している。

借りた区画。
農具置き場兼休憩小屋と簡易トイレのすぐ近くにある。
水道から近いので、水やりも他の区画と比べて楽である。
写真は、耕した後に堆肥の山を作ったところである。
まずはすべての基礎となる土作りからやらなければならない。

草取りをし、スコップで土を掘り返してから肥料と土を土に混ぜ込んで堆肥の山を作る。
この猛暑でただでさえ固い元水田の土がカチカチに固まっていて、スコップを跳ね返してしまう。
区画全部の草取りと耕起が終わっても、土の粒が大きく、スコップと鍬で少しずつ細かく砕いて行かねばならない。









管理人のIさんに教わった堆肥の山の作り方は以下。
  1. よく耕した土と、堆肥、腐葉土、鶏糞、若干多めの米ぬかを混ぜて山を作り、水分を加えます。(土をぎゅっと握って手を開いたら、少しの後にほろっと崩れる程度の水分量)。
  2. 水分保持の為に丈夫なビニール袋(100円ショップなどで売られているブルーシートなどをご用意されるとよいかと思います)を被せて、風でとばされないように土などでまわりと押さえます。
  3. 1週間毎に水分調整をしつつ、切り返します。
  4. 3週間後、よく発酵した自家製堆肥の完成。
肥料は全部で以下を使った。
  • 牛糞堆肥 × 3
  • 腐植土 × 2
  • 米ぬか × 0.9
  • 鶏糞 × 0.2
水分に関して。
土が粘度質であるせいか、表面からかけただけでは中までしみ込まないないので、堆肥の山のてっぺんを火山のカルデラのように崩し、そこにバケツの水を入れ、徐々にかき混ぜながらもう一度山を作るようにした。
その後に素早くビニールの透明マルチをかぶせて、ひとまず完了。

畑の土。
結構粘って砕き続けたおかげか、かなり細かくなった。
水を加えてしばらくすると、かなりフカフカの土になる。

農具置き場兼休憩小屋。
農業に必要な一通りのものは置いてあるので、畑に行く時は着替えのみでよい。
草木に囲まれているのにあまり蚊がいないのが不思議だった。

とりあえずの目標は、冬の鍋に入れるものを作る事かな。
これから1年間、体力と気力が続くまで頑張ってみようと思います。