Jetson NanoでDCモーターを制御する方法

  • URLをコピーしました!

今回はNVIDIA社のマイコンボード、Jetson NanoでDCモーターを制御する方法について解説します。

また、以下のページでJetsonの活用方法について解説していますので、あわせてご覧ください。

目次

環境

ソフトウェア

JETPACK SDK:4.6.2
Python:3.6.9

ハードウェア

Jetson Nano:A02 4GB 
モータードライバ:L298N
モーター:DAGU robot DG01D

今回、コントローラにはJetson Nanoの4GB版を使用しています。

モータードライバはL298Nを搭載したモジュールを使用しています。同じICであれば基板のメーカーが違っても使用できるかと思います。

ロボットのフレーム、モーター類はAmazonや楽天で販売されているキットを使用しています。専用品ではないので、Jetsonやモータードライバ基板は止めれそうな位置のビスだけで固定しています。(4点では固定できていません)
この辺りは3Dプリンター等を持っていない場は、割り切って使うしかないかなと思っています。

Amazonで「スマートカー」等のキーワードで検索すると同じようなキットが見つかります。

楽天などでも安価で売られています。
ネジ穴が合わない場合はドリルで加工するなどの処理が必要です。

ハードウェアの接続

今回、モータードライバICはL298Nを使用します。モータードライバの詳細については以下の記事で解説していますので、あわせてご覧ください。

L298NモジュールとJetson NanoのGPIOを配線して接続していきます。

今回のはJetson NanoとL298Nの端子の対応表は以下となります。

Jetson Nano GPIOL298Nモジュール 制御端子
GPIO32ENB
GPIO33ENA
GPIO16IN1
GPIO18IN2
GPIO22IN4
GPIO23IN3
GNDGND

実装方法

ここからは実際にPythonのコードの実装方法を解説します。

回転方向

モーターの回転方向の制御はモータドライバモジュール(L298N)の端子IN1~IN4に対してON/OFFのデジタル信号を入力することで行います。
Jetson NanoからデジタルのON/OFF信号を出力する方法は以下の記事で解説しています。

回転速度

DCモーターの回転速度はモーターに印加する電圧で変化します。モータドライバモジュール(L298N)のENA、ENBにPMW信号を入力することで各モーターの回転速度を制御することができます。
Jetson NanoでPWM信号を出力する方法は以下の記事で解説しています。

作成したソースコード

作成したソースコードは以下の通りです。
今回は動作テストということでPWMデューティ比80%固定で、両モーターを進行方向に回転させるように処理を実装しました。

import Jetson.GPIO as GPIO
import time

#PWMピン番号を指定
output_pwm1 = 32
output_pwm2 = 33

#DIOピン番号を指定
output_pin1 = 22
output_pin2 = 24
output_pin3 = 16
output_pin4 = 18

#デューティを指定
duty1 = 80 #デューティー比を%で指定
duty2 = 80 #デューティー比を%で指定

#PWM周波数を設定
freq = 1000 #PWM周波数をHzで指定

#GPIOのpin指定方法を設定
GPIO.setmode(GPIO.BOARD)

#PWMピン設定
GPIO.setup(output_pwm1, GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(output_pwm2, GPIO.OUT, initial=GPIO.HIGH)
pwm1 = GPIO.PWM(output_pwm1, freq) #周波数を設定
pwm2 = GPIO.PWM(output_pwm2, freq) #周波数を設定

#DIOピン設定
GPIO.setup(22, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)

#左回転
def turn_left():
	GPIO.output(output_pin1, 1)
	GPIO.output(output_pin2, 0)
	GPIO.output(output_pin3, 0)
	GPIO.output(output_pin4, 1)

#右回転
def turn_right():
	GPIO.output(output_pin1, 0)
	GPIO.output(output_pin2, 1)
	GPIO.output(output_pin3, 1)
	GPIO.output(output_pin4, 0)

#前進
def forward():
	GPIO.output(output_pin1, 1)
	GPIO.output(output_pin2, 0)
	GPIO.output(output_pin3, 1)
	GPIO.output(output_pin4, 0)

#後退
def back():
	GPIO.output(output_pin1, 0)
	GPIO.output(output_pin2, 1)
	GPIO.output(output_pin3, 0)
	GPIO.output(output_pin4, 1)


def main():
	# GPIOでモータの回転方向を制御
	forward()

	#PWM出力
	pwm1.start(duty1) #Dutyを設定
	pwm2.start(duty2) #Dutyを設定

	try:
		while True:
			pass
	finally:
		#CTRL+Cで停止
		#PWM停止
		pwm1.stop()
		pwm2.stop()

		#GPIO初期化
		GPIO.cleanup()

if __name__ == '__main__':
    main()

実行結果

こちらが先ほどのプログラムを実行したときの動画です。
後ろのオシロスコープにはENAとENBに対して出力したPWM信号が表示されています。

両モーターを進行方向に回転させることができました。
オシロスコープはOWON製のものを使用しています。

まとめ

今回はJetson NanoでDCモーターを駆動する方法を解説してみました。モーターを制御できるようになったことでSLAMや機械学習のアプリケーションを移動体に搭載して使用できるようになります。ぜひ活用してみてください。

また、Jetsonの使い方やTensorRTを使った機械学習モデルの実装方法を学びたい方には以下の講座がおすすめです。

Formation à l’IA et à l’IoT avec le Jetson nano de Nvidia icon


私も実際にこの講座を購入して受講していますが、以下の方法でフランス語字幕を日本語字幕にリアルタイム翻訳して視聴できています。

それでは、また次の記事でお会いしましょう。

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

よかったらシェアしてね!
  • URLをコピーしました!
目次