2019年8月17日土曜日

Raspberry Pi 3B+にケースfan追加




























           



格安(1コイン以下)のケースとファンのセットを入手したので、試してみました。
とりあえず動きました

[pwm制御]

トランジスタ 2SC1815-GR

配線
E-->Pi GND
C-->fan GND
B-->100Ω抵抗-->Pi GPIO18

fan Vcc --> Pi 5V

sample script

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time

DEBUG=True

GPIO_PWM = 18
Hz = 60
def get_cpu_temp():
    with open("/sys/class/thermal/thermal_zone0/temp", "r") as f:
        t=f.read()
    return int(t)/1000

def fanctl_pwm():
    """
    cpu temp,duty
    """
    td=(
        (29,0),
        (30,25),
        (35,50),
        (40,60),
        (41,65),
        (43,70),
        (45,75),
        (46,80),
        (48,90),
        (49,95),
        (50,98),
        (51,100),
       )
    """
    td=(
        (45,0),
        (46,100),
       )
    """
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(GPIO_PWM, GPIO.OUT)
    p = GPIO.PWM(GPIO_PWM, Hz)
    try:
        duty = 100
        p.start(duty)
        time.sleep(1)
        while True:
            cpu_temp = get_cpu_temp()
            duty = 100
            for x in td:
               if DEBUG:
                print "x(0)" + str(x[0]) + " C" ,
                print "x(1)" + str(x[1]) + " %"
               if  x[0]  >= cpu_temp:
                  duty = x[1]
                  break
               elif  x[0]  > cpu_temp:
                  duty = 0
                  break         
            if DEBUG:
             print "cpu temp=" + str(cpu_temp) + " C"
             print "fun duty=" + str(duty) + "%"

            p.ChangeDutyCycle(duty)
            time.sleep(30)
    except Exception as e:
        print "Exception : " + str(e)
    finally:
        p.stop()
        GPIO.cleanup()
if __name__ == "__main__":
    time.sleep(1)
    fanctl_pwm()

2019年7月20日土曜日

Raspberry Pi 3A+ にI2Cポートを追加

I2Cポート不足又は、SDA1, SCL1 を他の用途に使ってる時の対応です。

/boot/config.txtに以下を追加

GPIO 0をSDA、GPIO 1をSCL、クロックディレイを2μsec、busを3とする場合の設定、

dtoverlay=i2c-gpio,i2c_gpio_sda=0,i2c_gpio_scl=1,i2c_gpio_delay_us=2,bus=3

reboot後、デバイス確認
# i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- 4c -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

認識してますね。

温度センサーLM73での動作確認

確認 python script (かなり手抜き)

[LM73lib.py]
LM73_ADDRESS             = 0x4c
I2C_BUSNUM               = 3   #<== normal 1?!
LM73_TEMP_REGISTER       = 0

class LM73(object):
        def __init__(self, address=LM73_ADDRESS, busnum=I2C_BUSNUM):
                self._address = address
                self._bus = smbus.SMBus(busnum)

        def regdata2float (self, regdata):
                return (regdata / 16.0)

        def getTemp(self):
#               set 13bit resolution
#               p2,p1,p0-->pointer B'100'
#               TO_DIS,RES1,RES0,'0' ==>B'0100'
                self._bus.write_i2c_block_data(self._address, 0x04, [0x40])
                """Reads the temp from the LM73 sensor"""
                raw = self._bus.read_word_data(self._address, LM73_TEMP_REGISTER)
                print "raw: ",
                print raw
#               low byte, high byte ==> high byte, low byte
                raw = ((raw << 8) & 0xFF00) + (raw >> 8)
                raw = raw >> 3
                return self.regdata2float(raw)
             
[LM73_test.py]             
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import LM73lib
sensor = LM73lib.LM73(busnum=3)
print sensor.getTemp()

#  ./LM73_test.py
raw:  10254
28.3125
とりあえず、それなりの結果かな..

2019年7月11日木曜日

Raspberry Pi 4 Model B arrived!

「出来がいまいちとの評判もある」Raspberry Pi 4 Model B が入手できたのでちょっと触ってみました。


余ってたPC用12Vファンをusb 2.0 5vで緩く廻す。
ヒートシンク無し
unix ベンチでも60度C超えないよ 
吸気より排気の方が冷える

























余ってたPC用12VファンをRPi 5Vを12Vに昇圧して速く(定格で)廻す。
unix ベンチでも55度C超えないよ 























[基本情報]
# vcgencmd version
Jun 20 2019 16:05:00
Copyright (c) 2012 Broadcom

version 407b1da8fa3d1a7108cb1d250f5064a3420d2b7d (clean) (release) (start_cd)

# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 3 (v7l)
BogoMIPS        : 108.00
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd08

CPU revision    : 3
.
. あと3 core
.

Hardware        : BCM2835
Revision        : c03111

Serial          : 10000000b7d72729

# cat /proc/meminfo

MemTotal:        4051032 kB
MemFree:         3854844 kB

MemAvailable:    3827636 kB

※4GBモデル..
.



# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

1500000

涼しい!!!
# vcgencmd measure_temp
temp=48.0'C


[usb 3.0]

# lspci
00:00.0 PCI bridge: Broadcom Limited Device 2711 (rev 10)
01:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)

余ってたusb メモリで試す。

# hdparm -t /dev/sda

/dev/sda:
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 Timing buffered disk reads: 304 MB in  3.00 seconds = 101.17 MB/sec
root@raspi4:~#

101.17 MB/secと高速 !!!!

定番の
[UNIX Benchmark]
   
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: raspi4: GNU/Linux
   OS: GNU/Linux -- 4.19.50-v7l+ -- #895 SMP Thu Jun 20 16:03:42 BST 2019
   Machine: armv7l (unknown)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   CPU 0: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

   CPU 1: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: raspi4: GNU/Linux
   OS: GNU/Linux -- 4.19.50-v7l+ -- #895 SMP Thu Jun 20 16:03:42 BST 2019
   Machine: armv7l (unknown)
   Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
   CPU 0: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

   CPU 1: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

   CPU 2: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

   CPU 3: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

   13:22:30 up 50 min,  2 users,  load average: 0.15, 0.03, 0.01; runlevel 5

------------------------------------------------------------------------
Benchmark Run: 水  7月 10 2019 13:22:30 - 13:50:32
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       40558612.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     9568.0 MWIPS (9.6 s, 7 samples)
Execl Throughput                               2762.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        212991.3 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           59038.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        564952.0 KBps  (30.1 s, 2 samples)
Pipe Throughput                              606927.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 190875.9 lps   (10.0 s, 7 samples)
Process Creation                               4626.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5876.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    804.0 lpm   (60.1 s, 2 samples)
System Call Overhead                        1868584.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   40558612.6   3475.5
Double-Precision Whetstone                       55.0       9568.0   1739.6
Execl Throughput                                 43.0       2762.7    642.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     212991.3    537.9
File Copy 256 bufsize 500 maxblocks            1655.0      59038.7    356.7
File Copy 4096 bufsize 8000 maxblocks          5800.0     564952.0    974.1
Pipe Throughput                               12440.0     606927.9    487.9
Pipe-based Context Switching                   4000.0     190875.9    477.2
Process Creation                                126.0       4626.3    367.2
Shell Scripts (1 concurrent)                     42.4       5876.2   1385.9
Shell Scripts (8 concurrent)                      6.0        804.0   1340.0
System Call Overhead                          15000.0    1868584.3   1245.7
                                                                   ========
System Benchmarks Index Score                                         850.7

とりあえず......






2019年5月19日日曜日

OpenRD-Client に Debian 9 (stretch) install

もう、10年位電源いれっぱのOpenRD-ClientのOS更新しました。

Fedora 8.0 for armで入れた当時からpkg update出来ないと云う代物
元のHDD(ST91203410AS 120GB) の使用時間 83541 で、9年超ですか。。

[参考(と云うかそのまんま)site]
https://www.cyrius.com/debian/kirkwood/openrd/install/

USB stickは駄目(u-bootで認識しない)で、
TFTPでインストーラ入れてinstallしました

root@openrd:~# uname -a
Linux openrd 4.9.0-9-marvell #1 Debian 4.9.168-1+deb9u2 (2019-05-13) armv5tel GNU/Linux

root@openrd:~# cat /etc/debian_version
9.9
debianのpostfix pkgは楽 install後conf弄らなくてもmail飛びますね
Red Hat系は、その辺不親切だからね

apt install alsa-utils で音も出るようになった 


2019年5月14日火曜日

raspberry pi camera v1.3 試してみる

「カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)」 演習script 

確認用に、raspberry pi camera v1.3 を付けてみました。

純正品じゃないからか、当該課題には適当ではないようですね。
じゃんけんの手の認識悪すぎ.

camera v1.3  
カメラ部分の裏の両面テープそのままだった
ので剥がして張り付けて固定しました

ケース 
純正品カメラと相性悪いとの情報
ありましたが、当方のは
全然問題無かったですょ


三脚・雲台相当は、大昔のweb camera の奴を流用です

2019年5月1日水曜日

「カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)」 演習script をWindows10で実行してみる(もうちょっと弄ってみる)

pythonがinstallされてるnote pcがあったので、演習scriptの実行を試し始めた。(5/6 またちょっと…)

                   10-10のイメージ

時々、結果が追加される予定
[ver.]
Python 2.7.13
(pip list  本件と関係無いモジュールも出てますが…)
backports.functools-lru-cache 1.5
cycler                        0.10.0
kiwisolver                    1.1.0
ldap3                         2.2.1
matplotlib                    2.2.4
numpy                         1.16.3
opencv-python                 4.1.0.25
Pillow                        6.0.0
pip                           19.0.3
ply                           3.10
pyasn1                        0.2.2
pycryptodome                  3.4.5
pyparsing                     2.4.0
pysmi                         0.0.7
pysnmp                        4.3.3
python-dateutil               2.8.0
pytz                          2019.1
scikit-learn                  0.20.3
scipy                         1.2.1
setuptools                    28.8.0
six                           1.12.0

[camera]
HP TrueVision HD (usbビデオデバイス)

[共通・文字化け対応他]
# -*- coding: utf-8 -*-
の後に

from __future__ import unicode_literals
import sys
import codecs
# 標準出力時のエンコード
sys.stdout = codecs.getwriter('cp932')(sys.stdout)

を追加する。

やはり、カメラのハンドリングで躓いてますね。

08-02
#        cap.set(cv2.CAP_PROP_FPS, 15)
フレームレートをコメントにしたら表示は出来るが、
旨くキャプチャ出来ないなぁ。

その後、cv2.imshow('HS', hs_all) をアンコメントして
動作チェック用の画像を画面に表示してみるとそれなりにキャプチャ
出来てる。但し、最終の白黒二値化画像が駄目でした。

RPi 3Bに繋いでたLogitech webcam c270 usbカメラ でやると
とりあえずそれなりの画像がキャプチャ出来た。
cap = cv2.VideoCapture(0)
から
cap = cv2.VideoCapture(1)
に変更

08-03,08-04 実行出来ました。

2019/5/2
 09-01 実行出来ました。
 mpeg123 windows版を使用

2019/5/3
g++/c++ 未installの為、学習系はskip(3hで半分位と驚異の遅さ)
10-10まで実行出来ました。

2019/5/6
Anaconda3-2019.03-Windows-x86_64 install
し試す。
python -V
Python 3.7.3

python ml-03-01-version.py
Using Theano backend.
scikit-learnのバージョンは0.20.3です
numpyのバージョンは1.16.2です
scipyのバージョンは1.2.1です
matplotlibのバージョンは3.0.3です
PIL(Pillow)のバージョンは5.4.1です
kerasのバージョンは2.2.4です
theanoのバージョンは1.0.3です

python ml-10-01-iris-deep-learn.py  anaconda-iris.h5
実行エラーとなる
AttributeError: ('The following error happened while compiling the node', DotModulo(A, s, m, A2, s2, m2), '\n', "module 'numpy.core.multiarray' has no attribute '_get_ndarray_c_version'")

theano をver.upする
conda install -c conda-forge theano 

python ml-03-01-version.py
Using Theano backend.
scikit-learnのバージョンは0.20.3です
numpyのバージョンは1.16.2です
scipyのバージョンは1.2.1です
matplotlibのバージョンは3.0.3です
PIL(Pillow)のバージョンは5.4.1です
kerasのバージョンは2.2.4です
theanoのバージョンは1.0.4です  <==ver. up!!

動いた、速い(Pentium Dual-Core P6100 2.00GHz/4GB note pcでも)

python ml-10-01-iris-deep-learn.py  anaconda-iris.h5

<略>
 - 0s - loss: 0.0039 - acc: 1.0000 - val_loss: 0.0171 - val_acc: 1.0000
Epoch 3989/4000
 - 0s - loss: 0.0037 - acc: 1.0000 - val_loss: 0.0164 - val_acc: 1.0000
Epoch 3990/4000
 - 0s - loss: 0.0044 - acc: 1.0000 - val_loss: 0.0142 - val_acc: 1.0000
Epoch 3991/4000
 - 0s - loss: 0.0121 - acc: 0.9926 - val_loss: 0.0076 - val_acc: 1.0000
Epoch 3992/4000
 - 0s - loss: 0.0070 - acc: 1.0000 - val_loss: 0.0050 - val_acc: 1.0000
Epoch 3993/4000
 - 0s - loss: 0.0059 - acc: 1.0000 - val_loss: 0.0035 - val_acc: 1.0000
Epoch 3994/4000
 - 0s - loss: 0.0030 - acc: 1.0000 - val_loss: 0.0025 - val_acc: 1.0000
Epoch 3995/4000
 - 0s - loss: 0.0120 - acc: 0.9926 - val_loss: 0.0026 - val_acc: 1.0000
Epoch 3996/4000
 - 0s - loss: 0.0175 - acc: 0.9852 - val_loss: 0.0060 - val_acc: 1.0000
Epoch 3997/4000
 - 0s - loss: 0.0045 - acc: 1.0000 - val_loss: 0.0114 - val_acc: 1.0000
Epoch 3998/4000
 - 0s - loss: 0.0031 - acc: 1.0000 - val_loss: 0.0178 - val_acc: 1.0000
Epoch 3999/4000
 - 0s - loss: 0.0046 - acc: 1.0000 - val_loss: 0.0256 - val_acc: 1.0000
Epoch 4000/4000
 - 0s - loss: 0.0114 - acc: 0.9926 - val_loss: 0.0234 - val_acc: 1.0000
ターゲット
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
ディープラーニングによる予測
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
正解率
100.0

(base) PS>python .\ml-10-03-digits-cnn-learn.py anaconda-digits.h5

 - 2s - loss: 9.6113e-04 - acc: 0.9994 - val_loss: 0.1958 - val_acc: 0.9722
Epoch 483/500
 - 2s - loss: 2.9422e-04 - acc: 1.0000 - val_loss: 0.1863 - val_acc: 0.9778
Epoch 484/500
 - 2s - loss: 0.0032 - acc: 0.9988 - val_loss: 0.1974 - val_acc: 0.9722
Epoch 485/500
 - 2s - loss: 3.3007e-04 - acc: 1.0000 - val_loss: 0.1911 - val_acc: 0.9667
Epoch 486/500
 - 4s - loss: 3.3540e-04 - acc: 1.0000 - val_loss: 0.2081 - val_acc: 0.9667
Epoch 487/500
 - 9s - loss: 8.0225e-04 - acc: 1.0000 - val_loss: 0.1963 - val_acc: 0.9667
Epoch 488/500
 - 2s - loss: 4.9855e-04 - acc: 1.0000 - val_loss: 0.1873 - val_acc: 0.9667
Epoch 489/500
 - 4s - loss: 2.6213e-04 - acc: 1.0000 - val_loss: 0.1606 - val_acc: 0.9667
Epoch 490/500
 - 2s - loss: 3.0136e-04 - acc: 1.0000 - val_loss: 0.1900 - val_acc: 0.9667
Epoch 491/500
 - 2s - loss: 3.4222e-04 - acc: 1.0000 - val_loss: 0.1988 - val_acc: 0.9722
Epoch 492/500
 - 2s - loss: 3.2482e-04 - acc: 1.0000 - val_loss: 0.2022 - val_acc: 0.9722
Epoch 493/500
 - 2s - loss: 0.0013 - acc: 0.9994 - val_loss: 0.2077 - val_acc: 0.9722
Epoch 494/500
 - 2s - loss: 0.0012 - acc: 0.9994 - val_loss: 0.2234 - val_acc: 0.9667
Epoch 495/500
 - 2s - loss: 1.2714e-04 - acc: 1.0000 - val_loss: 0.2246 - val_acc: 0.9667
Epoch 496/500
 - 2s - loss: 0.0016 - acc: 0.9994 - val_loss: 0.2041 - val_acc: 0.9667
Epoch 497/500
 - 2s - loss: 4.9365e-04 - acc: 1.0000 - val_loss: 0.2004 - val_acc: 0.9667
Epoch 498/500
 - 2s - loss: 0.0028 - acc: 0.9988 - val_loss: 0.2037 - val_acc: 0.9667
Epoch 499/500
 - 2s - loss: 6.6917e-05 - acc: 1.0000 - val_loss: 0.2065 - val_acc: 0.9722
Epoch 500/500
 - 2s - loss: 0.0018 - acc: 0.9994 - val_loss: 0.1691 - val_acc: 0.9611
正解率
99.61046188091264

RPi 3Bより速い!?