まっとうな人生を送るにはCNC フライスが必要だと思ったので、買った。

CNC Sable-2015 というやつで、本体・スピンドル・制御基板・電源など一式セットで10万円ぐらい。

これのほかに必須なのは

  • エンドミル
  • 固定用の何か (両面テープとかバイスとか)
  • USB 用のインターフェイス

10pcs エンドミル 1.0mm - SODIAL(R)

SODIAL(R)

4.0 / 5.0

ニチバン 強弱セロハン 両面テープ セルタック 15mm×20m CW-D15 - ニチバン(Nichiban)

ニチバン(Nichiban)

4.0 / 5.0

Grbl - USB G-code 実行

Grbl はシリアル経由で G-code を与えると制御用信号を生成してくれるファームウェアで、オープンソースで開発されている。Arduino に書きこめば動いてくれる。Arduino Nano 互換ボードに書きこんで使っている。

CNC 用のステッピングモータ制御基板は、古来からパラレルポート (という名のGPIO) をインターフェイスにしているが、現代のコンピュータにはパラレルポートは存在していないため、制御信号をコンピュータで直接つくるのではなくマイコンにやらせる、という感じ。

書きこんで設定すれば動くので特筆するようなことはない。

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=1 (dir port invert mask:00000001)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=50.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=25 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=1066.667 (x, step/mm)
$101=1066.667 (y, step/mm)
$102=1066.667 (z, step/mm)
$110=800.000 (x max rate, mm/min)
$111=800.000 (y max rate, mm/min)
$112=800.000 (z max rate, mm/min)
$120=150.000 (x accel, mm/sec^2)
$121=150.000 (y accel, mm/sec^2)
$122=100.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=150.000 (y max travel, mm)
$132=60.000 (z max travel, mm)

仕様通りに設定すればちゃんと動いた。

配線の回路図

とりあえず仮でリミットスイッチを強力な両面テープを使ってつけており、ホーミングも実際は有効にしている。

緊急停止ボタンは、一番最初のうちからつけておくべき。うっかり操作をミスったときにとても便利。だいたい機械側からガガガガ〜とか音がなるとパニくるので、停止ボタンだけはとにかく物理ボタンで目立つようにすべき。

ちなみにこの緊急停止ボタン、中国製の安いの買ってみたら接点が接触しないという、用途的に致命的だろという欠陥製品だった。一旦分解して接点にハンダ盛ったした……

ノイズ対策

制御基板まわりや Arduino まわりがデリケートで、スイッチング電源の近くに置くとちょいちょい誤動作することがあった。距離を離しつつパッチンコアを入れて対応したら完全に大丈夫になった。

防音箱

動かしている間結構なお点前の音を出すのと、安全性のため、最初から箱を作ろうと考えていた。

仕様に書いてあるサイズを信用できなかったので、届いたものの稼動範囲や、でっぱりを調べたところ、内径として

   H=420mm
   W=410mm
   D=530mm

ぐらいは必要ということがわかった。スピンドルのでっぱりがかなり大きかった…

一旦箱の全景を SketchUp でモデリングしたあと、板取図も SketchUp でおこし、エコモクという通販サイトにカットを依頼した。


かなり正確にカットされたのがきて良かった。板さえ完璧に切れていれば組立は一瞬なので最高。

材質はパーティクルボード。MDF よりも若干比重が高く (遮音性が高いということ)、そして安価なのでこれにした。板は安いが配送料がどうしても高くなる。

防音箱の下にはゴムの防振パッドをしいている。

また、中身に吸音シート (ホワイトキューオン) を貼っている。ホワイトキューオンは50mm厚のやつを裂いて4分の1にしてある。最初吸音材は貼らないつもりだったけど、実際やってみると共鳴音っぽい響きをしてしまったので結局入れた。

東京防音 吸音・防音材 ホワイトキューオン ESW-415 415mm×910mm×厚50mm 1枚入 - 東京防音

東京防音

5.0 / 5.0

東京防音 防音戸当たりテープ TP-25 黒 幅15mm×長2M×厚2.5mm 2本入 - 東京防音

東京防音

3.0 / 5.0

東京防音 防振マットTI-505V4黒 - 東京防音

東京防音

3.0 / 5.0

扉は、スペースに余裕がないため観音開きにし、マグネットキャッチによってできるだけぴったり閉まるように調整をした。最初、ローラーキャッチで試してみたけど、キャッチの力が弱くてダメだった。マグネットキャッチのほうが保持力が強いみたい。

LED のライトもつけてある。秋月で250円で売っているやつ。普通の部屋用のLEDライトだとオーバースペックだよなと思って試してみたけど正解だった。ちょうどいい。micro USB 端子から直接12Vに昇圧できるボードを入れて、配線を簡単にした。

制御まわり

別のエントリを書く

500 Can't connect to lowreal.net:443 (certificate verify failed)

  1. トップ
  2. tech
  3. CNC フライスを買った。

Grbl を使うのはいいとして、Grbl をコントロールして G-code を送りこむプログラムと、そもそも G-code を生成するプログラムなどが必要になってくる。

最初は Using-Grbl にある通り Universal G-code Sender を使ってみたのだけど、最低限の機能はあるんだけど、いまいち自分の要求が満たせなかった。このページの他のも見てみたけど、実装が微妙だったりしたので、結局自分で書いた。

GrblServer


https://github.com/cho45/GrblServer

そもそもやりたいこととして

  • 無線でジョギング(手動でXYZを動かす)
    • スマフォとか
  • 複数の端末で同時に表示を行いたい
    • 箱の近くのRaspiと、ネットワーク上の別のPCとか

で、これらを実現するため

  • シリアルポートで Grbl を通信しつつ WebSocket を喋るサーバ
  • そのサーバと通信して制御するHTMLのビュー

を作った。前者は nodejs、後者は Polymer を使って実装している。

実際の使用

Grbl のサーバはネットワークに繋げた Raspberry Pi で動かしている。WebSocket は same-origin ポリシーとかがないので、LAN 内なら接続を許可するようなコードにしてある (つもり)

サーバさえ立っていれば、LAN 内のどの端末でも Grbl を制御できるので、PC 上で G-code を作ったやつを実行させたり、スマフォで開いてXYZを手動で動かして原点を出したりとできる。自分的には現時点でそこそこ満足いく構成になっている。

G-code 生成ソフト (CAMソフト)

別のエントリを書く

CNC フライス、G-code 生成・CAM・CADソフト編 | tech - 氾濫原

  1. トップ
  2. tech
  3. CNC フライス Grbl 制御編

G-code 流しこむまではいいとして、そもそもG-codeを用意できなければならない。

無料なのも有料なのもいろいろあるが、簡単すぎるのから難しすぎるのまでピンキリで選定が難しい。

結論からいうと SkechUp MAKE を CAD として使用し、SketchUcam という SkechUp 用の CAM プラグインを使って G-code に落としこんでいる。

SketchUcam の勘どころ

SketchUcam は基本的に 2.5D CAM なので、パスの設定は完全に平面でなければならない。(Z軸方向の高さがあってはならない)

また、設定したセーフエリア外のオブジェクトは完全に無視される。SketchUp 上の複数の図面を書いたうえで、セーフエリアだけを動かせばそれぞれ別の G-code として生成できる。

2段以上の加工を行う場合、SketchUcam では一発で生成できないので、図面コピー + 切削条件再設定が必要。セーフエリアを動かして複数回 G-code 生成を行って、連結する。

SketchUcam でワーキングポジション設定

SketchUCam はセーフエリア(機械稼動範囲)の設定ができるが、セーフエリア左下に常に原点が固定されてしまう。しかし実際は「ここを中心(原点)にして機械を動かしたい」という場合がある。

可能なら任意の点を原点にできればいいんだけどできないので、オフセットを設定するしかない。

セーフエリア内の適当なところ(中心とか)にオブジェクトを起き、機械側でも原点まで移動させたあと、ゼロリセットではなく、オフセット分のリセットを行う。

例えば、セーフエリア原点から 50mm, 50mm オフセットした位置を中心にして図面を書いた場合、機械側の原点あわせは、中心点を手動であわせたあと、G10 P0 L20 X50 Y50 とか送ればいい。

生成済み G-code の確認方法

ビューの状態によってオブジェクトが出力されたりされなかったりするので、生成した G-code は必ず確認が必要。

この用途だと OpenSCAM が良さそうなので使っている。

  1. G-code を出力したら、 OpenSCAM 側でそのファイルを開く。
  2. OpenSCAM の Workpiece Settings を Manual にし、切削対象の大きさにあわせる
    • 最低でも Z 軸は正しくしないといけない。1mm厚で原点を上に設定する場合 Z Dimension は 1.00000, Offset は -1.00000 になる
  3. Tool View を選択し、エンドミル直径を変更する
  4. Simulation View の下側にある Rerun simulation ボタンを押す

特に Z 軸方向のチェック、例えば貫通すべきパスが貫通しているかとかをちゃんとチェックする。

出力しなおした場合、Rerun simulation すれば再度リロードされる。

これで正しく切削できそうなのが確認できればいよいよ実際に切削できる。

  1. トップ
  2. tech
  3. CNC フライス、G-code 生成・CAM・CADソフト編

まず

sudo raspi-config

で desktop がデフォルトで起動するようにしておく

Chromium などをパッケージからインストール

sudo apt-get install chromium x11-xserver-utils unclutter

しかし、apt から入る chromium のバージョンが古すぎる (22) のでなんとかしたい。(あとから)

pi@raspberrypi ~ $ chromium --version
Chromium 22.0.1229.94 Built on Debian 7.0, running on Debian 7.8

~/.xsessionrc

# タッチスクリーン軸補正
# GUI ログインにすると xinitrc が読まれないので書いておく
DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0

# マウスカーソルを消す
unclutter -idle 15 -root &

# 画面のブラックアウトをやめる
xset -dpms &
xset s off &

# kiosk モードかつシークレットモードで chromium を起動する
exec chromium --kiosk --incognito http://www.google.com

incognito (シークレットモード) にしておくとセッション復帰とかされないので面倒なことがない。

  1. トップ
  2. tech
  3. Raspberry Pi で Chromium (Google Chrome) を Kiosk モードで起動する

http://www.wvshare.com/product/3.2inch-RPi-LCD-B.htm これっぽいものを ebay から買ってみた。2000円ぐらい http://www.ebay.com/itm/181663639529


320x240 WaveShare SpotPear V3 Touch panel control chip XPT2046 というやつ。ピクセル数的にものすごく解像度低いがとりあえず液晶を試してみたかった。

表示するまで

基本的には https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi これの通りするのだが、一部手順が古いためハマる。

fb0 -> fb1 に (HDMI からTFT側に)

sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf

FBTFT kernel module を使えるように firmware update をかける。ちなみにLinux のカーネルバージョンが4系になる。SPI の DMA 転送が有効化される。

sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update

これは 50MB ぐらいダウンロードする。が https://github.com/notro/rpi-firmware から前もって Download Zip したやつを使うこともできる。notro-rpi-firmware-master.zip としてファイルをダウンロードして、ローカルネットワーク内から scp で転送しておいたとする、そのうえで

unzip -d "/tmp/rpi-firmware"  notro-rpi-firmware-master.zip 
sudo FW_REPOLOCAL="/tmp/rpi-firmware/rpi-firmware-master" SKIP_DOWNLOAD=1 rpi-update

とすれば良い。

/etc/modules に追記

spi-bcm2708

fbtft_device name=waveshare32b gpios=dc:22,reset:27 speed=48000000

waveshare32b width=320 height=240 buswidth=8 init=-1,0xCB,0x39,0x2C,0x00,0x34,0x02,-1,0xCF,0x00,0XC1,0X30,-1,0xE8,0x85,0x00,0x78,-1,0xEA,0x00,0x00,-1,0xED,0x64,0x03,0X12,0X81,-1,0xF7,0x20,-1,0xC0,0x23,-1,0xC1,0x10,-1,0xC5,0x3e,0x28,-1,0xC7,0x86,-1,0x36,0x28,-1,0x3A,0x55,-1,0xB1,0x00,0x18,-1,0xB6,0x08,0x82,0x27,-1,0xF2,0x00,-1,0x26,0x01,-1,0xE0,0x0F,0x31,0x2B,0x0C,0x0E,0x08,0x4E,0xF1,0x37,0x07,0x10,0x03,0x0E,0x09,0x00,-1,0XE1,0x00,0x0E,0x14,0x03,0x11,0x07,0x31,0xC1,0x48,0x08,0x0F,0x0C,0x31,0x36,0x0F,-1,0x11,-2,120,-1,0x29,-1,0x2c,-3

/boot/cmdline.txt を変更

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=waveshare32b fbtft_device.gpios=dc:22,reset:27 fbtft_device.bgr=1 fbtft_device.speed=48000000 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=90

ここまでやって reboot すればTFT側に表示がでる、はず。

タッチパネルを有効にする

書いてある通りパッケージをいれる。

sudo apt-get -y install xinput evtest libts-bin
wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb

sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
sudo rm /usr/share/X11/xorg.conf.d/99-calibration.conf
sudo reboot


/boot/config.txt に追記。XPT2046ADS7846 (-> TSC2046) 互換の中華コントローラらしいので ADS7846 を指定したらいいっぽい?

dtoverlay=ads7846,speed=1000000,penirq=17,swapxy=1

/etc/X11/xinit/xinitrc に追加 (軸補正)

DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0

startx

dpi が恐しく低いので指定して起動したほうが良い。とはいえフォントサイズしか変化しないので、アイコンとかはデカいまま。

startx -- -dpi 60

タッチパネルキャリブレーションは以下でできるが、結果を conf に書いておかないとreboot時に失われる。

DISPLAY=:0.0 xinput_calibrator

備考

タッチパネル座標と画面座標をあわせるためには

  • /boot/cmdline.txt の fbtft_device.rotate=90
    • reboot 必要
  • /boot/config.txt の swapxy=1 (と rotate=...)
    • reboot 必要
  • "Evdev Axis Inversion" 1 0
    • X が起動していれば xinput -set-prop は即時反映されるので reboot いらない

あたりをしっかりする必要があるが、これが結構面倒で試行錯誤した。とはいえあんまりパターンがあるわけではないので適当にやれば良い。

links

ref. https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi
ref. https://github.com/notro/fbtft/issues/215
ref. http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
ref. http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/

  1. トップ
  2. tech
  3. Rasberry Pi で使える2000円ぐらいのTFT液晶モジュール

http://32bits.io/Arturo/ を使うといいっぽい。ino というコマンドがあったがメンテされてないので ano というフォークができたらしい。

使いかた

$ ano init

すると新規プロジェクトができる。

既存プロジェクトの場合、.ino ファイルは src ディレクトリ以下に入っている必要がある。

$ ano list-models
         yun: Arduino Yún
         uno: [DEFAULT] Arduino Uno
   diecimila: Arduino Duemilanove or Diecimila
        nano: Arduino Nano
        mega: Arduino Mega or Mega 2560
     megaADK: Arduino Mega ADK
    leonardo: Arduino Leonardo
       micro: Arduino Micro
     esplora: Arduino Esplora
        mini: Arduino Mini
    ethernet: Arduino Ethernet
         fio: Arduino Fio
          bt: Arduino BT
  LilyPadUSB: LilyPad Arduino USB
     lilypad: LilyPad Arduino
         pro: Arduino Pro or Pro Mini
    atmegang: Arduino NG or older
robotControl: Arduino Robot Control
  robotMotor: Arduino Robot Motor
       gemma: Arduino Gemma

で対応モデル名が出る。

nano 向けにビルドするにはオプションをつける。

$ ano build -m nano --cpu atmega328

アップロード(書きこみ)する場合は build を upload に変えて、-p でシリアルポートへのパスを指定する。ポート指定をつけないと勝手に推測して書きこもうとするが、意図せず違うデバイスに書きこむのを避けるためにも絶対に指定したほうが良い。

.ino とかやめたい場合

.ino はほぼ cpp だが include とかがないというなんか中途半端な状態のファイル型式になっている。

ano preproc src/sketch.ino をすると cpp の完全な形で吐いてくれるので、これを src/sketch.cpp として保存して .ino を消しさっても問題なくビルドできる。

ビルドプロセス

ちなみにおおまかなビルドプロセスは https://www.arduino.cc/en/Hacking/BuildProcess に書いてある

Arduino IDE はヘッダファイルなどのパスを解決しつつ .ino を .cpp に変換(ちょっと足すだけ)して avr-gcc している。

setup() と loop() の定義:
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h

HIGH とか LOW とか定数定義マクロもここに書いてある。
型のエイリアスもここで定義してある。

実際に実行している場所
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/main.cpp

よくある main ループ。

  1. トップ
  2. tech
  3. Arduino のスケッチをコマンドラインからビルドする

いっぱいUSBシリアルを繋いでいるとどれがどれだかわからなくなる。

一旦ケーブルをはずして以下のワンライナーを実行する。

ruby -e 'print "Connect Arduino and type RET ";"/dev/tty*".tap{|x|proc{|a,_,b|puts b-a}[Dir[x],gets,Dir[x]]}'

Arduino を繋いで RET を押せば新規に接続されたやつが表示される

  1. トップ
  2. tech
  3. どのシリアルポートが手元の Arduino かわからんよ!

eBay 見つつ、電子部品を PayPal で決済しようとしたらカード会社側で決済を拒否というエラーがでた。

最近、中国からの商品を買いまくっていたので、誤検知かと思っていて、翌日電話しよう、と思った矢先、「【重要】楽天カードから緊急のご連絡」というメールを受信し、それには至急電話しろと書いてあったので、とりあえず電話してみた。

電話はなかなか繋がらなかった。

で、話を聞くと、どうやら本当に不正利用の形跡があったらしく、身に覚えのないカナダとアメリカのサイトで(いずれもエラーだったようだが) 与信のリクエストが飛んでいたらしい。つまり PayPal とか中国とかは関係なく、誤検知ではなかった。

ということでカード再発行になってしまった。1週間から10日ぐらいかかりますとのことだが、電気・水道・ケータイ・VPSなどインフラ支払いをこのカードでやっていたので大変大変面倒くさい。

よかったところ

  • 当日18時、19時の不正利用に対し少なくとも23時ぐらいには既にカード停止になったところ
  • 23時50分ぐらいに前述のメールがきたところ (こちらから電話しないとかかってくるらしい)
  • 途中、電話代がかかるので向こうからコールバックするとう申し出があったところ
  • 話がスムーズだったところ

わるかったところ

  • そもそも不正利用されたことが大変遺憾。
  • それなりに気をつけてるつもりだったので、心あたりは全くない。

思うところ

不正利用モニタリングの精度が高くてすごいな、と思った。ちょいちょい海外通販してるけど、特に不正利用検知とかされたことがなくて、モニタリングしていないんじゃないかと思っていたが、しっかりされてたみたい。

直近2日ぐらいの利用履歴を口頭で確認させられるので、細かいの買いまくってると面倒くさい。たまたま PayPal の決済履歴画面を開いていたのである程度スムーズだった。あと、直近でDMMで動画買ってなくてよかった。

新しいカード届いた

  1. トップ
  2. tech
  3. クレジットカード(楽天カード)の不正利用の話

なぜセンス抵抗というものが必要なのだろうと疑問に思った。低抵抗で高精度なものは一般的な抵抗に比べると10倍から100倍ぐらいの価格になる。

一方でセンス抵抗を使うときに頻発するのが、パターンの配置に気をつけないとパターン自体の抵抗が影響するというやつで、そんなにパターンに抵抗があるならパターン自体で電流センスしたらいいのではないかと思っていた。

パターンの抵抗はどれぐらいか

電流センス抵抗(シャント抵抗)は普通10mΩとか、あるいはもっと低抵抗値のものが使われる。

銅箔パターンの抵抗値は配線のアスペクト比で決まる (ref. http://www.tij.co.jp/lsds/ti_ja/analog/powermanagement/hints/power_sel_hint52.page )

20°C のときの銅の電気抵抗率 1.68e-8、1oz (35μm) の銅箔パターンの場合、1:1 の比の場合

1:10 の比の場合は 0.48 * 10 で約5mΩの抵抗値を持つことになる。基板上のパターンで電流センス程度の値の任意の抵抗値を作るのは割と簡単そうである。

銅の温度特性

しかし銅を抵抗として使おうとすると温度特性が問題になる。銅の温度特性は 4.3e-3/°C で、温度が高くなるほど抵抗値が上がる。

これはかなり大きい変動で、±10%の範囲に納めるには温度変化が±23°Cに収まる必要がある。もし±1%程度の精度を求めるなら±2.3°Cという極めて安定した温度でなければいけない。

抵抗のデータシートに書いてある温度係数単位 ppm/℃になおすと、4300ppm/℃ となり、一般的な(高精度ではない)抵抗の±300ppm/℃と比べてもケタ違いに大きい。

まとめ

ということで、これではとても高精度な電流センスはできそうにないので、代用できるケースはとても限られそうということがわかった。

  1. トップ
  2. tech
  3. 銅箔パターンで電流センス抵抗を代用できるか?


LTC3780を使った同期整流式DC/DCコンバータモジュールが気になったので買ってみた。ヒートシンクの下に FET が4つ隠れている。

スペック的には

  • 入力は 5〜32V
  • 出力は 2〜24V
  • 出力電流は最大14A
  • スイッチング周波数は200kHz
  • 4.5V 以下で出力停止

昇圧も降圧もできるので、一旦出力電圧を設定すると入力電圧範囲なら何も考えずその電圧がでる。

例によって 5V -> 12V の変換効率を調べてみた。

  • 2.5W -> 2.24W 89.6%
  • 5W -> 4.73W 94.6%
  • 10W -> 9.68W 96.8%
  • 15W -> 14.5W 96.6%
  • 20W -> 19.1W 95.5%
  • 25W -> 23.9W 95.6%
  • 30W -> 28.2W 94.0%
  • 35W -> 32.3W 92.3%
  • 40W -> 36.6W 91.5%
  • 45W -> 40W 88.8%
  • 50W -> 43.8W 87.6%

XL6009, LTC1871 と比べると10ポイントぐらい効率がいい。効率がいいのでそこそこ通電しても基板が全然熱くならない。

ただし2000円ぐらいする。LTC3780 がそもそも高価なのでこんなものだろう。この構成で自力で基板を起こしたらもっとかなり高額になってしまう。コストパフォーマンス的には XL6009 や LTC1871 は相当良いと思う。とはいえ高効率は何にも替えられない価値なので難しいところ。


正直そんなに変わらないんじゃないかと疑って計ってみたけど思いのほか差が大きかった。

  1. トップ
  2. tech
  3. LTC3780 同期整流ステップアップ/ダウン DC/DCコンバータ

中華互換 Arduino Nano を ebay で買ってみた 700円ぐらい。

Arduino 互換という意味ではもっと安いのもあるが、安いものは USB シリアル変換モジュールが中華チップなのでドライバのインストールとか挙動に不安がある。FTDI チップ搭載だとこれぐらいが最安っぽい。FTDI チップは偽物もあるらしく、ドライバ側で弾かれたりするみたいだが、今回買ったのは大丈夫だった。

USB Serial を別途用意するならもっとアホみたいに安いのがある (水晶やら何やらついててもAVR 単独で買うのと同じぐらい)。



今回買ったのはちゃんとブートローダーが書きこみ済みのもので、シリアルポート経由で書きこみができる。ただ、手元に Arduino IDE がないため、avrdude を直で読んで書きこんでみる。

最初適当にこんな感じにしてみたが失敗した。

$ avrdude -pm328p -cstk500v1 -P /dev/tty.usbserial-AL011AVX
avrdude: stk500_recv(): programmer is not responding

ボーレートがあってないとこうなる可能性がある。-b オプションをかえてみる。

$ avrdude -pm328p -cstk500v1 -P /dev/tty.usbserial-AL011AVX -b b57600
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x1e950f

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

とかなればOK (この例では書きこみまでやってない)


LED が4つ載っていて、TX RX PWR L となっている。最後の L ってなんだ?と思って回路図を見てみたが、単に PB5 に繋がっている LED らしい。デフォルトだとLチカが書きこまれているようでチカチカする。

 -

3.0 / 5.0

Arduino IDE でも Arduino Nano を指定して書きこむことができた。

最初なぜか Uno と勘違いして設定していて失敗しまくって、なんでだろう?ってなっていた。結局 Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt を見て調べてる途中で気付いた。

  1. トップ
  2. tech
  3. FTDI チップの Arduino Nano コンパチボード 700円

Eagle で似たような回路及びボードレイアウトをコピーして配線する。

パネライズ(同じ基板を大きな基板に複数つくる) ではなく、似たような回路・ボードレイアウトを1つ作って、コピーを行なってからさらに配線を続けたい、という場合。

問題点

ボードレイアウトは、回路図を開いている状態だと、コンシステンシー維持のため、そのままではコピーができない。一方、回路図側側でコピーを行うと、部品の配置をイチからやりなおすハメになる。

解決方法

そのため、一旦回路図エディタを閉じ、回路図とのフィードバック維持を切る。

この状態だとボードレイアウトを全て選択してコピーして他の場所にペーストということができる。

これが終わったら、一旦ボードレイアウトを閉じて(閉じなくてもいいけど)、回路図エディタを開き、コピーした部分を選択して回路図側でもペーストする。

そしてボードレイアウトを再び開くが、普通はこの時点で「コンシステンシーが失われた」と怒られるので、ERC を行い、問題を特定する。

完全に回路図とボードで同じコピーを行なっていれば「different connections on pin and pad eagle」というエラーが支配的になるはず。

このエラーは、ボード側のコピー時に、本来共通であるはずの GND などの面がリネームされて GND1 などになることで発生する。なので、GND1 となっている部分を GND にリネームすれば良い。

簡単なものはこれで ERC をかけなおすとコンシステンシーが回復し、普通にフォワードバック編集可能に戻る。他にも「本来共通なのに別の名前になっている」というものは全てリネームする。

  1. トップ
  2. tech
  3. Eagle で似たような回路及びボードレイアウトをコピーして配線する。

ebay で売ってる「40M CW Transmitter Receiver 7.023-7.026MHz QRP Pixie KITS」というのを1つ買ってみた。送料無料600円ぐらい。おそらく世界最安のトランシーバーだろう。

RX

フィルタが一切ないので、ものすごく広い範囲がきこえてくる。高音が特にうるさいので、実用上は数次のオーディオフィルタが必要そう。

安定化電源で動かしてもハム音が盛大にでる。電池なら大丈夫なのかな?

水晶1つのダイレクトコンバージョンなのでイメージ混信があり、どっちのサイドバンドが聞こえているかは聞いているだけでは全くわからない。これはオーディオフィルタを入れても解決しないので、どうしようもない。(やるなら周波数変換前にフィルタするしかない)

ボード上の半固定抵抗はRITのようだ。RIT というか局発が変わるわけではないので、トーンの設定という趣なんだろう。

TX

水晶は 7.023MHz だが、7.026MHz ぐらいで出ていた。

12V で 50Ω負荷 6Vrms なので 720mW ぐらい。9V で4.2Vrms なので 353mW ぐらい。まさにQRPって感じ。

連続で送信してるとファイナルのトランジスタはかなり発熱する…… デューティー比高く送信するのには不安がある。

ファイナルは S8050D (SS8050 のコピー) っぽい。

なお、サイドトーンはない。実用するならエレキーも外部に必要だと思うので、そっちで鳴らしたら良いかな。

その他

使用ICはLM386の低周波増幅 (200倍、46dB) のみ。ミキサーICは使っておらず、ファイナルトランジスタが受信時のミキサを兼ねているっぽい。

まとめ

とりあえず面白いかと思って作ってみたが、免許うけるのも面倒なので、また思い出したらいじる。

まだいくつか ebay に出品されている QRP トランシーバーがあるので、試してみたい。ないしは簡単なものを自分で作ってみたくなる。

  1. トップ
  2. tech
  3. 中華 40M CW TRX 7.023-7.026MHz QRP Pixie

5V モバイルバッテリーの並列接続をしたい。

普通に生きていると、5V 2A の出力を複数(4つ)合成して、5V 8A をとりだし、12V に昇圧したくなることがあると思う。

DC/DC コンバータの並列接続

モバイルバッテリーの出力は DC/DC コンバータになっている (殆どは昇圧、たまに降圧のコンバータ) 。OCP (Over Current Protection 過電流保護)なども当然装備されているが、普通はスペックシートにはどういう挙動をするかは書いていない。ということで、基本的にスペックシートが保証していること(出力電圧、電流)だけに依存して、並列接続の回路をつくりたい。

DC/DC 電源を並列接続するには、電流制限回路とダイオードが必要になる。

電源間で逆電圧がかかったりしないように、まずダイオードが必要。これにより、電流が少ない場合は、電源の中で一番電圧が高い電源から全ての電流が供給される。

ダイオードだけだと、電流量を増やしたとき、モバイルバッテリー側のOCPにひっかかり、挙動が不安定になるため、電源制限回路で最大電流を2Aまでに制限し、2A以上とろうとしたら電圧降下させることで、他のバッテリーから電流が流れるようにする。

回路

ということで、電流制限しつつダイオードをつけたくていろいろ調べた結果、LTC4415 というICがあり、まさにこの用途に使えそうだと思った。LTC4415 は電流制限つき2回路理想ダイオード。

実装

LTC4415 は 16PIN MSOP + GND PAD となっており、手はんだするのが非常に難しかった。MSOPはともかく、グラウンドパッドはとてもつらい。

どうしようもないんだけど、一応以下のようにやると比較的再現性よくはんだがつけられた。

  • 基板側の GND パッドにちょうどいい量のはんだを盛る
  • IC を基板において位置をあわせ、1pin か 2pin ぐらいはんだ付けして仮り固定する
  • 基板を裏返し、慎重に抑えつけつつ、ICのすぐ裏にはんだごてをあてる
  • GNDパッドのはんだが溶けたらこてを離す (勘)

しかし、こんなことするよりホットプレートとシリンジクリームはんだで手動リフローしたほうが結果はいいと思う。

結果

思ったよりも大きい電流をとろうとしたときの電圧降下が大きく、6A ぐらいで 4.5V 付近まで下がってしまうことがわかった。こうなると後段にいれる 5V -> 12V の DC/DC コンバータの入力電圧を下回ってしまい、出力そのものがでなくなる。

電流制限による電圧降下による合成は、最も低い電圧の電源電圧によって最大電圧が制限されるため、1台でも弱い電源があって電圧降下すると、出力電圧に直接響いてくる(電流制限回路での電圧降下は全て損失になり発熱もする)。

これは電源そのものの弱さ (内部抵抗の高さ) だけではなく、コネクタの接触抵抗とか、ケーブルの善し悪し全てを含んで最悪の場合の電圧が出力されることになるので、たくさん合成するのは結構厳しい。印象としては近しい電圧の2つまでならこの方法でいけるかな程度。

結局、これでうまくいくなら簡単でいいなと思っていたが、12V 2A ぐらいまではギリギリとれる程度で、あんまり満足いく結果ではない。

ほかの方法も検討したい。

上記以外の検討事項だったもの

モバイルバッテリーは 50mA 以下の電流が続くと「充電終了」と判断して出力が落ちたりするため、基本的には常時 50mA 程度流す設計が必要になる。

この例のようにダイオードORの場合、電圧が低いバッテリーからは殆ど電流が流れてこないため、時間が経過するとパワーオフになって、必要なときに電流がとれなくなると思われる。

いろいろ解決方法はあると思うのでとりあえず無視していた。

  1. トップ
  2. tech
  3. モバイルバッテリーのロードバランサ