電子工作 · Python · Raspberry Pi

ラズパイを使ってGP2Y0E03(距離センサー)のi2cアドレスを変更したときのメモ

GP2Y0E03はアナログ出力のほかにI2Cに対応しており複数(最大16個)接続することができます。しかし、工場出荷時にはI2Cアドレスが0x40に設定されているため、このまま複数個繋げると重複してしまい正常に動作しません。これを正常に動かすためにそれぞれに固有のI2Cアドレスを振る必要があります。ここではそのI2Cアドレスを変更する手順をまとめました。

使用するもの

  • GP2Y0E03(シャープ測距モジュール(I2C&アナログ))
  • Raspberry Pi 3(2とかでも良いと思います)
  • ジャンパー線(GP2Y0E03にハンダ付けします)

前提

  • Raspberry Pi に最新のRaspbianがインストールされていること
  • Pythonが動作すること(2でも3でもよいと思います)
  1. 8番にジャンパー線をハンダ付けします。8番はコネクターに線が出ていないのではんだ付けする必要があります。


  2. このように接続します。
    img_1136
  3. Raspberry PiのRaspbianをupdate/upgeadeします。
     $ sudo apt-get update ; sudo apt-get upgrade 
  4. Pythonのi2c用ライブラリsmbusをインストールします。
    $ sudo apt-get install python-smbus
    
  5. i2cdetectを使ってi2cアドレスを確認します。defaultの状態は0x40であることが確認できます。
    $ sudo i2cdetect -y 1
    
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    
  6. python3の更新スクリプトを用意します。
    ソースコードの6行目のnew_addを適宜目的のi2cアドレスに変更してください。
    0x20にしたい場合は0x04を指定するなど、8で割った値を指定するようです。
    今回は、0x10にしたいので0x02を指定しています。
    gp2y0e03_i2c_add_chg.py

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import smbus
    import time
    now_add = 0x40 # defaultのアドレス
    new_add = 0x02 # 変更先のアドレス 0x10
    i2c = smbus.SMBus(1)
    # Vpp OFF val = input('Vpp端子をOFFにしてください。準備ができたらEnterを押下してください')
    print('stage1') i2c.write_byte_data(now_add, 0xEC, 0xFF)
    time.sleep(0.1)
    # Vpp ON val = input('Vpp端子をONにしてください。準備ができたらEnterを押下してください')
    print('stage2')
    i2c.write_byte_data(now_add, 0xC8, 0x00)
    time.sleep(0.1)
    print('stage3')
    i2c.write_byte_data(now_add, 0xC9, 0x45)
    time.sleep(0.1)
    print('stage4')
    i2c.write_byte_data(now_add, 0xCD, new_add)
    time.sleep(0.1)
    print('stage5')
    i2c.write_byte_data(now_add, 0xCA, 0x01)
    time.sleep(0.1)
    val = input('Vpp端子をOFFにしてください。準備ができたらEnterを押下してください')
    
    # Vpp OFF 
    print('完了')
    
  7. スクリプトを実行します。
    このとき画面に「Vpp端子をOFFにしてください。」が表示されたとき上記2の図の※のジャンパー線を外します。また、「Vpp端子をONにしてください。」のとき上記2の図の※のジャンパー線を繋ぎます。

    $ python3 gp2y0e03_i2c_add_chg.py
    Vpp端子をOFFにしてください。準備ができたらEnterを押下してください
    stage1
    Vpp端子をONにしてください。準備ができたらEnterを押下してください
    stage2
    stage3
    stage4
    stage5
    Vpp端子をOFFにしてください。準備ができたらEnterを押下してください
    完了
    
  8. 再度i2cdetectを使ってi2cアドレスを確認します。このときGP2Y0E03を再起動する必要がありますので、Raspberry Piに繋げている赤いジャンパー線を一度外して再度繋げてください。アドレスが0x40から0x10に変更されていることが確認できます。
    $ sudo i2cdetect -y 1
    
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    
  9. 注意
    原因はわからないですが、2回アドレスを変更すると下記のようにアドレスが出力されなくなりますのでご注意ください。使用できなくなります!

    $ sudo i2cdetect -y 1
    
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    
  10. 参考
    データシート http://akizukidenshi.com/download/ds/sharp/gp2y0e.pdf
    秋月電子 http://akizukidenshi.com/catalog/g/gI-07547/
    創活こんぺさん支部 http://bmj0312.blog.shinobi.jp/robot/sharp測距モジュールgp2y0e03
    technology memo http://technology-memo.seesaa.net/article/406837556.html

 

Linux · OpenCV · Python · Ubuntu · Windows

Windows Subsystem for Linux(WSL)にOpenCV3.2とPython3.5をインストール(その2)

前回は、WSLのインストールを行いましたので、今回はOpenCVとPython3.5をインストールします。Python3.5はパッケージからインストールしますが、OpneCV3.2はソースコードをビルドして構築します。

      1. はじめにシステム環境をアップデートします。少し時間がかかります。
        $ sudo apt-get update ; sudo apt-get upgrade
        [sudo] password for ubuntu:
        
      2. ビルドに必要なパッケージをインストールします。
        $ sudo apt-get install build-essential git cmake \
            pkg-config libjpeg-dev libtiff5-dev libjasper-dev \
            libpng12-dev libavcodec-dev libavformat-dev \
            libswscale-dev libv4l-dev libgtk2.0-dev \
            libatlas-base-dev gfortran
        
      3. Python3関連をセットアップします。
        $ sudo apt-get install python3-dev python3-pip
        $ sudo pip3 install numpy
        
      4. opencv,opencv_contribをダウンロードします。
        $ cd ~
        $ git clone https://github.com/Itseez/opencv.git
        $ cd opencv
        $ git checkout 3.2.0
        $ cd ..
        $ git clone https://github.com/Itseez/opencv_contrib.git
        $ cd opencv_contrib/
        $ git checkout 3.2.0
        $ cd ..
        
      5. cmakeします。
        $ cd opencv
        $ mkdir build
        $ cd build
        $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D INSTALL_PYTHON_EXAMPLES=ON \
            -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
            -D BUILD_EXAMPLES=ON ..
        
      6. makeします。
        $ make
        $ sudo make install
        $ sudo ldconfig
        
      7. 今後実行するときに、以下のようなエラーが発生し動きませんので、ここで対応しておきます。
        cannot enable executable stack as shared object requires: Invalid argument
        

        execstackをインストールして実行します。

        $ sudo apt-get install execstack
        $ sudo /usr/sbin/execstack -c /usr/local/lib/libopencv_*
        
      8. 正常にインストールされているか、バージョンを確認します。
        • pythonのバージョン確認
          $ python3 -V
          Python 3.5.2
          
        • OpenCVのバージョン確認
          OpenCVは、pythonのコードを使ってバージョンを取得します。
          ファイル名を”version.py”として下記2行のファイルを作成し実行します。
          vi ~/version.py

          import cv2
          print(cv2.__version__)
          
          $ python3 ~/version.py
          3.2.0
          

         

      9. 動作確認用にサンプルプログラムを用意します。
        出力先に、Windowsのデスクトップを指定してみました。25行目の「*****」はご利用のWindowsユーザ名を指定してください。vi ~/example.py

        #coding: utf-8
        
        import cv2
        
        import numpy as np
        
        faceCascade = cv2.CascadeClassifier('/home/ubuntu/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
        
        img = cv2.imread('/home/ubuntu/opencv/samples/data/lena.jpg', cv2.IMREAD_COLOR)
        
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        
        face = faceCascade.detectMultiScale(gray, 1.1, 3)
        
        if len(face) > 0:
        
          for rect in face:
        
            cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2)
        
        else:
        
          print ("no face")
        
        cv2.imwrite('/mnt/c/Users/*****/Desktop/detected.jpg', img)
        
      10. 実行
        $ python3 ~/sample.py
        
      11. 実行結果
        正常に動作していれば、WindowsのデスクトップにLenaさんが表示されているはずです。lena
      12. 予定したところまで確認できたので、完了とします。
        今回触ってみてた感想は、こんなに簡単にLinuxが動かてしまうのか・・・という驚きでした。Windowsアプリとして動作するので、インストールも削除も簡単です。不要になったら削除すればよいのはすごくよいことだと思います。
Linux · OpenCV · Python · Ubuntu · Windows

Windows Subsystem for Linux(WSL)にOpenCV3.2とPython3.5をインストール(その1)

2017 年 10 月 17 日にリリースされた Windows 10 Fall Creators Update にて、Windows Subsystem for Linux(WSL)が正式にリリースされました。

これにより、Windows10でUbuntuが正式に動くようになりましたので、試しにOpenCV3.2、Python3.5をインストールしてみたいと思います。

対象OS:Windows 10 home (Fall Creators Update済み)

    1. コントロールパネルを開きます。
      コルタナに「コントロールパネル」を記入すると、検索結果に表示されますので、それをクリックします。
      OpenCV3.2-00
    2. プログラムをクリックします
      図1
    3. プログラムと機能の下の「Windowsの機能の有効化または無効化」をクリックします。
      図2
    4.  「Windows の機能の有効化または無効化」で「Windows Subsystem for Linux」にチェックして「OK」をクリックします。。
      名称未設定5
    5. 続いてMicrosoft StoreでUbuntuをダウンロードします。
      Windowボタンをクリックし、メニューから「Microsoft Store」をクリックします。
      名称未設定2
    6. Microsoft Storeで「Ubuntu」を検索し、Ubuntuをダウンロードします。
      ubuntu
    7. Ubuntuがダウンロードできました。起動してみます。
      図3-1
    8. Ubuntuを起動すると、新しいユーザ名とパスワードを聞いてくるので入力します。

      ここではユーザは、ubuntuにして、パスワードは適当に決めました。

      Enter new UNIX username: ubuntu
      Enter new UNIX password:
      Retype new UNIX password:
      
      passwd: password updated successfully
      Default UNIX user set to: ubuntu
      To run a command as administrator (user "root"), use "sudo <command></command>".
      See "man sudo_root" for details.
      
      ubuntu@*****:~$
      

       

    9. 無事ユーザが作られました。次回は、OpenCV3.2とPython 3.5をインストールします。