Vol.767 26.Apr.2019

今年の蜃気楼 高機能な8ビットPIC(6)〜ラズパイと通信 SeeQVault対応USBハードディスク

M 今年の蜃気楼

by fjk

今年も蜃気楼を見るために魚津市の「海の駅・蜃気楼」に出かけた。海の駅には9時頃に着き、カメラ(E-P5)を取り出し、TokinaのReflex300mm-F6.3MFのレンズと三脚を取付、対岸の景色を見てみると、新湊大橋が大きく伸び上がっていた。富山湾の海岸線のすべてで蜃気楼現象が見え、Cランク。
 カメラマンも多く、「カラーで色が綺麗」「船がすごい」など、皆さんが蜃気楼の出現状況を実況紹介されるので、その方向にカメラを向けるのが大忙しでした。写真1・2の新湊大橋に写っている赤いものは港のガントリーです。魚津から新湊方向は西向きになり、午後は逆光となり色が見えなくなるのですが、午前9時ころは、ちょうど太陽が橋を正面から照らすため、色がよく見えています。写真2は通常時に近い状態(実際は写真1の数分後)で、蜃気楼は時間と共に大きく変化しています。写真4は走る船影が3つ見えますが、実際は1隻。写真5は景色が上に伸び、護岸堤防の壁とテトラポットが伸びて、バーコード状に見えます。(ピント以外の撮影条件はオート)
 蜃気楼の出現は5月が一番多いそうです。蜃気楼の詳しい情報は魚津埋没林博物館を参考に。
上に伸びる新湊大橋(色もよくわかる) 通常時に近い状態(左写真の数分後) 橋の両側がZ状(午後はモヤット・・)
船影および波が3本見えるが 景色が上に伸びてバーコード状に 景色が上に伸びてバーコード状に2


P 高機能な8ビットPIC(6) 〜ラズパイと通信〜

by fjk

前回(abc766)はPICとパソコンでシリアル通信の予備実験を行ったが、今回はPICのハードおよびスケッチはほぼ前回のまま利用し、USBシリアルケーブルでラズベリーパイ3Bと通信する。

1.PICの設定(ハードはabc766のまま、スケッチは一部変更【赤字部】)
@1分おきにAD変換し、そのデータをラズパイに送信する。
Aラズパイから送られる3文字のLED輝度データでカラーLEDを点灯する。
Bスケッチで、変数の文字変換の行を以下に変更(数値のみにする)
   sprintf(sBuf, "%d", Val);
 
2.ラズベリーパイのUSBによるシリアル通信
・ラズパイで動作確認を行えるようI2C液晶表示器を接続し(abc749参照)、以下の機能を行う。
  @PICから送られてきたAD変換データを受信する。
  A受信データを液晶に表示する
  B受信データからRGBの明るさを8段階(0〜7)で決定する。
  CRGBの明るさを’0’〜’7’の3文字でPICに送信する
・ラズパイでI2Cを使えるようにする
  メニュー/設定/RaspberryPiの設定で、I2CのEnableラジオボタンをONにする
・ラズパイのシリアル通信にはPySerialモジュールを利用する。しかし、通信機能を使うにはラズパイの設定を以下の様に変更する必要がある。
  @RaspberryPiの設定で、シリアル通信を有効にする(要再起動)
  A/boot/cmdline.txtの変更(以下は1行、赤字部を削除)
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline rootwait
  BBluetoothの無効化(/boot/config.txtの最後に追記)
    core_freq=250
    dtoverlay=pi3-miniuart-bt
  C再起動
 
※PySerialのコマンド
・インスタンスの生成
  import serial
  con = serial.Serial(port, baud, [timeout])
  con = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0.1)
・文字の送信(strは文字列または1バイトデータ)
  con.write(str)
・指定文字数の受信(size省略時は1文字)
  c = con.read(size)
・改行(\n)まで受信
  Line = con.readline()
・オブジェクトのクローズ
  con.close()
 
※Pythonチップス
print文の中に関数を含めると
  print str(r)+str(g)+str(b)
   ・・・>エラー、しかし
  print (str(r)+str(g)+str(b))
  と、式を括弧で囲えばOK
 
3.ラズパイのPIN(GPIO)を使ってシリアル通信する場合
ラズパイのGPIO端子を使ってシリアル通信を行う場合は、ラズパイの電圧が3.3Vなので、PICを5Vで動作させている場合、信号の電圧レベル変換を行わないと、最悪の場合ラズパイが壊れる(電圧に注意!)。
 信号電圧の変換には専用レベル変換IC(ADM3202など)を使う方法があるが、今回は抵抗分圧法でPICのTxを5→3.3Vにした。なお、PICのRxは入力なので電圧変換せずに3.3Vのまま。
@ハードウェア
 RS232C通信にTTLレベル(5V)を利用するので、PICとはジャンプワイヤーで接続する
Aスケッチ
 インスタンス生成時にGPIOを指定
B通信のテスト【おまけ】
PICとラズパイとの通信を確認するには以下のスケッチを利用(メインループのみ変更)。
PICは受信したデータをそのまま返す。

回路図(GPIO、USB接続はabc766) ラズベリーパイ PICボード

rs-pic.py
#!usr/bin/env python
# -*- coding: utf-8 -*-

import smbus
import serial
import datetime
import time

i2c_bus 	= smbus.SMBus(1) 	# 1 is bus number
adr_LCD 	= 0x3e   		# AQM0802 LCD address
COMD 	= 0x00
DATA 	= 0x40
CLEAR 	= 0x01
HOME 	= 0x02
DSP_On 	= 0x0f
LINE_1 	= 0x40
LINE_2 	= 0x40+0x80

def cmd_LCD( code ):
    i2c_bus.write_byte_data(adr_LCD, COMD, code)
    time.sleep(0.1)

def write_LCD( message ):
    mojilist=[]
    for moji in message:
	mojilist.append(ord(moji))   # trans acii-code
    i2c_bus.write_i2c_block_data(adr_LCD, DATA, mojilist)
    time.sleep(0.1)
 
def init_LCD ():
    cmd_LCD(0x38)
    cmd_LCD(0x39)
    cmd_LCD(0x14)
    cmd_LCD(0x73)
    cmd_LCD(0x56)
    cmd_LCD(0x6c)
    cmd_LCD(0x38)
    cmd_LCD(CLEAR)
    cmd_LCD(DSP_On)

#************** メイン関数 **********
def main():
    #*** I2C、LCDの初期設定
    init_LCD ()
    cmd_LCD(CLEAR)
    write_LCD("Hellow!")

    #*** シリアル初期設定(for GPIO)
#    con = serial.Serial('/dev/ttyAMA0', 115200, timeout=0)
    #*** シリアル初期設定(for USB)
    con = serial.Serial('/dev/ttyUSB0', 115200, timeout=0)

    #********* メインループ **********************
    while True:
	sAdc = con.readline()
	if len(sAdc) > 0:
	    cmd_LCD(CLEAR)
	    write_LCD(sAdc)
	    Adat = int(sAdc)
	    RedC = (Adat >> 1) % 8
	    GrnC = (Adat >> 4) % 8
	    BluC = (Adat >> 7) % 8
	    sDat = str(RedC)+str(GrnC)+str(BluC)
	    cmd_LCD(LINE_2)
	    write_LCD(sDat)
	    con_write(sDat)

#******************
if __name__ == '__main__':
	main()


S SeeQVault対応USBハードディスク

by fjk

テレビの録画番組を外付けUSBハードディスクにダビングできるが、録画に使ったレコーダー以外では再生できないのが普通である。これでは、レコーダーの買い換えや、故障した場合などには、録画番組が再生できなくなるので、不便である。そこで、パナソニック、サムスン、ソニー、東芝の4社が開発したのがSeeQVaultで、他のレコーダで作成した番組を他のレコーダーでも再生できるようになる(といってもメーカーが異なると再生出来る保証はないようです)。
 ただし、SeeQVaultディスクにHDDからダビングする場合、ダビング元の番組のダビング残り回数は1回減り(BD/DVDへのダビングと同じ)、SeeQVaultディスクの番組ダビング残り回数は1回となる。また、SeeQVaultディスクからHDDへダビングするとSeeQVaultディスクの番組は消去される(ムーブ)。チャンネル録画番組はSeeQVaultディスクに直接ダビングできないので、一旦HDDにダビング後にダビングをする必要があります。
 デーガDMR-UX7030にアイオーデータAVHD-URSQ3をUSB接続(SeeQVaultフォーマットが必要)しダビングすると、SeeQVaultディスクにはダビング1でダビングでき、HDDのダビング残り回数は1つ減りました(通常録画用USB-HDDとHDD間のダビングは全てムーブとなる)。SeeQVaultディスクからBDやDVDには直接ダビングが出来ないので、この場合は一旦HDDに戻す(ムーブ)必要があります。通常録画用USB-HDDとはUSBを差し替えることでどちらか1台が使えます(同時には使えない)。
 今のところ、我が家にはSeeQValut対応機器はDMR-UX7030の1台のみで、他機での再生が可能か、まだ確認していないが、レコーダーの故障や買い換えなど、将来のことを考えると、今後はSeeQValut対応機器を選んだ方がよさそうです。
SeeQValut対応のAVHD-URSQ3 SeeQValutHDDへのダビング画面


今年の蜃気楼 高機能な8ビットPIC(6)〜ラズパイと通信 SeeQVault対応USBハードディスク