SSブログ

SPRESENSE用モータードライバ・アドオンボードを作ってみた(1) [ロボット]

SPRESENSEメインボードだけで、2つのモーターを駆動できることが分かったのでアドオンボードを作ってみました。センサーアドオンボードとの共存もできるようになっています。


SpresenseMotorAddOn.JPG


モータードライバには、DRV8835を使っています。秋月電子で入手できます。


DRV8835.png
http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf


回路は極めてシンプルです。電源系の引き回しが少しやっかいですが、ほとんどはピンをそのまま出しているだけです。(ハンダが下手くそで、お恥ずかしい)


MotorAddOnFront.JPG


裏面は少しゴミゴミしています。モーター出力端子を100kΩでプルダウンしているためです。これは必ずしも必要はないですが、モーター出力の波形を見ると抵抗でプルダウンをしたほうが一番効率がよさそうなので、少しがんばってハンダ付けしました。


MotorAddOnBack.JPG


次は前回作った倒立振子のメカに搭載してモーターを動かしてみたいと思います!
( ・ิω・ิ)/





SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



HiLetgo 3pcs DRV8833デュアルモータードライバー

HiLetgo 3pcs DRV8833デュアルモータードライバー

  • 出版社/メーカー: HiLetgo
  • メディア: おもちゃ&ホビー



倒立振子制御学習用ロボット ビュートバランサー2 [学習教材] [vstone]

倒立振子制御学習用ロボット ビュートバランサー2 [学習教材] [vstone]

  • 出版社/メーカー: Vstone(ヴイストン株式会社)
  • メディア:





nice!(29)  コメント(0) 
共通テーマ:趣味・カルチャー

倒立振子用のSPRESENSEフォルダーをデザインしてみた! [ロボット]

久しぶりに3DCADを使って、SPRESENSEとバッテリーを載せるためのフォルダーをデザインしてみました。真ん中はフォルダで左右にあるのはバッテリを格納するためのフォルダーです。


フォルダー.png


久しぶりの割にはなかなかの出来です。これを我が家のポンコツ3Dプリンターで出力して、ギヤモーターに装着してみました。


DSC_0959.JPG


おお、想像以上にかっこよく出来ました。しかし、このサイズに収めるにはモータードライバをSPRESENSEのアドオンボードにする必要があります。

次は、がんばって2つのモーターを駆動できるアドオンボードを設計してみたいと思います!!
( ・ิω・ิ)






Fusion360操作ガイド ベーシック編 2020年版―次世代クラウドベース3DCAD

Fusion360操作ガイド ベーシック編 2020年版―次世代クラウドベース3DCAD

  • 作者: 三谷 大暁
  • 出版社/メーカー: カットシステム
  • 発売日: 2020/01/01
  • メディア: 単行本



キットではじめる3Dプリンタ自作入門

キットではじめる3Dプリンタ自作入門

  • 作者: 吹田智章
  • 出版社/メーカー: ラトルズ
  • 発売日: 2019/12/25
  • メディア: 単行本







nice!(27)  コメント(0) 
共通テーマ:趣味・カルチャー

SPRESENSEで2つのモーターを制御してみた [ロボット]

SPRESENSEで倒立振子を作ってみようかと思い、2つのモーターを制御してみました。ジャイロセンサーには、スイッチサイエンスのBMI160搭載されたSPRESENSE用アドオンボードを使う予定です。


sDSC01856.jpg


BMI160のライブラリは、次のGitHubからダウンロードして使っています。サンプルが少ないので使いこなすには、自分でソースを読み解く必要がありそうです。


hanyazou/BMI160-Arduino
https://github.com/hanyazou/BMI160-Arduino



次のようなスケッチを書いてBMI160とモーターの動作を確認をしてみました。電圧が低い状態だとトルク不足で車輪が回らないので、駆動時の頭で車輪が回らない程度の短い時間トルクをフルでかけて車輪を回す工夫をしています。(十分な出力容量がある電池なら不要かもしれません)


#include <Wire.h>
#include <BMI160Gen.h>

#define AIN01 25
#define AIN02 26
#define AIN11 18
#define AIN12 19
#define DELAY 3000
#define DASH 5


float convertRawGyro(int gRaw) {
  // since we are using 250 degrees/seconds range
  // -250 maps to a raw value of -32768
  // +250 maps to a raw value of 32767

  float g = (gRaw * 250.0) / 32768.0;
  return g;
}


void print_gyro() {
  int gxRaw, gyRaw, gzRaw;         // raw gyro values
  float gx, gy, gz;

  // read raw gyro measurements from device
  BMI160.readGyro(gxRaw, gyRaw, gzRaw);

  // convert the raw gyro data to degrees/second
  gx = convertRawGyro(gxRaw);
  gy = convertRawGyro(gyRaw);
  gz = convertRawGyro(gzRaw);

  // display tab-separated gyro x/y/z values
  Serial.print("g:\t");
  Serial.print(gx);
  Serial.print("\t");
  Serial.print(gy);
  Serial.print("\t");
  Serial.print(gz);
  Serial.println();

  delay(500);  
}

void motor_drive(uint8_t i, bool cw) {
#ifdef DASH
  if (cw) {
    analogWrite(AIN01, 255);
    analogWrite(AIN02, 0);
    analogWrite(AIN11, 255);
    analogWrite(AIN12, 0);
  }  else  {
    analogWrite(AIN01, 0);
    analogWrite(AIN02, 255);
    analogWrite(AIN11, 0);
    analogWrite(AIN12, 255);
  }
  delay(DASH);
#endif
  int n = i*ADJUST;
  if (cw) {
    analogWrite(AIN01, i);
    analogWrite(AIN02, 0);
    analogWrite(AIN11, i);
    analogWrite(AIN12, 0);

  } else {
    analogWrite(AIN01, 0);
    analogWrite(AIN02, i);
    analogWrite(AIN11, 0);
    analogWrite(AIN12, i);
  }
  Serial.println(i);
  delay(DELAY);  
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  BMI160.begin(BMI160GenClass::I2C_MODE);
  uint8_t dev_id = BMI160.getDeviceID();
  Serial.print("DEVICE ID: ");
  Serial.println(dev_id, HEX);  
  BMI160.setGyroRange(250);
  Serial.println("Initializing IMU device...done.");
}

void loop() {
  int i;

  for (i = 0; i <= 250; i+=10) {
    motor_drive(i, true);
    print_gyro();
  }

  for (i = 250; i >= 0; i-=10) {
    motor_drive(i, true);
    print_gyro();
  }

  for (i = 0; i <= 250; i+=10) {
    motor_drive(i, false);
    print_gyro();
  }

  for (i = 250; i >= 0; i-=10) {
    motor_drive(i, false);
    print_gyro();
  }

  while(1);

}



どうも左右のモーターの特性が異なるようで、回転数に明らかな差がでてしまっています。モーターはアナログなものなので特性に差が出るのは仕方ないけど、倒立振子がきちんと動くのか心配です。

その前に、これらのパーツを組み上げるための台を3Dプリンタでデザインしないと…。久しぶりのCAD使えるかな。
(ー'`ー;)





SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



Tenflyer  6軸レートジャイロBMI160 6Dof重力加速度センサーモジュール

Tenflyer  6軸レートジャイロBMI160 6Dof重力加速度センサーモジュール

  • 出版社/メーカー: Tenflyer
  • メディア: ホーム&キッチン



HiLetgo 3pcs DRV8833デュアルモータードライバー

HiLetgo 3pcs DRV8833デュアルモータードライバー

  • 出版社/メーカー: HiLetgo
  • メディア: おもちゃ&ホビー




nice!(25)  コメント(2) 
共通テーマ:趣味・カルチャー

SPRESENSE メインボードでDCモータを動かしてみた(電流編)! [ロボット]

SPRESENSE メインボードのみでモータを動かす実験を行いましたが、前回はオシロスコープを使って電圧の挙動を見てみました。で、流れる電流値に違いはあるかなと思い電流の値を見てみることにしました。


DSC_0926.JPG


前回の繰り返しになりますが、使用したモータードライバはTI社のDRV8835です。


DRV8835.png


精度の高い電流計はないので、いつものように市販のテスターを使って電流値を測ります。信頼性はあまりないので、大体の傾向を見るくらいで見てみてください。

測定環境は、前回と同じく次の3条件です。モーターには負荷をつけていません。


(1)モータードライバ DRV8835 の出力から直接DCモーターに接続した場合

スライド5.PNG


(2)モータードライバ DRV8835 の出力に1000pFのコンデンサをつけた場合

スライド6.PNG


(3)モータードライバ DRV8835 の出力に100kΩの抵抗をつけた場合

スライド7.PNG

結果は次のようになりました。横軸が analogWrite の出力値(PWM)、縦軸が電流値(A)です。


DRV8835motor.png

ほとんど傾向に変わりはありませんが、(1)の場合は流れる電流がばたつく感じでした。やはり電圧差が不安定なためでしょうか。(2),(3)はあまり有意な差はなさそうです。



細かい制御をしたい場合は、(1)は避けたほうがよさそうです。
( ̄ ~  ̄;)


関連記事
SPRESENSE メインボードでDCモータを動かしてみた!
https://makers-with-myson.blog.ss-blog.jp/2020-03-08





SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



HiLetgo 3pcs DRV8833デュアルモータードライバー

HiLetgo 3pcs DRV8833デュアルモータードライバー

  • 出版社/メーカー: HiLetgo
  • メディア: おもちゃ&ホビー







nice!(24)  コメント(0) 
共通テーマ:趣味・カルチャー

SPRESENSE メインボードでDCモータを動かしてみた! [ロボット]

以前からSPRESENSEのマルチコアで制御をやってみたいなと思い、はじめの一歩としてDCモータを動かしてみました。せっかくなら小型化したいので、メインボードのみでDCモータを動かせるモータドライバを探してみました。


DSC01723.JPG


いろいろ探したところ、ロジック電源が2V(メインボードは1.8Vなので少しスペック割れですが)のDRV8835を使ってみることにしました。(秋月電子で購入しました)


DRV8835.png


回路は次のようにしてみました。


スライド1.PNG


テスト用のスケッチは次のような単純なものです。

#define AIN1 14
#define AIN2 15

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  int i;

  for (i = 0; i <= 255; ++i) {
    analogWrite(AIN1, i);
    analogWrite(AIN2, 0);
    delay(100);
  }

  for (; i >= 0; --i) {
    analogWrite(AIN1, i);
    analogWrite(AIN2, 0);
    delay(100);
  }

  for (i = 0; i <= 255; ++i) {
    analogWrite(AIN1, 0);
    analogWrite(AIN2, i);
    delay(100);
  }

  for (; i >= 0; --i) {
    analogWrite(AIN1, 0);
    analogWrite(AIN2, i);
    delay(100);
  }

  while(1);

}




実際に組み上げた様子がこちら。


2020-03-08.png


波形を見てみると、モーター駆動待機状態でフラットになっていません。モーターに若干のブレーキがかかっている可能性があります。


2020-03-08 (3).png


ということで、キャパシタンスを追加してみることにしました。


スライド2.PNG


実際に組み上げた様子がこちら。


2020-03-08 (1).png


波形を見てみると、電圧がLOWになっていません。モーターを動かす前の段階でモーターにブレーキがかかってしまっています。


2020-03-08 (4).png


次は、電圧をグランドに引っ張ることを考えてみました。で、100kΩの抵抗をつけてみました。


スライド3.PNG


実際に組み上げた様子がこちら。


2020-03-08 (2).png


波形を見てみると、期待通り電圧がLOWになっています。モーターを動かす前の段階でフリーランになっているので、モーターに負担はかかっていないように見えます。


2020-03-08 (5).png


とは言うものの、どの方式が一番トルクが出ているは実際に測ってみないとわかりません。どうやって測ってみようかなぁ。
(。-`ω´-)


お時間のある方は動画もどうぞ。









SONY SPRESENSE メインボード CXD5602PWBMAIN1

SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware






最新版 モータ技術のすべてがわかる本 (史上最強カラー図解)

最新版 モータ技術のすべてがわかる本 (史上最強カラー図解)

  • 作者: 赤津 観
  • 出版社/メーカー: ナツメ社
  • 発売日: 2012/09/04
  • メディア: 単行本




nice!(19)  コメント(0) 
共通テーマ:趣味・カルチャー

ボール型ヘリコプター玩具の電子部品を解析してみた! [ロボット]

ボール型ヘリコプター玩具の解析をすすめるために、モーターとバッテリーを取り外しました。解析している間に、万が一ショート等したら怖いですからね。


DSC04940.JPG


解析がしやすいように裏面に端子が出ている部品からワイヤーを這わせました。ワイヤーを取り付けるだけなのですが、細かい作業なので、とっても肩が凝ります。(´・ω・`)


DSC04942.JPG


部品名の刻印があるものについては、多くの場合インターネットにデータシートが転がっているので、それがヒントになります。


DSC04948.JPG


モータードライバらしきものについては、「A2SHB」と読めます。


A2SHB.jpg


ググってみると、すぐに見つかりました!想像していたとおり FET のようです。


N-Channel Enhancement Mode Power MOSFET
https://www.mikrocontroller.net/attachment/212878/HM2302A.PDF


もうひとつバッテリーチャージャーらしきものは、「40548」もしくは「4054B」でしょうか。


4054B.jpg


なかなか見つけることができずに、あきらめかけていたところで、ようやく以下のサイトを発見!


800mA Standalone Linear Li-Ion Battery Charger
http://www.belling.com.cn/media/file_object/bel_product/BL4054B/datasheet/BL4054_V1.4_en.pdf


こちらも想像どおりバッテリーチャージャーのようです。

赤外線出力ポートと、赤外線センサー、マイコンらしきものは残念ながら型番分からず。解析はまだまだ続きます!
( ー`дー´)b















nice!(25)  コメント(0) 
共通テーマ:趣味・カルチャー

ボール型ヘリコプター玩具を分解してみた! [ロボット]

興味本位で買ってみたボール型ヘリコプター。今回はそれを分解してみました!


DSC04931.JPG


裏面はこんな感じ。配線はかなりシンプル。バッテリーとモーターがワイヤーで接続されています。


DSC04932.JPG


バッテリーを抜き出してみると、どうも 75mAh の 3.7V LiPoバッテリーのようです。


DSC04934.JPG


プロペラの駆動部はこんな感じ。ギア比を変えてプロペラの回転速度とトルクを調整しているようです。このあたりの設計ができるようになると楽しいだろうなぁ。


DSC04936.JPG


基板をよく眺めてみると、おや?これは赤外線センサーでは???


DSC04937.JPG


外観から解析しただけですが、モータードライバと思っていたのは、どうやらマイコンのようです。謎の端子があったのですが、それはプログラム書き込み用の端子のようですね。その後の調査で、プログラム書き込み用端子と思われたものは赤外線出力ポートでした。なので赤外線で距離を測定しているようですね。


DSC04938.JPG


大分見通しがよくなってきました。あとは配線をじっくりと観察して、信号を通してみて予測があたっているか確認してみたいと思います。
(^^)/~















nice!(31)  コメント(2) 
共通テーマ:趣味・カルチャー

ボール型ヘリコプター玩具を買ってみた! [ロボット]

グーグルで面白そうな小型ドローンがないかなと探していたら、ボール型ヘリコプターのおもちゃが売ってました。安かったし、ちょっと面白そうなので買ってみました。


0_BallHelicopter.jpg


しかし、中国製なので例によって説明書も何もありません。どうやって操作してよいのかよく分かりません。ググってようやく分かりました。どうも手(静電気?)に反応して上下をコントロールするみたいです。





困ったことにこれを手にとろうとすると、反応して上にあがってしまうのでなかなか取れない。なので仕方なく紐をつけて飛ばしています。

だいたい動作は分かったので解体してみました。部品は非常に簡素です。


1_BallHelicopter.jpg


モータードライバらしきものとバッテリチャージャーらしきものは確認できました。静電気を検出してモーターの推力を変える部分がよく分かりません。引き続き解析してみたいと思います。
(^^)/~















nice!(34)  コメント(5) 
共通テーマ:趣味・カルチャー

WiFiカメラ付の重力感知ドローンを飛ばしてみた! [ロボット]

先日購入したWiFiカメラ付き重力感知ドローンをセットアップしました。


DSC04845.JPG


ドローンのカメラの画像は、スマホのアプリで見ることができます。


WiFi UFO
WiFiUFO.png
https://play.google.com/store/apps/details?id=com.lewei.multiple.lewei&hl=ja


最初に行うのは、ドローンのセットアップです。重力方向をドローンに覚えさせるためにキャリブレーションを行います。


drone_calib.PNG


次にアンロックをするとモーターが回り始めます。


drone_unlock.PNG


コントロールは、左レバーが推力の調整、右レバーがコントロールです。


drone_control.PNG


実際に飛ばしてみた映像です。重力感知機能があるので制御が簡単かと思ったのですが、ドローンビギナーにはちょっと難しかったようです。





安いだけに画質もいまいちですね。階調が立っていて色がとんでいます。かなり古い安いセンサーのようです。ちょっと残念。やはり小型で画質のいいドローンは自作しかないかなぁ。
(´・ω・`)
















nice!(30)  コメント(3) 
共通テーマ:趣味・カルチャー

WiFiカメラ付の重力感知ドローンを買ってみた! [ロボット]

久しぶりのドローンネタです。会社の同僚からWiFIカメラ付きの重力検知ドローンが安く出てるよと教えてもらい、技術検討のために買ってみることにしました。


DSC04841.JPG


中身を空けてみると、カメラ映像を見るためのスマホホルダー、予備のプロペラ、プロペラガード、あとはプロポと本体。なかなか充実しています。


DSC04842.JPG


それよりも目を引いたのは取扱説明書です。日本語ですよ日本語。


DSC04843.JPG


しかし、よく読むと日本語がちょっとおかしい。

お客様へ、
いつもお世話にになっております。
ご注文いただいた商品が問題なく動作できる様子、大変嬉しく存じます。
不良品、飛行操作など、任意の問題があっても、直接にメールにて弊社へ連絡することができます。
ちなみに、もしこれが良いドローンと考えれば商品ページにご意見を出してお客様に参考を提供してくれれば、幸いだと思います。
今後とも弊社商品をご愛顧くださいますよう、よろしくお願いいたします。


うん初めて買ったので、いつもお世話になってないし、まだ動かしてないし、”ちなみに”ってお客様に使っちゃだめでしょ。

でも、3Dプリンター買ったときは日本語の取扱説明書があまりにも意味不明すぎて、英語版を見たくらいだったことを考えると、中国のベンチャーも着実に進化してますね。意味通じるので。

で、気になる本体をアップで映してみました。


DSC04844.JPG


プロペラ広げるとカッコイイですね。


DSC04845.JPG


カメラモジュールは小さいの使ってますね。軽量化のためかな。


DSC04846.JPG


全体重量を測ったら、なんと 25.26g !すごいな。


DSC04847.JPG


週末の3連休でファーストフライトしてみたいと思います!
(^_^)











ジーフォース PXY CAM ピクシィカム (Black) MODE1 GB302 [日本正規品]

ジーフォース PXY CAM ピクシィカム (Black) MODE1 GB302 [日本正規品]

  • 出版社/メーカー: ジーフォース
  • メディア: おもちゃ&ホビー




nice!(32)  コメント(3) 
共通テーマ:趣味・カルチャー