Raspberry Piを使ってMCP3208によりAD変換しリアルタイムグラフ化
この記事は少し古いので、ソースコードにあるplt.draw()をplt.pause(.01)に変更する必要があります。詳細は「GrovePi+の温湿度センサー(DHT22)からのデータをmatplotlibでリアルタイムグラフ化」を見てください。
今度は、Raspberry Pi2を使ってMCP3208によりpython3を用いてAD変換しリアルタイムグラフ化しモニタを試みたのでそれを備忘録とします。
python3を用いるに当たってWebIOPiによりMCP3208からA/D(アナログ/デジタル)変換するためWebを参考にしようとしましたがうまくいかず、「最新RaspberryPiで学ぶ電子工作」金丸 隆志著(BLUE BACKS)のp129からを参考にしました。リアルタイムグラフ化は再び「Raspberry Pi2を使って温度、湿度についてDHT11センサーによりpython3でグラフ化しモニタ」を改変しました。
写真中央右よりがMCP3208
まず、MCP3208からA/D変換ですが、「最新RaspberryPiで学ぶ電子工作」に詳細は載っていますのでこの本を購入されてはと思います。python3のソースコードはp139から載っておりますが36行目からを削除してファイルの名前も「mcp3208_01.py」に変更しました。
そして、リアルタイムグラフ化はmatplotlibを使用し以下のソースコードとなっています。
python3を用いるに当たってWebIOPiによりMCP3208からA/D(アナログ/デジタル)変換するためWebを参考にしようとしましたがうまくいかず、「最新RaspberryPiで学ぶ電子工作」金丸 隆志著(BLUE BACKS)のp129からを参考にしました。リアルタイムグラフ化は再び「Raspberry Pi2を使って温度、湿度についてDHT11センサーによりpython3でグラフ化しモニタ」を改変しました。
写真中央右よりがMCP3208
まず、MCP3208からA/D変換ですが、「最新RaspberryPiで学ぶ電子工作」に詳細は載っていますのでこの本を購入されてはと思います。python3のソースコードはp139から載っておりますが36行目からを削除してファイルの名前も「mcp3208_01.py」に変更しました。
そして、リアルタイムグラフ化はmatplotlibを使用し以下のソースコードとなっています。
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import pygame
from pygame.locals import *
import serial
import sys
import time
import datetime
import RPi.GPIO as GPIO
from time import sleep
from matplotlib.font_manager import FontProperties#日本語化に必要
from mcp3208_01 import readadc#mcp3208_01.pyをインポート
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()# ピンの名前を変数として定義
SPICLK = 11
SPIMOSI = 10
SPIMISO = 9
SPICS = 8
# SPI通信用の入出力を定義
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICS, GPIO.OUT)font_path = '/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf'#日本語化
font_prop = FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_prop.get_name()def main():
ads0 = [0]*100 # ch0格納
ads1 = [0]*100 # ch1格納
t = np.arange(0,100,1)
plt.ion()
pygame.init() # Pygameを初期化
screen = pygame.display.set_mode((300, 100)) # 画面作成(横300×100)
pygame.display.set_caption("傾斜角度") # タイトルバー
font = pygame.font.Font(None, 50) # 文字の設定while True:
screen.fill((0,0,0)) # 画面のクリア
result0 = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS) # ch0のデータ
result1 = readadc(1, SPICLK, SPIMOSI, SPIMISO, SPICS) # ch1のデータ
ad0 = str(result0) # ch0を文字列にする
ad1 = str(result1) # ch1を文字列にする
text = font.render(ad0 + "," + ad1 + "", False, (255,255,255)) # 表示する文字の設定
screen.blit(text, (10, 10)) # レンダ,表示位置
pygame.display.flip() # 画面を更新して、変更を反映
# 温度データのリスト更新
ads0.pop(99)
ads1.pop(99)
ads0.insert(0,float(ad0)) # 文字列にしたデータを少数を含む数値に変換
ads1.insert(0,float(ad1))
# グラフ表示設定
line1, = plt.plot(t*2.43+1.215, ads0, 'b-',label="ch0") # X軸を2秒になるように調整、Y軸更新
line1.set_ydata(ads0)
line2, = plt.plot(t*2.43+1.215, ads1, 'r-',label="ch1") # X軸を2秒になるように調整、Y軸更新
line2.set_ydata(ads1)
plt.title("Real-time ch0 ch1")
plt.xlabel("Time [s]")
plt.ylabel("入力")
plt.legend()
plt.grid()
plt.xlim([1,200])
plt.ylim([0,4095])
plt.draw()
plt.clf()
for event in pygame.event.get():
# 終了ボタンが押されたら終了処理
if event.type == QUIT:
pygame.quit()
plt.close()
sys.exit()if __name__ == '__main__':
main()
ソースを読んでもらえば分かるのですが、X軸の秒数に出来るだけあわせるように調整しておりますが、若干誤差が出てきます。またグラフ化は時間がかかるため2.43秒に1回のデータしか抽出出来ませんでした。もっと早いスパンでデーターが必要な場合matplotlibでは対応が難しいかもしれません。
さて、こちらのグラフ化ではch0に白色LED、ch1に赤色LEDを光センサーとして用いました。「作って楽しい!ラズパイ・プログラミング」松原 拓也著(日経BPパソコンベストムック)のp109に載っていました。しかしながら、白色LEDを光センサーとして用いた場合、息を吹きかけたり、静電気を蓄えた物差しをかざしたりするとなぜか値が高くなったりします。それぞれ、1番目のグラフの130s後と60s後のピークがそれです。
写真は静電気を蓄えた物差しを近づけたところ
また、白色LEDは薄い光にたいしての感度が低く真っ暗なところから部屋の照明をつけたところ(10s後から)では、白色LEDでは変化がないのに赤色LEDでは500程度の値(Vではありません)に上がっています。
一方、昼にカーテンを開け閉めして強い光(直射日光)をあてた場合、白色LEDは1400程度の値を示していますが、赤色LEDは700程度の値に止まっています。(2番目のグラフ120s後から)さらに、息を吹きかけた場合今度は白色LEDは600程度の谷を作りました。(2番目のグラフ80s後から)続いて、カーテンを閉めて直射日光をさえぎった場合だら下がりで値30程度まで下がります(2番目のグラフ40s後から)
これらのことから考えると、白色LEDは光にだけ反応するのではなく熱や静電気にも反応することが推測されます。光にだけ反応するのであれば急峻なグラフとなるはずです。白色LEDは光センサーとして活用するには不向きな面があるようです。まあ、元々光を生み出すための素子なので実験用に光センサーにも使えると言う程度で考えるべきでしょう。
<当ブログ内の関係記事>
Raspberry Piを使って温度、湿度についてDHT11センサーによりリアルタイムグラフ化(三軸)(その2)
さて、こちらのグラフ化ではch0に白色LED、ch1に赤色LEDを光センサーとして用いました。「作って楽しい!ラズパイ・プログラミング」松原 拓也著(日経BPパソコンベストムック)のp109に載っていました。しかしながら、白色LEDを光センサーとして用いた場合、息を吹きかけたり、静電気を蓄えた物差しをかざしたりするとなぜか値が高くなったりします。それぞれ、1番目のグラフの130s後と60s後のピークがそれです。
写真は静電気を蓄えた物差しを近づけたところ
また、白色LEDは薄い光にたいしての感度が低く真っ暗なところから部屋の照明をつけたところ(10s後から)では、白色LEDでは変化がないのに赤色LEDでは500程度の値(Vではありません)に上がっています。
一方、昼にカーテンを開け閉めして強い光(直射日光)をあてた場合、白色LEDは1400程度の値を示していますが、赤色LEDは700程度の値に止まっています。(2番目のグラフ120s後から)さらに、息を吹きかけた場合今度は白色LEDは600程度の谷を作りました。(2番目のグラフ80s後から)続いて、カーテンを閉めて直射日光をさえぎった場合だら下がりで値30程度まで下がります(2番目のグラフ40s後から)
これらのことから考えると、白色LEDは光にだけ反応するのではなく熱や静電気にも反応することが推測されます。光にだけ反応するのであれば急峻なグラフとなるはずです。白色LEDは光センサーとして活用するには不向きな面があるようです。まあ、元々光を生み出すための素子なので実験用に光センサーにも使えると言う程度で考えるべきでしょう。
<当ブログ内の関係記事>
Raspberry Piを使って温度、湿度についてDHT11センサーによりリアルタイムグラフ化(三軸)(その2)
« 北朝鮮のミサイル発射に全漁連が陳情したことに思う | トップページ | 「戦争を始めるのは誰か」副題「歴史修正主義の真実」渡辺 惣樹著(文春新書)を読んで »
「パソコン・インターネット」カテゴリの記事
- logicool M720 Triathlon マルチデバイスマウスが故障(2022.08.20)
- UbuntuのFirefoxだと雑音が入る(未解決)(2022.02.13)
- イントロンのブログが60,000カウントを達成(2022.01.13)
- GrovePi+をRaspberry Pi 4に導入してみた(上手くゆかなかった)(2021.12.26)
- Raspberry Pi 4でVLCメディアプレイヤー起動時にフリーズがなぜか解消(2021.12.20)
« 北朝鮮のミサイル発射に全漁連が陳情したことに思う | トップページ | 「戦争を始めるのは誰か」副題「歴史修正主義の真実」渡辺 惣樹著(文春新書)を読んで »


コメント