2足歩行ロボットの製作3（Microbit、 サーボモータ使用、歩行プログラム）

Microbitを使た2足歩行ロボットを製作しました。
2足歩行のメカ部分についてはこちらを参照してください。
[2足歩行ロボットの製作1（Microbit、 サーボモータ使用）](https://qiita.com/Gyutan/items/62ceeb4464543b2ecaf2)
サーボモータを動かすボードは、DFrobotのボードを用いました。
[Micro:bit Driver Expansion Board SKU:DFR0548](https://www.dfrobot.com/wiki/index.php/Micro:bit_Driver_Expansion_Board_SKU:DFR0548#More_Documents)

###2足歩行ロボット用　左曲がり、右曲がりプログラム

モータの配置とボードへの接続端子は、下図の通りです。
![Servo_position2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/179a90dc-ecc1-7fdd-c25d-642a933b5489.png)

####ロボットの右曲がり

（0）初期状態
![r1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/bed08dc0-07d7-93e9-aa02-1c561ce8b5e3.jpeg)

（1）片方の下足（右）を傾け、重心を傾けた足（右）の方に移動させます。
![r2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/da4d6ed7-c433-cabb-83e8-cb62938bb6ba.jpeg)

（2）腰を回転させると（右上足）、浮いた方の足が前に出ます。
![r3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/a4bc6095-b035-293e-6ed6-5fcf34a4b92f.jpeg)

（3）浮いた方の足（左）を地面につけるために、傾けた足を元に戻します。
![r4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/5be7183a-9ab3-a75b-fbe8-9a4c5e097ab2.jpeg)

（4）左足に重心を移動させるために左足を傾けます。
![r5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/5a71739a-9e7c-7d29-f659-b4d4c31ab477.jpeg)

（5）右上足を元の位置に戻します。
![r6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/a35363a5-45b9-d7c6-44f2-5d7e3114609a.jpeg)

（6）左足を元の位置に戻すことで、右曲がりが終了します。
![r7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/357cc9b6-27cb-2c85-ed6e-62ed5bac0248.jpeg)

#### ロボットの左曲がり

（1）
![l1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/dcf69eeb-695c-e036-120e-d67f6d3e10ca.jpeg)
（2）
![l2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/78aa5d39-8334-3f9f-ede7-7e9edae210d3.jpeg)
（3）
![l3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/d813ad4a-1e61-c3cb-c180-48cf09f93894.jpeg)
（4）
![l4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/47d6aa41-b33f-8c32-5273-11bd7a17eaed.jpeg)
（5）
![l5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/d8b02f27-a22e-1772-34ed-7c6a622bf580.jpeg)
（6）
![l6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/b93a653e-52ee-373b-4e13-d55d98d78056.jpeg)

####Microbitで作成したプログラム
前回の半歩前に移動するプログラムに右曲がり、左曲がりの関数が足されています。Waitは300msぐらいにしています。（あまり早いと転んでしまうので。）
![microbit-df_servo_walk_turn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165987/2a5228c1-6457-68c9-1fe2-522c568296ff.png)


####使い方
サーボモータを図に従って、ボードのS1からS4に接続します。
Aボタン：右曲がり
Bボタン：左曲がり
A+Bボタン：前進

####プログラム概略説明
変数は7個あります。
ilF:初期左下足の値（S1）
iLL:初期左上足の値（S2）
iRF:初期右下足の値（S3）
iRL:初期右上足の値（S4）
前回の調整プログラムで調べた値を入れてください。これが原点になります。
slope:下足を傾ける角度
haba:腰を回転させる角度
wait:待機時間

`最初だけ`では、すべてのモータを基準位置に設定します。
rhwalk関数は、右足を最初に傾けて左足を半歩前に出し、つま先をそろえるプログラム。
lhwalk関数は、左足を最初に傾けて右足を半歩前に出し、つま先をそろえるプログラム。
right関数は右に曲がるプログラム。
Left関数は左に曲がるプログラム
waitを大きくすることで、動作を確かめることができます。

#### right関数の詳細
（1）右下足（S3）を傾けて、重心を右足に乗せます。
（2）左下足（S1）を傾けて重心移動をサポートします。（傾きの2倍にしていますが、この動作はいらないかもしれません。）
（3）右上足（腰の部分を）（S4）回転させます。
（4）S1を初期位置に戻します。
（5）S3を初期位置に戻します。​
（6）S1を傾けます。
（7）S3を2倍傾けて、重心移動をサポートします。（この動作は不要かもしれません）
（8）S4を初期位置に戻します。
（9）S3を初期位置に戻します。
（10）S1を初期位置に戻します。
これで、右曲がりに、つま先がそろった状態になります。
left関数はright関数の反対足から同じような動作をさせます。

後ろに下がる、横に移動する（？）などのプログラムを作っていきたいと思います。