2018年に製作した四足歩行ロボットについて記事にしました。
●obniz Pinに4個のサーボモータを直接接続した四足歩行ロボットをパソコン・スマホからWiFiによる遠隔操作します。
●obniz・サーボモータ電源はモバイルバッテリー2.4Aを使用しました。
動画
サーボモータ固定
●足はサーボモータのレバーにエアーチューブを挿入して先端を熱で細くしました。
レガシープログラム
【https://console.obniz.com/ja/repository】2018年製作したプログラム
obniz OLED初期画面
サーボモータ10 - GNd
1 - VCC
2 - SIGN
パソコン操作画面
プログラム
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@1.13.1/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h3>ROBOT</h3>
<button id="UP" style="WIDTH: 100px; HEIGHT: 100px ;font-size:30px">直立</button>
<button id="GO" style="WIDTH: 100px; HEIGHT: 100px ;background-color:lightgreen ;font-size:30px ">前↑</button>
<button id="BACK" style="WIDTH: 100px; HEIGHT: 100px ;background-color:lightgreen ;font-size:30px">↓後</button>
<h1></h1>
<button id="DOWN" style="WIDTH: 100px; HEIGHT: 100px ;font-size:30px">正座</button>
<button id="LEFT" style="WIDTH: 100px; HEIGHT: 100px ;background-color:lightgreen ;font-size:30px">左←</button>
<button id="RIGHT" style="WIDTH: 100px; HEIGHT: 100px ;background-color:lightgreen ;font-size:30px">→右</button>
<h1></h1>
<button id="STRETCH" style="WIDTH: 100px; HEIGHT: 100px;font-size:30px ">体操</button>
<button id="FAST" style="WIDTH: 100px; HEIGHT: 100px ;font-size:30px">高速</button>
<button id="SLOW" style="WIDTH: 100px; HEIGHT: 100px ;font-size:30px">低速</button>
<script>
var obniz = new Obniz("9406-4305");
obniz.onconnect = async function () {
var servoRL = obniz.wired("ServoMotor", {signal:2,vcc:1, gnd:0});
var servoRR = obniz.wired("ServoMotor", {signal:5,vcc:4, gnd:3});
var servoFL = obniz.wired("ServoMotor", {signal:8,vcc:7, gnd:6});
var servoFR = obniz.wired("ServoMotor", {signal:11,vcc:10, gnd:9});
$("#UP").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("直立");
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#GO").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("前進");
//go
for (count = 0; count < 6; count++){
servoRL.angle(125);
servoRR.angle(115);
servoFL.angle(35);
servoFR.angle(25);
await obniz.wait(500);
servoRL.angle(65);
servoRR.angle(55);
servoFL.angle(155);
servoFR.angle(145);
await obniz.wait(500);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#BACK").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("後退");
//back
for (count = 0; count < 6; count++){
servoRL.angle(35);
servoRR.angle(25);
servoFL.angle(125);
servoFR.angle(115);
await obniz.wait(500);
servoRL.angle(155);
servoRR.angle(145);
servoFL.angle(65);
servoFR.angle(55);
await obniz.wait(500);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#DOWN").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("正座");
//down
servoRL.angle(10);
servoRR.angle(170);
servoFL.angle(170);
servoFR.angle(10);
await obniz.wait(1000);
});
$("#LEFT").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("左折");
//left
for (count = 0; count < 6; count++){
servoRL.angle(125);
servoRR.angle(115);
servoFL.angle(65);
servoFR.angle(25);
await obniz.wait(500);
servoRL.angle(65);
servoRR.angle(55);
servoFL.angle(125);
servoFR.angle(145);
await obniz.wait(500);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#RIGHT").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("右折");
//right
for (count = 0; count < 6; count++){
servoRL.angle(105);
servoRR.angle(95);
servoFL.angle(55);
servoFR.angle(65);
await obniz.wait(500);
servoRL.angle(55);
servoRR.angle(55);
servoFL.angle(155);
servoFR.angle(115);
await obniz.wait(500);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#STRETCH").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("体操");
//bup
for (count = 0; count < 2; count++){
servoRL.angle(145);
servoRR.angle(35);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
//fup
for (count = 0; count < 2; count++){
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(35);
servoFR.angle(145);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 2; count++){
servoRL.angle(145);
servoRR.angle(35);
servoFL.angle(35);
servoFR.angle(145);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 2; count++){
servoRL.angle(35);
servoRR.angle(145);
servoFL.angle(35);
servoFR.angle(145);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 2; count++){
servoRL.angle(145);
servoRR.angle(35);
servoFL.angle(145);
servoFR.angle(35);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 1; count++){
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(135);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 1; count++){
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(55);
servoFR.angle(85);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 1; count++){
servoRL.angle(135);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
for (count = 0; count < 1; count++){
servoRL.angle(95);
servoRR.angle(45);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#FAST").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("高速");
for (count = 0; count < 10; count++){
servoRL.angle(105);
servoRR.angle(95);
servoFL.angle(55);
servoFR.angle(45);
await obniz.wait(150);
servoRL.angle(85);
servoRR.angle(75);
servoFL.angle(135);
servoFR.angle(125);
await obniz.wait(150);
}
for (count = 0; count < 10; count++){
servoRL.angle(55);
servoRR.angle(45);
servoFL.angle(105);
servoFR.angle(95);
await obniz.wait(150);
servoRL.angle(135);
servoRR.angle(125);
servoFL.angle(85);
servoFR.angle(75);
await obniz.wait(150);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
$("#SLOW").on("click",async function(){
obniz.display.clear();
obniz.display.pos(1,10);
obniz.display.font(null,40)
obniz.display.print("低速");
for (count = 0; count < 4; count++){
servoRL.angle(135);
servoRR.angle(125);
servoFL.angle(25);
servoFR.angle(15);
await obniz.wait(1000);
servoRL.angle(55);
servoRR.angle(45);
servoFL.angle(165);
servoFR.angle(155);
await obniz.wait(1000);
}
for (count = 0; count < 4; count++){
servoRL.angle(25);
servoRR.angle(15);
servoFL.angle(135);
servoFR.angle(125);
await obniz.wait(1000);
servoRL.angle(165);
servoRR.angle(155);
servoFL.angle(55);
servoFR.angle(45);
await obniz.wait(1000);
}
//up
servoRL.angle(95);
servoRR.angle(85);
servoFL.angle(95);
servoFR.angle(85);
await obniz.wait(1000);
});
};
</script>
</body>
</html>
0 件のコメント:
コメントを投稿