月別アーカイブ: 2018年6月

日産リーフの急速充電速度低下 高温の場合

6月だというのに梅雨が明けてしまいました。関東は連日の真夏日です。これだけ暑いと、リーフの電池温度も高止まりしてしまいます。そのため、電池劣化が進むこと、そして急速充電で充電できる電気量が小さくなることが問題になりそうです。

初代リーフでは低温時(10℃くらい)に急速充電速度低下が大きく、高温時(30℃くらい)はむしろ急速充電が早く進みました。これは、初代リーフの電池の温度上昇によって内部抵抗が低下し、定電流充電モードから定電圧充電モードに移行する充電率が大きくなるためと理解できます。

一方、その後の改良された電池を搭載するリーフは、低温でも内部抵抗が小さく、定電流モードでの充電が広い充電率範囲で可能になっています。すると、今度は高温時の充電速度低下が問題となります。

一般論として、高温になるほど化学反応は進行しやすくなります。電池でいうと、理想的な充放電反応ではなく、電池の劣化につながるような副反応も起こりやすくなってしまいます。したがって、電池の温度は必要以上に上げたくないのですが、充電時には電流が流れるので熱が発生してしまうのを避けられません。リーフに限らず、電気自動車の走行用電池を急速充電する際には、電池の温度が上がりすぎないように、充電電流を抑制する機構が動作するようになっています。

ユーザーとして気になるのが、電池の温度がどの程度になると急速充電に抑制が入るのかという点です。LeafSpyのデータを見ていると、2017年に登場した新型リーフの電池は35℃あたりから抑制が入るようです。秋から春にかけての外気温が30℃に満たないような季節であれば、急速充電後に高速運転を続けてすぐ急速充電をするくらいの負荷で電池温度が35℃に達しました。ところが、最近は外気温が30℃を上回っているので、日中のリーフの電池は充電や走行をする前から35℃ちかい高温になっています。ここから急速充電や高速走行をしようものなら、すぐに充電電流の抑制がかかる温度に到達してしまいます。

具体的には、外気温が32℃の夕方に日産ディーラーの急速充電器で充電したところ、涼しい季節は107A流れるところが、95Aしか流れませんでした。30分の充電でも通常は容量の53%程度が充電されるのに対して、45%しか充電されませんでした。温度上昇によって、急速充電で充電できる電気量が1割強低下したことになります。

長時間の高速走行が必要な長距離移動の際には、このような高温時の充電電流低下が問題になるかもしれません。ユーザーとしては、可能なら普通充電で温度を上げずに涼しい夜の間に満充電にしておいて、日中の急速充電回数を極力減らすといった対策が必要でしょう。私は家で充電できないので、前日のうちに充電を済ませておくことにします。

GoogleフォームとGASでつくる同報メール送信システム

特定のグループのメンバー全員に連絡をしたいことがあったときに、いちいち名簿を見て誰がメンバーだったかを確認するのは面倒です。さらに、複数のグループや個人が入り乱れて使用する部屋の使用者全員に連絡したいときは、より面倒が増します。そこで、Googleフォームから宛先のグループを選択すれば名簿からメールアドレスを取得して、該当者にメールを送ってくれるシステムをつくってみました。

仕事の効率化のためにプログラミングを勉強しはじめたというレベルなので、動けばよいくらいの適当なコードです。

Googleフォームでの準備

以下のようなフォームを作成する。送信者のメールアドレス、宛先、メールのタイトル、メールの本文という順番を前提として後述のプログラムを作成した。

Googleスプレッドシートでの準備

フォームの回答が保存されるスプレッドシートを用意する。フォームの編集画面から、「回答」タブを開くとスプレッドシートへのリンクが出てくる。

フォームの回答が保存されているスプレッドシートに、グループの名簿(groupシート)と部屋使用者の名簿(roomシート)を作成する。シートの構成は、1行目にグループ名や部屋名、2行目以降にグループ名か個人のメールアドレス。1列目に説明、2列目以降に中身。フォームからの回答が記録されるシートの名前はanswerに変更する。このあたりはコードの対応が取れていればいいのでお好みで。

スプレッドシートのメニューからスクリプトエディタを開き、以下のコードをコピペ。トリガーにフォームの値送信時を設定する。コードの中のスプレッドシートのidを変更する。

function sendmail() {
  var file = SpreadsheetApp.openById("スプレッドシートのid");
  var answer_sheet = file.getSheetByName('answer');
  var group_sheet = file.getSheetByName('group');
  var room_sheet = file.getSheetByName('room');
  
  //フォームに入力された値を読み取る
  var rowtoread=answer_sheet.getDataRange().getLastRow(); //フォームの回答が記入された行を求める
  var answer = answer_sheet.getRange(rowtoread,2,1,4).getValues(); //フォームの回答を取得
    
  var sendfrom = answer[0][0];
  var sendto = answer[0][1];
  var title = answer[0][2];
  var message = answer[0][3];
  
  //グループのアドレスリストを入手する
  var groupnum = group_sheet.getDataRange().getLastColumn()-1; //グループ数を取得
  var grouplist = group_sheet.getRange(1,2,1,groupnum).getValues(); //グループ名のリストを取得
  
  var group_lastrow = group_sheet.getDataRange().getLastRow();
  
  //宛先がGroupの場合。宛先リストにメールアドレスを追加する。
  var sendtolist = [];
  appendfromgroup(sendto, sendtolist, group_sheet, groupnum, group_lastrow);

  var roomnum = room_sheet.getDataRange().getLastColumn()-1; //room数を取得
  var roomlist = room_sheet.getRange(1,2,1,roomnum).getValues(); //room名のリストを取得
 
  var room_lastrow = room_sheet.getDataRange().getLastRow();

  //roomシートのroom構成員を宛先にいれる。
  for(var k = 2; k <= roomnum + 1; k++) {
    if(sendto === room_sheet.getRange(1,k).getValue()) {

      for(var l = 2; l <= room_lastrow; l++) {
        //roomの構成員がgroupの場合
        var temp = room_sheet.getRange(l,k).getValue();
        if (grouplist[0].indexOf(temp) > -1){
        appendfromgroup(temp, sendtolist, group_sheet, groupnum, group_lastrow);
        }
        //roomの構成員がgroupでない場合、メールアドレスが入力されていると判定
        else{
          sendtolist.push(temp);
        }
        }
      }
    }
    
  //重複をのぞく
  var sendtolist_true = sendtolist.filter(function (x, i, self) {
            return self.indexOf(x) === i;
        });
        
  //メール本文の修正
  message = "宛先: " + sendto + "\n送信者: " + sendfrom + "\n\n" + message;
        
  //メール送信
  MailApp.sendEmail(
      sendtolist_true, //toアドレス
      title,  //メールタイトル
      message, //本文
      {
        from: sendfrom, //fromアドレス
        cc: sendfrom, //送信依頼者にccで送る
        name: "同報メール送信フォーム" //差出人
      }
    ); 
}

function appendfromgroup(sendto, sendtolist, group_sheet, groupnum, group_lastrow){
  //宛先リストに該当するメールアドレスを追加する
  i = 0;
  for(var i = 2; i <= groupnum + 1; i++) {
    if(sendto === group_sheet.getRange(1,i).getValue()) {
      for(var j = 2; j <= group_lastrow; j++) {
        sendtolist.push(group_sheet.getRange(j,i).getValue());
      }
    }
  }
  return sendtolist;
}

2018年5月

5月の走行距離は505 kmでした。

電費は7.8 km/kWhで4月より悪化しました。暑くなって冷房を使うようになったのが原因でしょう。

月額2,000円のZESP2に対して、ガソリン141 円/Lとして燃費35.7 km/Lと同等です。

急速充電 4回、普通充電は0回、急速充電1回あたりの走行距離は126 kmでした。