質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

ラズパイ ADCして情報を取得するには。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,590

score 13

やりたいこと

Raspberry Pi Zero WHでSPI接続のMCP3008を使って、可変抵抗の値(0-1023)を取得したいです。

Vrefは、3.3Vに繋いでいます。

下記の2つの方法を試しましたが、思ったような結果になりませんでした。
その1の方法で、かつ0-1023のデータが出力されたらな、、、と思っています。

やってみたこと その1

pigpioを使って、MCP3208(12bit)から取得しようとしてるページを発見して、これを利用したところ、可変抵抗の値は変化しました。0-4095の値が出力されていました。

import time
import pigpio

slct = 0 # +1 +1 # SPI接続機器の番号 chip select
baud = 50000     # 通信速度
flag = 0 # +256  # bin(256) = 0b100000000 は Aux SPI の利用フラグ
adch = 0         # MCP3208のCH0の番号

pi = pigpio.pi()
hndl = pi.spi_open(slct, baud, flag) # デバイスオープン

try:
  while True:
    cmnd = ( 0b00011000 + adch ) << 2
    c, raw = pi.spi_xfer(hndl,[cmnd,0,0]) # 最初の要素が命令の入力
    #
    #    [0][1][1][D2][D1][D0][0][0]
    #        |  |   |   |   |
    #        |  |  読み出しチャネルの指定
    #        | 1: シングルエンド
    #       [スタートビット]
    #
    data = ((raw[1] & 0b11111111) <<  4) + \
           ((raw[2] & 0b11110000) >>  4)
    print(c,raw,bin(data),data)
    time.sleep(1)

except KeyboardInterrupt:
    pi.spi_close(hndl)
    pi.stop()

しかし、1024段階の値が欲しいのです。

pigpio ライブラリの spi_xfer() 関数を用いて Raspberry Pi 3B から SPI 接続のA/Dコンバータ MCP3208 を利用する

やってみたこと その2

このページのgpiozeroを使ったPythonファイルを実行したところ、

#!/usr/bin/env python
from gpiozero import MCP3008
Vref = 3.29476

pot = MCP3008(channel=0)
print(str(pot.value * Vref) + "V")


「0.001609555446995512V」と表示され、可変抵抗を回しても変化しません。

5ドル!ラズパイ・ゼロ(Raspberry pi Zero)でIoT (9) A-Dコンバータの利用6 MCP3002/MCP3008

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

magurochanさん、

その1の方法ですが、MCP3008とMCP3208のデータシートをみたところ、形式が違うので、
その出力結果は、期待するものでないかもしれません。

MCP3008をもってないんですが、データシートからすると、以下のようなコードになりそうですが、どうでしょうか?

...
    #
    #   1バイト目 |   2バイト目           |   3バイト目 
    #   012345678 |0  1  2  3  4  5  6  7 |0  1  2  3  4  5  6  7  
    # D_out                          B9 B8 B7 B6 B5 B4 B3 B2 B1 B0   
    # D_in      1  1  D2 D1 D0 0  0  0  0 
    #           |  |   |  |  |
    #           |  |  読み出しチャネルの指定
    #           |  1: シングルエンド
    #        [スタートビット]
    #
    cmnd = (0b00001000  + adch) << 4
    c, raw = pi.spi_xfer(hndl, [ 1, cmnd, 0 ]) 
    data =  ((raw[1] << 8) + raw[2]) & 0x3FF
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/13 00:40

    実際に投稿されたコードで実行してみたところ、思ったように使えました。ありがとうございます。

    よければ、どういう風に変更したのか教えていただけませんか?

    キャンセル

  • 2020/01/13 03:05

    magurochanさん、

    MCP3008のデータシートを見て、その仕様にあわせたビット列を使用するように、コード内のコメントに書いたように実装しました。

    キャンセル

0

12ビットの数値を取得して、そのうちの上位10ビットをとってくればいいのです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

0-4095の値が出力されていました。
(略)
1024段階の値が欲しいのです。 

私だったら4で割ります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る