電気工作の備忘録

Python、Raspberrypi、機械学習、電気工作 の備忘録(初心者)

電子工作 ラズパイ設定

本記事は下記に引っ越ししました。
にわか電子工作ファン

こんにちは、ペキです。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略 ”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

ラズパイ設定

この本を進める上で必要となるラズベリーパイの設定について記載します。
家にwifi 環境とHDMI入力可能なディスプレイがある前提の記載となります。

・評価部材

ラズベリーパイ4キット

内容物の詳細
Raspberry Pi OSがプリロードされた64GB Marstudy HC10 Microカード
 OSがプリロードされていていい。最初のパソコンでやる作業がなくなる。

ラズベリーパイ4ケース
 GPIOなど外部端子の事をよく考えられていて良い。他社を買う場合は結構適当なのがあるのでよく見て購入する必要あり。

・ファンおよびヒートシンクセット
 部屋の温度25℃ぐらいでCPUフル負荷にする場合はファンは必須。

・高品質Micro HDMI-HDMIケーブル(1.5M) x2
 1本は必須。でもデュアルモニタしないきもするので2本はいらないかも。

・5.1V 3.5A USB-C Raspberry Pi 4電源
 電源をOFFする際、電源をコンセントで抜き差しするのは面倒だし本体側でコードを抜くのも基盤に付いたコネクタが壊れそう。これはON/OFFスイッチがついていて便利。

・USB-CおよびUSB-A互換 MicroSDカードリーダー
 パソコンでmicroSDカードを編集する際に必要。OSがプリインストールされたmicroSDカードが付いているのでこれはいらないかも。

・キーボード(USB)、マウス(USB)

USB接続ならなんでもOK.ただ、ケーブルが鬱陶しいので下記がオススメ
Ewin®2.4kHz無線 マウス付きキーボード

・モバイルバッテリー(USBーC)

持ち運ぶなら必要
・5V(3A)のモバイルバッテリ
・ケーブル USBーC to 

OSがプリロードされているのであとは本体にmicroSDを入れて電気入れれば起動します。



ここまで読んでいただきありがとうございました。

にほんブログ村 IT技術ブログへ

電子工作 LEDを光らす

本記事は下記に引っ越ししました。
にわか電子工作ファン


こんにちは、ペキです。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

1章 多様なLEDを光らす

・評価部材

 ・ラズパイ
  ・ディスプレイケーブル、ディスプレイ
  ・キーボード、マウス、wifi環境
  ・電源
  ・ジャンパーケーブルx2
  ・ブレッドボード
 ・抵抗 100Ω
 ・LED(赤) ”OSDR3133A”
 ・LED(3色) ”OSTA5131A-R/PG/B”

・部品の決定

・LED(赤)

  ・本に記載の部品(LED)は無かったのですが家に”OSDR3133A”が転がっていたのでこれで進めます。

  ・”OSDR3133A”の特性
   DC Forward Curent(If):30mA
   DC Forward Voltage(Vf):typ 2.0V
   ※ぐぐるとあった。

・電流制限抵抗の決定

  ラズパイ電源が3.3vなので
  3.3V-2.0V(Vf) = 1.3V
  30mA(If) から、半分の15mAで光らす
  として1.3V/15mA=87Ω
  家に100Ωが転がっているので
  100Ωとした。なので、
  1.3V/100Ω=13mAぐらいで光る予定

動作確認環境

raspberry@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
raspberry@raspberrypi:~ $ python --version
Python 3.9.2

・プログラムの実行

・pigpioデーモンの起動

[実行]
raspberry@raspberrypi:~ $ sudo pigpiod
これを実行しないとpigpiodが使えない。

デーモン?ってなにって思い調べてみると、
バックグラウンドで動く常駐プログラムの事。
MITの開発者が呼び始めたのがもととなっており、
古代ギリシャでは神の使いでいつも自分の近くにいる
ものをデーモンと呼んでいたからみたい。
ウィキペディアより
コンピューターに常駐プログラム(デーモン)を入れる私は神って事か・・?


・プログラム ハードPWM

[led_pwm_hw.py]

import sys
import pigpio 

LED_PIN = 12
LED_PWM_FREQUENCY = 8000
pwm_duty = float(sys.argv[1])

pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)
pi.hardware_PWM(LED_PIN, int(LED_PWM_FREQUENCY), int(pwm_duty * 1e6))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.1
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.5
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 1.0
0.1<0.5<1.0で強く光る。点灯


・プログラム 別の方法

[led_pwm_sw.py]

import time
import pigpio

LED_PIN = 12
pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_PIN, 1)
    time.sleep(0.5)
    pi.write(LED_PIN, 0)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw.py
0.5秒光り0.5秒消える 点滅

・プログラム 3色LED

[led_pwm_sw_rgb.py]

import sys
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
LED_PWM_FREQUENCY = 8000
LED_PWM_RANGE = 100
r_pwm_duty = float(sys.argv[1])
g_pwm_duty = float(sys.argv[2])
b_pwm_duty = float(sys.argv[3])
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)
pi.set_PWM_frequency(LED_R_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_G_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_B_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_range(LED_R_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_G_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_B_PIN, LED_PWM_RANGE)
pi.set_PWM_dutycycle(LED_R_PIN, int(r_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_G_PIN, int(g_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_B_PIN, int(b_pwm_duty * LED_PWM_RANGE))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb.py 0.0 0.9 0.0
RGBとdutyの組み合わせでいろいろな色を表示できる 点灯

・プログラム 3色LED順次発色

[led_pwm_sw_rgb2.py]

import time
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_B_PIN, 0)
    pi.write(LED_R_PIN, 1)
    time.sleep(0.5)

    pi.write(LED_R_PIN, 0)
    pi.write(LED_G_PIN, 1)
    time.sleep(0.5)
    
    pi.write(LED_G_PIN, 0)
    pi.write(LED_B_PIN, 1)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb2.py
3色を0.5秒ごとに順に光らせる


とりあえず光らせることができた。

・疑問点など

・pwmのソフトのプログラムがわからない。簡単なプログラムが見つけられない。
・pwmのハード制御がソフト制御より正確って書いてあったけど本当か確かめたい。ある周波数までは精度変わらないとか無いのか❓


ここまで読んでいただきありがとうございました。

にほんブログ村 IT技術ブログへ

クリップボードの画像を日付ファイル名で保存するプログラムをpythonで書いてみた

最近、作業記録として画面のハードコピーを沢山撮る事があります。

Printscreenボタンを押すと画面がクリップボードに一時的に保存されます。
その画像をファイルに保存するのですが、
貼り付け可能なツール(エクセルなど)を立ち上げて、
そこに画像を貼付けて、保存場所を指定して、名前を付けて、保存、、、と意外と手間です。

そこで、Printscreenで画面をクリップボードに一時保存したら
その画像を日付ファイル名で保存するプログラムを作りました。

このプログラムをバッチファイルに記載して
更にバッチファイルをショートカットキーで呼び出せるようにすると
Printscreenボタン → ショートカットキー
の2アクションで画像が保存できます。手間が少なくてとても楽です。

また時系列でデータが保存されているので後で必要なデータだけピックアップしやすく
削除もしやすいです。

[動作確認環境]
windows10
Python 3.7.4
Pillow 6.2.0

#クリップボードの画像を日付ファイル名で保存するプログラム
#日時の標準ライブラリをインポート
import datetime
dt_now = datetime.datetime.now()

#isoformat()で文字列に変換。          →2018-12-31T05:00:30.001000
#"."(ドット)で区切って左側を抜き出す。→2018-12-31T05:00:30
#":"は削除し最後に.jpgを付ける        →2018-12-31T050030.jpg
now_s = dt_now.isoformat().split('.')[0].replace(':', '') + ".jpg"

#画像処理ライブラリpillowをインポート
from PIL import ImageGrab

#クリップボードの画像を取得
im = ImageGrab.grabclipboard()

#画像を日付ファイル名で保存
#クリップボードに画像が無い時は何も保存されません。エラーも表示されません。
im.save(now_s)
〜

にほんブログ村 IT技術ブログへ