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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

解決済

raspberrypi4を用いた赤外線センサの同時接続

Moti
Moti

総合スコア1

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

4回答

0リアクション

1クリップ

320閲覧

投稿2022/09/28 15:27

前提

 raspberry pi4と9つの赤外線センサを用いて赤外線センサ(VL53L1X使用 レーザー測距センサモジュール(ToF))を9つ同時に動作させるようなシステムを作っています。ネットで配線やプログラムを調べ、参考にしたのですが実行するとエラーをはいて動きません。アドレスを認識していないかと思われます。

実現したいこと

 raspberry pi4を用いて赤外線センサ9個を同時に計測する。

補足情報

・使用センサ
赤外線センサ VL53L1X使用 レーザー測距センサモジュール(ToF)
https://akizukidenshi.com/catalog/g/gM-14249/

・配線
イメージ説明
イメージ説明

・参考サイト

  1. 赤外線センサのアドレス変更のためプログラム

https://team432.jpn.org/?p=380

  1. 参考にした赤外線センサVL53L1Xの計測プログラム 

https://qiita.com/BlueWindows/items/d98b323f789bdc62fc3b

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

python

import sys sys.path.insert(0, "/usr/local/lib/python2.7/dist-packages") import VL53L1X import time import csv from datetime import datetime from collections import namedtuple import RPi.GPIO as GPIO gpio_bcm1 = 4 gpio_bcm2 = 5 gpio_bcm3 = 6 gpio_bcm4 = 13 gpio_bcm5 = 16 gpio_bcm6 = 17 gpio_bcm7 = 18 gpio_bcm8 = 19 gpio_bcm9 = 20 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) try: num = 0 GPIO.setup(gpio_bcm1, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm2, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm3, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm4, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm5, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm6, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm8, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(gpio_bcm9, GPIO.OUT, initial=GPIO.LOW) time.sleep(0.5) GPIO.output(gpio_bcm1, GPIO.HIGH) time.sleep(0.3) sensor1 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor1.change_address=0x30 GPIO.output(gpio_bcm2, GPIO.HIGH) time.sleep(0.3) sensor2 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor2.change_address=0x31 GPIO.output(gpio_bcm3, GPIO.HIGH) time.sleep(0.1) sensor3 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor3.new_address=0x32 GPIO.output(gpio_bcm4, GPIO.HIGH) time.sleep(0.1) sensor4 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor4.new_address=0x33 GPIO.output(gpio_bcm5, GPIO.HIGH) time.sleep(0.1) sensor5 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor5.new_address=0x34 GPIO.output(gpio_bcm6, GPIO.HIGH) time.sleep(0.1) sensor6 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor6.new_address=0x35 GPIO.output(gpio_bcm7, GPIO.HIGH) time.sleep(0.1) sensor7 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor7.new_address=0x36 GPIO.output(gpio_bcm8, GPIO.HIGH) time.sleep(0.1) sensor8 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor8.new_address=0x37 GPIO.output(gpio_bcm9, GPIO.HIGH) time.sleep(0.1) sensor9 = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) sensor9.new_address=0x38 sensor1.open() sensor1.start_ranging(1) sensor1.set_distance_mode(1) sensor2.open() sensor2.start_ranging(1) sensor2.set_distance_mode(1) sensor3.open() sensor3.start_ranging(1) sensor4.open() sensor4.start_ranging(1) sensor5.open() sensor5.start_ranging(1) sensor6.open() sensor6.start_ranging(1) sensor7.open() sensor7.start_ranging(1) sensor8.open() sensor8.start_ranging(1) sensor9.open() sensor9.start_ranging(1) while True: print("I2C Distance\n") print("-----------------\n") time.sleep(0.8) distance_mm = sensor1.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm)) time.sleep(0.8) distance_mm2 = sensor2.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm2)) time.sleep(0.8) distance_mm3 = sensor3.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm3)) time.sleep(0.8) distance_mm4 = sensor4.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm4)) time.sleep(0.8) distance_mm5 = sensor5.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm5)) time.sleep(0.8) distance_mm6 = sensor6.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm6)) time.sleep(0.8) distance_mm7 = sensor7.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm7)) time.sleep(0.8) distance_mm8 = sensor8.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm8)) time.sleep(0.8) distance_mm9 = sensor9.get_distance() print("Time: {} Distance: {}mm".format(datetime.utcnow().strftime("%S.%f"), distance_mm9)) time.sleep(0.8) print(num) time.sleep(1) num=num+1 if(num >= 100): break except KeyboardInterrupt: print("finishing...") if(num == 100): sensor1.stop_ranging() sensor1.close() GPIO.output(gpio_bcm1, GPIO.LOW) sensor2.stop_ranging() sensor2.close() GPIO.output(gpio_bcm2, GPIO.LOW) sensor3.stop_ranging() sensor3.close() GPIO.output(gpio_bcm3, GPIO.LOW) sensor4.stop_ranging() sensor4.close() GPIO.output(gpio_bcm4, GPIO.LOW) sensor5.stop_ranging() sensor5.close() GPIO.output(gpio_bcm5, GPIO.LOW) sensor6.stop_ranging() sensor6.close() GPIO.output(gpio_bcm6, GPIO.LOW) sensor7.stop_ranging() sensor7.close() GPIO.output(gpio_bcm7, GPIO.LOW) sensor8.stop_ranging() sensor8.close() GPIO.output(gpio_bcm8, GPIO.LOW) sensor9.stop_ranging() sensor9.close() GPIO.output(gpio_bcm9, GPIO.LOW) GPIO.cleanup() print("finish!!")

試したこと

 赤外線センサと配線を1セットずつ最大9個まで増やしていき、それを3回行いエラーの有無を確認した結果、センサの数が増えるほどエラーが出る可能性が高かった。

・センサを1個ずつ増やしていった時のエラーの有無

センサの数1回目2回目3回目
1
2
3
4
5
6
7
8
9

メッセージ

 もしプログラムや配線方法が間違っていて改善点がある場合ご指摘くださると幸いです。よろしくお願いします。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

thkana

2022/09/28 22:14

ToFセンサを「赤外線センサ」と呼ぶのはなにか違う気がしますがそれはともかく。 秋月の取説( https://akizukidenshi.com/download/ds/akizuki/ae-vl53l1x.pdf )を見ると、センサ基板内ではI2Cのバス側はプルアップされていませんが、どこかでちゃんとプルアップしているのですか? また、配線長はどのくらいですか? 経験上I2Cは数十cmも引っ張ると苦しいように思います。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。