先日、ATOMS3のUIFlowがリリースされたようですが、リリースを待ちきれずESP32-S3のファームウェアをインストールしてしまったので、せっかくなのでその状態のままサーボモータを制御してみました。
もともとはATOMS3で「超ミニサイズの2足歩行ロボット」を作る予定でしたので、4つのサーボを動かしてみます。
先を見据えて、サーボ直結、無線操作、これらが小さいLipo BT1つで動作するのか検証も含めてやってみます。
テスト環境
・ATOMS3のファームウェアはESP32-S3
・ミニサーボモータ4つ
・サーボモータは4つ、ATOMS3に直結
・WIFI接続させてUDPでサーボを無線操作
・電源は150mAh(1C)のバッテリ1つ
ハードウェアPWMになるのかな?分からないですが最大で6つまでサーボを直結出来るそうですので、サーボモータドライバは使うのをやめました。
ATOMS3のサイズを極力そのままにしたいので、バッテリは20mm×20mmの150mAh(1C)のLIpoを採用してみました。
サーボ1つで20mA 程度らしいので、4つで100mA、ATOMS3本体は各動作時に50mA前後まで消費すると仮定(ATOM Matrixの記事を参考)するとほんとにギリギリですが(アウトですが。。)、極限まで小さくする事を考えればもうこれしかありません。
このバッテリ1つでデバイスとサーボの電力を賄い、WIFI接続、サーボ4つ同時制御などを行い、電源が落ちなければOKとみなします。。無理があるけどいいんです。。
テストプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
from socket import socket, AF_INET, SOCK_DGRAM import time import network from machine import PWM, Pin import _thread HOST = "IP" PORT = ポート番号 wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('SSID', 'PASS') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) print('network config:', wlan.ifconfig()) s = socket(AF_INET, SOCK_DGRAM) s.bind((HOST, PORT)) frequency = 50 servo1 = PWM(Pin(5), frequency)#freq = 50)#p2.duty_u16(0) servo2 = PWM(Pin(6), frequency) servo3 = PWM(Pin(7), frequency) servo4 = PWM(Pin(8), frequency) print("hallo") msg = "nane" def recieve(): while(True): global msg msg = s.recv(64) msg = msg.decode() print(msg) time.sleep(0.01) _thread.start_new_thread(recieve, ()) while True: #msg, address = s.recvfrom(8192) #print(f"message: {msg}\nfrom: {address}") #msg = msg.decode() #print(msg) if msg == "f": servo1.duty(60) servo2.duty(60) servo3.duty(60) servo4.duty(60) time.sleep(1) servo1.duty(100) servo2.duty(100) servo3.duty(100) servo4.duty(100) time.sleep(1) elif msg == "b": servo1.duty(100) servo2.duty(100) servo3.duty(100) servo4.duty(100) time.sleep(1) servo1.duty(60) servo2.duty(60) servo3.duty(60) servo4.duty(60) time.sleep(1) time.sleep(0.1) |
動作確認
なんとか動きました。
今アリエクスプレスで一番小さいサーボモーターを注文しているので、到着次第、ATOMS3に組み込んでみたいと思います。
前途多難ですが、成功させてみたいですね。