人感センサを使ってみる2

はじめに

前回の「人感センサを使ってみる1」は人感センサモジュールを使って、人を検知させました。今回は、ざっくりとソースコードの解説をメモしたいと思います。
▼前回
katsuyanote.hatenablog.com


目次

ソースコード

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import datetime

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
print("GPIO clean中...")
print("GPIO clean完了")
GPIO.setup(17, GPIO.IN)

def main():
        i = 1
        while True:
            i=human_senser(17,i)

###############################################
#関数:human_senser(x,y)
#引数:x(入力GPIOピン),y(数値)
#戻値:検出あり→y+1,検出なし→y
#役割:人感センサ入力GPIOピンをxで指定して、
#           引数yで検出した回数を表示させる為の初期値
#           を与えます。従って,yの数値は整数であれば問題
#           ありません。
#           関数を使用時は,戻値がありますので、適当に変数
#           に代入させてください。
#必要なimportモジュールは、
#import RPi.GPIO as GPIO
#from time import sleep
#import datetime
def human_senser(x,y):
        sleep(0.5)
        if(GPIO.input(x) == GPIO.HIGH):
                print(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') +
                ":" + str("{0:05d}".format(y)) + "回目の人感知")
                y = y + 1
                sleep(10)
        else:
                print(GPIO.input(x))
                sleep(3)
        return y
###############################################

if __name__ == '__main__':
    try:      
        main()     
    except KeyboardInterrupt:
        print("終了処理中...")
        pass      
    finally:
        GPIO.cleanup()
        print("GPIO clean完了")

コードポイント

このソースコードを読み解くポイントは下記の3つです。

(1)import文
(2)メイン文
(3)human_senser(x,y)関数

(1)import文について

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import datetime

1~3行目まではLED点灯のコードと同じです。今回異なるのは4行目だと思います。「datetime」は年月日時分秒を取得する為のライブラリです。人を感知した時に検出時刻を出力させる為にimportさせています。

(2)main文について

//13:
def main():
        i = 1
        while True:
            i=human_senser(17,i)

メイン文はたったこんだけです。human_senser(17,i)関数に変数iを入力して、その戻り値を再びhuman_senser(17,i)関数に変数iに引数として渡しています。この操作をループさせています。重要なことは、human_senser(x,y)と言う関数が繰り返し実行されていることです。

(3)human_senser(x,y)関数について

//32:
def human_senser(x,y):
        sleep(0.5)
        if(GPIO.input(x) == GPIO.HIGH):
                print(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') +
                ":" + str("{0:05d}".format(y)) + "回目の人感知")
                y = y + 1
                sleep(10)
        else:
                print(GPIO.input(x))
                sleep(3)
        return y

human_senser(x,y)関数の引数はxとyです。ここで引数とは関数が呼び出された時に数値をその関数内に引き渡す数値のことです。この関数では、呼び出されるとxとyを関数内に持っていきます。コードを見ると、xはGPIO.input(x)で使用していることから、どうやらGPIOピンを指定していることが分かります。次にyですが、if文中で「GPIOがHIGH」となれば、yは1プラスされます。それ以外の時はyはそのままの値となります。最後の行で「return y」でyの値を関数の戻り値(出力値)として返しています。
ここで、GPIO17には人感センサがついています。人感センサが検出したとき、センサ出力は3VつまりHIGHとなり、それ以外はLOWです。つまりここのコードでは人を検知した場合、yをカウントアップさせると言う機能を持っています。
尚、35-36行目はdatetimeライブラリを用いて、検出時刻をコマンドに出力(print)しています。このdatetimeライブラリの詳細はまたの機会に記述したいと思います。

久しぶりの投稿(練習)

はじめに

久々に投稿したいと思ったのですが、やり方が、、、

ということで、備忘録として残しておこうと思います。

目次

編集スタート

はてなブログにログインをして、右上から【ユーザー名】→【記事の管理】をクリックする。左側に【記事を書く】を選択すると、編集がスタートする。

編集モード

はてなブログの編集モードは、3つある。
(1)見たまま編集
(2)はてな記法
(3)Markdown
自分は(2)でしましょう!

構文

(1)小見出し

 *<b>小見出し</b>

「*」をつけなければ、目次みたいな感じになる。


(2)目次

 [:contents]

このを入れると、小見出し一覧が表示される。

(3)四角の枠

>||

||<

>は>、<は<で半角英数で書く。

(4)四角の枠(行番号付き)

>|python|

||<

>は>、<は<で半角英数で書く。
"||"の間にpythonと書く。ソースコードなど添付するときに役に立つ。

以上です。

人感センサを使ってみる1

はじめに

人感センサモジュールを使って、人を検知させたいと思います。検出したらコマンドに検出時間と検出回数を出します。

目次

使用部材

・ラズパイ本体
・ブレッドボード
・リード線
・焦電型赤外線センサーモジュール(人感センサモジュール)
akizukidenshi.com

ハード側

電子工作で良く使用される人感センサモジュールを使用しています。この人感センサの電源は5Vで、出力は3Vです。ラズパイのGPIOピンの入力は3Vですのでちょうど良いと思います。

f:id:KatsuyaNote:20181104124133p:plain
回路図

ソフト側

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import datetime

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
print("GPIO clean中...")
print("GPIO clean完了")
GPIO.setup(17, GPIO.IN)

def main():
        i = 1
        while True:
            i=human_senser(17,i)

###############################################
#関数:human_senser(x,y)
#引数:x(入力GPIOピン),y(数値)
#戻値:検出あり→y+1,検出なし→y
#役割:人感センサ入力GPIOピンをxで指定して、
#           引数yで検出した回数を表示させる為の初期値
#           を与えます。従って,yの数値は整数であれば問題
#           ありません。
#           関数を使用時は,戻値がありますので、適当に変数
#           に代入させてください。
#必要なimportモジュールは、
#import RPi.GPIO as GPIO
#from time import sleep
#import datetime
def human_senser(x,y):
        sleep(0.5)
        if(GPIO.input(x) == GPIO.HIGH):
                print(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') +
                ":" + str("{0:05d}".format(y)) + "回目の人感知")
                y = y + 1
                sleep(10)
        else:
                print(GPIO.input(x))
                sleep(3)
        return y
###############################################

if __name__ == '__main__':
    try:      
        main()     
    except KeyboardInterrupt:
        print("終了処理中...")
        pass      
    finally:
        GPIO.cleanup()
        print("GPIO clean完了")

参考ウェブサイト等

https://chasuke.com/motionsensor/

LTspiceで波形データをExcel保存

・今回は,シミュレーションで得られた波形をExcelで取り込む方法です。

→波形のデータを解析等に用いたいときに,Excelに保存しておくことでデータの扱いが簡単になり大変便利です。

※残念ながら,直接Excelに変換することはできません。

----------------------------------------------------------

・シミュレーションで波形まで出ている状態から説明に入ります。

 

ステップ

(1)LTspiceでTXTファイルとしてイクスポート

(2)Excelで読み込み

----------------------------------------------------------

(1)LTspiceでTXTファイルとしてイクスポート

 ・波形表示で[File]>[Export data as text]をクリックします。

 

f:id:KatsuyaNote:20181013131408p:plain

・上のようなウィンドウが現れます。Ctrlを押しながら出力したいデータをクリックして選択します。青くなった箇所が出力されます。また,右上の[Browse]から保存場所を変更することができます。

・[OK]をクリックするとテキストファイルが出力されます。

LTspiceはこれで終わりです。

 

----------------------------------------------------------

(2)Excelで読み込み

・新規でExcelを開きます。

・メインタブの[データ]>[テキストまたはCSVから]をクリックします。

・ファイルを選択してインポートします。

・最後に[読み込み]をクリックします。

 

 

以上,ありがとうございました。

RaspberryPiの基礎の基礎2

はじめに

「RaspberryPiの基礎の基礎1」では,取りあえずラズパイでLEDの点滅をさせました。今回はざっくりとソースコードの意味をブロック毎に分けてメモしたいと思います。コードの詳細な意味はまた今度ということにします。
▼前回
katsuyanote.hatenablog.com

目次

  • はじめに
  • ソースコード
  • 4つのポイント
    • ①import文について
    • ②GPIOピンの設定等の初期化について
    • ③メイン文について
    • ④メイン文の実行命令とプログラム終了命令

ソースコード

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) 
GPIO.cleanup()
print("GPIO clean完了")
GPIO.setup(17,GPIO.OUT)

def main(): 
    while True:
        GPIO.output(17,GPIO.HIGH)
        sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        sleep(0.5)

if __name__ == '__main__':  
    try:     
        main() 
    except KeyboardInterrupt:
    print("終了処理中...")
        pass
    finally:
        GPIO.cleanup()
    print("GPIO clean完了")
続きを読む

RaspberryPiの基礎の基礎1

はじめに

過去の記事と被る内容ですが,もう少し端的にメモとして残したいと思います。「RaspberryPiの基礎の基礎」は初心者が取りあえずラズパイを動作させて,流れを理解する為の内容となっています。尚,ラズパイの初期設定は割愛していますので,他のサイト等を参考にしてください。気が向いたら,いつの日か書くかもしれません。

目次

使用部材

・ラズパイ本体
・抵抗330Ω程度
・LEDダイオード
・リード線
・ブレッドボード

ハード側

ラズパイのピンを使って,下の回路図のように配線します。
グランド接続することを忘れないように注意してください。

f:id:KatsuyaNote:20181013151213p:plain
回路図

ソフト側

下のコードをコピペして,ラズパイのIDEL新規ファイルに適当に「.py」で保存してください。そして,実行(F5)をしてください。

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) 
GPIO.cleanup()
print("GPIO clean完了")
GPIO.setup(17,GPIO.OUT)

def main(): 
    while True:
        GPIO.output(17,GPIO.HIGH)
        sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        sleep(0.5)

if __name__ == '__main__':  
    try:     
        main() 
    except KeyboardInterrupt:
    print("終了処理中...")
        pass
    finally:
        GPIO.cleanup()
    print("GPIO clean完了")

実行すると,LEDが0.5秒間隔で点滅すれば成功です。もし,しない場合は以下の点を確認してください。

①LEDの向きは正しいか(アノードとカソード)
②ブレッドボードの導通箇所は正しく使えているか
③ピンの接続箇所が誤ってないか(1つずれていないか)
④コードのインテンドは正しいか(詳細は後日記述していきます)
⑤ショートさせていないか,又はオープンとなっていないか

はてなブログでソースコードの貼付け方法

はじめに

ウェブサイト等でソースコードの多くは綺麗に貼り付けられています。一方で私は以前まで,過去のブログを見ていただいてもわかる通り,ソースコードをそのままコピペして本文と同じように貼り付けていました。とても見にくく不細工ですので,今回はソースコードの貼付け方をメモしておきたいと思います。一回理解すれば簡単です。

はてなブログの設定

①新しく「記事を書く」をクリックしてください。
②記事の編集画面の左上に「見たまま」→「はてな記法」に変更します。
③いつものように記事を書くことができます。
(注意)ただし,太文字や見出し等の操作を行うと,若干HTML要素が含まれますが,自動でHTMLに変換してくれるので気にする必要はありません。プレビューで確認しつつ行えば良いと思います。

使い方

ソースコードの貼付け方をメモします。
下のように,>||と||<の間にソースコードを挟みます。また,最初の||の間にpythonと記述すれば,python言語としてソースコードを認識してくれます。

 >|python|
 print"hello world"
 x = 100
 ||<

実際に,上のように記述すると,

print"hello world"
x = 100

となります。