2025/02/08

【番外編】ArduinoでSHARPメンテナンスリモコンをつくる

SHARPのBLレコーダ(AQUOS)などのメンテナンスモードに入るリモコンをArduinoで作ってみた。
赤外線リモコンキット(通称フリスクリモコン?)を使えば簡単にできるらしいが、手元にAruduinoと赤外線LEDがあったので作ってみた。
コマンドが3種類あるらしいので、コメントを切り替えて使えるようコードは書いておいた。
あと、AQUOS TVの電源ON/OFFコマンドもいれてある。
使う場合は、自己責任でお願いします。 
 
 
#include <IRremote.hpp>
#include <IRremote.h>
#define IR_SEND_PIN 5  // 赤外線LED接続ピン

const uint16_t rawData[99] = {  3400, 1700,               //8T,4T,
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F parity
                        425,  425,  425,  425,  425,  425,  425, 1275, //0,0, 0,0, 0,0, 0,1, //8 data0
                        425,  425,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //0 data1
                        425, 1275,  425, 1275,  425,  425,  425,  425, //0,1, 0,1, 0,0, 0,0, //3 data2
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5 data3
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F data4
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data5
                        425,  425,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //0 data6
                        588};
const uint16_t rawData_00[99] = {  3400, 1700,               //8T,4T,
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F parity
                        425,  425,  425,  425,  425,  425,  425, 1275, //0,0, 0,0, 0,0, 0,1, //8 data0
                        425,  425,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //0 data1
                        425, 1275,  425, 1275,  425,  425,  425,  425, //0,1, 0,1, 0,0, 0,0, //3 data2
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5 data3
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F data4
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data5
                        425,  425,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //0 data6
                        588};

const uint16_t rawData_01[99] = {  3400, 1700,               //8T,4T,
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F parity
                        425,  425,  425,  425,  425,  425,  425, 1275, //0,0, 0,0, 0,0, 0,1, //8 data0
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //1 data1
                        425, 1275,  425, 1275,  425,  425,  425,  425, //0,1, 0,1, 0,0, 0,0, //3 data2
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5 data3
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F data4
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data5
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //1 data6
                        588};

const uint16_t rawData_02[99] = {  3400, 1700,               //8T,4T,
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F parity
                        425,  425,  425,  425,  425,  425,  425, 1275, //0,0, 0,0, 0,0, 0,1, //8 data0
                        425,  425,  425, 1275,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //2 data1
                        425, 1275,  425, 1275,  425,  425,  425,  425, //0,1, 0,1, 0,0, 0,0, //3 data2
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5 data3
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F data4
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data5
                        425,  425,  425, 1275,  425,  425,  425,  425, //0,0, 0,0, 0,0, 0,0, //2 data6
                        588};

const uint16_t rawData1[99] = {  3400, 1700,               //8T,4T,
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425,  425,  425, 1275,  425,  425,  425, 1275, //0,0, 0,1, 0,0, 0,1, //A
                        425, 1275,  425,  425,  425, 1275,  425,  425, //0,1, 0,0, 0,1, 0,0, //5
                        425, 1275,  425, 1275,  425, 1275,  425, 1275, //0,1, 0,1, 0,1, 0,1, //F parity
                        425,  425,  425,  425,  425,  425,  425, 1275, //0,0, 0,0, 0,0, 0,1, //8 data0
                        425,  425,  425, 1275, 425,  425,   425,  425, //0,0, 0,1, 0,0, 0,0, //2 data1
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data2
                        425,  425,  425, 1275,  425, 1275,  425,  425, //0,0, 0,1, 0,1, 0,0, //6 data3
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data4
                        425, 1275,  425,  425,  425,  425,  425,  425, //0,1, 0,0, 0,0, 0,0, //1 data5
                        425, 1275,  425,  425,  425, 1275,  425, 1275, //0,1, 0,0, 0,1, 0,1, //D data6
                        588};

void setup() {
  Serial.begin(115200);  // シリアル通信の初期化
  // 赤外線送信モジュールの初期化
  IrSender.begin(IR_SEND_PIN, DISABLE_LED_FEEDBACK, 0);
}

void loop() {
    //mentenance Command : AA5A8F30F501
    IrSender.sendRaw(rawData_00, sizeof(rawData_00)/sizeof(rawData_00[0]), 38);
    //mentenance Command : AA5A8F31F502
    //IrSender.sendRaw(rawData_01, sizeof(rawData_01)/sizeof(rawData_01[0]), 38);
    //mentenance Command : AA5A8F32F511
    //IrSender.sendRaw(rawData_02, sizeof(rawData_02)/sizeof(rawData_02[0]), 38);

    //SharpTV On/Off ; aa5a8f1216d1
    //IrSender.sendRaw(rawData1, sizeof(rawData1)/sizeof(rawData1[0]), 38);

    Serial.println("send trun on at " + String(millis()));
  delay(5000);
}


2025/02/02

アイドリング調整13

 ECUでISCVの制御ができなくなっていたが、正確には制御角度が小さくなった状態である。
なので、ISCVモジュール(アダプタ)を車体に取り付ける角度がバルブの閉まる側に合わせて取付してみた。
制御幅は小さいが、どうにかアイドリングは落ち着くようになり、冷間時のアイドルアップや暖機後のアイドリング回転数も1,000rpmを切る状態になった。
ECUが手に入るまでは、しばらくこのままで様子を見ることにした。

2025/02/01

ベンチレーションホースの交換(代替品)

ベンチレーションホース(12261-16040)が廃番で手に入らなかったからか、何かのホース(内径12mm)を取り付けて汎用のホースバンドでとめてあった。
そこそこ耐久耐油性があるホース(内径10mm~11mm位の方がよさそう)なら何でもいいとは思うが、別車種のベンチレーションホース(12261-75090)の形状が接続パイプの向きに合いそうなので買ってみた。
若干細かった(計測し忘れたが、おそらく10mm)ため取り付けにくかったが、パイプから滲み出ていたエンジンオイルが潤滑剤となり、はめ込むことができた。
長さ的にもちょうど良く、はめにくかった分カムカバー内の圧力などで抜けることが無さそう。



2025/01/19

アイドリング調整12

 手ごろな価格の中古ECUが出てこないので、ISCVアダプターの精度向上を進めることにした。取り付けた状態をよく確認したところ、最後に取り付けたねじ止め部のステーが本体側に接触していることが判明した。
ヤスリで接触しないように削り落とし装着し直したところ、ソレノイド部の引っかかりがなくなった。
あと、ECUで制御できなくなっていたので、Aruduinoを使ったISCVの制御用サブコンを作った。
回路図などは、後日公開予定。

2024/11/22

アイドリング調整11

 暖機をしているとエンジン回転数が徐々に上がってしまうが、安物パーツで代用しているISCVの動作自体はどうやら問題ないようだ。
試運転中に気が付いたのだが、停止前の運転状況により、時々ISCVが動作しかかる現象が見られた。
ECU側の制御自体がうまくいっていない可能性が出てきた。おそらく経年劣化によるコンデンサーの容量抜けで、走行により回路内の状況が変わりISCV制御で使っているコンデンサーに電荷が溜まりかけたりしてISCVが動作しかけているのではないかと推測する。
ここのコンデンサーは、比較的入手しやすい10μFの耐圧50Vなので、もしものための予備ECUを入手次第交換してみたい。
また、しばらくはISCVの動作が期待できないので、取付調整でアイドリングの安定を図る予定。

2024/11/17

安物パーツ10、エアフィルタ洗浄

 アルミブロックアダプターの設置状態が保たれているのか、車の冷間時始動は安定した。
しかし、暖機が進むとエンジン回転数が徐々にあがってしまう。
以前、エアフローセンサーなどの値を確認した際は問題なかったはずだが、あと考えられるのはエアフロー関係くらいになる。
とりあえず、もともと着いていたエアフィルター、通称毒キノコ(同一製品の写真が見つからなかったので、イメージとして類似する形と同じ緑色の物の写真を添付)を洗浄した。
油分はなかったので乾式毒キノコと考えられるため、洗剤でスポンジを洗い流した。
目に見える汚れはなかったが、エアフローにいい影響を与えられればと思っている。

2024/11/16

安物パーツ9

 アルミブロックから作ったアダプターを取り外したり取り付けたりしたら、なんとなく想定通りに動いたような気がした。
アクリル版アダプターに交換しようとしていたが、アルミの方が耐久性もあるのでしばらく様子を見ることにした。

【番外編】ArduinoでSHARPメンテナンスリモコンをつくる

SHARPのBLレコーダ(AQUOS)などのメンテナンスモードに入るリモコンをArduinoで作ってみた。 赤外線リモコンキット(通称フリスクリモコン?)を使えば簡単にできるらしいが、手元にAruduinoと赤外線LEDがあったので作ってみた。 コマンドが3種類あるらしいので、コ...