ジャンパーワイヤのコネクタを作りたい

ジャンパーコネクタ

っていうのかどうかわからんけど、作り方見ると結構簡単に作れるみたい。ほしいピン数のコネクタが無かったので自分で作ってみる。圧着ペンチ持ってないけどはんだ付けでいけるみたいよ。

お買い物

http://akizukidenshi.com/catalog/g/gP-10672/

http://akizukidenshi.com/catalog/g/gC-12150/

http://akizukidenshi.com/catalog/g/gC-12157/

http://akizukidenshi.com/catalog/g/gC-12160/

コネクタはなんか2種類あったんだけど、どっちも同じに見えたんではんだ付けで大丈夫よって書いてある方買った。

作り方

コネクタをもぎもぎして、右の図みたいに線を置いてはんだ付けすりゃ良さげ。

写真うまく撮れないや。ワイヤの被覆を剥がす時に、ほんとはワイヤーストリッパっていう工具を使うらしいんだけど、持ってないし、なんか高いしでかい工具なので買うのやだなと思ってニッパーでちょっとずつ切れ目入れて剥いた。なんとかなるもんだな。下の爪に被覆部、上の爪に剥いたとこが来るようにする。上の爪に被覆が掛かんないようにしたほうがいいみたい。

ハンダを流し込む。写真すげー分かりづらいけど、ちょこっとだけピョロっと流せばいい感じにくっついた。軽くひっぱてみても取れないし大丈夫だろ。

そのままハウジングに突っ込もうとしたら入りませんでしたの図。

 

こんな感じでラジオペンチでぐるってした。上の爪はカシメなくても入った。ほんとはちゃんと噛ます方が良いのかも。で、ハウジングの開口部と向きを合わせて入れてあげるのを8本文繰り返せばー

できたー。

カテゴリー: したい | タグ: | コメントする

初めてアップルマップApple Mapの車に出会った

Google StreetViewには会ったこと無いのにね。

カメラの下の3つの筒状のものがグルングルン回ってた。

なんだろうねこれ。写真では止まって見えるけど、結構な速さでグルングルンしてた。姿勢制御とかなのかな。

カテゴリー: のーと | コメントする

pigpio.error: ‘no handle available’ってエラーが出た

なんでだ

前回できたーと思い、意気揚々と豆苗買ってきて育ててたら、いつの間にか写真が保存されなくなってた。

やってみたこと

cronで自動実行してるので、なんのエラーか分からない。コマンドライン上で実行してみたら、出るかなーと思ってやってみたら出てくれた。

Traceback (most recent call last):
  File "/home/pi/nas/shutter.py", line 10, in <module>
    h = pi.spi_open(0, 50000, 0)
  File "/usr/lib/python2.7/dist-packages/pigpio.py", line 3787, in spi_open
    self.sl, _PI_CMD_SPIO, spi_channel, baud, 4, extents))
  File "/usr/lib/python2.7/dist-packages/pigpio.py", line 970, in _u2i
    raise error(error_text(v))
pigpio.error: 'no handle available'

SPI通信を開くところでエラーが出てるみたい。pigpio.error: ‘no handle available’でググるとラズパイのフォーラムが出てくる。

https://www.raspberrypi.org/forums/viewtopic.php?t=88545

そこのpigpioの作者さんっぽいjoanさんによると

No handle available means that all 32 handles are in use. Assuming you aren’t using 32 devices it means you have opened an I2C device without closing it at the end of the script.

使用可能なハンドルがないということは、32個のハンドルがすべて使用中であることを意味します。 32個のデバイスを使用していない場合、スクリプトの最後でI2Cデバイスを閉じずに開いたことを意味します。(機械翻訳)

使ったあとに閉じろや、ということらしいんだけど、pi.spi_close(h)で閉じてるよね…?フォーラムではコマンドライン上で

for ((i=0; i<32; i++)); do pigs spic $i; done

ってやればハンドラが閉じれるよとアドバイスがあったが、そもそもなんでハンドラが開いたままになってしまうんだろうか。

画像は80枚ほど保存されていた。途中までは保存できてたのになぜ突然?と疑問に思って画像を調べてみると、夜中撮ってるものは大丈夫で、日中撮ったものがダメなようだった。おそらくコードに問題がありそう。でも見てもよく分かんない。ということで以前やったようにcronを

0-59/1 * * * * python /home/pi/nas/shutter.py >> /tmp/shutter.log 2>&1

て感じでログを出力するようにする。再起動して画像とかも削除してまっさらな状態で待つ。で、ログを見てみると

Traceback (most recent call last):
  File "/home/pi/nas/shutter.py", line 50, in <module>
    if islighted:
NameError: name 'islighted' is not defined

と出力されていた。islightedが定義されてない?あっ!

if bi < 1700:
    pi.set_mode(17, pg.OUTPUT)
    pi.write(17, pg.HIGH)
    islighted = True
    sleep(0.5)

あ、そういえば閾値を1700に変えた。ここの部分で、if内でしか宣言?代入?してないので、明るいときにはislightedに値が代入されず

if islighted:
    pi.write(17, pg.LOW)

ここで使う時に空のままで使おうとしてるからエラーになるんだ!で、ここで処理が止まっちゃうからspi_closeができずにハンドラが残っちゃうと。てことは明るさ取得する前に

islighted = False

if bi < 1700:
    pi.set_mode(17, pg.OUTPUT)
#略

て初期化してあげればいいね。解決した。

その他

  • ハンドラの型はlong
    • 修正前はこの値が増えていって、31より大きくなるとno handleエラーになってた。
  • pigpiodの再起動でもいけるのかも。
    • 検証しようと.sh作ったら権限設定ミスで起動してなかった。ハンドルが溜まってる状態で更に開こうとすると、無いよーってなるはずなのでデーモンを再起動して開放してあげればいいんじゃないだろか。ただ根本解決じゃないのでやっぱり上記のでいいと思う。
  • ログはちゃんと取る。
  • IDEほしい。
  • ぐぬぬ
カテゴリー: のーと | タグ: , , | コメントする

Rasberry Pi Zero WHで照明付き定点カメラを仕上げる

作ってきたやつをまとめる

今まで処理ごとに作ってきたやつを一つにまとめて、完成させようと思う。処理の流れとしては

  1. 10分ごとに処理を行う。
  2. 時間がきたら明るさを取得する。
  3. 明るさをもとにライトを点けるか判断する。
  4. 暗かったらライトを点ける。
  5. 撮影をする。
  6. 撮影した画像に時間と明るさを表示する。
  7. 毎日18:03に微速度動画を作成する。

こんな感じ。その前に明るさ測定をちょっといじる。

ADCにパスコンを使ってみる

ADCの入力にバイパスコンデンサを使うと数値が安定するらしい。データシートに書いてあったので、1μFのコンデンサを買ってきた。それをICの入力前に入れる。0.1秒毎に1000回数値を取得してみて、違いがあるか確認してみた。

上がパスコン無し、下があり。どうですか。表にしてみよ。

パスコンあり パスコンなし
平均 3079.985 3309.093
中央 3082 3311
最大 3174 3372
最小 2980 3238
標準偏差 48.34716926 43.57428543

どうですか。パスコンありの方がバラついてんじゃねぇか。意味なさそうだな。やめよ。

CdSセルのもう一方の抵抗の値

ICのCHへかける電圧は分圧回路を使っているので電圧の変化は曲線な感じになる。暗い時に数字が0になって、薄暗いあたりの数字が細かくなる抵抗の値ってどうやって求めんだろーなーと調べたけどよく分かんなかったので力技でいくことにした。CdSセルの抵抗の値は1kΩから100kΩぐらいに変わるとして、R1にCdS、R2に固定値の抵抗を入れるとする。

こんな感じで、R2の抵抗値が大きくなるほどカーブが緩やかになってくみたい。25kΩ使いたかったけど22kΩしか持ってないし、合成するスペースもあんまないので22kΩにすることにした。一度一日中回してみて、数値の変化を追いかけてみっと大体MPCから吐き出される数値が1000ぐらいのときが閾値っぽい。うーん適当な。

プログラミング

そろそろ気が済んだのでプログラミングする。作ったやつのコピペだ。今回はコメント形式で意図を残しとこっと。

#必要なもんimport
import picamera
import datetime
from time import sleep
import os
from PIL import Image, ImageFont, ImageDraw
import pigpio as pg

pi = pg.pi() #GPIO使う準備

h = pi.spi_open(0, 50000, 0) #SPI通信のハンドラ

#準備できてなかったら終了
if not pi.connected:
    exit(0)

#ADCからバイナリを取得、
(count, rx_data) = pi.spi_xfer(h, [0b00000110, 0, 0])
bi = rx_data[1] << 8 | rx_data[2]

#暗かったらライト点ける
if bi < 1000:
    pi.set_mode(17, pg.OUTPUT)
    pi.write(17, pg.HIGH)
    islighted = True #ライトが点いてるかのbool値にTrue

#カメラの画像保存準備
dir_path = '/home/pi/nas/pic/' #保存場所
files = os.listdir(dir_path) #保存場所内のファイル数を取得し…
file_name = str(len(files)).zfill(5) #5桁で0フィルしてファイル名で使う

#撮影
with picamera.PiCamera() as camera:
    sleep(5) #ウォームアップ
    camera.hflip = True #画像回転
    camera.vflip = True #これも
    camera.capture(dir_path+file_name+'.jpg') #フルパスとファイル名を指定して保存

#写真に追加描画する準備
now = datetime.datetime.now() #日付時刻取得
text = now.strftime('%Y-%m-%d %H:%M') #フォーマットして文字列に変換
illumi = str(bi) #明るさの数値を文字列型にしとく ※いらないかも

#画像編集
img = Image.open(dir_path+file_name+'.jpg') #撮影した写真開く
draw = ImageDraw.Draw(img) #描画のなんか
font = ImageFont.truetype('/home/pi/nas/DSEG7Classic-Bold.ttf', 15) #フォント指定
draw.text((6, 6), text, font=font, fill=(0,0,0)) #影づくり
draw.text((5, 5), text, font=font, fill=(255,255,255))
draw.text((6, 25), illumi, font=font, fill=(255,255,255)) #めんどいので明るさの方は影作ってない
img.save(dir_path+file_name+'.jpg') #上書き保存

#ライト点いてたら消す
if islighted:
    pi.write(17, pg.LOW)

pi.spi_close(h) #SPI通信の後処理
pi.stop() #GPIOの後処理

…我ながら汚いコードだ。でもとりあえず形になった!嬉しいね。


追記:上記コードはエラーになる。続き

カテゴリー: できた | タグ: , , , , | コメントする

秋月の白色LEDサークルキットを定点カメラの照明に使いたい

白色LEDサークルキット

さすがにLED1個だと光量が足りないので、がっつりライトとして使えそうなキットを使って光量を確保できるようにしたい。

キットを作成する

http://akizukidenshi.com/catalog/g/gK-08887/

これね。

これを

こう。はんだ付け中学の技術の授業以来だな。中央の赤色LEDをはんだ付けする時、ショートさせるのを忘れてしまい、足を無理やり曲げたらアノード側のプリントがメキッていって少々剥がれた。電源は電池ボックスのリードを付けるよう指定されてたけど、それをオス-オスのジャンパに変えてる。電池ボックスの方もリードにニッパで切ったLEDの足をはんだ付けして、絶縁テープで巻いてブレッドボードに刺せるようにした。

ぴっかー。めっちゃ明るくてちゃんと撮れないので変な感じに加工してる。光の直進性が強くて目が死ぬな。拡散カバー買ってこよっかな。電池ボックスにスイッチついてなくて、誤ってショートさせちゃったらパチパチいってて怖かった。4.5V・100mAぐらいみたいで、外部電源使うの初めてだし、扱うのちょっと怖い。電気を扱うのって怖い、もし知識不足で知らんうちに変な回路組んでたら、爆発しちゃったり火事になったりしそうだなって思う。ちゃんとやりたいけど、ちゃんとっていうのがなんなのか分かってない感じかな。おそらく異変に気づけないよなぁ、防火敷物とか用意しようかな。

トランジスタをスイッチとして使う

この前は増幅回路として使ったけど、スイッチにも使えるみたいなので、その機能を利用してみたい。ベースに電気流しゃコレクタ-エミッタに電気流れんだから楽勝だーなどと高を括りつつ

こんな回路を作った。3.3VはGPIOから、4.5Vは単三電池3本で、元からキットに抵抗入ってるしそっちには抵抗入れてない。Lチカの時に使ったプログラムを流用してみたら、点きませんでした。うん。点きませんでした。なんでだろ…

回路を設計する

これはアカンということで、もっとちゃんとやってみようと、こちらの”スイッチング回路を設計する”の通りにやってみる。

まずこんな感じで繋げばいいみたい。今のところ分ってるのがGPIOの3.3Vと単三乾電池3本の4.5V、LEDサークルライトの100mA(テスタで測った)。そしたらトランジスタのhFEも調べる。

トランジスタがオンになったらコレクタ-エミッタ間に100mA流れてほしい。この時ベースに流れてほしい電流を求める式が(Ic / hFE) * 3とのことで、0.1 / 295 * 3 = 約1mAになる。

グラウンド描くの忘れてたから描いた。で、トランジスタがオンになる電圧が0.7V、R2は真似して1kΩにしてみた。

そしたらR2には0.7Vで1kΩなので0.7mA流れる。したら、R1には、ベース電流の1mAと0.7mAが流れるので1.7mAの電流が流れる。電圧は、GPIOの3.3V – ベースにかかる0.7Vで2.6Vになる。

R1の抵抗は2.6V / 0.0017A = 1529ぐらいってことになる。

できたから、ブレッドボードに配線してみたら…点かない。なーんーでー。ちょこっと調べてみると2SC1815トランジスタは100mAぐらい流れるとhFEが急激に低下するみたい(データシートのhFE-Icを見るらしい)。

いろんなトランジスタを試す

じゃあトランジスタが悪いのかと思って、買ってきたのがですね、2SC21202SC23832SK40172N7000の4種類。ここらへんから適当になってきて点けばいーしどれか当たんだろぐらいの気持ちで買ってきた。

2SC2120、2SC2383はあかんかった。で、MOS FETっていうのを使ってみた。抵抗どう繋げりゃ分かんないので上図みたいな回路にした。でも点かない…。LEDの場所が悪いのかと

こっちにしてみたけど点かない。で、あーあ、またか…。と変えようとしたら、MOS FETの金属板に触るとLEDがつくことを発見した。もしかしてブレッドボードの配線が間違ってるのか?と一辺全部引っこ抜いて繋ぎ直してみると

つ、点いた…。2SC1815に替えてみても点いた。今まで云々してたのはなんだったんだ。Lチカのプログラム流用してみても

点いた。がっくし。じゃないや、まぁいいや。繋ぎ替える前の写真撮っておいて、なにが違ってたか確認したかったな。これで光量も確保できたことだし、まとめていこう。

参考

http://www.op316.com/tubes/tips/image/2sc1815.pdf

https://www.hakodate-ct.ac.jp/~moriya/class/2Ssensing/text/006_01transistor.pdf

https://sagara-works.jp/research-and-development/electronics/transistor-basic/transistor-switch/

http://doku.bimyo.jp/bipoler/

https://vintagechips.wordpress.com/2013/09/28/1345/

http://www.feijoa.jp/laboratory/raspberrypi/transistor/

http://www.op316.com/tubes/tips/semicon08.htm

http://www.homu.net/raspberry-pi%E3%81%A7iot%E3%81%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%EF%BC%9A3-3v%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E3%81%A7%E7%9B%B4%E6%8E%A5%E9%A7%86%E5%8B%95%E3%81%A7%E3%81%8D/

https://www.marutsu.co.jp/pc/static/large_order/fet_3

http://uchan.hateblo.jp/entry/2016/12/04/135941

カテゴリー: したい | タグ: , , | コメントする

暗い時にLEDが光るようにしたい

光センサー

光センサースイッチキットを買ったはいいものの、説明書見ても使い方がぜんぜんわからない。なので諦めて一から方法を検討してみる。どんな方法があるのかなーと調べてみたところ

  • フォトレジスタを使う
  • フォトトランジスタを使う
  • ↑+ADコンバータ使う
  • 照度センサ使う

みたいな方法があるそうで、光センサースイッチキットで使われてた、フォトレジスタを使う方法でいってみたい。

フォトレジスタ、CdSセルを使ってみる

つーことでGL5528を買ってきた。テスターで抵抗値を測ってみると、日中の室内で4kΩ、手をかざすと15kΩ、指で隠すと100kΩぐらいだった。ちなみに光センサースイッチキットに入ってるCdSセル(多分これ)を同じように測ってみると、日中の室内で20kΩ、手をかざすと50kΩ、指で隠すと160kΩぐらいだった。えらいばらつきあんな…。

で、このままLチカした時の回路の抵抗の代わりにフォトレジスタ使ったとしても、暗い時に暗くなって、明るい時に明るくなるだけで。じゃあどうするかというと、分圧回路というのにするみたい。

Wikipediaより

こんな。で、R2の方にフォトレジスタを付けてあげればいいみたい。えっと、Vinは3.3V、R2は明るい時4kΩ、暗い時100kΩで、Voutは明るい時はLED点かないぐらいの電圧、暗い時は点くぐらいの電圧になってほしい。点くぐらいの電圧っていうのはつまり順方向電圧なので、Lピカした時の2.6Vになってくれればいいかな。ほいでR1の抵抗値を求める。

Vout = R2 / (R1 + R2) * Vin

なので、2.6 = (100000 / (x + 100000)) * 3.3を解く。Wolframalphaさんに頼むとR1≒27kΩとなった。ほんとかしら、参考サイトだと数kΩだったぞ。ついでにR1に27kΩ使った時、明るい時のVoutはどんななんだろと思いx = ( 4000 / (27000 + 4000)) * 3.3を計算してもらうと約0.43Vなので点かなそう、計算上はいい感じです。実際やってみてどうなるだろうか。

都合よく27kΩの抵抗があったので、それを挿して回路図通りになるようにし、フォトレジスタを指で隠してみると…、点かない。うーん。フォトレジスタの抵抗値が安定してないような感じ。最初測った時は100kΩだったけど、今測ると80kとかになる。うーん。とりあえず暗い時を80kとして計算し直すとR1は約22kΩなのでこれまた都合良くあった抵抗を挿し替えると

点いた!この時の電圧をテスターで測ってみると、LEDが2.39V、R1(22kΩ)が0.885V、R2(フォトレジスタ)が2.4Vだった。LEDとR2は並列なので電圧は一緒のはず、R1は電源電圧 – LED&R2の電圧のはずなので、大体合ってる。ここから、R1に流れる電流を求めると、0.885 / 22k = 約0.04mAの電流が流れてる。んで…あれ?LEDとR2のそれぞれに流れてる電流ってどうやって求めんの?えーと、フォトレジスタの抵抗値を80kΩと仮定してあげると、2.4 / 80k =  0.03mAでキルヒホッフの法則から0.04 – 0.03 = 0.01mAがLEDに流れてる…の?そんなんありえるんだろうか。計算間違ってないかな。うーん、まぁ点いちゃってるんだからしょうがないよな。

フォトレジスタ+トランジスタで明るくする

LEDを明るくするには、流れ込む電流を多くしなくちゃいけないわけで、そういう時に使うのがトランジスタということみたい。ということで2SC1815買ってきた、20個もいんないんだけどな。トランジスタは3本足で、コレクタ・エミッタ・ベースと分かれてる。通常、コレクタ-エミッタ間は電気が流れてなくて、ベースに電気を流すと増幅された電気がコレクタ-エミッタ間に流れるみたい、買ったやつはNPN型だから。そん時に流れる電流の値がどんくらいになるかっていうのをhFE(直流電流増幅率)で表すそうな。hFE = Ic / Ibね、エミッタ接地の場合。買ったやつをテスタで測ってみたらhFE=284だった。ものすごい単純に考えたら0.04mA * 284 = 11.36mAになるってこと?こえーな、大丈夫かな。とりあえず、あまり考えず抵抗とか変えずに参考サイトの回路図の通りに繋いでみると

点くは点くんだけど、スマホのLEDライトが当たってるぐらいじゃないと明るいと判定されない。室内灯の明るさの元では暗いと判定されて光ってしまう。なんでだろ。今繋いだ回路図が

こんな。うーん、室内灯下でフォトレジスタの抵抗を測ってみたら10kΩほどだった。この時Voutはいくらか計算すると1.03V。あ、なるほど、トランジスタがONになっちゃってるんだ。トランジスタがONになるベース-エミッタ間の電圧は約0.7Vらしい、根拠解説してるとこ見つかんなかった。嘘です、あったけどよく分かんなかった(1, 2, 3)。なので、明るい時にVoutが0.7より小さくならないと駄目ってことみたい。とりあえず0.6を狙って計算してみるとR1が45kΩと出た。持ってる内で45kになる組み合わせないかなーと探すと18kΩと27kΩを直列にすれば良さげ。と思ってやってみたところ、

惜しい!光は弱まったけど、光っちゃった。ていうか0.6Vとかじゃなくてもっとガッツリ減らしたほうがいいみたい。なので0.3V狙いで計算すると100kΩとな。100kΩならあるぞ、やってみよう。

で、できたー。室内灯下でもLEDは点かず、カバーを被せて暗くしたら点くようになった。あとはこれをGPIOに繋げば、カメラで撮影する時にHIGHにするだけで、回路上で明るさを判定して暗い時はLEDを点けてくれるはず。

ADコンバータを使ってみる

これまでの回路だと、明暗の閾値が分からないよね。薄暗い時にぼんやりと光る、みたいなことになりそう。で、閾値をいい感じに指定したいって場合に便利なのがADコンバータみたい。フォトレジスタの抵抗値をデジタルに変換してくれるので、数値での指定が可能になるってことみたい。てことでADコンバータのMCP3208を買った。これを解説してるサイトとかデータシートとかを見たのだけど、分かってる人がちょっと分かってる人に言ってる感じで、全然分かってない人にはちんぷんかんぷんな感じ。つまり俺にはちんぷんかんぷんです、ゲロ吐いて鼻血が出そう。そもそも使われてる単語がわからん、なんで3,4文字の略称ばっかなんだ。

用語を調べる

分かってる風に書いてるけどほぼ分かってない。

MCP3208

データシートより

PDIP ICチップの形状(パッケージ)の名前。Dual Inline Package。2側面からピンが出ててプラスチック。
SOIC ピンピッチが1.27mmのもの。Small Outline Integrated Circuit。
CH0~CH7 CHannel。アナログ値の入力で使う。0-7までの8本で別々の値が取得できる。
VDD 動作電圧。IC自体の電源電圧。Voltage Drain。
VREF 基準電圧。Voltage REFerence。ここに接続する電圧と、CH*に接続する電圧の比がデジタルの数値となるみたい。
AGND アナログ接地。Analog GrouND。
CLK クロック。CLocK。これ?
DOUT シリアルデータ出力。DはDataの略ですかね…
DIN シリアルデータ入力。
CS/SHDN Chip Select / SHutDowN。LOWで通信開始、HIGHで待機。
DGND デジタル接地。Degital GrouND。
12bit 2^12の分解能。基準電圧3.3Vの場合、3.3 / 4096 = 0.8mVごとの変化を読める。

Rasberry Pi GPIO

SPIで利用できるピンは2セットあるようで、物理ピン19,21,23(BCM10,09,11)と35,38,40(BCM19,20,21)を使う。あと物理ピン24,26(BCM8,7)でどっち使うか決める。物理ピン11,12もSPIに使えるみたいだけどよく分かってない。通常は物理ピン19,21,23,24を使えば良さげ。

SPI Serial Peripheral Interface。通信方式の一つ。
MOSI Master Out Slave In。ラズパイ→ICへデータを送る。ICのDINに繋ぐ。
MISO Master In Slave Out。IC→ラズパイへデータを送る。ICのDOUTに繋ぐ。
SCLK Serial CLocK。クロック…ICとラズパイの周期を合わせる感じで使われるみたいな。ICのCLKと繋ぐ。
CE0, CE1 Chip Enable。0と1で使いたいのを選ぶ。ICのCS/SHDNと繋ぐ。

その他

シングルエンド グラウンド(0V)を基準に信号の電圧レベルでLOWと HIGHが決まる信号。
差動 一つの信号当たり必ず2本の信号が使われる。二つの信号の電位差が信号レベルになる。例えば差がプラスであればHIGH、マイナスであればLOWのように認識する。
LSB 最下位ビット。Least Significant Bit。
MSB 最上位ビット。Most Significant Bit。
baud 変調速度単位。ボー。

配線

した。線がいっぱいで汚いなぁ。

SPI通信の手順

ラズパイ-ICはMaster-Slaveの関係にある、あ、SMだね。MasterのChipSelect(SlaveSelect)が複数あればICは複数繋げることができる。Masterが通信の制御を行う。

  1. CSは待機状態の場合HIGHになってる。
  2. 使用したいCSをLOWにすると通信が開始される。
  3. SCLKのL・Hを切り替えるタイミングでデータが1bitずつやり取りされる。
  4. Master→Slaveの場合MOSI、Slave→Masterの場合MISOが使われる。信号の順番は、例えば”10110010″ってデータの場合1→0→1→1→0→0→1→0の順でやり取りされる。
  5. やり取りが終わるとCSをHIGHにして待機状態に戻して終わり。

めちゃめちゃざっくりこんな感じみたい。

MCP3208とのデータのやり取り

頭の中がこんがらがってる。えーと、上記3のタイミングに合わせつつ、

  • Master→Slaveに開始ビット+制御ビットで計5bit送信する。開始ビットは1、制御ビットの構成は、シングルエンドor差動の選択で1bit、D2・D1・D0の3bitでCH0~CH7を選択する(下図)。
  • D0が送信し終わると、1.5クロックのアナログ入力サンプル時間が入りそこは不定ビットになる、その次のクロックからSlave→Masterにデータが13bit送信される。最初にnullの1bit、その次から12bit分がアナログ/デジタル変換したデータ。

ここまでのイメージ

クロック 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
MOSI(DIN) 開始 シ差 D2 D1 D0
MISO(DOUT) null B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

で、これを8ビットごとに区切らないとならないみたい。理由は知りません。今全部で19bitなので8の倍数で、16ビットだと溢れちゃうので24ビットにする。ケツ合わせにするようで、先頭を0フィルする。これも理由は知りません。扱いやすくなるからみたいな話らしい。すると

クロック 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
MOSI(DIN) 0 0 0 0 0 開始 シ差 D2 D1 D0 x x x x x x x x x x x x x x
MISO(DOUT) ? ? ? ? ? ? ? ? ? ? ? null B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

こうなる。xは0と1のどっちでもいい。?は不定。ほんとはクロックの下降部でデータを送るか上昇部でデータを送るかとか、クロックの基準はLowかHighかとか関係があるので、こういう表での書き方はあんまよくないみたい。まぁ、これを参考に、ラズパイのGPIOを操作するよう実装していく感じになる。俺にそこまでできるのだろうか。

データシートより

データシートより

データシートより

Rasberry Pi のSPIを有効化

$ sudo raspi-config

5 Interfacing Options→P4 SPI→Yes。

$ ls /dev/spi*

で、/dev/spidev0.0と/dev/spidev0.1が表示されればよい。

pigpioライブラリで実装

このライブラリ、web上の情報が他のライブラリに比べて少ない気がする…。見様見真似で書いてみる。できたpyファイルは$ sudo chmod で適切な権限付ける。

import pigpio
pi = pigpio.pi()
h = pi.spi_open(0, 50000, 0)

if not pi.connected:
   exit(0)

(count, rx_data) = pi.spi_xfer(h, [6, 0, 0])
print(count)
print(bin(rx_data[1]))
print(bin(rx_data[2]))

pi.spi_close(h)
pi.stop()

とりあえずこんな感じ。で実行。

3
0b0
0b0

0しか返ってこない…。なんでだー、見当がつかないな。エラーは起きてないのにな、チップがイカれてんのかな。なんだろうなんだろう、といろいろ試した結果

ICがブレッドボードにちゃんと刺さってませんでした。イカれてんのは俺のアタマでした。さぁ、ついでに

bi = rx_data[1] << 8 | rx_data[2]

print(bi)
print(bin(bi))

などと追記し、再度実行すると

3
0b1011
0b1001010
2890
0b101101001010

うひょーちゃんと出た!やったぜ!

4行目

spi_open(spi_channel, baud, spi_flags)でSPIの接続をする。

  • spi_channnel
    • 配線したCExに合わせて指定。0-2。
  • baud
    • 変換速度指定、単位bps。ここでは50kbps…なのかな。
  • spi_flags

spi_flags consists of the least significant 22 bits.

21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
b  b  b  b  b  b  R  T  n  n  n  n  W  A u2 u1 u0 p2 p1 p0  m  m

mm defines the SPI mode.

WARNING: modes 1 and 3 do not appear to work on the auxiliary SPI.

Mode POL PHA
0    0   0
1    0   1
2    1   0
3    1   1

px is 0 if CEx is active low (default) and 1 for active high.

ux is 0 if the CEx GPIO is reserved for SPI (default) and 1 otherwise.

A is 0 for the main SPI, 1 for the auxiliary SPI.

W is 0 if the device is not 3-wire, 1 if the device is 3-wire. Main SPI only.

nnnn defines the number of bytes (0-15) to write before switching the MOSI line to MISO to read data. This field is ignored if W is not set. Main SPI only.

T is 1 if the least significant bit is transmitted on MOSI first, the default (0) shifts the most significant bit out first. Auxiliary SPI only.

R is 1 if the least significant bit is received on MISO first, the default (0) receives the most significant bit first. Auxiliary SPI only.

bbbbbb defines the word size in bits (0-32). The default (0) sets 8 bits per word. Auxiliary SPI only.

The spi_readspi_write, and spi_xfer functions transfer data packed into 1, 2, or 4 bytes according to the word size in bits.

For bits 1-8 there will be one byte per character. For bits 9-16 there will be two bytes per character. For bits 17-32 there will be four bytes per character.

Multi-byte transfers are made in least significant byte first order.

E.g. to transfer 32 11-bit words data should contain 64 bytes.

E.g. to transfer the 14 bit value 0x1ABC send the bytes 0xBC followed by 0x1A.

The other bits in flags should be set to zero.

Example

# open SPI device on channel 1 in mode 3 at 50000 bits per second

h = pi.spi_open(1, 50000, 3)

色々設定。22bitを10進数に変換して指定。

6-7行目

サンプルコードにあったので一応入れてる。コネクションが確立してなかったら処理を終える。

9行目

spi_xfer(handle, data)でデータを送信して戻り値を得る。

  • handle
    • 4行目の戻り値。
  • data
    • 送信データ。n進数での形式混在大丈夫みたい。[]のリスト使える。

countはrx_dataの要素数。で、この時点での、戻り値格納したrx_dataのイメージが

rx_data [0] [1] [2]
バイト 1 2 3
ビット 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1
データ 1 0 1 1 1 0 0 1 0 1 0

こんな感じ。

15行目

rx_data[0]はなんも入ってないので使わない。12bitの情報がrx_data[1]の下位4bit、rx_data[2]の8bitに分かれてるのでそれを結合する。

  • rx_data[1] << 8
    • rx_data[1]のデータを8桁左シフト。
ビット 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
rx_data[1] 1 0 1 1 0 0 0 0 0 0 0 0
  • | rx_data[2]
    • ↑のシフトしたデータと論理和を取る。
ビット 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
rx_data[1] 1 0 1 1 0 0 0 0 0 0 0 0
rx_data[2] 1 0 0 1 0 1 0
bin 1 0 1 1 0 1 0 0 1 0 1 0

そうすっとbinに結合データが入ると。やっててよかった基本情報技術者試験。2進数から10進数に変換しないと駄目かなーって思ってたら、print()したらなんか変換された。ふーん。

あとは、明るさと数値のログ取って、コード上で閾値を設定してあげりゃいいんだな。とりあえずAD変換はここまでー。次はLEDサークルライトを使えるようにしたい。

そういえば抵抗セットを買った

eBayでresistorとかで検索すると金属皮膜抵抗でいろんな抵抗値のやつが買える。50values500pcsかつ1/2Wで900円ぐらいだった。海外からなのに送料無料だし、すげえな。ただ、ショップの説明するセット内訳が

だったんだけど、実際届いたのは

1.2 1.5 1.8 6.8 10
18 20 33 36 43
47 56 68 100 270
300 390 470 680 1k
1.2k 1.5k 2k 2.4k 2.7k
3k 3.3k 4.7k 5.6k 6.8k
8.2k 9.1k 10k 15k 18k
22k 27k 33k 39k 47k
68k 82k 100k 150k 180k
200k 220k 300k 330k 1M

であり、一致率は、まさかの44%だった。なのでそういうのが気になる人は使わないほうがいいと思う。

参考

http://www.kotaden.com/stage3_4_index.html

https://ja.wikipedia.org/wiki/%E5%88%86%E5%9C%A7%E5%9B%9E%E8%B7%AF

http://startelc.com/elc/Works/elc_W_CdsTr.html

https://iot.keicode.com/electronics/photocell-led-1.php

https://okwave.jp/qa/q7748734.html

https://eleking.net/study/s-dccircuit/sd-combined.html

https://www.renesas.com/jp/ja/support/technical-resources/engineer-school/electronic-circuits-02-diodes-transistors-fets.html

https://jp.rs-online.com/web/generalDisplay.html?id=ideas-and-advice/ic-package-guide

http://ww1.microchip.com/downloads/en/DeviceDoc/21298b.pdf

https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/

https://www.cqpub.co.jp/dwm/contents/0053/dwm005300950.pdf

https://qiita.com/ozwk/items/a427ed858aa9afba9aca

https://synapse.kyoto/glossary/glossary.php?word=SPI

http://raspberrypi.sblo.jp/article/111197332.html

http://arakik10.hatenablog.com/entry/2018/10/27/152206

http://abyz.me.uk/rpi/pigpio/python.html#spi_xfer

https://decafish.blog.so-net.ne.jp/2016-12-11

https://www.denshi.club/pc/raspi/5raspberry-pi-zeroiot8a-d5mcp3208.html

https://decafish.blog.so-net.ne.jp/2016-12-16

https://www.denshi.club/pc/raspi/5-mcp3208.html

https://qiita.com/umeda_takumi/items/29cf4ecd7f9c33f79336

https://codeday.me/jp/qa/20181218/76730.html

https://qiita.com/7shi/items/41d262ca11ea16d85abc

カテゴリー: したい | タグ: , , | コメントする

クレジットカードの不正利用被害に遭った(三井住友カード+GoogleADS)

クレジットカードの不正利用被害

先日、初めてのクレジットカード不正利用被害に遭った。75万ぐらいの請求がいきなりポンと上がりめちゃめちゃ動揺していろいろ調べてなんとか支払い無しという事になった。自分固有の体験談ではあるけれど、誰かの役に立つかなぁと思ったので書いておこうと思った。大したことしてないけど。カードは三井住友VISAカードで、請求元はGoogleからだったので、他のカード・請求元の場合は対応が変わると思う、参考までに。半分愚痴。

75万の身に覚えのない請求

カードの請求金額のお知らせメールが毎月来るが、今回は今月いくら使ったっけ?と気になったので明細を見にいった。そしたら合計金額が見たことない数字だった。明らかに自分で使った分だけじゃない、文字通り桁が違かった。

明細には同じ日に2アカウントから同じ金額で利用履歴が残っていた。ご利用店名は「Google*ADSxxxxxxxxxx(CC GOOGLE.COM)」なので、Googleのなにかのサービスで使われたようだった。通貨はベトナムドン建てで、一回に1,000,000ドンずつ、日本円で47,895円だった、それが16回。そんな利用はしていない。明細下部に

明細のなかに利用した覚えのないご利用店名の記載がある場合は、こちらをご覧ください。

との記載があったので、そちらを見ることに。

https://www.smbc-card.com/mem/oshiharai/pop/wm_shoplist.jsp

問い合わせの多い利用店名がずらりと並んでいるだけで、不正利用に関する説明はどこにもなかった。こちらのGoogleの欄を見ると

GOOGLE で始まるもの アンドロイドのスマートフォン・タブレットでのゲームアプリや、電子書籍、映像配信サービスに関する代金です。 GOOGLEサポート
0120-950-065 9:00~18:00(年中無休)

との記載がある。が、この番号は結局使わなかった。日中忙しい日々が続いたため、あとGoogle*ADSの記述と合わなかったので。で、まずはカード会社に連絡することにした。

カード会社へ連絡&カードの利用を止める

カード裏面にあった電話番号に電話を掛けた。

https://www.smbc-card.com/mem/info/pop/info.jsp

身に覚えのない請求があった旨を伝えたが、まずは請求元に連絡を取ってそれが不正な請求であると認定的なことがされないとカード会社の方では対応できないと言われた。それでちゃんちゃんと終わりにさせられそうだったのだが、こちらから一度不正利用されたカード番号をそのまま使うのは怖いので、変更できないかと伝えると、その手続きをしてくれることになった。普通そっちから提案してこないかこういうの。カード番号の変更は再発行という形での申込みとなるそうで、一旦カードの利用が停止される。このままカードを使い続けるのは嫌だったので、手続きを進めてもらうことにし、その場でカードは停止された。カードを停止したとしても、不正請求があった履歴は残るし、請求元と話がついてから連絡を取れば対処はするとのことだった。

あ、思い出したのだが、自分はその時キャッシュカードと一体型のカードを使っていたので、キャッシュカードの方も停まってしまうのではないかと尋ねたのだが、返答は、停まらないとのことだったのだが、実際には停まった。嘘じゃねーか。その後、銀行より喪失届の照会状が届き、窓口にて再発行しなければならないようだ。まだ行ってない。ていうか、なんで喪失扱いになっているんだ。窓口で聞いてみよう。照会状によると再発行には、照会状・届け出印鑑・身分証と1枚につき1,080円の手数料がかかる。まぁいい、いいんだけどなんか納得いかないし、腑に落ちないし、口座解約しようかなという気分になってくる。とりあえずカードの利用は停止できたので、次はGoogleに連絡を取った。

請求元のGoogleに連絡

ネット系企業によく見られるように、Googleもまた問い合わせ先が非常に分かりづらい。Google*ADSというサービスが、なんのサービスなのかをまず調べたところ、こちら

https://support.google.com/google-ads/answer/1722030?hl=ja

Visa、MasterCard
お支払い方法に Visa または MasterCard を選択されていて、Google 広告からのご請求が発生した場合、明細には次のいずれかのように表示されます。

GOOGLE ADS. [email protected]
GOOGLE*GOOG[Google 広告 お客様 ID(10 桁)]
GOOGLE*SVCS[Google 広告 お客様 ID(10 桁)]
GOOGLE ADS[Google 広告 お客様 ID(10 桁)]
複数のお客様 ID が明細に表示されている場合は、そのお支払い方法が複数の Google 広告アカウントで使用されていることを意味します。

と記載があったのを見つけた。だがこちら

https://support.google.com/google-ads/answer/2472641?hl=ja

には

お支払い方法に Visa または MasterCard を選択されていて、Google 広告からのご請求が発生した場合、明細には次のいずれかのように表示されます。

GOOGLE ADS. [email protected]
GOOGLE*GOOG[Google 広告お客様 ID(10 桁)]
GOOGLE*SVCS[Google 広告お客様 ID(10 桁)]
GOOGLE 広告[Google 広告お客様 ID(10 桁)]
複数のお客様 ID が明細に表示されている場合は、そのお支払い方法が複数の Google 広告アカウントで使用されていることを意味します。

との記載でGoogle*ADSの記載はない。こういうところが嫌だ。まぁ、Google広告からの請求と分かったのでこちら

https://support.google.com/google-ads/contact/explain_pd_b3

のフォームに必要事項を記入し送信した。自分はアドセンスのアカウントを持っていたため広告ID も記入できたが、必須ではないようだ。また、”請求内容が記載された銀行取引明細書のコピーを添付してください”のところは、上の画像のようなスクリーンショットをちゃんとした形で送った。請求項目が多い場合はPrintScreenだと切れたりするので、その際はFull Page Screen Captureなどの拡張や、デベロッパーツールからCapture full size screenshotなどすればいいと思う(Chrome前提)。その他、通貨や概要はできるだけ詳しく書いたほうがいいと思う。

また、自分は入力はしたけど返事が返ってくる前に上記のやり方で解決してしまったので実効性があるか分からないが、こちら

https://pay.google.com/payments/u/0/unauthorizedtransactions#

でも、請求の異議申し立てという形で連絡が取れるのかもしれない。

請求明細書や銀行の明細書で「GOOGLE *」で始まる取引

とのことなので、PlayやMusicなどの不正請求に関してはこちらのほうがいいのかも。

Googleからの返答&カード会社へ連絡

フォーム記入時に電話とメールどっちでもオッケーとしたが、返事はメールだった。調査してるからちょっと待ってねメールが3日で2回、そこから5日待ち、連絡がないのでこちらから催促を入れたらその次の日に連絡が来て、不正請求との回答を得た。催促の入れ方は普通に来たメールに返信しただけ、支払日が迫ってるから早くしてちょ、みたいな内容にした。返信の際に件名(特にサポートチケットのID)は変えないほうがいいと思う、Re:は消さなくても大丈夫だった。で、海外アカウントからの使用で自分は関係ないことが確認できたとのことだった。また、カード会社へ連絡をとりチャージバックの手続きをとってほしいとのこと。チャージバックってなんだろうと思ったが、そのまま伝えればいいかと深く考えなかった。

また上記の電話番号からカード会社へ連絡し、チャージバックの件を伝えたところ理解できたようで請求から外す旨の了解を得た。その際、2,3履歴の確認を取られたので、内容が分かるように明細が手元にあったほうがいいと思う。自分はPCでクレカの利用履歴を見ながら電話をした。そういえば、この時のオペレーターが事務的で、寄り添う感じじゃなかったなぁ。カード会社が悪いわけじゃないんだけどさ、なんかなー。

解決

ということで無事、不正請求は解消された。クレカの再発行にまだ行ってないけどな。まぁ請求がなくなっただけでもひと安心だ。ところでこういう話でよく聞く、いつもと違う請求があった際は、クレカ会社の方から連絡してくる、ってことは一切なかった。今回は支払いの前に解決できたが、そのまま請求が確定して、支払いが引き落とされてたらまためんどくさい事になってたんだろうなぁと思う。クレカ会社も人手が足りてないのかね。あと、Googleでもこんな感じなので、レア、というかマイナーな請求元だったらと思うとちょっと怖い。そういう場合どうすんだろな。カード会社の盗難保険とか適用できるんだろうか。そこら辺分かってない、向こうからも何の話もなかったからな。

まとめ、不正請求があったら

  • クレジットカードの停止
  • 請求元へ確認

を、できるだけ早くする。ってのがいいんだろうなと思った。あーよかった。

カテゴリー: のーと | タグ: , | 13件のコメント

Raspberry Pi Zero WHでLチカしてみる

Lチカ

Lピカがなんとなくできたので、次はLチカだ。

GPIOの制御ライブラリ

GPIOを制御するにも、色々あるらしい。ざっと探しただけでも

みたいな。違いは参考を見てもらうとして、今回は中でも評判の良さげだったpigpioを使ってこうと思う。

pigpioをインストール

$ sudo apt-get update
$ sudo apt-get install pigpio python-pigpio python3-pigpio

ほいで

$ sudo systemctl enable pigpiod
$ sudo systemctl start pigpiod

で、サービスを有効化して起動しとくみたい。でも参考サイトみたいに

$ service --status-all

ってやっても、pigpioが表示されない…。まぁとりあえず書いてみっかー。

pigpioでLチカ

GPIOの3番ピンにジャンパを付けて同じ他はLピカの時と同じ回路にしてみたのだけど

なんか、LED、点くんですけど…。しかもなんかちょっと暗い感じで。なんなん、もう分かんないよ…。元から電気通ってるってことなんかなぁ。ちょっと調べてみると物理ピン3=GPIO2は、I2Cとかいうものに使われるピンだそうで、最初からプルアップ抵抗がついてるピンらしい。プルアップってなんだよ。他にもSPIやらPWMやらGPCLKやらUARTやらに使う用のピンがあって、そういうのはそれを使わなきゃいけない時以外は使わないほうがいいのかな!もういいよそれで!ということで、なんもついてなさげなピンを探すと、物理ピン11,13,15,16,18,22,36,37。なんですかね…。根拠レスすぎてヤバい。とりあえず、物理ピン11=GPIO17(この書き方も合ってるのかわからん、BCM17って書いたほうが通じるんかな)にジャンパ挿してみたら点かなかった。よっしゃ。じゃープログラム書こー。

lchika.py

import pigpio as pg
from time import sleep

pi = pg.pi()
pi.set_mode(17, pg.OUTPUT)

for i in range(5):
    pi.write(17, pg.HIGH)
    sleep(0.5)
    pi.write(17, pg.LOW)
    sleep(0.5)

pi.stop()

できた。わーい。

参考

https://www.fabshop.jp/%E3%80%90-%E7%AC%AC38%E5%9B%9E-%E3%80%91gpio%E5%88%B6%E5%BE%A1%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81/

https://karaage.hatenadiary.jp/entry/2017/02/10/073000

https://decafish.blog.so-net.ne.jp/2016-10-15

http://nw-electric.way-nifty.com/blog/2018/11/rpigpio-pigpio-.html

https://tomosoft.jp/design/?p=8768

https://qiita.com/rukihena/items/fb94a2cdcbb37ec8ced7

https://hnw.hatenablog.com/entry/20150607

https://s51517765.hatenadiary.jp/entry/2018/02/03/100530

http://abyz.me.uk/rpi/pigpio/python.html

https://qiita.com/Morio/items/e8aed85346c0055beea7

GPIOのピン配置

https://pinout.xyz/

このサイト便利。どのピンがなんのピンだっけ?って時に見る。

カテゴリー: したい | タグ: , , | コメントする

Raspberry Pi Zero WHでLピカしてみる

電子工作

定点カメラを作ったはいいけど、夜間だと全然写らないので、カメラ撮るときにだけ光るようなやつを作りたい。あわよくば照度によって光るか光らないかを判断したい。電子工作はマジで初めてで、右も左も分からないんだけど、簡単なやつならなんとかなんだろと思ったのでやってみる。

そういえばAndroidアプリもう完全に関係無いな…。

お買い物

電子工作の用具を全く持ってないので、お買い物に行くことに。秋月電子通商に初めて行ってきた。未開の地だ。そもそも用語が分からんのでお店に行っても何を見ればいいのかも分からんし、何を買えばいいのかも分からん。スマホ片手に何が必要なのか検索しながら買ってきた。買ったのがブレッドボード、ジャンパ線、半固定抵抗、LED、テスター。あとラズパイのヒートシンクとかも買ったな。

なんで半固定抵抗にしたのかというと、どの抵抗買っていいか分からんし、なんか抵抗はバラ売りしてなくて100本入りとかで、こんなにいらねぇ…ってなった折に半固定抵抗のことを知り、ええやんこれ、大は小を兼ねるや。とか思ったので。まぁこれが間違いだったわけで。半固定抵抗をグリグリやりながら光の強さ変わる~たのし~、とかやってたら2、3回で抵抗値が変化しなくなったり、ちっちゃくはなるけど大きくはならなかったり。簡単に壊れた。ということで再び行って固定抵抗を買ってきた。

あとキットも買った。目的で部品とか基盤がセットになってるやつ。

http://akizukidenshi.com/catalog/g/gK-06623/

http://akizukidenshi.com/catalog/g/gK-08887/

ね。この2つ繋げりゃいいんじゃねーのぐらいの気持ちで買った。実際繋げられるかも分かんないし、光センサーの方はどう使うものなのかもよく分かってないけど。

Lピカ

電子工作の基本はLEDを光らせるLピカらしいので、早速やってみる。

できた。これだけなのになんかすごい。DC3.3Vから電源とってるだけなので操作みたいなのはできない。

抵抗求める

えーと、電源の電圧と、LEDのスペックから抵抗の値が決まる。抵抗の値はオームの法則で求められる。V=Ω*Aね。電源は3.3V、LEDのスペックが

…なんだけど、用語がわからん。そも、LEDの抵抗の求め方がわからんので調べたら秋月電子のサイトにあった。求め方は

(電源電圧[V]-順方向電圧降下[V])÷順方向電流[A]=抵抗値[Ω]

ですと。順方向電圧っていうのが

LEDが発光する正しい方向のことを「順方向」といいます。

LEDを発光させるために必要な電圧

とのこと。てことは順方向電流っていうのはLEDの極性に合った発光するために必要な電流みたいな感じか。で、データシート見てみるとVFが標準で3.1Vで、それはIFが20mAだよー、みたいな。20mAの時、明るさは6000mcdという値ですと。じゃあ式にあてはめてみよう。

(3.3 – 3.1) / 0.002 = 10

10Ωだ。…えっ、マジで?そんなもんでいいの?なんでだろ。他のサイトでよく見る330Ωだと電流どれくらい流れるんだろか。えっと、0.2V / 330Ωよね…、≒0.0006A=0.6mA。うっそーんと言いたくなるが計算してこうなんだもんな…。まぁ怖いから330Ω使ってみっか…半固定抵抗ぶっ壊れまくるしな。と思って買ってきて作ってみたのが上の写真なわけで。ちゃんと光ってる…。?????。やべぇわけわかんなくなってきた。LEDは電流あんま関係なくて、電圧が超えてりゃ光るってことなのかな。これ素人考えだから真に受けないでね。あと関係あるかわかんないけどGPIOは1本あたり16mAの制限があるけど、20mA流したら流れるらしい。うん、関係ないよな、いま0.6mAで光ってるんだし…。光ってるし、いっかな…。

テスター使って測ってみよう。抵抗の値を測ってみたら388Ωだった。±5%にしては、ずれてんな…。抵抗の電圧も測ってみたら0.711Vだった。あとLEDの電圧を測ってみたら2.57Vだった。で、抵抗とLEDの間にテスター入れて、電流測ってみたら1.83mAだった。0.711V + 2.57V = 3.28Vなのでだいたい電源の値と一緒。ここで測った値入れて計算してみると

おー、合ってるね。VFが思ったより低かったのと、電源もきっちり3.3Vで出てるわけじゃないからこうなるんだな。理論値だけじゃなくて、ちゃんと実測値見ないとだめだね。

そういえば、調べてて知ったんだけど、抵抗の置き場所ってLEDの前後どちらでもいいみたい。なんか水のイメージで解説してるとこが多かったから、LEDに入ってく水の量を調節するために抵抗を置いて水の流れを邪魔するみたいに思ってた。けど違うみたい。水で例えんのやめてほしいわ。

次はGPIOにつないでみよっと。

参考

https://tool-lab.com/make/raspberrypi-startup-20/

https://deviceplus.jp/hobby/raspberrypi_i01/

https://codezine.jp/article/detail/9128

http://www.my-craft.jp/html/aboutled/led_jyundenatsu.html

https://tool-lab.com/make/raspberrypi-startup-22/

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1398756308

カテゴリー: できた | タグ: , , | コメントする

Raspberry Pi Zero WHで作った定点カメラを改良したい③定期的に動画作成

定期的に動画作成

ffmpegを使って動画を作成する。なぜffmpegかというとそれしか知らないからだ。

ffmpegをインストール

$ sudo apt-get install ffmpeg

する。とりあえずこの前やったやり方でできるか確認。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec libx264 -pix_fmt yuv420p video.mp4

できた…、完。ちがくて。豆苗食べちゃったので何も映ってないけど左上の日付がちゃんとなっとるので良い。で、ラズパイ上でエンコードしてみたはいいものの、fpsが0.6だった。期待してたんと違う…。何枚ぐらいだったか忘れたけど450枚ぐらいだったかな?で、30分ぐらいかかって動画ができた。さすがにちょっと遅いなぁと調べてみると、今やったのはソフトウェアエンコードで、ラズパイにはカメラのストリーミングとかする用の、ハードウェアが搭載されてるらしい。で、それを使ってエンコードする速くなるみたい。といってもZeroだし、普通のラズパイよりは遅いだろうなぁと思いつつ、やってみることにする。

ffmpegのアンインストール

$ sudo apt-get remove ffmpeg x264 libav-tools libvpx-dev libx264-dev

これしか見つかんなかったので、これでアンインストール。大丈夫かな。わからん。

ffmpegをハードウェアエンコードができるようにインストール

ソースからラズパイ上でビルドし、それをインストールするということみたい。流れはほぼ

https://www.kaoriya.net/blog/2017/10/07/

こちらの通りにやった。一点$ sudo apt build-dep ffmpegで詰まったので、その際にはこちら

https://qiita.com/tetsu_koba/items/904b03e908b040ed447d

を参考にした。ビルド中エラーっぽいのが色々出たけど気にしない♪~(´ε` )

エンコードしてみる

-vcodec h264_omxというオプションが肝ということなので、とりあえずこれだけ変えてエンコードしてみる。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec h264_omx -pix_fmt yuv420p video.mp4

こう。で、エンターをッターン!と押すと…

frame= 1081 fps=6.7 q=-0.0 Lsize= 1072kB time=00:00:36.00 bitrate= 244.0kbits/s speed=0.224x

おおっ速い。6fpsだから10倍ぐらい速くなった。動画は…

画質悪っ。なんかビットレートが抑えられてる。同じソースでlibx264を使ってPCでエンコードすると、総ビットレートは3889kbpsだったので、ラズパイのオプションに-b:v 3889kと追加してみる。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec h264_omx -b:v 3889k -pix_fmt yuv420p video.mp4

あれ、エンコ時間長くなって結局遅くなるんじゃね…?と恐る恐るやってみると…

frame= 1081 fps=6.7 q=-0.0 Lsize=   17086kB time=00:00:36.00 bitrate=3888.0kbits/s speed=0.223x

お、大丈夫そう。速さ大して変わってない。

いい感じでわ!?カメラ動いちゃったり、夜に何故か青い影が写ったりは別として、よさげです。ただビットレートの調整毎回はできんので、そこがめんどくさい。まぁ3800kぐらいにしとけばいいのかな。あとはこれを定期的に動かせばいいんだ。

シェルスクリプトを書く

さっきのコマンドを自動的にやってくれるような感じにすればいいんだなーということで、シェルスクリプトを書けばいいみたい。書いたこと無いけど。とりあえずnas内にenc.shというファイルを作りつつ

#!/bin/sh

today=$(date "+%Y%m%d")
path="/home/pi/nas/vid/"
filename="${path}video${today}.mp4"

ffmpeg -start_number 0000 -r 30 -i /home/pi/nas/pic/%5d.jpg -r 30 -an -vcodec h264_omx -b:v 3800k -pix_fmt yuv420p "${filename}"

こんな感じで書いてみた。まぁ日付をファイル名に使って、今ある写真を全部エンコするだけ。でvidフォルダに保存。正直これで書き方合ってるのかどうか分かってないんだけど、動きはするのでいい感じ。実行するには実行権限を付けてあげないといけないとのことなので

$ sudo chmod 777 ./enc.sh

777で合ってるかはアレです。付け過ぎな気もする。

3 18 * * * /home/pi/nas/enc.sh

そんでcronに追記。帰宅後に当日分をチェックしたいのと、撮影と被るのがどうだろーと思ったので、毎日18:03に設定した。そういえばcron書式チェックして検証できるサイトを見つけた。

https://crontab.guru/

素敵ね。

参考

http://kurumatorajirou.blogspot.com/2012/10/ubuntu-ffmpeg.html

https://www.kaoriya.net/blog/2017/10/07/

https://qiita.com/tetsu_koba/items/904b03e908b040ed447d

https://signal-flag-z.blogspot.com/2016/09/rapberry-pi-3-h264omxffmpeg.html

https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337#%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A

https://qiita.com/mochizukikotaro/items/f3a78d631595f9744a75

http://motw.mods.jp/shellscript/tutorial.html

https://www.mtioutput.com/entry/2018/02/15/151849

カテゴリー: できた | タグ: , , , | コメントする