2021年1月8日金曜日

Pythonでルンバを操作してみた。

 ルンバ980でもROIが使えるらしいことがわかったので久しぶりにルンバで遊んでみることに。

980のROIポートはダスト容器取り外しボタンの右側のパーツを上に引っ張ると現れる。こんなところについていたのか…770のときはminiDIN 7Pが取っ手の下についていたけど。ちなみに980はmicroUSBになっている。

microUSB端子にケーブルを指してPCとつなぐとUSBシリアルデバイスとして自動でドライバがインストールされた。(インターネットに繋がっていればWindows Update経由で自動で入るらしい)

コマンドは昔と変わっていないらしいので550のROIの資料を確認しながらとりあえず前後左右に動けるようなものを作ってみた。pyserialを使用しているので入ってない場合はpip install pyserialでインストール必要かも。

import tkinter as tk
from tkinter import messagebox
import tkinter.ttk as ttk
import struct
import serial
from serial.tools import list_ports
import time

after_id = None


        
def busConnect():
    global bus,ser
    ser = serial.Serial()
    ser.baudrate = 115200
    ser.timeout = 0.1       # タイムアウトの時間
    ser.port = bus
    ser.open()
    #print("open " + ser.port )
    initdata = [128, 131] #start,safe mode
    ser.write(bytes(initdata))
    
    return 1

def busDisconnect():
    global bus,ser
    ser.close()
    ser = None
    
def busButton(event):
    global bus,ser
    if ser is None:
        result = busConnect()
        if result == 1:
            buttonBus.config(text = "切断")
    else:
        busDisconnect()
        buttonBus.config(text = "接続")
        
def PortSelected(event):
    global bus
    bus = PortList.get()
    buttonBus.config(state="normal")
        
def roombaMove(left,right):#モータのPWM値を±255で指定
    global ser
    senddata = [146,((right & 0xFF00) >> 8),(right & 0xFF),((left & 0xFF00) >> 8),(left & 0xFF)] 
    if ser.is_open:
        ser.write(bytes(senddata))
        print(bytes(senddata))

def buttonPress(right,left):
    roombaMove(right*var_scale.get(),left*var_scale.get())
    
def key_event(event):
    key = event.keysym
    if key == "w":
        right = 1
        left = 1
    if key == "s":
        right = -1
        left = -1
    if key == "a":
        right = -1
        left = 1
    if key == "d":
        right = 1
        left = -1
    roombaMove(right*var_scale.get(),left*var_scale.get())
    
def key_stop(event):
    roombaMove(0,0)

bus = None
ser = None

ports = list_ports.comports()    # ポートデータを取得
devices = [info.device for info in ports]

root = tk.Tk()
root.title("Roombaテストするやつ Ver0.1β")
root.geometry("300x300")
root.option_add('*font', 'FixedSys 14')

ComPort = tk.Label(text='Port:')
ComPort.place(x=20, y=20)

#コンボボックスを設置
PortList = ttk.Combobox(root, values = devices,width=10,state='readonly')
PortList.set('Select')
PortList.place(x=80, y=20)
PortList.bind("<<ComboboxSelected>>", PortSelected)

# ボタンの追加
buttonBus = tk.Button(text='接続', width=6,state="disable")
buttonBus.place(x=200, y=15)
buttonBus.bind('<ButtonRelease-1>', busButton)

buttonF = tk.Button(text='↑', width=6, command = lambda: buttonPress(1,1))
buttonF.place(x=100, y=80)
buttonS = tk.Button(text='STOP', width=6, command = lambda: buttonPress(0,0))
buttonS.place(x=100, y=120)
buttonB = tk.Button(text='↓', width=6, command = lambda: buttonPress(-1,-1))
buttonB.place(x=100, y=160)
buttonL = tk.Button(text='←', width=6, command = lambda: buttonPress(-1,1))
buttonL.place(x=30, y=120)
buttonR = tk.Button(text='→', width=6, command = lambda: buttonPress(1,-1))
buttonR.place(x=170, y=120)

var_scale = tk.IntVar()
scale = ttk.Scale(root, from_=30, to=255, variable=var_scale)
scale.place(x=80, y=220)
labelScale = tk.Label(text='Speed')
labelScale.place(x=100, y=250)

root.bind("<KeyPress>", key_event)
root.bind("<KeyRelease>", key_stop)

root.mainloop()

とりあえずWASDを使ってキーボードでも動かせるようにしてみた。ちょっとそこら辺の実装がテキトーなので一旦キーを離してから他のボタンを押さないとちょっとおかしな動作になる。今回はテストなので治すのが面倒だからいいや…

あとはスピードのスライドバーを多少動かさないと動かないかも。ルンバを通常モードに戻す場合は持ち上げればいいっぽい。(車輪にスイッチが付いている?)

USBになったことによってESP32とかのマイコンに直結するのはちょっとやりにくくなったかもしれない。miniDINのときは電源も取れたし。

2021年1月3日日曜日

VL716なSATA USB3.0変換基板を12V対応化してみた。

 年末の掃除で結構3.5インチなHDDが出てきたんだけど中身を確認するのが面倒なので放置していた…
もっとかんたんに中身を確認できたら確認するのに!ってことで2.5インチSSD用に使っていたVL716なSATA USB変換基板を改造してみた。

3.5インチドライブにつなぐためのケーブルも作ったんだけどなんか出すのが面倒で…
3.5インチのHDDは12Vが必要なんだけど、この手のUSB給電タイプの変換基板はもちろん5Vしか存在しないわけで…

ということで単純に12VのACアダプタをそのままさせるようにしてみた。これなら手軽に使える…はず…

というわけで用意するものは5.5mmジャックと適当なジャンパだけ。もともとこの基板には5V給電用の端子を実装するところがあるのでそこの一部の穴を利用して固定することに。
穴に入るように端子のGND側を削る。あと他の端子をカット。

端子がジャンパ抵抗とかに当たるので厚手の両面テープをカットして貼り付け。
部品の部分は逃しておいた。
あとはちょっと太めのダイオードの足でSATA電源の12Vと電源端子のプラス側をつなぐだけ。
一応これでも結構しっかり固定されてるけど、念の為接着しておこうかなぁ

とりあえずこれですげー便利に使えるようになった。
あまり古いHDDだと5V結構食うので注意だけどね…
本当は5Vラインで12Vラインをオン・オフできるようにロードスイッチとかつけたほうがいいんだろうけど動いたのでいいや。自己責任だけど。





2020年12月29日火曜日

Ultra Fit USB 3.1 32GBを購入してみた

iPhoneのLightning OTGアダプタを購入してからiPhoneで得たデータをそのままUSBメモリに保存できるのが便利なのでiPhone用にUSBメモリを購入してみた。

購入したのがSandiskのUltra Fit USB3.1シリーズの32GB版。これが結構お手頃価格で上海問屋で548円だった。
一応130MB/s Readって書いてある。
並行輸入品かな。保証は初期不良交換のみだった。
まぁ安いので気にしない…
筐体はプラスティック。ベンチマークしたらそこそこあったかくなってた。
USB3.0端子でもこのぐらいまで小さくできるのねぇ…

SDCZ430-032G-G46
Crystal Disk Markで測定してみたら読み込みはパッケージ通りのスピードが。
書き込みも昔かったUSB3.0メモリよりだいぶ速くなってるなぁ

そんでもってこの前購入したLightningのOTGアダプタに装着すると…
いい感じの長さに!
やっぱり短いUSBメモリじゃないとLightning折れそうで怖いしな
LightningのUSBメモリ買うより安いかもMFi通ってないアダプタだけど。



2020年12月27日日曜日

Logicool G610を赤軸にしてみた

1月に友人からもらった茶軸のG610を使っていたんだけど、方向キーの左矢印が効かなくなってしまったのでこの機会に赤軸に交換してみた。
まぁ前々からこのキーボードは二人の友人から改造前提でもらったんだけど…

というわけでもう片方の友人にもらっていた赤軸キーボード、もともとは基板の調子が悪くて何回か修理していたんだけどもうダメだろうということでもらってきてあった。これは3月ぐらいに赤軸だけ回収しておいたのだ…

これがまた結構大変でハンダ吸い取り器のリロード回数がすごいことに。そして結構中古のキーボードって中からカスが出てくるしキーがベトベトしてるやつがあったりとかで…
というわけで放置してもう年末になってしまった。
まぁキーが効かなくなってしまったのは仕方がないということで重い腰を上げてキーを交換することに。

まずはG610の分解。裏面のネジはラベルの下と滑り止めの下とスタンドの下全部にあった。
そして爪で引っかかってるので樹脂のスクレッパー的なのを突っ込んでやると傷つかずに開けることができる。

基板は銀色のネジを外すと取り外せる。一部樹脂のクリップで止まっているところがあるので割らないように注意しながら外す。

とりあえずLEDは半田を追加で盛って、温めながら反対側から引き抜いて外した。キー自体はハンダ吸い取り器でハンダを吸い取ったあとにスイッチの面から上下の爪を爪楊枝とかで同時に押すと外れる。これが大変…

キーを全部はずし終わったらせっかくなので金属プレートもきれいにしておく。一部サビとか傷で塗装が剥がれていたところがあったのできれいにしてからペイントマーカーで錆止めしておいた。

ここからは普通の自作キーボードと同じ!ハンダしてくだけ。
一応ハンダするときは鉄板でスイッチが少しでも浮かないようにするために基板に押さえつけながらハンダしたので結構時間かかった…

ついでにLEDも新品に交換!色も変更!
ちなみにマルチメディアキーとかのLEDは1608の面実装タイプでした。

更に静音化リングっていう名前で売っているただのOリングをキートップに取り付けながらキートップを組み立て…
ちなみにこの静音化リング、以前にeBayで100個で1ドルで購入したもの。100個って言うから2パック買ったのに100個以上入っていたので1パックで足りた。
この静音リングを赤軸キーボードに装着するとなんかリアフォ感が出るということで。底づき音静かになるし。

というわけで完成!なんか緑色LEDにしたらRazerのマウスとよく合うなぁ
ロジのマークはLEDがサイドビューの高輝度タイプだったのでそのままにしておいた。
これ5時間かかったよ…疲れたよ…
中身もめっちゃきれいになったので実質新品だなこれ。

ちなみにG610の赤軸の日本語キーボードって純正では存在していない?







2020年12月5日土曜日

Sipeed Maix Bitを買ってみた。

 Aliexpressのセールで18ドルぐらいになっていたのでちょっと前に話題になっていたK210の開発ボードを買ってみた。
K210を搭載した開発ボードは何種類かあるみたいなんだけど、その中でもカメラとマイクとLCD付きで一番安かったのでMaix Bitにしてみた。

結構小さい樹脂ケースで届いた。いつもながらこれがプラスティックの袋に入っているだけの簡易梱包…
中身はこんな感じ。カメラを固定するネジとスペーサーの他にドライバーまで付属していた。

スペーサーとして樹脂ナットを使用するという…
とりあえずネジの長さが結構絶妙な感じ。でもまぁちゃんと閉めれば一応しっかり固定できる。フラットケーブル結構ひん曲げないといけないからちょっと怖い。
とりあえずUSB Type CケーブルでPCにつなぐと起動した。シリアルポートは2ポート分として認識されていた。USBシリアル変換ICはCH552が搭載されていた新しいタイプのボードだった。

早速MaixPy IDEで動作確認。
起動するとサンプルプログラムもそのまま開くので左下の接続ボタンを押してから実行ボタンを押すだけでLCDにカメラの映像が映るテストプログラムが走る。
一応LCDにカメラの画像が表示されているし、IDE上でも確認できる。

さて何をして遊ぼうかなぁ…



2020年12月4日金曜日

Lightning to USB 3 Camera Adapterを買ってみた

 前回に引き続きLightning用のUSBホストケーブルの話題なんだけど、今度はLightning - USB 3カメラアダプタそっくりなアダプタを購入してみたので試してみた。前回はUSB端子とLightning端子が一体になっていたので変な力がかかるとLightning端子によくなさそうだけど、今回は純正そっくりなので大丈夫そうだし。

iHuigolっていうブランド名?らしいけどAliexpressの商品紹介ページにもこの名前が書いてあった。一応種類的にはUSB3.0が2ポートと充電端子、USB3.0が1ポートと充電端子、USB3.0端子のみの3種類があったんだけど、純正そっくりな1ポートと充電端子つきのを購入してみた。送料込みで4.41ドルだった。

中華のわりにはちゃんと保護シートが貼ってある。まぁ保護シートの寸法があってないんだけど。
ちゃんとカメラマークとLightningケーブルのマークも刻印されていて純正そっくり。
Lightning端子もちゃんと継ぎ目がないタイプできれいなんだけど、樹脂部分がちょっと太い。
純正を見たことないからわからないんだけど、樹脂部分がちょっと太いせいでケースによっては干渉するかも。

機能的には前回紹介したLightningアダプタのようにちゃんと警告も出ずにUSB機器を認識している。今の所電力消費が大きいという警告もでていないけど、ちゃんと充電しながら使えるっぽい。充電していないときでもUSBメモリとかが認識することも確認できた。
ただし、充電器をつないでいたとしてもバスパワーの2.5インチHDDとかは認識できなかった。別途セルフパワーのハブを通す必要がありそう…


2020年12月1日火曜日

Lightning用のUSB3.0ホスト変換アダプタを買ってみた

 iPhoneでUSBデバイスを使うためにはLightning USBカメラアダプタっていうホストケーブルを購入しないといけないんだけど、Aliexpressでめっちゃ安いアダプタが売っていたので試しに買ってみた。

送料込みで2ドルの割に作りはしっかりしている気がする。ちゃんとアルミ製だし、なによりLightning端子が昔のコピーケーブルのように変なところで2ピースに分かれていない…

さっそく実機テスト。商品紹介ページにはiOS13以上対応とか書いてあったが、今回はiOS14.2.1のiPhone 12 miniでテスト。

とりあえずUSBメモリをつないでみた。iOS標準のファイルアプリで普通に中身にアクセスできた。普通に使えている…


ほかにも中華のNO.:8150って書いてあるUSB LANアダプタ(RTL8150かな?)とかも使えた。でもASIX AX88179(USB3.0のギガビットLAN)は認識しなかったけど… Androidとかだと行けるのになぁ

DigiFiの付録のDACもいけた。

アップデートで使えなくなる可能背もあるんだけど2ドルだったらこのぐらい使えれば良さげだなぁ。Lightning USBカメラアダプタの互換品としては優秀かもしれない。しかし中華は同じ形状だからといって中身が同じとは限らないので注意が必要かも。レビューをよく見てポチるといいかも。

追記:iOS 16.5でも使えてる