2020年5月24日日曜日

ONIX Boox max2 Battery repair (DIY)

2017年の夏ごろに買ったBOOX MAX2 PRO バッテリー交換 (前編)

 当時10万円くらいしましたがe-inkでA4サイズというほぼ紙の使い心地がよく、アイディアやちょっとしたメモに大活躍してました

 e-inkはどんなに進化してももっさりは避けられない訳でWebブラウズとかゲームなどの一般的な使い方をするとヒドイ
 どのくらいヒドイかというと、iPadをフランス料理とすればコイツはゲロくらいの差があります
 
 たぶん普通の人は我慢できない笑 完全にセカンドマシン

 それでもドピーカン青空の外で使うとさすがのiPad Proといえども光量不足で何が写ってんだかよくわかんない状態になるシーンだとこいつが大逆転
 うん、紙だ。明るいほどよく見える

 とまぁ公園に持ち出す時はもっぱらBOOXな訳です
 バッテリーも普通に2週間!とか持ってしまい、充電する事すら忘れてしまうほど

 ところがそのバッテリーが3日もたなくなってきて、先週あたりから充電を抜いたとたん画面に変なシマシマがでてフリーズしてしまうようになりました

 サポートに連絡してみると、バッテリー交換に2万円ほど、ただし中国に送り返すので送料がかかるのと、いつ返ってくるかわからないとの事
 まぁここんとこコロナが流行ってて船便とか動いてないしね、しょうがないね

 と長々前置きをしたところで自分でバッテリーを交換する事にしました

 まずは分解したいんですが、ググってもまーーったく情報がでてきません
 iFixit も完全スルー
 個人ブログなどを調べてもMAX2は出てきませんでした
 いくつか前の機種は、全面パネルはシールになってる、剥がすともう戻せないよ、みたいなブラジルの人の書き込みがありました。
 まぁほっといても治らないので、度胸一発、どりゃぁ、と分解爪をつかって引っぺがしました

折り曲がってしまった

 このシールはプラスチック製で両面テープでガッチガッチにくっついてた
 手で温めながらゆっくり引っ張ったけど、何度かズルっとすべって折り目がついてしまった。(緑の部分) ヒートガン使えばよかった

 このシートを外すと、トレイに入っている小さいネジが確認できるので外していきます
 全部で26個くらいあります

 ネジを外したら表面から爪ツールを差し込んでバキバキと持ち上げます
 写真は最後のほうですが、下は端子類が密集しているので上から開けたほうが良いです

ツールでこじ開けているところ

 裏ブタをとってひっくり返すとバッテリーが見えます
 サイズは 160mm x 85mm x 3.5mm
 定規で目測なので誤差大きいです
 それにしても薄い

 写真はバッテリーを剥がした後ですが、この銀のシールド板とは3Mの"ネジより強く張り付く振動対策両面テープ"で接着しているので取り外すは大変。しかも危険です

 手だけで剥がしてはいけません
 バッテリーの袋が破れて発火する恐れがあります

 プラスチックの定規や下敷きなどを隙間に挟んで、ジワジワと、平行に、ゆっくり剥がしましょう。15分以上かかります
 ヒートガンを使うなら40度以下と超低温設定にしましょう
 バッテリー本体はグニャグニャと柔らかいので角度がつくほど曲げてはいけません

緑の〇のところが超強力粘着テープ

 バッテリーの型番はGSF2588158 。これをそのまま検索すると中国の部品マーケット以外ヒットしませんでした
 3端子で容量は 4100mAh、3.7Vのリチウムイオンポリマー二次電池です

 バッテリー端子は半田付けされているので半田コテで取り外します

 黒はアース、赤は3.7Vですが、白がよくわかんなかったのでテスターでΩ数を測ったら5KΩだったので、手元の5.6kΩでプルダウンしておきました
 サーミスタだった場合は抵抗値が低いと温度高い、バッテリーアチチって事なので少し高めの値を選びました。まぁ一般家庭なら4.7kΩと5.6kΩは常備しているもんね

 もっと高級な端子であれば容量管理を知るI2Cだと思うんですが、端子をフリーにしておくのは静電気などで基盤を壊す可能性があるのでとりあえずこの処理としました。この処理は間違っている可能性大です(笑

追記 : 2020/05/25

電源管理(とRTC)にRK818 を使っています
 白い線はTS1端子に接続されているようです
 RK818の仕様書によるとTS1はサーミスター接続用でした。ADCを通して内部のレジスタ値と比較、閾値を超えたらバッテリー加熱または過冷却ととらえて電源断の動作に入るようCPUに割り込みをかけるとの事
 レジスタの値は本体のCPUから書き込む(EEPROM)で値がわからないのですが、前述の通り22℃の室温で実測5KΩでしたから、5.6kΩなら冬の部屋くらいでしょうか
 バッテリーの仕様書が手に入ればもう少し追い込めるんですがまぁこんなもんか

白い線のところに5.6kΩ、赤黒は電池ボックス

BOOX MAX2はリセットボタンがないので、以下の手順を踏む必要があります

  1. バッテリーは18650を使います。(電池ボックスに入れてます)
  2. 30秒くらい待つ (焦げ臭くなってないかのチェック)
  3. microUSB電源を本体に刺します
  4. 電源ボタンを青いランプになるまで長押し(20秒以上かかる)
  5. ランプが点いたら手を放す

あっさり起動!

 見た目が悪いけど、ま、まぁテスト起動だし

 写真の18650はバッテリー管理がされていない生18650なので危険です
 白線を繋げていないから過充電になって電池が破裂します
 必ず充電管理の付いた18650にしましょう

充電管理が付いた18650は少し長い


 元々ついていた薄いバッテリーを分解してみます
 これは屋外で行うべきです


バッテリーとは2か所でつながっている制御基板

 この制御基板には、P-1S778E というダイオードみたいな番号が印刷されていました
 中のSOPチップの型番も検索してみたのですが、正体不明でした
 このバッテリー専用のコントロール基盤なのかもしれません
 白線はまた後日考えるとします(現状5.6KΩのプルダウン)

 似たような容量で同サイズのバッテリーが秋葉原のとあるお店で通販していましたので、注文してみました。1,980円だって。安いなぁ。

 とりあえずこのバッテリーが届いたらまた続編を書くかもしれません
 いまのままだと、線がはみ出てるわ、バッテリーボックスがブラブラしてるわで使い勝手悪すぎなので。

後半に続く

おしまい

2020年5月5日火曜日

macbook pro 13 2020年版

待ちに待ったmacbook pro 14 13

出張持ち出しの開発(Xcode,Unity,その他IDE環境) 目線です
色々偏ってます

これは...次だなぁ

良い
・WiFiはpro16がacまでだったけどwifi6(ax)で3倍速になった
 あれ、おしまい。ストレージとかはクラウド使うからいらんし
 
まぁまぁ
・13かぁ。まぁ13インチはいいか。仕事で使うから2ndモニター追加するし

・キーボードが"普通"に戻った
 前のがクソ杉なので良いの項目に持っていけない(笑

・スピーカーがすごいらしい
 出張の時のホテルで良いとは思うけど、この部分を排熱に回してほしかった

・左のTBから充電するとCPU負荷が上がるのは治ったのかな
 OSのせいかもしんないけど

超残念
・Corei7 で4コアしかない
 え、4コア? 6コアじゃないの?
 Windows機は省エネに振った機種以外6コアだよ??
 XCodeのコンパイルがぐーんと遅い。もう実8コアに慣れちゃったよ

・しかも 4.5GHz
 Unityのコンパイルがちょっと遅い
 UnityのiOSコンバイルは実質シングルスレッドなのでギガが利くのだよ
 まぁ仕方ないけどさ、Windowsノートはもう少し早いよ
 CPUは第十世代なので2コアは5GHz以上にできるのに
 とはいえかなり爆熱だもんなぁ
 Core i9-10900Kは爆熱
 10nm以下になったら買うか...それが最後のインテルmacになりそうだし。


という事でデスクトップのmacもあるし持ち出し用はmacbook pro13 2014でがんばる

macbook pro13 2008も元気に動いているから、パーツの信頼性はバツグンなんだよね
・バッテリーは膨らまなかった(これはすごい)けど容量が0になったので交換
・SSDはSATAなので自分で交換した

2020年5月4日月曜日

Core i9-10900K

うーん、新しいCPUはまだ14nmかぁ
しかもほとんど性能上がってない。コア数多いのはとても高価な最上位だけだし

まぁAMD(TSMC)の7nmもかなーり怪しいけど。
ステッカーチューンというか営業トークっぽい。

1 電気をジャブジャブ捨ててクロック上げてる
AMDに追いつかれると毎回これ。そのCPUはすべて黒歴史になっている
排熱が間に合わないので、シリコンを薄くしている 
なんと現状の9900kでそれをDIYしている人がいて10度以上温度下がってる
カラ割りして見えるのは裏面なのでコンパウンドでゴリゴリ削ってる
当然壊れやすく6万円すっ飛んでも平気なツワモノだけど
半年以上前の個人DIYにようやく追いつくインテル

2 Socketが新しくなった。前のマザーボードが使えない

3 しかもPCI-Expressは3.0のまま。AMDは4.0(3の2倍速)
半年後に4.0がでるのは間違いないが、周波数が高いから新しいソケットでも対応できないんじゃ?

4 しかもしかもまだDDR4のまま

5 Thunderboltが4になりそう(USB5? DP2.0?)
TB5は 8K/120Hz というとんでもない転送速度だから
インピーダンスがまるで違うのでやはりCPUソケットは使い回せない...
外付けという手はあるけど

6 全てのIntel CPUにある脆弱性がまだ解決してません
これは先読みの仕組みの根本だから大変なのはわかる。

3、4(と5)のでっかい案件がペンディンクのままなので、毎回マザーボードの買い替えとなる気配

2019年10月10日木曜日

macOS mojave でMSXエミュレーターを動かす

  1. App Store から Xcodeをインストール

    アプリケーションフォルダから一度だけ Xcodeを起動して、必要なツールを自動インストール

  1. HomeBrew をインストール

    https://brew.sh/index_ja

    アプリケーション、ユーティリティ、ターミナルを起動して

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

と入力。

 

  1. fmsx 関係のツールを入れる

    続いてターミナルから

brew cask install xquartz

brew install fmsx

として必要なツールを入れる

 

オーディオエミュレーターのサービスを起動する

brew services start pulseaudio

 

  1. fmxs の起動

    Finder で アプリケーションのユーティリティ フォルダに入っている XQuartz を起動

    (brew cask install xquartz が入れてくれた)

 

  1. XQuartz の メニューの「アプリケーション」「ターミナル」を開ける

    ここのターミナルはmac OSのターミナルではないので混同しないように

    そのウインドウから

fmsx -home /usr/local/opt/fmsx/share/fmsx

で起動したらめでたしめでたし

 

 

2019年8月4日日曜日

知育器の豆電球を使ったニッカドディスチャージ

 電子リレー(IRF520)と電流・電圧測定(INA219) と、近くの文房具屋さんで埃をかぶって売ってた「知育キット豆電球ソケットセット」を使ってENELOOPの放電器を作る。

 ダイソーとかだと知育玩具が売ってなかった。

 amazonのほうが安いんだけどこういう町のお店にはお金使いたいし。

 前に書いたblogの簡単応用

電子リレー(IRF520)のblog

電流・電圧測定(INA219)のblog

 

方針

 豆電球で電力を消費させ、解放電圧で0.9Vになったら放電をとめてENELOOPを痛まないように、なおかつニッカド水素特有の「メモリー現象」の回復(リフレッシュ)を行いたい。

 中途半端に放電した状態で途中充電すると容量が減ってしまうのでこういうのが欲しかった。

 単体の機材は売ってるし、電子回路で自作するものもいくつか公開されている。

 んが、これは負荷をかけた状態で0.9VになったらOFFにするという仕組みで、実はENELOOPにはもう少し電力が残っている。

 最後のひと絞りまで使い尽くすけどいたわり放電というのはマイコン IOT制御ならでは。

 

ハードウェア接続

  • IRF520は GPIO 21(40番ピン)と39番ピン(GND) を接続。pigpio + python3 で制御

     

実際の回路はこちら。1.2Vでは豆電球が暗いので手ブレしてる orz

OS

Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。

 

Python3の殴り書きソース

$vi discharge.py

#!/usr/bin/env python

# csvに出力したかったのでflush()を使いたい
import sys

# GPIOのコントロール
import pigpio

# sleep用
import time

# 現時刻取得用
from datetime import datetime
# 電力計のライブラリインポート
from ina219 import INA219
from ina219 import DeviceRangeError

SHUNT_OHMS = 0.1

# Raspi GPIO21(40番PIN)を出力設定にする
pi = pigpio.pi()
pi.set_mode(21,pigpio.OUTPUT)
# 電流測定の初期化
ina = INA219(SHUNT_OHMS)
ina.configure()

# 豆電球をoffにしておく
pi.write(21,0)
# 電池はすぐに電圧を復帰しないので、0.05秒待ってやる
time.sleep(0.05)
# 初期電圧を計る
voltage = ina.voltage()
print("%.3f" % voltage)

# 解放電圧が0.9V以上なら、whileでループ
while voltage > 0.9:
    pi.write( 21,1 )      # 電球ON
    time.sleep( 30 )      # 30秒豆電球を点灯
    power = ina.power()   # 消費電力を計る
    pi.write( 21,0 )      # 電球OFF
    time.sleep( 0.05 )    # ちょっとだけ待つ
    voltage = ina.voltage() # 解放電圧を計る
    print("%s,%.3f,%.3f" % (datetime.now().strftime("%Y/%m/%d %H:%M:%S"),voltage,power))
    sys.stdout.flush()    # python3だとこれがないと逐次出力にならない

# これがないと32回目の起動で失敗する。pigpioの仕様。
pi.stop()

 

使ってみた

6:09 に放電を開始、9:26 に0.7Vになったので放電を停止したようだ

2019/08/04 06:09:33,1.352,201.463
2019/08/04 06:10:03,1.348,200.976
2019/08/04 06:10:33,1.344,199.024
2019/08/04 06:11:03,1.340,197.805
中略
2019/08/04 09:25:33,1.032,115.122
2019/08/04 09:26:03,0.988,103.902
2019/08/04 09:26:33,0.752,54.390

この時点で解放電圧をテスター測ってみると、1.02Vもあり、やはり解放電圧は相当高めであった。

 

2019年8月3日土曜日

RaspberryPI + INA219 を使って電圧、電流を測定する

 せっかくRaspberry PI に Zabbix という値を監視して、美しくグラフを描いてくれるツールを入れたので色々監視したくなってきた。

 I2Cの電流/電圧計と安いRaspberry PI Zero W とか使えばいいんじゃね?

 

これを使ってやりたい事

  • 鉛蓄電池の現在の電圧を知りたい

    自作の180Wソーラーパネル4枚 + MPTTチャージャー + 鉛蓄電池(でっかいの8台)+AC100Vコンバーター(サイン波)で自分の部屋の電気をまかなっている

    鉛蓄電池が11Vを切ると電池保護の為にAC100Vを出すコンバーターが出力を止めてしまうので切れる前にZabbixからメールを飛ばして「あと10分で電池切れ!」とかしたい

  • ニッカド電池の電圧を知りたい

    テスターだと解放電圧なので、10mAとか流しながら実測の電圧を知りたい

  • USB電力テスターは買った方が安くて高機能だが、作ってみたい

  • 温度センサーとか10℃でアナログ電圧の1V出すものがあるので水槽の水温とか測りたい

    いやーでもデジタル温度センサーのほうがいいかな..(DS18B20など)

     

とまぁいろいろ夢が膨らむので、まずは電流と電圧を同時に計測できる仕組みがほしい。

 

I2C対応の電流/電圧計

 amazonで見つけたのは5個で¥1,000-(@¥200-)のINA219 DC電流電源センサー(実は中華コピー品だった)

 ±3.2Aまでの電流、26Vまでの電圧測定ができるらしい。200円で。

 注目は±3.2A。ブラスマイナスとあるので、太陽光+充電池の充放電記録に使える!?

 正規のものは¥1,300もするけど、パチモンは¥200なのでそっちを買った。

 この基盤についてるシャント(shunt※)は、0.1Ωのチップ抵抗(!)を使っていて26V / 3.2Aとなんと83ワットも測れる。ほんとかね。まぁUSBの5V 2.4Aくらいなら持つだろう。

(※ shunt : 小さく正確な抵抗を電線の途中に挟んでその電圧差で電流を計る仕組み。主にDCで使うが100Aとかの電流も割と正確に、安価に測れる)

 

 

Rasberry PIの準備

 Raspberry PI3のI2C通信は2組あって1組目は

  • GPIO2(3番ピン)がデータピン (SDA)
  • GPIO3(5番ピン)がクロックピン(SCL)

 電源はラズパイの1番ピンに3.3VがでているのでこれをVCCとして使う。

 最初はpigpioを使ってI2Cを素でアクセスして値を取ろうとしたが、INA219は安い割にはやたらに高機能で、分解能優先、速度優先、消費電力優先、電圧電流アラート送信などいろいろ相反する設定があって、何をどう設定すれば正しく動作するんだか調べるのが面倒くさい。マニュアルぶ厚い。

 面倒くさいならどこかにライブラリがあると思ったので検索したらバッチリあった。

 ありがとうありがとう。

 pigpioとは違い、Raspberry PI のI2C機能をONにする必要がある。

 少し長めなので別blog (ラズパイでI2Cを使う )に切り出した。

 

gitからライブラリを手に入れる

Raspberry Pi Python Library for Voltage and Current Sensors Using the INA219

https://github.com/chrisb2/pi_ina219

このpython用のライブラリをpython3に組み込みむ。

# pip3 が入っていない場合は別途 apt install してください

apt-get -y install python3-pip


# git側ではpipコマンドを使ってますが、python3にも対応していたのでpip3で導入
# 万一古いのが入っているとダメになるらしく、念の為一度uninstallする必要があるらしい
sudo pip3 uninstall pi-ina219
sudo pip3 install pi-ina219

で、gitの例題をそのままコピー

遅くて分解能は低くなるかもしんないけど、全自動で値を読み取る、とREADMEに書いてあった

$ vi iv.py

#!/usr/bin/env python
from ina219 import INA219
from ina219 import DeviceRangeError

SHUNT_OHMS = 0.1

def read():
    ina = INA219(SHUNT_OHMS)
    ina.configure()

    print("Bus Voltage: %.3f V" % ina.voltage())
    try:
        print("Bus Current: %.3f mA" % ina.current())
        print("Power: %.3f mW" % ina.power())
        print("Shunt voltage: %.3f mV" % ina.shunt_voltage())
    except DeviceRangeError as e:
        # Current out of device range with specified shunt resistor
        print(e)

if __name__ == "__main__":
    read()

 

何も繋がず実行してみる

$ python3 iv.py

Bus Voltage: 0.884 V
Bus Current: 0.000 mA
Power: 0.000 mW
Shunt voltage: -0.010 mV

Bus VoltageはV+を解放しているのでノイズを拾って0.8Vと出ているようだ。

 エラーが出た?

FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'

エラーがでた場合は、OSでI2CをONにしていないので、

sudo raspi-config で Interface Options→I2C をONにしてリトライ


それでも同じエラー

/frb/i2c-1 に読み取り権限がないのかもしれません

i2cグループに自分のID(というか読み取らせたい人)を追加します

$ sudo usermod -aG i2c 自分のID

例 : sudo usermod -aG i2c zabbix  (zabbix_agentに読み取らせたかった)
 


ラズパイの電圧を計る

INA219の V+ を RasPIの2番PINに接続する。

V-はどこにも繋いではいけない!!(これは罠だ!!)

V-にGNDを差してしまうと0.1Ωで電源をショートさせてしまう事になり回路が焼けてしまうだけでなく

最悪やけどを負ってしまう

V-は電流を測るためのマイナス方向への接続。

測りたい電池のマイナス側はラズパイのGNDに繋ぎます

アイソレーションの心配あるけど仕方ない

気を取り直してもう一度実行。

$ python3 iv.py 
Bus Voltage: 5.048 V
Bus Current: 0.000 mA
Power: 0.000 mW
Shunt voltage: 0.000 mV

電源電圧が 5.048V という事がわかった。

V-を使った電流を測定するような配線をする記事は別に書く事にする

 

複数同時接続も可能

INA219のI2Cアドレスは、データシートからは0x40,0x41,0x44,0x45 が選択できる。

https://www.adafruit.com/product/904

 デフォルトは0x40で基盤のADDR0,ADDR1をハンダでショートさせると4台までのINA219を1つのI2C線にぶら下げる事ができる。

 

 

 

RaspberryPI で I2C インターフェイスを使う

Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。

ラズパイのコンフィグレーターを使って

$ sudo raspi-config

Interfacing Optios を選択、

I2C を ONにする。で、Finishして設定を書き込む。

次に

/boot/config.txt に

$ sudo vi /boot/config.txt
...前略
# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# これ↓を足した
dtparam=i2c_baudrate=50000
...攻略

reboot する

 

i2cdetectを使いたいのでツールを導入

$ sudo apt-get install i2c-tools

 

起動時のログ(dmesg)にI2Cドライバーが読み込まれているか確認

$ dmesg | grep i2c
[    5.935833] i2c /dev entries driver

 

接続されているI2Cデバイスをサーチ

# I2Cインターフェイスのリストを見てみる
$ i2cdetect  -l
i2c-1 i2c        bcm2835 I2C adapter              I2C adapter

# i2c-1の1がi2c 1番セットっぽい。
# Raspberry pi 3は2セットあるが2セット目は配線してないので出てこないのかな?

# 1番のリストを取ってみる
$ i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --     

# $40 に INA219(電流/電圧)がつながっている
# 何もつながっていない、またはdetectに対応していないI2Cデバイスなら
# 全部 -- となる。
 
最近のLinuxはセキュリティが厳しいので、I2Cインターフェイスにアクセスしていいユーザーの設定も必要
たとえば zabbixエージェントであれば

追記 2021/01/25

# sudo usermod -aG i2c zabbix 

としておく。userが なす太郎であれば sudo usermod -aG nasutaro  となる

pythonがアクセスする時に

IOError: [Errno 121] Remote I/O error

とでるのは、そもそもI2Cのインターフェイスがonになってないの理由ではなく、そのユーザーにI/Oをアクセスできるようにシステムにおしえておく事


実際にエラーがでたライブラリを調べてて気づいた

とある温度センサーのライブラリ


おしまい