お絵描きロボット(OSTR)にOLED_SSD1306を追加
先に紹介しましたお絵描きロボット(OSTR)に小さなOLED表示器を取り付け、実行中のプロセスが
確認できるようにしました。 前回までの記事と併せてご覧下さい。
OLED SSD1306 128X64を追加
スマートフォンアプリWiFi TCP/UDP Controllerの16実行ボタンに対応して表示が変わります。
待機中はSelect 16 Buttonと表示します。

スマートフォンアプリWiFi TCP/UDP Controllerの操作画面
操作画面右側16個の何れかのボタンを選択すると、そのボタンに対応した文字列を表示します。

実行中のプロセス名を表示
APP操作画面の3 DIAを実行中の例で、プロセスが終わるまで3 Diamond wait a bitと表示し、終了後に待機します。
Fontを小さく設定すれば情報量が増えますが、私(後期高齢者)は老眼なので見易いように大きくしています。

OLEDの接続について
ここで使用したOLEDは0.96インチ128X64表示 SSD1306のI2Cインターフェースです。
ESP32のGPIO21(SDA)、GPIO22(SCL)及びVcc(3.3V)とGNDを接続します。

SSD1306ライブラリーについて
ここではESP8266 and ESP32 OLED driver for SSD1306 displaysを使いました。
ここをクリックするとダウンロードページが開きます。
OLED対応ファームウェアを添付します。
今回は、フォントファイルを一体にしたので行数が長くなりますが、Arduino IDEにコピーして使います。
OSTR OLED Paradise Model
確認できるようにしました。 前回までの記事と併せてご覧下さい。
OLED SSD1306 128X64を追加
スマートフォンアプリWiFi TCP/UDP Controllerの16実行ボタンに対応して表示が変わります。
待機中はSelect 16 Buttonと表示します。

スマートフォンアプリWiFi TCP/UDP Controllerの操作画面
操作画面右側16個の何れかのボタンを選択すると、そのボタンに対応した文字列を表示します。

実行中のプロセス名を表示
APP操作画面の3 DIAを実行中の例で、プロセスが終わるまで3 Diamond wait a bitと表示し、終了後に待機します。
Fontを小さく設定すれば情報量が増えますが、私(後期高齢者)は老眼なので見易いように大きくしています。

OLEDの接続について
ここで使用したOLEDは0.96インチ128X64表示 SSD1306のI2Cインターフェースです。
ESP32のGPIO21(SDA)、GPIO22(SCL)及びVcc(3.3V)とGNDを接続します。

SSD1306ライブラリーについて
ここではESP8266 and ESP32 OLED driver for SSD1306 displaysを使いました。
ここをクリックするとダウンロードページが開きます。
OLED対応ファームウェアを添付します。
今回は、フォントファイルを一体にしたので行数が長くなりますが、Arduino IDEにコピーして使います。
OSTR OLED Paradise Model
皆様の参考になれば幸いです。
スポンサーサイト
Open Source Turtle Robot (OSTR) その7(最終回)
図形の描き方
対角五角星の描画を例に説明します。
左図は外角旋回の一筆書きにて描く方法、右図は内角旋回のスイッチバックにて描く方法です。

1)一筆書きによる描画
スタート位置から図形の頂点まで移動し、ペンを下げて5角形の対角を前進で結びます。
頂点に戻ったらペンを上げてトップ位置に移動して停止します。
①図形データの記述方法1 図左側参照 この動作を単純に記述すると次のようになります。
forward(30); // スタート位置から30㎜前進
right(72); // 72度右旋回 72度=90度-頂点の内角36度の1/2
pendown(); // ペンを下げる
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
②図形データの記述方法2 同じ動作を繰り返す場合はfor()文を使うと簡潔になります。
同じ動作を4回繰り返すので for (int x = 0; x < 4; x++)と短く記述できます。
forward(30); // スタート位置から30㎜前進
right(72); // 72度右旋回
pendown(); // ペンを下げる
for (int x = 0; x < 4; x++) { // { }内を4回繰り返し
forward(60); // 60㎜前進
right(144); // 144度右旋回
}
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
2)内角旋回とスイッチバックによる描画
1)と同じ図形を描きますが、内角旋回とスイッチバック(前後進)することにり、描画時間が大幅に短縮できる
特徴があります。
図形データの記述方法3
forward(30); // スタート位置から30㎜前進
right(72); //72 度右旋回
pendown(); // ペンを下げる
forward(60); // 60㎜前進
left(36); // 36度左旋回
backward(60); // 60㎜後進
left(36); // 36度左旋回
forward(60); // 60㎜前進
left(36); // 36度左旋回
backward(60); // 60㎜後進
left(36); // 36度左旋回
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
ファームウェアの対角七角星や他の図形を参考に、面白い図形を考案して下さい。
最後にもう一度動画をご覧下さい。
対角五角星の描画を例に説明します。
左図は外角旋回の一筆書きにて描く方法、右図は内角旋回のスイッチバックにて描く方法です。

1)一筆書きによる描画
スタート位置から図形の頂点まで移動し、ペンを下げて5角形の対角を前進で結びます。
頂点に戻ったらペンを上げてトップ位置に移動して停止します。
①図形データの記述方法1 図左側参照 この動作を単純に記述すると次のようになります。
forward(30); // スタート位置から30㎜前進
right(72); // 72度右旋回 72度=90度-頂点の内角36度の1/2
pendown(); // ペンを下げる
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
right(144); // 144度右旋回
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
②図形データの記述方法2 同じ動作を繰り返す場合はfor()文を使うと簡潔になります。
同じ動作を4回繰り返すので for (int x = 0; x < 4; x++)と短く記述できます。
forward(30); // スタート位置から30㎜前進
right(72); // 72度右旋回
pendown(); // ペンを下げる
for (int x = 0; x < 4; x++) { // { }内を4回繰り返し
forward(60); // 60㎜前進
right(144); // 144度右旋回
}
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
2)内角旋回とスイッチバックによる描画
1)と同じ図形を描きますが、内角旋回とスイッチバック(前後進)することにり、描画時間が大幅に短縮できる
特徴があります。
図形データの記述方法3
forward(30); // スタート位置から30㎜前進
right(72); //72 度右旋回
pendown(); // ペンを下げる
forward(60); // 60㎜前進
left(36); // 36度左旋回
backward(60); // 60㎜後進
left(36); // 36度左旋回
forward(60); // 60㎜前進
left(36); // 36度左旋回
backward(60); // 60㎜後進
left(36); // 36度左旋回
forward(60); // 60㎜前進
penup(); // ペンを上げる
right(72); // 72度右旋回
forward(35); // 35㎜前進
done(); // モータ OFF
ファームウェアの対角七角星や他の図形を参考に、面白い図形を考案して下さい。
最後にもう一度動画をご覧下さい。
最後までご覧い頂き有難うございました。
皆様の参考になれば幸いです。
![]() 良かったらclickして下さい! | ![]() 良かったらclickしてください! |
Open Source Turtle Robot (OSTR) その6
文字を描く方法
OSTRの本体が完成したら文字を描く手順を1個のFontデータとしてファームウェアに保存します。
先ずは、フォントのデザインから始めます。私は、Excelの罫線を使ってデザインしました。
私がファームウェアに組み込んだオリジナル英数フォント

1)英数フォントのデザイン
①下図のようにExcelのワークシートを縦横1:1の方眼状にセットします。
②一文字の大きさを大文字が縦8マス横4マス、小文字が縦10マス横3マスと統一します。
③ロボットは右向きにスタートすることを原則とし、スタートポイントは赤マークです。
④ストップポイントは1マス空け、次の文字のスタートポイントに右向きに停止(青マーク)することを原則とします。
⑤斜め罫線と横罫線の接続は、必ず罫線の交点で行います。

2)文字を描く手順
ロボットの進め方は一筆書きが効率的で理想ですが、文字によっては不可能なので後進描画も駆使して効率的に行います。
先ず、一筆書きで描くU、少し複雑なA、前後進で描くWについてソースの記述方法を説明します。
①アルファベットのUを描く手順
void fontdat_U() { // U
right(90); // 右に90度旋回
pendown(); // ペンを下げる
forward(fs * 7); // 7マス前進
left(45); // 左に45度旋回
forward(sqrt(2)*fs);
//1マスの対角線の長さをsqrt(2)で求め、fsを掛けた長さを前進、fsの定義がint fs = 3の場合は1fs=3mm
left(45); // 左に45度旋回
forward(fs * 2); // 2マス前進
left(45); // 左に45度旋回
forward(sqrt(2)*fs);
left(45); // 左に45度旋回
forward(fs * 7); // 7マス前進
penup(); // ペンを上げる
right(90); // 右に90度旋回
forward(fs); // 1マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
②アルファベットのAを描く手順
void fontdat_A() { // A
forward(fs * 2); // 2マス前進
right(68.2); // 右に68.2度旋回 旋回角度は3)勾配計算式にて求めます。
pendown(); // ペンを下げる
forward(sqrt(pow(2, 2) + pow(5, 2))*fs); //2×5マスの対角線の長さを求めて前進
right(21.8); // 右に21.8度旋回
forward(fs * 3); // 3マス前進
penup(); // ペンを上げる
backward(fs * 2); // 2マス後進
right(90); // 右に90度旋回
pendown(); // ペンを下げる
forward(fs * 4); // 4マス前進
penup(); // ペンを上げる
right(90); // 右に90度旋回
backward(fs * 2); // 2マス後進
pendown(); // ペンを下げる
forward(fs * 3); // 3マス前進
right(21.8); // 右に21.8度旋回
forward(sqrt(pow(2, 2) + pow(5, 2))*fs); //2×5マスの対角線の長さを求めて前進
penup(); // ペンを上げる
right(68.2); // 右に68.2度旋回
forward(fs * 3); // 3マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
③アルファベットのWを描く手順 //特長:前進の一筆書きりも旋回角度が狭く書き上りが早い。
void fontdat_W() { // W
left(97.13); // 左に97.13度旋回
pendown(); // ペンを下げる
backward(sqrt(1 + pow(8, 2))*fs); // 1×8マスの対角線の長さを求めて後進
right(16.59); // 右に16.59度旋回
forward(sqrt(1 + pow(6, 2))*fs); // 1×6マスの対角線の長さを求めて前進
left(18.92); // 左に18.92度旋回
backward(sqrt(1 + pow(6, 2))*fs); // 1×6マスの対角線の長さを求めて後進
right(16.59); // 右に16.59度旋回
forward(sqrt(1 + pow(8, 2))*fs); // 1×8マスの対角線の長さを求めて前進
penup(); // ペンを上げる
right(82.80);//-0.07 // 右に16.59度旋回
forward(fs); // 1マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
④ここでは、AとUとWの3文字のみを参考に説明しましたが、フォントデザインの目標文字を指でなぞりながら
ファームウェアのvoid fontdat_目標文字 ();を読み取ると動作が理解できると思います。
尚、OSTR本体のキャリブレーションを正確に調整していないと描画した文字がズレてしまいます。
前記の例を参考に貴方のオリジナルを作成して下さい。
3)勾配角度計算式 四捨五入は小数点以第二位としました。
キャラクターデザインを行ったExcelのワークシートに勾配計算式を追加しておけば大変便利です。
計算式は簡単「=DEGREES(ATAN(C4/E4))」これだけです。

使い易いプルダウンメニューのリスト式にすると便利です。

OSTRの本体が完成したら文字を描く手順を1個のFontデータとしてファームウェアに保存します。
先ずは、フォントのデザインから始めます。私は、Excelの罫線を使ってデザインしました。
私がファームウェアに組み込んだオリジナル英数フォント

1)英数フォントのデザイン
①下図のようにExcelのワークシートを縦横1:1の方眼状にセットします。
②一文字の大きさを大文字が縦8マス横4マス、小文字が縦10マス横3マスと統一します。
③ロボットは右向きにスタートすることを原則とし、スタートポイントは赤マークです。
④ストップポイントは1マス空け、次の文字のスタートポイントに右向きに停止(青マーク)することを原則とします。
⑤斜め罫線と横罫線の接続は、必ず罫線の交点で行います。

2)文字を描く手順
ロボットの進め方は一筆書きが効率的で理想ですが、文字によっては不可能なので後進描画も駆使して効率的に行います。
先ず、一筆書きで描くU、少し複雑なA、前後進で描くWについてソースの記述方法を説明します。
①アルファベットのUを描く手順
void fontdat_U() { // U
right(90); // 右に90度旋回
pendown(); // ペンを下げる
forward(fs * 7); // 7マス前進
left(45); // 左に45度旋回
forward(sqrt(2)*fs);
//1マスの対角線の長さをsqrt(2)で求め、fsを掛けた長さを前進、fsの定義がint fs = 3の場合は1fs=3mm
left(45); // 左に45度旋回
forward(fs * 2); // 2マス前進
left(45); // 左に45度旋回
forward(sqrt(2)*fs);
left(45); // 左に45度旋回
forward(fs * 7); // 7マス前進
penup(); // ペンを上げる
right(90); // 右に90度旋回
forward(fs); // 1マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
②アルファベットのAを描く手順
void fontdat_A() { // A
forward(fs * 2); // 2マス前進
right(68.2); // 右に68.2度旋回 旋回角度は3)勾配計算式にて求めます。
pendown(); // ペンを下げる
forward(sqrt(pow(2, 2) + pow(5, 2))*fs); //2×5マスの対角線の長さを求めて前進
right(21.8); // 右に21.8度旋回
forward(fs * 3); // 3マス前進
penup(); // ペンを上げる
backward(fs * 2); // 2マス後進
right(90); // 右に90度旋回
pendown(); // ペンを下げる
forward(fs * 4); // 4マス前進
penup(); // ペンを上げる
right(90); // 右に90度旋回
backward(fs * 2); // 2マス後進
pendown(); // ペンを下げる
forward(fs * 3); // 3マス前進
right(21.8); // 右に21.8度旋回
forward(sqrt(pow(2, 2) + pow(5, 2))*fs); //2×5マスの対角線の長さを求めて前進
penup(); // ペンを上げる
right(68.2); // 右に68.2度旋回
forward(fs * 3); // 3マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
③アルファベットのWを描く手順 //特長:前進の一筆書きりも旋回角度が狭く書き上りが早い。
void fontdat_W() { // W
left(97.13); // 左に97.13度旋回
pendown(); // ペンを下げる
backward(sqrt(1 + pow(8, 2))*fs); // 1×8マスの対角線の長さを求めて後進
right(16.59); // 右に16.59度旋回
forward(sqrt(1 + pow(6, 2))*fs); // 1×6マスの対角線の長さを求めて前進
left(18.92); // 左に18.92度旋回
backward(sqrt(1 + pow(6, 2))*fs); // 1×6マスの対角線の長さを求めて後進
right(16.59); // 右に16.59度旋回
forward(sqrt(1 + pow(8, 2))*fs); // 1×8マスの対角線の長さを求めて前進
penup(); // ペンを上げる
right(82.80);//-0.07 // 右に16.59度旋回
forward(fs); // 1マス前進
done(); // ステッピングモーター解放:モータードライバーのENABLEをOFF
}
④ここでは、AとUとWの3文字のみを参考に説明しましたが、フォントデザインの目標文字を指でなぞりながら
ファームウェアのvoid fontdat_目標文字 ();を読み取ると動作が理解できると思います。
尚、OSTR本体のキャリブレーションを正確に調整していないと描画した文字がズレてしまいます。
前記の例を参考に貴方のオリジナルを作成して下さい。
3)勾配角度計算式 四捨五入は小数点以第二位としました。
キャラクターデザインを行ったExcelのワークシートに勾配計算式を追加しておけば大変便利です。
計算式は簡単「=DEGREES(ATAN(C4/E4))」これだけです。

使い易いプルダウンメニューのリスト式にすると便利です。

次回は、図形の作成方法を説明します。
皆様の参考になれば幸いです。
Open Source Turtle Robot (OSTR) その5
OSTR Paradise Model
OSTR Paradise Model ファームウェアの説明
先に紹介しましたキャリブレーション用ファームウェアにおいてOSTRの校正が終われば、WiFi機能を追加して
スマートフォンから操作が出来るようにします。前回のその4と併せてご覧下さい。
1)WiFi機能の追加
#include "WiFi.h"
#include "WiFiUDP.h"
WiFiUDP UDP;
char recbuff[8];
IPAddress myIP(192, 168, 4, 1);
IPAddress HOSTIP (192, 168, 4, 2);
const char *ssid = "OSTR"; //任意の名前を付けます。
const char *password = "12345678"; //任意のパスワードを設定します。
void setup() { //setupに次の3行を追加します。
WiFi.softAP(ssid, password); // setting SSID and Password
WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); // setting IP Address
UDP.begin(8000); // setting UDP port,port number is the same setting as the controller and the side.
}
void loop() { //これでスマートフォンのAPPをセットすればWIFI UDPにて接続できます。
if (UDP.parsePacket() > 0) {
UDP.read(recbuff, 8);
UDP.flush();
}
WiFi_receive();
}
2)スマートフォンにWiFi TCP/UDP Controller APPのインストール

Google Playから無料のAPPをインストールしてください。以前から使わせて頂き、重宝している優れものです。
残念ですがiPhone用が無いようです。
下の画像はOSTR用に設定した操作画面です。

3)WiFi TCP/UDP Controllerの設定手順
①操作画面右上のPREFERENCEをタップすると設定画面が開きます。上から順に説明します。
②CONTROLLERはA-Eの5つの操作画面が選べます。
③TARGETの設定:IP or Domain NameにWiFi機能の追加で記したIPアドレス192.168.4.1を入力します。
④Portの設定:同じくUDP begin(8000に合わせて8000を入力します。
⑤TCP/UDPの設定:UDPのラジオボックスを選択します。
⑥BUTTONの設定: NAME:button1から25までの使用するボタンに名前を設定します。
ここでは、button1、button3、button5、button7、button9は使わないのでdefのままとします。
それ以外のボタンに上記操作画面を参考に記入して下さい。但し、文字は1行しか入力できません。
行を増やすとボタンの体裁が崩れてしまうので注意して下さい。また、小文字を入力しても大文字が表示されます。
⑦Commandの設定:操作画面左側の十字ボタンの設定です。ボタンをタップした時に出るコマンドキャラクターを
button2 = F、button4 = L、button6 = R、button8 = Bと記入します。
⑧STOP COMMANDを設定:button名はdefのままにしてbutton2 、button4 、button6、button8のみチェックボックスを
ONにします。これでボタンから指を離した時に停止します。これを忘れると指を離しても動作を続けるので注意して下さい。
⑨button10から25のボタン設定:これらのボタンは、図形や定型文描画の他にFontSizeの切り替えとペンの上下操作を
割り当てています。4)のファームウェアに合わせてコマンドキャラクターを設定します。
⑩Visibilityの設定:ボタンを表示/非表示用のチェックボックスです。十字ボタンの1,3,5,7,8を非表示とします。
⑪Repeatableの設定:intervalsは変更せずにVisibilityと同じ設定にします。
⑫OPTIONの設定:LANDSCAPEのラジオボックスを選択します。
⑬Button Sizeの設定:次は一番下から3行目に飛んでボタンのサイズを変更します。
button 1-9を120に変更、button 10-25を90に変更しましたが、使用するスマホの画面に合わせます。
以上でWiFi TCP/UDP Controller APPの設定は終了です。
4)ファームウェアとFont dataを公開します。
先ずは、下記の「OSTR_Paradise_Model」ファームウェアをご覧下さい。
スマートフォンアプリのボタン操作に一致した受信信号をSwich caseにより選択します。
OSTRの前進/後進/左右旋回の他、図形や文字を描きます。また、ペンの上下やフォントサイズの切り替えも行います。
私の現用ファームウェアです。未だ、改良の余地が有りますが参考に添付しました。
OSTR Paradise Modelのファームウェアを別画面で開きます。
Font Dataは、大文字小文字のアルファベットと数字だけですが、組み合わせて文字列を表示できます。
フォントデータが、長いので別ファイルとしましたがファームウェアの下部に張り付けて使います。
Font Dataを別画面で表示します。
5)OSTRにファームウェアのインストール手順
ここでは、Arduino IDEやESP32のボード設定が完了していることを前提に説明しています。
①コントロール基板のUSBシリアル端子にUSBシリアル・モジュールとUSBケーブルを接続します。
②OSTRの電源を入れてから書き込みスイッチをONにします。
③次にリセットボタンを押すと書き込み準備が完了します。
④次にArduino IDEのツールを開き、ボードマネージャーからESP32 Dev Moduleを選択します。
⑤シリアル・ポート番号が表示されたら、チェックを入れます。
⑥次にツールバーのチェックマークをクリックするとコンパイルが始まります。
⑦コンパイルが完了したら、右隣りの⇒をクリックすると書き込みが始まり、暫くすると終了します。
⑧書き込みが終了後、必ず書き込みスイッチをOFFにします。
6)スマートフォンアプリとOSTRのWiFi接続手順
①OSTRの電源を入れ、スマートフォンの設定ボタンをタップしてWiFiを開きます。
②3)の設定が済んでいる場合、利用可能なネットワークリストにOSTRが入っています。これをタップすると接続が完了します。
③次にスマートフォンアプリWiFi TCP/UDP Controllerを開くと操作が可能となります。
④試しに左側の十字ボタンをタップしてOSTRの操作を試します。十字ボタンは押している間同じ動作を続けます。
⑤次に右側16個のボタンから図形又は定型文の何れかを選んで実際に描画させます。
一度選択すると、そのプロセスが終了するまで他のボタンを押しても無効です。
⑥ファームウェアの図形やフォントと定型文は、次回の作り方を参考に各自自由に作成して登録して下さい。
最後にもう一度動画をご覧下さい。
次回は、描画用フォントデータの作成方法を説明します。
皆様の参考になれば幸いです。
Open Source Turtle Robot (OSTR) その4
ハードウェアが完成したらキャリブレーションを行います。

ここにはArduino unoを使ったトライアル型OSTRのハードウエア及びファームウェアについて詳しく解説されています。
このページのステップ2:ファームウェアをフラッシュするの下段にてTIRL_Arduino_TEST.zipがダウンロードできます。
私は、このファームウェアを参考に動作方法を調べ、手持ちの部品に合わせてファームウェアを書き換えました。
基幹部品の相違点
使用ライブラリーについて
A4988モータードライバーを使うために既存のライブラリーを色々テストした結果、A4988ライブラリー内の
BasicStepperDriver.h、MultiDriver.h、SyncDriver.hをincludeしてcontroller.rotate()を使うことにしました。
このライブラリーには、ステップ数を制御する関数が無いのでcontroller.rotate() 回転角度関数をステップ数に
変換することにより解決しました。
StepperDriverのダウンロードはこちらから
ハードウエアのキャリブレーション用ファームウエア (WiFi 機能を省略しています)
例としてwheel_dia = 70.0; wheel_base = 90.0;として説明してますが、実際の寸法を測定して入力した後、
キャリブレーションを実行して1辺が100㎜の正四角形になるように微調整を行います。
CCW(反時計回り)の場合
wheel_diaパラメータの調整
正方形の一辺の長さが100㎜より長い場合は、wheel_diaの値を増やし、短い場合は値を減らします。
wheel_baseパラメータの調整
旋回角度が90度より狭い場合は、wheel_baseの値を減らし、90度より広い場合は値を増やします。
キャリブレーション用ファームウェアを用意しました。
OSTR_Paradise_Model_Calibration.html

ESP32を使ったOSTR用ファームウェアの説明
先ずは、Arduinoを使ったOSTRのトライアルページを参考にして下さい。ここをクリックします。ここにはArduino unoを使ったトライアル型OSTRのハードウエア及びファームウェアについて詳しく解説されています。
このページのステップ2:ファームウェアをフラッシュするの下段にてTIRL_Arduino_TEST.zipがダウンロードできます。
私は、このファームウェアを参考に動作方法を調べ、手持ちの部品に合わせてファームウェアを書き換えました。
基幹部品の相違点
部品名 | オリジナルモデル | パラダイスモデル |
ステッピングモータ | 1/16 or 1/64 減速機付きモータ | 1回転200ステップ直接駆動 |
モータードライバー | UNL2803 トランジスターアレイ | A4988 1/16 マイクロステップ |
マイコン | Arduino uno | ESP32 WiFi/Bluetooth |
使用ライブラリーについて
A4988モータードライバーを使うために既存のライブラリーを色々テストした結果、A4988ライブラリー内の
BasicStepperDriver.h、MultiDriver.h、SyncDriver.hをincludeしてcontroller.rotate()を使うことにしました。
このライブラリーには、ステップ数を制御する関数が無いのでcontroller.rotate() 回転角度関数をステップ数に
変換することにより解決しました。
StepperDriverのダウンロードはこちらから
ハードウエアのキャリブレーション用ファームウエア (WiFi 機能を省略しています)
例としてwheel_dia = 70.0; wheel_base = 90.0;として説明してますが、実際の寸法を測定して入力した後、
キャリブレーションを実行して1辺が100㎜の正四角形になるように微調整を行います。
CCW(反時計回り)の場合
wheel_diaパラメータの調整
正方形の一辺の長さが100㎜より長い場合は、wheel_diaの値を増やし、短い場合は値を減らします。
wheel_baseパラメータの調整
旋回角度が90度より狭い場合は、wheel_baseの値を減らし、90度より広い場合は値を増やします。
キャリブレーション用ファームウェアを用意しました。
OSTR_Paradise_Model_Calibration.html
次回は、WiFi UDPを使ったファームウエアとスマホAPPの使い方を説明します。
Open Source Turtle Robot (OSTR) その3
コントロール回路の説明
先ずは、instructablesに紹介されたDrawing Robot for Arduinoを参考にご覧下さい。
OSTRのオリジナルでは、減速機付きユニポーラ型ステッピングモータをUNL2803トランジスターアレイにて駆動しています。
私は、手持ちの部品を活かす事とギアモータのバックラッシュが気になり、1回転200ステップのステッピングモータを使い、
A4988モータドライバーにてマイクロステップを1/16に選択、1回転3200ステップの直接駆動としました。
また、マイコンにESP32を使い、WiFi経由でスマートフォンのフリーアプリからリモート操作ができるようにしました。
回路図
ESP32チップは、専用基板を介さずにユニバーサル基板に裏向きに張り付けて使いました。ESP32にはI/O端子が沢山
ありますが、使ってる端子は僅かです。残りのI/O端子は工夫次第で追加機能に生かせます。
制御電源は、ROHM社の基板用DC/DCコンバータにて3.3Vに降圧、ESP32、A4988、サーボモータに供給しました。
また、ソースファイルの書き換え用にUSBシリアル変換モジュール用端子や書き込みスイッチを設けています。

コントロール基板
主にA4988が2個とESP32を小さなユニバーサル基板に組み込んだ簡単な回路です。
左右のモータドライバーA4988は、電流制限用ポテンションメータにて夫々約200mAに設定しています。

バッテリーボード
先にも述べましたが、デジタルカメラCanon EOS-7Dの使い古したリチウムイオン電池を流用しました。
バッテリー保護カバーに電極を取り付け、バッテリーの取り外しがワンタッチで行えるようにしています。

モーター電源用DC/DCコンバータ
MT3608使用の昇圧型DC/DCコンバータをバッテリーボードの裏側に取り付けています。

新しい動画をご覧下さい。
次回から、ソースファイルとスマホのAPPについて説明します。
皆様の参考になれば幸いです。
先ずは、instructablesに紹介されたDrawing Robot for Arduinoを参考にご覧下さい。
OSTRのオリジナルでは、減速機付きユニポーラ型ステッピングモータをUNL2803トランジスターアレイにて駆動しています。
私は、手持ちの部品を活かす事とギアモータのバックラッシュが気になり、1回転200ステップのステッピングモータを使い、
A4988モータドライバーにてマイクロステップを1/16に選択、1回転3200ステップの直接駆動としました。
また、マイコンにESP32を使い、WiFi経由でスマートフォンのフリーアプリからリモート操作ができるようにしました。
回路図
ESP32チップは、専用基板を介さずにユニバーサル基板に裏向きに張り付けて使いました。ESP32にはI/O端子が沢山
ありますが、使ってる端子は僅かです。残りのI/O端子は工夫次第で追加機能に生かせます。
制御電源は、ROHM社の基板用DC/DCコンバータにて3.3Vに降圧、ESP32、A4988、サーボモータに供給しました。
また、ソースファイルの書き換え用にUSBシリアル変換モジュール用端子や書き込みスイッチを設けています。

コントロール基板
主にA4988が2個とESP32を小さなユニバーサル基板に組み込んだ簡単な回路です。
左右のモータドライバーA4988は、電流制限用ポテンションメータにて夫々約200mAに設定しています。

バッテリーボード
先にも述べましたが、デジタルカメラCanon EOS-7Dの使い古したリチウムイオン電池を流用しました。
バッテリー保護カバーに電極を取り付け、バッテリーの取り外しがワンタッチで行えるようにしています。

モーター電源用DC/DCコンバータ
MT3608使用の昇圧型DC/DCコンバータをバッテリーボードの裏側に取り付けています。

新しい動画をご覧下さい。
次回から、ソースファイルとスマホのAPPについて説明します。
皆様の参考になれば幸いです。
Open Source Turtle Robot (OSTR) その2
フレームの工作
OSTRは工作の精度が要求されます。精度が悪いと描画に大きく影響します。
私は手持ちの部品を使う関係で、アクリル板をCNC加工してオリジナルのフレームを作りました。
Arduinoを使ったDrawing Robot for ArduinoのチュートリアルページからPDFファイルがダウンロードできます。
また、フレームの製作に必要な3Dプリンターのデーターもダウンロードできます。
しかし、この場合は指定の減速モータを使う必要が有ります。このモータはAmazonにて安価に入手可能です。
部品
私と同じ部品の入手が難しく切削データを記しても役立たないので画像のみを参考に紹介します。
ステッピングモータ:39㎜角を使用、数年前に倒立振子2輪ロボット用に購入した新古品で今は入手不可
ボールキャスター:タミヤ模型の楽しい工作シリーズ No.144(2個入り)300円弱
サーボモータ:SG3.7型RCサーボを使用しましたが、入手し易いSG90型でも可
ホイール:厚さ3㎜アクリル板を外径64㎜に加工、厚さ1㎜外径68㎜のリング張り合わせ式(作り方を後述します)。
タイヤ:Oリング 1A G-55 内径55㎜太さ3.1㎜ 2本セット(ヨドバシカメラ)を100円弱で購入。

組み立て参考画像
①サイドパネルにステッピングモータをビス止め、サイドパネルをベース板(t5アクリル板)にねじ止めします。
OSTRのチュートリアルでは、ペンガイドが本体に固定していてその中をペンが上下しますが、私はベース板とトップパネルに
10㎜の穴を開け、ペンと一体のスリーブが上下する構造としました。 注意、上下の穴が同心円状にあることが重要です。

②トップパネル(t5アクリル板)を左右サイドパネルの間にビス止めします。(サーボ―モータは取り付け済み)

③前後パネル(t3アクリル板)をビス止めします。(今回からアクリル板の止めネジに2㎜のタップタイトを使い始めました)。

④リア―パネルにコントロール基板を取り付けします。(コントロール基板の製作は次回にします)

⑤左右のホイールを取り付けます。
この時ベース板が水平になるようにキャスタの高さを調整します。傾いている場合、360度回転するとペン先が点にならずに
円を描くことになります。また、ホイールベース(ここでは左右タイヤの中心間距離)の中心にペン先がない場合も同様です。

⑥の1 バッテリーボードを取り付けます。 バッテリーはCanonのデジイチ用LP-E6 7.2Vリチウムイオン電池を使いました。

⑥の2 バッテリーボードの裏側に昇圧型DC/DCコンバータ(MT3608)を取り付けて12Vを得ています。

⑦コネクター類を差し込み組み立てが完了しました。

⑧フェルトペンの加工、アルミパイプ外径10㎜にフェルトペンを挿入しますが、ストレートの太さのペンが少なく適当な
品を探すのに苦労しました。私は、サクラクレパスFK-M#49 [フェルトペン 中字]を内径9㎜に入るように少し胴体を削って
動く程度の硬さに挿入しました。これは、使用後ペン先にキャップをする必要があり、抜き差しをするためです。
また、ペンを上下させるためのサーボホーンを受けるカラーはt5アクリル板を外径23㎜、内径10㎜のリング状に加工し、
止めねじ用のM2タップを外周の1ヶ所に設けています。

ホイールの製作について
OSTRでは、ホイールの精度が描画に大きく影響します。真円度やシャフトに取り付けるハブのブレ等に注意が必要です。
私はこれまで、タイヤが入る溝をボール盤を利用して削っていましたが、今回はt3アクリル板を外径64㎜にCNC加工し、
両側にt1アクリル板のリング外径68㎜を張り合わせました。リングがズレないように6ケ所に合わせ穴を設け、爪楊枝を
差し込んでから、アクリル接着液で固定します。 タイヤには内径55㎜、太さ3.1㎜のOリング1A G-55をはめ込みました。
HUBは外径22㎜ t8アクリル板をCNC加工して作りました。M3セットスクリューにてモータシャフトに固定しますが、内径が
5.0㎜ジャストでシャフトと遊びがないようにします。少しでもガタがあるとホイールにブレが生じるので注意が必要です。
HUBのホイール取付穴にM3のタップ加工をします。

最後に余談ですが、最初はコントロール基板とバッテリーを前後に配置していましたが、前後の重量バランスが良すぎて
モータ起動時にキャスターが持ち上がる不具合が有り、不細工となりますがキャスター側に部品を集合しました。

次回は、制御回路の詳細を順次掲載します。
皆様の参考になれば幸いです。
OSTRは工作の精度が要求されます。精度が悪いと描画に大きく影響します。
私は手持ちの部品を使う関係で、アクリル板をCNC加工してオリジナルのフレームを作りました。
Arduinoを使ったDrawing Robot for ArduinoのチュートリアルページからPDFファイルがダウンロードできます。
また、フレームの製作に必要な3Dプリンターのデーターもダウンロードできます。
しかし、この場合は指定の減速モータを使う必要が有ります。このモータはAmazonにて安価に入手可能です。
部品
私と同じ部品の入手が難しく切削データを記しても役立たないので画像のみを参考に紹介します。
ステッピングモータ:39㎜角を使用、数年前に倒立振子2輪ロボット用に購入した新古品で今は入手不可
ボールキャスター:タミヤ模型の楽しい工作シリーズ No.144(2個入り)300円弱
サーボモータ:SG3.7型RCサーボを使用しましたが、入手し易いSG90型でも可
ホイール:厚さ3㎜アクリル板を外径64㎜に加工、厚さ1㎜外径68㎜のリング張り合わせ式(作り方を後述します)。
タイヤ:Oリング 1A G-55 内径55㎜太さ3.1㎜ 2本セット(ヨドバシカメラ)を100円弱で購入。

組み立て参考画像
①サイドパネルにステッピングモータをビス止め、サイドパネルをベース板(t5アクリル板)にねじ止めします。
OSTRのチュートリアルでは、ペンガイドが本体に固定していてその中をペンが上下しますが、私はベース板とトップパネルに
10㎜の穴を開け、ペンと一体のスリーブが上下する構造としました。 注意、上下の穴が同心円状にあることが重要です。

②トップパネル(t5アクリル板)を左右サイドパネルの間にビス止めします。(サーボ―モータは取り付け済み)

③前後パネル(t3アクリル板)をビス止めします。(今回からアクリル板の止めネジに2㎜のタップタイトを使い始めました)。

④リア―パネルにコントロール基板を取り付けします。(コントロール基板の製作は次回にします)

⑤左右のホイールを取り付けます。
この時ベース板が水平になるようにキャスタの高さを調整します。傾いている場合、360度回転するとペン先が点にならずに
円を描くことになります。また、ホイールベース(ここでは左右タイヤの中心間距離)の中心にペン先がない場合も同様です。

⑥の1 バッテリーボードを取り付けます。 バッテリーはCanonのデジイチ用LP-E6 7.2Vリチウムイオン電池を使いました。

⑥の2 バッテリーボードの裏側に昇圧型DC/DCコンバータ(MT3608)を取り付けて12Vを得ています。

⑦コネクター類を差し込み組み立てが完了しました。

⑧フェルトペンの加工、アルミパイプ外径10㎜にフェルトペンを挿入しますが、ストレートの太さのペンが少なく適当な
品を探すのに苦労しました。私は、サクラクレパスFK-M#49 [フェルトペン 中字]を内径9㎜に入るように少し胴体を削って
動く程度の硬さに挿入しました。これは、使用後ペン先にキャップをする必要があり、抜き差しをするためです。
また、ペンを上下させるためのサーボホーンを受けるカラーはt5アクリル板を外径23㎜、内径10㎜のリング状に加工し、
止めねじ用のM2タップを外周の1ヶ所に設けています。

ホイールの製作について
OSTRでは、ホイールの精度が描画に大きく影響します。真円度やシャフトに取り付けるハブのブレ等に注意が必要です。
私はこれまで、タイヤが入る溝をボール盤を利用して削っていましたが、今回はt3アクリル板を外径64㎜にCNC加工し、
両側にt1アクリル板のリング外径68㎜を張り合わせました。リングがズレないように6ケ所に合わせ穴を設け、爪楊枝を
差し込んでから、アクリル接着液で固定します。 タイヤには内径55㎜、太さ3.1㎜のOリング1A G-55をはめ込みました。
HUBは外径22㎜ t8アクリル板をCNC加工して作りました。M3セットスクリューにてモータシャフトに固定しますが、内径が
5.0㎜ジャストでシャフトと遊びがないようにします。少しでもガタがあるとホイールにブレが生じるので注意が必要です。
HUBのホイール取付穴にM3のタップ加工をします。

最後に余談ですが、最初はコントロール基板とバッテリーを前後に配置していましたが、前後の重量バランスが良すぎて
モータ起動時にキャスターが持ち上がる不具合が有り、不細工となりますがキャスター側に部品を集合しました。

次回は、制御回路の詳細を順次掲載します。
皆様の参考になれば幸いです。
Open Source Turtle Robot (OSTR) その1
Open Source Turtle Robot (OSTR)を作ってみました。
instructablesで見つけた文字や図形を描く(亀さん)ロボットOSTRを参考にしました。
私は、手持ち部品の活用と丸切りのコピーでは面白くないのでオリジナルと全く違ったロボットに仕上げました。
ここをクリックするとDrawing Robot for Arduinoのページが開きます。
先ずは動画をご覧下さい。新しい動画に差し替えました。
チュートリアルでは減速機付きのステッピングモーターを使っていますが、私は1回転200ステップのモーターを使い、
マイコンにWiFiが使えるESP32、モータードライバーにA4988を使い1/16マイクロステップで動かしました。
フレームやホイールはアクリル板をCNC加工して組み立てました。このロボットを正確に動かすには精度が要求されます。

小さなユニバーサル基板に回路を組み込みました。
ESP32は、裏返しにして基板に両面テープで接着、ESP32の端子と基板をジャンパー線で配線しています。
電源には7.4Vのカメラ用リチウムイオン電池を使い、モータードライバにはDC/DCコンバータで12Vに昇圧して供給。
ESP32の電源には、前回紹介のROHM社3.3V1A、DC/DCコンバータを使って供給しています。

フリーアプリのWiFi UDPを使ってコントロール
コントロールにはスマートフォンのWiFiアプリを使い、図形やフォントデータを選べるようにしました。

次回から工作、回路、ソフトの詳細を順次掲載します。
皆様の参考になれば幸いです。
instructablesで見つけた文字や図形を描く(亀さん)ロボットOSTRを参考にしました。
私は、手持ち部品の活用と丸切りのコピーでは面白くないのでオリジナルと全く違ったロボットに仕上げました。
ここをクリックするとDrawing Robot for Arduinoのページが開きます。
先ずは動画をご覧下さい。新しい動画に差し替えました。
チュートリアルでは減速機付きのステッピングモーターを使っていますが、私は1回転200ステップのモーターを使い、
マイコンにWiFiが使えるESP32、モータードライバーにA4988を使い1/16マイクロステップで動かしました。
フレームやホイールはアクリル板をCNC加工して組み立てました。このロボットを正確に動かすには精度が要求されます。

小さなユニバーサル基板に回路を組み込みました。
ESP32は、裏返しにして基板に両面テープで接着、ESP32の端子と基板をジャンパー線で配線しています。
電源には7.4Vのカメラ用リチウムイオン電池を使い、モータードライバにはDC/DCコンバータで12Vに昇圧して供給。
ESP32の電源には、前回紹介のROHM社3.3V1A、DC/DCコンバータを使って供給しています。

フリーアプリのWiFi UDPを使ってコントロール
コントロールにはスマートフォンのWiFiアプリを使い、図形やフォントデータを選べるようにしました。

次回から工作、回路、ソフトの詳細を順次掲載します。
皆様の参考になれば幸いです。