ELM327の怪しいやつ発見
2019.03.27
![](http://randol-news.net/img/1553611409-s.jpg)
久々に笑わせてもらいました。
知り合いがアマゾンから激安のOBD2スキャナ(ELM327)を購入したのですが、
BTは接続できるもののAndroid用アプリが何一つ動かない。
付属のPC用アプリ(8cmのCD)はウイルス蔓延で使えない。
ということで激怒してゴミ箱に(笑)
どうせ捨てるならと分解の許可をもらって殻割りしてみました。
![](http://randol-news.net/img/1553611434-s.jpg)
基盤一枚のシンプルなもの。
かなり小さいのでよく見えないのですが、なにか違和感を感じるんですよね。
![](http://randol-news.net/img/1553611421-s.jpg)
ルーペで覗いてみるとその違和感がはっきりわかります。
どこにもELM327チップは乗ってません。
まぁ偽物はPIC18F25K80にELM327エミュレータをぶっこんで似た動きをさせたりするわけですが、
こいつはそのチップの存在すら怪しいです。
チップの名称が消えてるのが2つあり、矢印のチップは刻印に傷をつけて読めなくしています。
おそらく左上の一番大きいチップはMCP2515(CANコントローラ)
その右隣の刻印を誤魔化しているのはTJA1050レシーバー
下にある足の多い正方形のチップはBluetoothモジュールと想像しますが
あえて消しているということはなにかやましいことがあるんでしょうかねぇ。
サーミスタの温度が正確なのか図ってみた
2019.03.25
![](http://randol-news.net/img/1553441694-s.jpg)
3Dプリンターのノズル温度って、フィラメントが要求する温度に合っているのか?
と思うことがあります。Marlinの設定でサーミスタの種類を指定することで、
抵抗値に一致する温度を導き出せるようになっていますが、
実際は使っているノズルの素材やスロートの長さ、
ヒーターブロックのサイズ、それを覆っているものがあるか?
などによっても変わってきますし、自作プリンターはズレが結構あるものだと想像できます。
そもそもサーミスタの値はは触れているヒートブロックの温度で、
ノズルの温度ではないですからねぇ。
そこで非接触の温度計を使って計測してみることにしました。
![](http://randol-news.net/img/1553442130-s.jpg)
アマゾンで買った非接触温度計。550度まで計れる高性能タイプ。
![](http://randol-news.net/img/1553442137-s.jpg)
緩衝材なんてものはなく、ただ箱に入っているだけの究極梱包(;´Д`)
![](http://randol-news.net/img/1553442146-s.jpg)
レーザーポインタの位置を目安にして温度を図ります。
実際はレーザーとセンサーの位置が1cmくらいズレているので
図りたい部分の1cmくらい上にレーザーを当てて計る必要があります。
![](http://randol-news.net/img/1553442152-s.jpg)
接触式のデジタル温度計もオマケでついてます。
![](http://randol-news.net/img/1553442164-s.jpg)
ノズルの温度を220度、ヒートベッドを100度に設定。
![](http://randol-news.net/img/1553442172-s.jpg)
ノズルを測ってみて、うまい具合に確認できた温度が213.7度
220度にくらべ低い数値が出てますが、
直接温めているのはノズルではなくヒートブロックですし、
そのヒートブロックはカプトンテープで巻いてるわけなので、
表面温度でこの温度がでてるのは丁度いいのかもしれませんね。
![](http://randol-news.net/img/1553442180-s.jpg)
ヒートベッド(中央部)も測ってみましたが100度に対して84.4度はちょっと低いです。
これも直接温めているのはヒートべッドです。↑の数値がガラス板の温度を拾っているのであれば
少し低くでるのはしかたないかな?と思えます。それでも90度は超えて欲しかったかな。
設定で110度まで上げてみようかな・・・
![](http://randol-news.net/img/1553442186-s.jpg)
オマケで付いてきた接触式温度計ですが、
これは金属部分の先端を触れさせるだけでは駄目ですね。
先端以外の金属部分の放熱が上回って加熱が間に合ってないようです。
これは加熱したものに挿したり、液体の中に挿したりする用途にしか使えないです。
【ジムニー JB23W】 フィルターを交換する
2019.03.24
![](http://randol-news.net/img/1553433974-s.jpg)
今日はフィルターの交換。
前回はいつ交換したか不明。
黄砂やPM2.5、花粉の増加が半端ないので早めに交換したかったけど
延び延びになってようやく今日です。
![](http://randol-news.net/img/1553434018-s.jpg)
ジムニーのエアクリーナーは工具無しで交換可能です。
ゼムクリップのようなパッチンクリップ4個で留まっているだけです。
![](http://randol-news.net/img/1553434031-s.jpg)
車が手元に来たとき、エアで吹いて細かいゴミは飛ばしていました。
そのおかげか冬を超えたクズゴミはついてません。
![](http://randol-news.net/img/1553434046-s.jpg)
上が古いの、下が新品。
黒ずみが半端ないです。目に見えないゴミが詰まってそうですね。
吸気抵抗がでてエンジンによくなさそう。
![](http://randol-news.net/img/1553434150-s.jpg)
同時にエアコンフィルターも交換。
活性炭配合の脱臭機能付きフィルタです。
花粉とPM2.5対応という触れ込みに惹かれました。
こちらも納車時に掃除していたのですが、
真っ黒ぐらいが半端ないです。これは10万km以上は使っている気がします。
このフィルタ、表裏の区別はないと説明書に書いてますが、
隙間埋めスポンジの付き具合から察するに、
緑を助手席側、グレーを運転席側にしたほうが空気漏れは内容に感じました。
フィルターの大きさがすこし小さいかな?って感じましたが、
純正はプラケースに覆われているのに対し、
社外品は紙フレームなのでそう感じるのかも・・
あと、純正品のように取っ手がないので取り出しには
ペンチなどで引っ張るしかなさそうです。
安物なのであまり過大な期待は禁物です。
最近の格安スマホ事情
2019.03.11
![](http://randol-news.net/img/1552313341-s.jpg)
最近「携帯を変えたいんだけど安いところはどこ?」と聞かれることが多いです。
自分のスマホを変えてから、まったく調査してなくて的確な助言ができなかったのでですが
すこし時間に余裕ができたので調べてなおしてみました。
繋がりやすさや、速度なども重要になってきますが、
これは実際に契約してみないとわからないのでここでは加味しないことにします。
ネット情報はステマも多いしね。
端末はそこそこ安くて文句の出にくい5インチ以上のミドルスペック。
メーカーは個人情報絡みのニュースがでたらこちらに飛び火するのが目に見えてるので
そこそこ信頼できる(今は台湾だから怪しさは拭えないが)SHARPで試算しました。
携帯の分割/一括の価格で赤字と黒字になってる部分がありますが
赤字のほうがお得という意味です。青字と赤字はどっち選んでも一緒。
個人的にはどんな時も一括で買うことを勧めますね。
![](http://randol-news.net/img/1552313353-s.jpg)
CMでUQがバンバン流れてますが思っていたほど安くない印象。
安さではIIJmioとビッグローブがぶっちぎりですね。
通話だけのスマホならワイモバイルがやすいように感じますが、
IIJmio/ビッグローブ + 896円のかけ放題 VS ワイモバイル 3218円では
ワイモバイルは勝ち目がありません。データ量も2GBしかないしね。
mineoも安い。契約するときの煩雑さや端末の値段を無視できるなら
アリだと思うがキャンペーンの割引が微妙なので今の時期は薦められない。
楽天も安いように見えるけど、キャンペーン期間が過ぎたとたん
ドカンと値上がってしまいそうな恐怖が潜んでいる。
しかも想定外のことが絶対に起きないと言い切れる文言が
楽天モバイルのページから見つけ出せないので
MVNO慣れしている私でも手が出にくい。知り合いに薦めるなんてとてもとても。
コスパだけで最強を選ぶならビッグローブ
Youtubeをよく見る人ならこれしか選択肢がないとも言える。
動画使い放題のオプション(518円)の威力は絶大です。
ドコモ端末を持っていて、それをそのまま使うというのであれば最強だと思います。
端末は購入、だけど動画は見ないというのであればIIJmioが一番安いかな。
Arduino 9-1) 4連 Digital Tube LED Displayの点滅問題を考える
2019.03.03
その後、いろんな角度からテストをしてみました。
まず、5, 6ピンを使うとmillis(), micros(), delay(), delayMicroseconds()などの関数が正常に動かなくなるという情報をネットでみたので、接続するピンを
#define SCLK 4
#define RCLK 7
#define DIO 8
としてみる。
失敗
電源をUSB供給から電池に変えてみる。
失敗
Deleyの代わりにmillisを使ってみる。
Deleyのように簡単に使えるようにするため
void milliswait(int loop_i){
old_time=millis(); //最新の実行時間を保存
while (millis() - old_time < loop_i);
}
このような関数を作って実行してみた。
どうやらDelayが悪いのではなく、
処理能力が低下すると高速書き換えができなくなるだけのことだった。
複雑な処理を乗せるとDelayじゃなくても起きる現象ということで
失敗
先人のライブラリを使ってみる。
TM74HC595で検索すると結構使ってる人がいるもので、
Youtubeに投稿してる人も何人かいました。
https://www.youtube.com/watch?v=S_Hnx20GzGs
↑この方の意見を全面的に取り入れて試してみます。
https://github.com/kostarev/TM74HC595-4dig-display
にアクセスしてダウンロードしインストール。
ソースコードを書き換えて実行。
同じ症状でした。
失敗
結局の所、ネットで調べ倒して見た結果、
この製品は4キャラクタのうち、1文字を表示した直後、
他のモジュールの文字が消えてしまう仕様のようで
高速に4モジュールを表示し直して、目をごまかすような処理が必要のようだ。
Loop内でDelayを使うとその更新が阻害されるため
点滅したように見えてしまうというのが真実らしい。
これの解決策として、割り込みを利用し
ある一定周期で更新させることができれば、
Loop内だろうがDelayで止めようが
表示は安定するのではというのが最適解のようです。
#include <mstimer2.h>
int Denatu = 0;
int OutNum = 0;
//接続するピンを設定する
#define SCLK 4
#define RCLK 7
#define DIO 8
byte digitBuffer[4]; //キャラ数(文字数を設定)この配列に入れた数字がそのまま表示される。
void setup(){
Serial.begin( 9600 ); //シリアルモニタを使うときの儀式
pinMode(13, OUTPUT); //ボードのLEDを使用する
pinMode(RCLK, OUTPUT);
pinMode(SCLK, OUTPUT);
pinMode(DIO, OUTPUT);
MsTimer2::set(1, showDisplay); // 1msの周期で結果を4LEDに表示
MsTimer2::start();
}
void loop(){
digitalWrite(13, HIGH); //LEDを光らせる
Denatu = analogRead(0); //A0ピンの電圧を測る0(0V)~1023(5V)
Serial.println(Denatu); //シリアルモニタに値を出力
OutNum = Denatu;
//4文字目に数字を表示
digitBuffer[3] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで4ケタが3ケタにシフトする。
//3文字目に数字を表示
digitBuffer[2] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで3ケタが2ケタにシフトする。
//2文字目に数字を表示
digitBuffer[1] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで2ケタが1ケタにシフトする。
//1文字目に数字を表示
digitBuffer[0] = OutNum % 10; //10で割ってあまりを求める。
delay(Denatu); //読み取った値分処理を止める1023=1.023秒
digitalWrite(13, LOW); //LEDを消す
delay(Denatu); //読み取った値分処理を止める1023=1.023秒
}
//表示するために関数を定義
void showDisplay(){
const byte digit[10] = {
0b11000000,//0
0b11111001,//1
0b10100100,//2
0b10110000,//3
0b10011001,//4
0b10010010,//5
0b10000010,//6
0b11111000,//7
0b10000000,//8
0b10010000 //9
};
const byte chr[4] = {
0b00001000,//1
0b00000100,//2
0b00000010,//3
0b00000001,//4
};
for(byte i = 0; i <= 3; i++){
digitalWrite(RCLK, LOW);
shiftOut(DIO,SCLK,MSBFIRST, digit[digitBuffer[i]]);
shiftOut(DIO,SCLK,MSBFIRST, chr[i]);
digitalWrite(RCLK, HIGH);
delayMicroseconds(1);
}
}
最初の実験の影響で、ピンの位置を先日のものと変えています。注意。
そして実行
イエ━ヽ(*´∇`)人(´∇`*)━ィ!!
ただこの方法、人間には区別はつかないけど高速点滅しているので目には優しくないと思われる。
まず、5, 6ピンを使うとmillis(), micros(), delay(), delayMicroseconds()などの関数が正常に動かなくなるという情報をネットでみたので、接続するピンを
#define SCLK 4
#define RCLK 7
#define DIO 8
としてみる。
失敗
電源をUSB供給から電池に変えてみる。
失敗
Deleyの代わりにmillisを使ってみる。
Deleyのように簡単に使えるようにするため
void milliswait(int loop_i){
old_time=millis(); //最新の実行時間を保存
while (millis() - old_time < loop_i);
}
このような関数を作って実行してみた。
どうやらDelayが悪いのではなく、
処理能力が低下すると高速書き換えができなくなるだけのことだった。
複雑な処理を乗せるとDelayじゃなくても起きる現象ということで
失敗
先人のライブラリを使ってみる。
TM74HC595で検索すると結構使ってる人がいるもので、
Youtubeに投稿してる人も何人かいました。
https://www.youtube.com/watch?v=S_Hnx20GzGs
↑この方の意見を全面的に取り入れて試してみます。
https://github.com/kostarev/TM74HC595-4dig-display
にアクセスしてダウンロードしインストール。
ソースコードを書き換えて実行。
同じ症状でした。
失敗
結局の所、ネットで調べ倒して見た結果、
この製品は4キャラクタのうち、1文字を表示した直後、
他のモジュールの文字が消えてしまう仕様のようで
高速に4モジュールを表示し直して、目をごまかすような処理が必要のようだ。
Loop内でDelayを使うとその更新が阻害されるため
点滅したように見えてしまうというのが真実らしい。
これの解決策として、割り込みを利用し
ある一定周期で更新させることができれば、
Loop内だろうがDelayで止めようが
表示は安定するのではというのが最適解のようです。
#include <mstimer2.h>
int Denatu = 0;
int OutNum = 0;
//接続するピンを設定する
#define SCLK 4
#define RCLK 7
#define DIO 8
byte digitBuffer[4]; //キャラ数(文字数を設定)この配列に入れた数字がそのまま表示される。
void setup(){
Serial.begin( 9600 ); //シリアルモニタを使うときの儀式
pinMode(13, OUTPUT); //ボードのLEDを使用する
pinMode(RCLK, OUTPUT);
pinMode(SCLK, OUTPUT);
pinMode(DIO, OUTPUT);
MsTimer2::set(1, showDisplay); // 1msの周期で結果を4LEDに表示
MsTimer2::start();
}
void loop(){
digitalWrite(13, HIGH); //LEDを光らせる
Denatu = analogRead(0); //A0ピンの電圧を測る0(0V)~1023(5V)
Serial.println(Denatu); //シリアルモニタに値を出力
OutNum = Denatu;
//4文字目に数字を表示
digitBuffer[3] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで4ケタが3ケタにシフトする。
//3文字目に数字を表示
digitBuffer[2] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで3ケタが2ケタにシフトする。
//2文字目に数字を表示
digitBuffer[1] = OutNum % 10; //10で割ってあまりを求める。
OutNum = OutNum / 10; //値を10で割って結果を元の数字に返す。これで2ケタが1ケタにシフトする。
//1文字目に数字を表示
digitBuffer[0] = OutNum % 10; //10で割ってあまりを求める。
delay(Denatu); //読み取った値分処理を止める1023=1.023秒
digitalWrite(13, LOW); //LEDを消す
delay(Denatu); //読み取った値分処理を止める1023=1.023秒
}
//表示するために関数を定義
void showDisplay(){
const byte digit[10] = {
0b11000000,//0
0b11111001,//1
0b10100100,//2
0b10110000,//3
0b10011001,//4
0b10010010,//5
0b10000010,//6
0b11111000,//7
0b10000000,//8
0b10010000 //9
};
const byte chr[4] = {
0b00001000,//1
0b00000100,//2
0b00000010,//3
0b00000001,//4
};
for(byte i = 0; i <= 3; i++){
digitalWrite(RCLK, LOW);
shiftOut(DIO,SCLK,MSBFIRST, digit[digitBuffer[i]]);
shiftOut(DIO,SCLK,MSBFIRST, chr[i]);
digitalWrite(RCLK, HIGH);
delayMicroseconds(1);
}
}
最初の実験の影響で、ピンの位置を先日のものと変えています。注意。
そして実行
イエ━ヽ(*´∇`)人(´∇`*)━ィ!!
ただこの方法、人間には区別はつかないけど高速点滅しているので目には優しくないと思われる。