Neopixel と サーボモータの共存

お父ちゃん  2017.11.26 
Home > 電子工作 > Neopixel と サーボモータの共存
すき 0
うんこ 0

以前、サーボモータとテープLEDのNeopixelを一緒に使った際にサーボがガチャガチャと変な挙動を示していたのですが、コレを解決する記事を見つけたので試してみました。

以下がNeopixelとArduino公式 Servoライブラリを共存させた際の不具合の原因と解決するサーボのライブラリを紹介した記事です。勉強になりました!

構成

部品

  • Arduino UNO

  • サーボモータ SG90
  • LEDテープ Neopixel

不具合の原因概要

NeoPixelライブラリは、データ送信中にすべての割り込みを無効にし、発光データ送信後に再度割り込みを有効にします。
Arduino公式 Servoライブラリは割り込みを使用して任意のデューティ比のパルスを生成しているので割り込みを無効にするNeoPixelライブラリと共存は難しいとのこと。

従来Servoライブラリでの動作

Arduinoコード

動作

 

Servo

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

ちょっと分かりにくいのですが、サーボが左側(角度0°側)にいくとガチャガチャと振動しています。サーボの角度が小さくなると入力するPWM信号のデューティ比は小さくなるのでLEDテープNeopixelの割り込み無効の影響を相対的に大きく受けるためと考えられます。

改善版Servoライブラリでの動作

この問題を解決したサーボライブラリが以下です。
 https://github.com/adafruit/Adafruit_TiCoServo

マイコン内部のタイマー/カウンタレジスタ出力でPWMを生成・出力しサーボを制御するので割り込みの影響を受けずNeopixelと共存が可能です。

動作保証しているマイコンや出力ピンはこちらをご確認ください。

コードはライブラリを所定のフォルダに保存後に上記コードに以下の修正を施すのみです。

  • 1行目を以下に修正
  • 4行目を以下に修正

動作

 

TiCoServo

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

スムーズにサーボが動いています。

以上!もっと早く知りたかった便利ライブラリの紹介でした!

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください