ネットが遅いとき windows10

光回線を契約しているのに何故かネットが遅いとき。

fast.comで調べてみると 90Mbpsくらいしか出ていない。

おそらくそれ、設定がおかしいです。

コントロールパネル>ネットワークとインターネット>ネットワーク接続

の中にイーサネットアイコンがあるので開いてみましょう。

イーサネットの状態>全般>接続 が速度=100Mbpsになっていませんか?

イーサネットの状態>全般>動作状況>プロパティ を開きましょう

ネットワーク>接続の方法>構成 をおして

詳細設定>プロパティ>速度とデュプレックス>値

が「オートデュプレックス」とか「100Mbps全二重通信」になっていたら、これがおかしいのです。

1.0Gbps全二重通信に変更しましょう。

これでOKです。

もういっかいfast.comで速度を確認してみてください。数百Mbpsに跳ね上がっているはずです。

もし、それでもだめな場合は、同じプロパティの中の省電力関係の項目をオフにしてみてください。

以上

 

 

 

 

ラズパイ4:ディスプレイに繋げない状態でVNC接続する方法

ラズパイ4をディスプレイにつないでいない状態の場合では、VNC接続しても画面が表示されません。

/boot/config.txt ファイルの中にhdmiの設定があるので

sudo nano /boot/config.txt で内容を確認して

hdmi_force_hotplug=1 の部分のコメントアウト「#」を削除して、有効化しましょう。

最後に、 sudo reboot すると、以後ディスプレイが接続されていなくてもVNC接続できるようになります。

FT232HとI2Cデバイスの複数接続(MPU-6050)

前回に引き続き

Windows10でPythonから加速度センサMPU-6050を動作させる

I2Cの複数接続をやってみます。

接続方法

2つ目のMPU-6050を接続する場合は2つ目のMPU-6050のVCCには何も入れず、代わりにADO(データアウト)へ対して+5Vを入れるとI2アドレスが0x69になってくれます。よって、スクリプトでは1つ目が0x68, 2つ目が0x69として値を渡してあげればよいのです。※データシートを熟読できていないので、もしかしたら、+3.3Vが正しいのかもしれません。

スクリプト

ポイントは、インスタンスを作るときにI2Cアドレスを引数として指定することです。ここだけです。

mpu1 = adafruit_mpu6050.MPU6050(i2c, address=0x68)

mpu2 = adafruit_mpu6050.MPU6050(i2c, address=0x69)

 

Windows10でPythonから加速度センサMPU-6050を動作させる

前回、Noobsが入ったラズベリーパイ3のGPIOピンを使ってI2C接続を試み、見事成功いたしました。

今回は、普段から使っているWindows10のモバイルPCでMPU-6050を動かせないか検討しました。

モバイルPCで一般的な入出力といえばUSBなので、これをGPIO的な何かに変換できれば行けるだろうという思惑です。

FT232H使用 USB⇔GPIO+SPI+I2C変換モジュール

http://akizukidenshi.com/catalog/g/gM-08942/

探した結果、こんなんがありました。Adafruit(エイダフルート)の変換モジュールです。下の方に「メーカー資料」とありますので、クリックしてみると。

https://learn.adafruit.com/adafruit-ft232h-breakout/mpsse-setup

いきなり現れる「非推奨」の文字!

どうやらPython2でやり方を書かれている古い情報のようです。

大丈夫です、代替方法が用意されてありました。

BLINKAとサーキットPythonライブラリ

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h

これによると、Python3の他にBLINKAとCIRCUIT_PYTHON なるソフトウェアが必要だそうです。

sensors_board_ft232h.png

FT232HをUSBへ認識させる

※実は、この項目は必要ないかもしれません。後述するBLINKAなどのセットアップが終わりテストスクリプトを走らせたあと、気がついたら、ここで行ったことがなかったことになっていました。しかしちゃんと動いています。参考までに残しておきます。↓↓↓

https://www.ftdichip.com/Drivers/VCP.htm

とその前に、先にこれをやらないといけません。基本的にはFT232H側マイクロUSB~PC側USB とケーブルで接続すれば勝手に認識されます。

確認方法は、デバイスマネージャーを開いてポート(COMとLPT)の直下に新しいCOMx(xは数字)が作成されていればOKです。またポートと同層にあるユニバーサルシリアルバスコントローラーの直下にUSBコンバーターが作成されていればOKです。この詳細設定でVCPをONにしなければ動かない場合があるそうなので念の為ONにしておきます。

うまくいかない場合。

まず、ちゃんと正常なマイクロUSBケーブルを用意します。

これが今回最も手こずった所です。マイクロUSBは少し前のスマホでよく使われていましたが、今はUSB-Cに取って代わられています。マイクロUSBの致命的な欠点はその接触の悪さです。

一本目はナイロンで保護されている高級そうなケーブルで試してみました。「ピロポン♪↑」というUSB認識の音がなり、デバイスマネージャーを確認すると勝手にドライバーが入る手はずなのですが、COMとして認識された瞬間に接続が切れ、何回接続し直したりrebootしたりしても改善されません。

他のケーブルを試してみましたが、電源のみのケーブルというのも混在しており見分けが付きません。電源LEDは点灯すれどもUSB接続の「ピロポン♪」という音がなりません。これを3本ほどやりました。ぐぬぬぅ・・・。

さらに、ケーブルを替えてうまく認識されたと思いきや、1時間作業後に再び切れ、FT232Hの電源LEDすら点灯しなくなるという事態になりました。

(電源線を間違えてFT232Hが壊れたか・・・。OTZ)

結果、そんなことはありませんでした。奇跡的に見つけた最後のケーブルを使うと、なんの問題もなくプラグアンドプレイできてるじゃないですか。

ちゃんと正常なマイクロUSBケーブルを用意しましょう。

それでもプラグアンドプレイできないときは、https://www.ftdichip.com/Drivers/VCP.htm

のwindows セットアップ実行ファイルでインストールしましょう。

Windowsへのセットアップ

 

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows

このページの通りにざーっとやると良いです。Python3はAnaconda3とかでなく素の状態で入れました。バージョンは3.7.7。

ZadigでFT232Hを接続してドライバーを修正

FT232Hデバイス用のlibusbドライバーを簡単にインストールするツールです。 ※これをやるから、前項が必要なくなる?

ツールを実行する前に、コンピュータからすべてのFTDIデバイスを取り外します

FT232Hだけを接続して、PCに接続されている唯一のFTDIデバイスになるようにします。

オプション ]メニューをクリックし、以下の[ すべてのデバイスをリスト ] 項目を選択します。

FTDIBUSに等しいドライバーと0403 6014に等しいUSB IDを持つデバイスを選択してください!

USB Serial Converter > FTDIBUS(v2.12.28.0)

libusb-win32(v1.2.6.0)

0403 6014 にして Replace Driverボタンをおします。

デバイスマネージャーを開くとlibusb-win32 devices とその直下にUSB Serial Converterが出来上がっています。

pyftdiとpyusbをアンインストールしてからインストールする

まず、以前にpyusbとpyftdiを入れてしまっている可能性がある場合はアンインストールしておきましょう。

$ pip uninstall pyusb

$pip uninstall pyftdi

Windowsに影響するバグを修正するには、pyusbのフォークを取得します。

$ git clone https://github.com/minkustree/pyusb.git

gitでエラーが出たときは

https://git-scm.com/download/win

で、gitをインストールします。

PowerShell管理者モードを再起動させてから、今一度

$ git clone https://github.com/minkustree/pyusb.git

です。

$ cd pyusb

$ pip install pyftdi

で、インストールが完了です。

pyusbとpyftdiをテストする

FT232Hを接続しておいた状態で

これで DEVICE IDが出てくればOKです。

 

Adafruit Blinkaをインストールする

$ pip install adafruit-blinka

環境変数を設定

PowerShell管理者権限で入っている場合は

$とenvにはスペースを入れない状態で

$env:BLINKA_FT232H=1

cmdなら

set BLINKA_FT232H=1

です

プラットフォーム検出確認

 

python3を起動して

 

で、エラーが発生せず、利用可能なすべてのピンのリストが表示される場合は、準備完了です。

 

インストール後のチェック

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/troubleshooting

 

python3で

とやって

ならOKです

Python環境変数の確認

import os
os.environ[“BLINKA_FT232H”]

数字が返ってくればOK ’1’など。

import board

エラーが出なければOK。

ピン配列を確認

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/pinouts

電源ピン

5V-これはUSB入力からの5V電源です。

GND-これは、すべての電源とロジックに共通のグラウンドです。

3V電源出力 – 新しいバージョンには、最大500mAの3.3V電源出力ピンがあります

GPIOピン

D4にD7は -デジタル入力または出力のいずれかとして使用することができます。C0へC7は -デジタル入力または出力のいずれかとして使用することができます。

I2Cピン

FT232HとMPU6050とのI2C接続です。D1とD2を短絡させる必要がありました。

SCL -I2Cクロック信号はD0にあります。

SDA -I2CデータはD1   D2にあります。

I2Cスイッチ – 新しいバージョンには、D1とD2を接続してI2Cインターフェースを容易にするスイッチがあります。

I2CやSTEMMA QTコネクタを使用するには、スイッチをONに動かします。その後、SDAにD1またはD2を使用できます。

元のバージョンのみ:I2Cを使用するには、2つのピン(D1とD2)があることに注意してください。

SPIピン

FT232HとMPU9250/6500のSPI接続(のはず)です。まだ動かすことができていません。

SCLK -SPIクロック信号はD0にあります。
MOSI-マスター出力、スレーブ入力はD1にあります。
MISO-マスター入力、スレーブ出力はD2にあります。
CS0-チップセレクトはD3にあります。これはBlinkaでは使用されず、代わりに上からGPIOピンの1つを使用します(例のセクションを参照)。

 

MPU6050用 Pythonモジュールのインストール

https://pypi.org/project/adafruit-circuitpython-mpu6050/

 

スクリプト

結果出力

今後について

I2Cデバイスの複数接続

MPU-6050がまだ3つほどあるのでチャレンジします。

FT232HとI2Cデバイスの複数接続(MPU-6050)

SPI通信

本当はこっちをやりたかった。

MPU-9250/6500を購入しましたが、いい感じのライブラリとか知らないのでどうしたものか悩んでいます。

SPIデバイスの複数接続

最終的な目標。

MPU-9250/6500を2個購入しましたので、なんとしてもやりきりたいです。

 

以上、まだまだ続きます。

 

追記1

PowerShell管理者権限で入らないと実行できません。

PowerShellをリブートしたら、同じスクリプトなのに実行できませんでした。

 

PowerShell管理者権限で入って

$env:BLINKA_FT232H=1

をすると、何事もなく実行できました。一体なんでしょう・・・?

 

 

追記2

PowerShellで管理者権限でない状態でスクリプトを実行するとimport boardが機能しないことがわかっています。

boardモジュールがないのでインストールしてくださいというエラーメッセージの通りに pip install boardを行うとインストールできますが、機能しません。board.なんちゃらはメソドを持っていませんというエラーがでるので、別物のboardではないでしょうか?。

pip uninstall boardして管理者権限に移行して、追記1の通り$env:BLINKA_FT232H=1 をしてからスクリプトを実行したところ、実行されません。先程pip uninstall boardしたことで何かがおかしくなってしまったのでしょうか。

解決策としては、ずーっと前まで戻って

$ pip uninstall adafruit-blinka

$ pip install adafruit-blinka

することで、再度import boardできるようになりました。

まだ理屈がわかってません。

アンドロイドスマホをwebカメラにする方法

webカメラを買おうか迷っているあなた!

スマホで代用しませんか?

注意:モバイルwifi 7GB/月契約のやつを使用したら、十数秒で1GB程度消費しました。怖!

使用するときは必ず上限のないwifi(家のやつとか)でやりましょう。

スマホには↓をインストールする

windowsには

https://play.google.com/store/apps/details?id=com.dev47apps.droidcam

から↓を押してインストールする

スマホのアプリを立ち上げるとIPが出てきますので

Windowsアプリを立ち上げると出てくるIPの中に入力します。

19.168.10.xxx とかです。

 

こちらを参考にさせていただきました。

https://www.madosyo.com/?p=2270#toc5

IOT:加速度センサMPU-6050をラズパイ pythonで動かしてみる(2)

前回は、数値の出力まででしたので、今回はリアルタイムプロットに挑戦します。

グラフ付きスクリプト

リアルタイムプロット

できました! 以上です。

IOT:加速度センサMPU-6050をラズパイ pythonで動かしてみる(1)

こんにちは、加速度センサーのMPU-6050を買ったので、試運転してみます。

下記webを参考にさせていただきました。

 

まずは配線しましょう。

使用するピンは 1 , 3 , 5 , 6 です。

MPU-6050の電源電圧は 3.3[V] ですが、GY-521に3.3[V]のレギュレータICが載っていて、I2Cバスのプルアップ抵抗が 3.3[V] へ繋がっているので、5[V]電源の Arduino に直接つないで使うことが出来ます。

という記述を見つけましたが、おとなしく+3.3Vに接続します。

ラズパイをネットワークにつないでVNC接続します。

ラズパイの設定でSSH,VNC,I2C,SPIとか全部 有効にします。

ターミナルで >ifconfigして アドレスを確認します。

192.168.10.xxx

ウィンドウズマシン上でVNC Viewerから新規コネクト作成で192.168.10.114します。

このとき、重要なのは ユーザーネームは自分で設定したIDではなくて pi です!!で、パスワードは自分で設定したやつです。

非常に紛らわしいですね。毎回詰まります。

GPIOでI2Cが有効になっているか確認

$ gpio readall

すると、GPIOの一覧が確認できます。

 

$ sudo i2cdetect -y 1

すると、I2Cが接続されているのが確認できます。

実行スクリプト

では、加速度を取得してみましょう。ベタ貼りしてみました。

 

結果

ちゃんと動いていますね。

次回

数値データをグラフ化して見ましょう。

動的にmatplotlibを利用する必要がありますので、ちょっと考えなくてはなりません。

IOT:速くて軽い MQTTプロトコル

こんにちは、Keita_Nakamori(´・ω・`)です。

みなさんIOTしていますか?

今日はIOTで流行っている通信プロトコルであるMQTTについてやっていこうと思います。

なぜMQTTか

OASISという規格団体において、軽い、公開、単純、簡単に使えるというコンセプトで設計されたプロトコルです。

従来のHTTPプロトコルは人と人がコンピューターを介してコミュニケーションを取ることが前提となっており、1つのコンテンツで多くの情報をやり取りしています。

しかし、IOTの場合は莫大な数のIOTデバイスと接続することになりますので、速くて軽いプロトコルである、”MQTTプロトコル”を使いこなしていく必要があります。

MQTTの特徴

すこし専門用語を出しますが、

MQTTはクライアント・サーバー間のpublish・subscribeメッセージをバイナリ(2進数)でやり取りするプロトコルです。

  • トランスポート層ではTCPをベースとます。
  • セキュリティはTLS/SSLを使用します。
  • MQTTは確実なデータ発信と重複を避けることができます。
  • 順序が決まっていてかつ可逆的な2進数情報をread/writeの両方向に対して適用されます。

MQTTの用語

peer:仲間という意味で、PCやIOTデバイスのようなサーバーではない端末のことです。MQTTクライアントとも言います。

Broker:サーバーのことです。Central MQTT BrokerとかLocal MQTT Brokerという使い方をします。

Publish:Brokerにデータを渡す。

Topic:Publishされたデータを格納する箱。encodingはutf-8。例えばAなら01000001という2進数8bitで表現されます。

Topic Level:トピックはツリー構造で格納されます。例えば

  • mytopic/machine_001/transmission_system_001/bearing_001/temperature

というように、トピックレベルセパレーターと呼ばれるスラッシュ記号で表現します。この各ディレクトリのことをトピックレベルと呼びます。

Subscribe:Broker内のTopicのデータを送ってもらうよう申し入れをします。

QoS:サービス品質 Quality of Serviceです。

レベルの低いものから

QoS_0

Publisherがメッセージを投げたらBrokerを通してSubscriberに渡す。そして、Publisherはメッセージを消す。

QoS_1

PublisherはメッセージをBrokerに投げる前に、Publisher自身がメッセージを保持する。PublisherがメッセージをBrokerに投げたら、Broker内で一旦保持してからSubscriberにわたす。渡ったらBrokerはメッセージを消して、続いてPublisherもメッセージを消す。少し複雑になりました。

QoS_2

PublisherはメッセージをBrokerに投げる前に、Publisher自身がメッセージを保持する。PublisherはメッセージをBrokerに投げたら、Broker内で一旦保持してからSubscriberにわたす。渡ったらBrokerはPUBRECをPublisherへ渡して、PUBRELが返ってきてから、Broker内のメッセージを消す。

渡ったらBrokerはメッセージを消して、PUBCOMPを渡す。

それによって、Publiserはメッセージを消す。とても長い手順を踏むことになります。

MQTTのヘッダーフォーマット

頭にヘッダー情報をつけます。ヘッダーは2バイトで構成されています。

  1. 4bitでコマンドメッセージタイプを指定します。
  2. 1bitでDUP(デュプリケート、複製)
  3. 2bitでQos Level(Quality of Service Level)
  4. 1bitでRERTAIN

これで1バイトです。

次の1バイト中最大4bitを使ってRemaining Lengthを表現します。

その次にペイロード(内容)を書いていくのですが、それはまたあとでやりましょう。

 

 

 

IOT:ラズベリーパイ パーティクルセンサー

どーもご無沙汰しております、Keita_Nakamori(´・ω・`)です。

先日、パーティクルセンサーが届きましたので、使ってみようと思います。

Particle Sensor Model PPD42NS

ヒーターで空気を温めて上昇気流を作り、光学式センサーを通過させることによって、粒子数をカウントするとのことです。なので、向きが大事です。

スペック

スペック的にPM2.5なんてのも取れそうです。

安定するまでに1分間必要と書いてあるので、スクリプトの中で”現在立ち上げ中です。”とか”カウントダウン”とかを入れてあげると良いと思います。

  • 検出可能な粒子サイズ: 1μm (minimum.)
  • 検出濃度範囲: 0~28,000 pcs/L (0~8,000pcs/0.01 CF=283mL)
  • 供給電圧: DC5V ±10% (CN1コネクタ:ピン1=GND , ピン3=+5V)
  • 作動温度範囲: 0~45°C
  • 作動湿度範囲: 相対湿度95% 以下 (結露なきこと)
  • 電力消費: 90mA
  • 周囲温度: -30~60°C
  • 安定するまでの立上時間:1分
  • 電源ONから安定に必要な時間:1分
  • 寸法: 59(W) × 45(H) × 22(D) [mm]
  • 出力方式:負論理、デジタル出力 ← ここは後で解説します。
  • Hi :  4.0V以上  Low :  0.7V以下

コネクタ

右から 黒 赤 黄 のケーブルがついた脱着可能なコネクタがついていました

しかし、これ、ブレッドボードに刺さるわけでも、ブレッドボード用のケーブルがささるわけでもないので、取っ払ってしまいました。

コネクタケーブルを引き抜くと、ちょうどラズパイのGPIOと同じサイズのピンが出てきますので黒 赤 黄の3本のメス型ケーブルに差し替えました。

説明書によると 右から

CN : S5B-EH(JST)
1 : COMMON(GND)
2 : OUTPUT(P2)
3 : INPUT(5VDC 90mA)
4 : OUTPUT(P1)
5 : INPUT(T1)・・・FOR THRESHOLD FOR [P2]

となっていますので、使用するのは、黒:GND 赤:5V 黄:出力P1 の3つになります。

ラズパイ側のGPIO

事前に必要な知識として、ラズパイGPIOピンの指定方法には2種類の表現があります。

1.BOARD番号で指定する場合

PythonではGPIO.setmode(GPIO.BOARD)と書きます。

ラズパイのボード(基盤)の配置順に番号が振られていて、たとえばpin=40とした場合はGPIO21のことを指します

2.BCM番号で指定する場合

こちらはGPIO.setmode(GPIO.BCM)と書きます。
GPIO21を指定したいときは、そのままpin=21と書きます。

こちらのほうがわかりやすいので私はこちらを使っています。どっちでもOKです。

出力データと処理の話

  • 出力はパルスで出力されます。
  • 低パルスの状態が30秒間に占める割合(LPO:Low Plulse Occupancy time)を粒子数として換算するようです。

「1μm以上の粒子が283mLの中に何個入っているか」と「低パルス占有率」の関係を測定したサンプルデータです。(メーカーHPより)

 

スクリプト

では、センサーから出力されたLowパルスの占有率を算出しましょう。

まずは、うまく行かなかった例です。

改良

動かないので、改良ついでにクラス化してみました。

なおかつ30秒ごとに出力される粒子濃度のデータをconsentration.txtに随時書き出すようにしました。

 

出力:consentration.txt

中身は下記のような感じです。

データ処理

データを処理するためにpandasで読み込んで、整えましょう。

文字パターン抽出 ” .str.extract() ” で文字列を 年月日 時間 濃度 に切り分けます。

すると、こんな感じで切れました

ymd hms ms consentration
0 2019-05-30 19:16:40.318976 0.07213182909293626
1 2019-05-30 19:17:10.434010 0.0951778309901365
2 2019-05-30 19:17:40.536987 0.07830632987722516
3 2019-05-30 19:18:10.660109 0.05319190541036891
4 2019-05-30 19:18:40.774304 0.030014825256954498
5 2019-05-30 19:19:10.876265 0.01660005851583172
6 2019-05-30 19:19:40.980323 0.019892370764988204

可視化

ざっくりとグラフを書いてみます。

なんじゃこりゃ(*´﹃`*)

でもとりあえず、なんかおかしいことは分かりました。なんで階段状なんだろう。

 

もっと研究が必要ですね。

 

IOT:ラズベリーパイでサーボドライバPCA9685を使ってみる

Keita_Nakamoriです。

前回はサーボモータSG92Rをラズパイに直結して動かしてみました。

今回はサーボモータを16個同時に動かすことができるサーボドライバPCA9685を使って、SG90とSG92Rを同時に動かしてみようと思います。

 

動画

基本スペック

  • I2C周波数範囲:24-1526Hz
  • 動作電圧:2.3-5.5V
  • 入出力の許容電圧:5.5V
  • 最大62個のPCA9685が接続できます¥。よって992個のサーボモータを同時に動かせます。

余談:I2Cはアイ スクウエア シーと呼ぶそうです。

ピン

左端のピン

は、上から

  • GND:ラズパイGIPIOのグランドに接続する
  • DE:??? どこにも繋げない
  • SCL:シリアル通信のクロック ラズパイGIPIOのSCL1に繋ぐ
  • SDA:シリアル通信のデータ   ラズパイGPIOのSDA1に繋ぐ
  • VCC:プラス電圧 ラズパイGPIOの+5Vに繋ぐ
  • V+:??? どこにも繋げない

下端のピン

はサーボモータを接続します、左から0~15番が振られてあり合計16個のサーボモータと接続できます。

上から、

  • PWM:サーボモータのPWM=オレンジ
  • V+:サーボモータの赤
  • GND:サーボモータの茶

上端のコネクタ

は、電源供給です。

  • 左はV+:ラズパイの5Vに繋ぎます
  • 右はGND:ラズパイのGNDに繋ぎます
  • 今回はラズパイのGPIOに繋ぎましたが、16個サーボモータを繋げるときは、別途電源を取らなくてはならないと思います。

制御の話

  • PCA9685はPWMで動きます。
  • パルス幅によってサーボモータの回転角が0~180degが決定されます。
    • 例えば 0.5ms幅のとき0deg、1.5ms幅のとき90deg、2.5ms幅のとき180degになったりします。(周波数で変更できます。周波数が高いほうが高速で制御できます。)
  • アナログサーボの周波数範囲は30~60Hzのものがほとんどです。
  • 例えば、周波数f=60Hzのとき周期はT=1/f=17ms です。(早い方がいいので60Hzで考えましょう。)
  • 周期Tの分解能は12bitなので、周期Tを2^12=4096分割できます。1分割分を1ステップと呼ぶことにしましょう。
  • 周期17msを4096分割できるので、1ステップあたり0.004150390625ms になります。
  • パルス幅を0.5msにしたければ、ステップは0.5/(17/4096)=120.47058823529412ステップになります。
  • サーボモータ角度をodegにしたいときは0.5msですから、120ステップをONして、残りの(4096-120)をOFFにすれば良いのです。
サーボ回転角度[deg] ONの時間 [ms]  ステップ数
0 0.5 120
60 1.0 240
90 1.5 361
120 2.0 481
180 2.5 602
  • サーボ回転角度を0degから180degにするためには、(602-120)=482ステップになります。
  • 1degあたりのステップ数は 482ステップ/180deg = 2.7 (step/deg)
  • なので任意のサーボ回転角度θでステップ数Nsを表現すると、Ns=120+2.7θ ということになります。

モジュール Adafruit_PCA9685

pip3 install Adafruit_PCA9685 したところ拒否されました。

pipのバージョンを上げて再チャレンジします。

pip3 install –upgrade pip3 と書いたところ pip3でなくてpipで書けみたいなことを言われました。

pip install –upgrade pip と書いたところ許可がないといっております。

なので、スーパーDOしてみます。

sudo pip install –upgrade pip これでOKでした

Successfully uninstalled pip-19.0.3
Successfully installed pip-19.1.1

そして再度チャレンジ

pip3 install Adafruit_PCA9685  [Errno 13] 許可がありません

なるほど読めました。やはり須藤ですね。

sudo pip3 install Adafruit_PCA9685

Successfully installed Adafruit-GPIO-1.0.3 Adafruit-PCA9685-1.0.1 adafruit-pureio-0.2.3

これでやっとAdafruit_PCA9685モジュールがインストールできました。

pip freezeすると

Adafruit-GPIO==1.0.3
Adafruit-PCA9685==1.0.1
Adafruit-PureIO==0.2.3

が入っていました。注意点として、importするときはAdafruitの後ろにはハイフンではなくアンダースコアになります。

スクリプト

余談

ラズパイの操作はWindowsマシンからrealVNC Viewerでリモートしているのですが、ラズパイ側のidleに書いたスクリプトをcnt+c しても Windows側にcnt+v できません。

コツがありまして、ラズパイ側のText Editorに一旦貼り付けた後に、それをcnt+cしてから、Windows側にcnt+v すると、しっかりと貼り付けられます。

どうぞお試しあれ。