この動画を参考にESP32-WROOM-32とPCA9685でサーボモータ+可変抵抗4つでロボットアームを動かす
これは簡単でした。あっという間にできました。
ちょうど良い大きさの基盤が無かったので、3 X 7を2枚繋いで利用。
裏もだいぶ落ち着いてきたかなと。
もう1つESP32-WROOM-32があるので、ADC機能を分離してもう1つのEPS32につないで動画のようにESP-NOWで繋ごうとしています。パラメータなどはBLEでMacのChromeのWeb Bluetoothと繋いで更新できればなと。
以下にシンプルなプログラムを載せます。
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);
#define SERVOMIN 150 // 0.5ms@~60Hz
#define SERVOMAX 600 // 2.5ms@~60Hz
#define LED_PIN 2
#define ADC_PIN34 34
void setup() {
Serial.begin(9600);
Wire.begin();
pwm.begin();
pwm.setOscillatorFrequency(27000000); // 任意(精度向上)
pwm.setPWMFreq(60);
delay(10);
pinMode(LED_PIN, OUTPUT);
pinMode(34, ANALOG);
}
void loop() {
Serial.println("go");
int sv1 = analogRead(ADC_PIN34);
int agl = map(sv1, 0, 4095, SERVOMIN, SERVOMAX);
digitalWrite(LED_PIN, HIGH); // LED ON
pwm.setPWM(0, 0, agl);
delay(500);
digitalWrite(LED_PIN, LOW); // LED OFF
}
その後、さらにESP32版を作り直して同じものを複製。
ちなみに下のものが配線をだいぶ失敗していて何度もやり直ししています。
上の黒い方がとりあえず現在の最新プロトタイプです。
一番上のものはロボットアームの左右旋回する部分をスムーズに動かすべく改良するために用意。これ実装するの難しいかも。
まず2つ作ったのはesp-nowで交信して無線でロボットアームをコントロール実験するため。
あと可変抵抗の不安定さも解消しないとね。
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);
#define SERVOMIN 150 // 0.5ms@~60Hz
#define SERVOMAX 600 // 2.5ms@~60Hz
#define LED_PIN 2
#define ADC_PIN34 34
#define ADC_PIN35 35
#define ADC_PIN32 32
#define ADC_PIN33 33
void setup() {
Serial.begin(9600);
Wire.begin(); // ESP32のデフォはSDA=21, SCL=22
pwm.begin();
pwm.setOscillatorFrequency(27000000); // 任意(精度向上)
pwm.setPWMFreq(60); // ★サーボは50〜60Hz
delay(10);
pinMode(LED_PIN, OUTPUT);
pinMode(ADC_PIN34, ANALOG);
pinMode(ADC_PIN35, ANALOG);
pinMode(ADC_PIN32, ANALOG);
pinMode(ADC_PIN33, ANALOG);
digitalWrite(LED_PIN, HIGH); // LED ON
delay(2000);
digitalWrite(LED_PIN, LOW); // LED OFF
}
void loop() {
Serial.println("go");
int sv1 = analogRead(ADC_PIN34);
int ag1 = map(sv1, 0, 4095, SERVOMAX, SERVOMIN);
pwm.setPWM(0, 0, ag1);
int sv2 = analogRead(ADC_PIN35);
int ag2 = map(sv2, 0, 4095, SERVOMAX, SERVOMIN);
pwm.setPWM(1, 0, ag2);
int sv3 = analogRead(ADC_PIN32);
int ag3 = map(sv3, 0, 4095, SERVOMAX, SERVOMIN);
pwm.setPWM(2, 0, ag3);
int sv4 = analogRead(ADC_PIN33);
int ag4 = map(sv4, 0, 4095, SERVOMIN, SERVOMAX);
pwm.setPWM(3, 0, ag4);
delay(100);
}
その後、OLEDをつけて、ロボットアームのシューをサーボに付けました。
esp-nowもChatGPTに聞きながらあっという間に実装。
もちろんOLEDの実装もChatGPTに聞きながら。
blenderのモデリングはChatGPTもまだまだ全然ダメなので、自分でコツコツと。
特に3D印刷の時にサポート材を極力使わないような形に仕上げていっています。
接合もカチっとはまるように何度も何度も調整。
購入したもの(一部)
・LIKENNY DC-DC USB 昇降圧コンバータ 3個 昇圧降圧電圧レギュレータ 電源モジュール 5V から3.3V 9V 12V 24V
・ELEGOO ESP-WROOM-32 開発ボード USB-C 2.4GHz デュアルモード デュアルコアマイクロコントローラ Arduino IDE用 AP/STA/AP+STA対応 CP2102チップ 2個セット
・Hailege 2個セット PCA9685 16チャネルIIC I2C 12ビットPWMサーボモータードライブモジュール、Arduino Robort用
・エレクトロクッキー スナッパブル プリント基板 PCB パワーレール付きストリップボード Arduinoおよび電子工作用 金メッキ 9.7 x 8.9cm (2枚セット ブルー)
・VKLSVAN 2個 0.96" iic i2c ホワイトOLEDモジュール128×64 OLED LCDディスプレイArduinoに対応
これに加えて以下のようにたくさん必要なものはあるでしょうね。
1)線類
2)コネクタ類
3)半田付け関連
4)ネジ類
5)テスター類
6)他
でも一番大変なのはソフトウェアかもしれません。これはただ作るのと違って考えて作って、テスト、デバッグなどもしていかないとうまく動きません。さらに仕様の練り直しがハードもソフトも、そして合わせて入るかもしれませんね。