趣味で電子工作をしています。複数のネットサイトからキャタピラーで走行するタンク(模型)を作り、モーターとwebカメラを搭載しています。HTMLを書いてノートパソコンから走行がコントロール可能でカメラからはパソコンに映像が送れます。
サーボモーターを使いカメラを回転(左右見渡せるように)させたいのですが全く反応しません。
HTMLはちょっと長くなりますが・・・
マーくんコントローラー<body> <p>ボタンを押すとマーくんが動くよ!</p> <button id="left_forward" type="button" onClick="left_forward()">左前</button> <button id="forward" type="button" onClick="forward()">前進</button> <button id="right_forward" type="button" onClick="right_forward()">右前</button> <p> <button type="button">*</button> <button id="stop" type="button" onClick="stop()">停止</button> <button type="button">*</button> </p> <button id="left_back" type="button" onClick="left_back() ">左後</button> <button id="back" type="button" onClick="back()">後進</button> <button id="right_back" type="button" onClick="right_back() ">右後</button> <div id="speak"> おしゃべり<input type="text" id="word"/> </div> <div class="slidecontainer"> <input type="range" min="15" max="40" value="25" class="slider" id="myRange"> </div> </td> </tr> <tr> <td>slider value:<p id="out"></p></td> <td>output value:<p id="out2"></p></td> </tr> </tbody> </table> </td> </tr> </table> </div> <script> var division = 20; var commandID = 0; var slider = document.getElementById("myRange"); var output = document.getElementById("out"); var output2 = document.getElementById("out2"); output.innerHTML = slider.value; // Display the default slider value // Update the current slider value (each time you drag the slider handle) slider.oninput = function(){ output.innerHTML = slider.value; output2.innerHTML = slider.value/division; var outvalue = slider.value/division; webiopi().callMacro("setHwPWMforPan", outvalue); }; </script> </div> <p>マーくんの目</p> <img src="http://rasrobo.local:8080/?action=stream" /> <script type="text/javascript" src="/webiopi.js"></script> <script type="text/javascript" src="/jquery.js"></script> <script type="text/javascript"> var webiopi = webiopi(); webiopi.ready(function() { webiopi.refreshGPIO(true); webiopi.setFunction(8, "OUT"); webiopi.setFunction(7, "OUT"); webiopi.setFunction(23, "OUT"); webiopi.setFunction(24, "OUT"); webiopi.callMacro("jtalk",'どーもどーもマークンです');
var sendButton = webiopi.createButton("sendButton", "話す", function() {
var word = $("#word").val();
webiopi.callMacro("jtalk", word);
});
$("#speak").append(sendButton);
});
function forward() {
webiopi.digitalWrite(8, 1);
webiopi.digitalWrite(7, 0);
webiopi.digitalWrite(23, 1);
webiopi.digitalWrite(24, 0);
button_color("#forward");
}
function back() {
webiopi.digitalWrite(8, 0);
webiopi.digitalWrite(7, 1);
webiopi.digitalWrite(23, 0);
webiopi.digitalWrite(24, 1);
button_color("#back");
}
function stop() {
webiopi.digitalWrite(8, 0);
webiopi.digitalWrite(7, 0);
webiopi.digitalWrite(23, 0);
webiopi.digitalWrite(24, 0);
button_color("#stop");
}
function right_forward() {
webiopi.digitalWrite(8, 1);
webiopi.digitalWrite(7, 0);
webiopi.digitalWrite(23, 0);
webiopi.digitalWrite(24, 0);
button_color("#right_forward");
}
function left_forward() {
webiopi.digitalWrite(8, 0);
webiopi.digitalWrite(7, 0);
webiopi.digitalWrite(23, 1);
webiopi.digitalWrite(24, 0);
button_color("#left_forward");
}
function right_back() {
webiopi.digitalWrite(8, 0);
webiopi.digitalWrite(7, 1);
webiopi.digitalWrite(23, 0);
webiopi.digitalWrite(24, 0);
button_color("#right_back");
}
function left_back() {
webiopi.digitalWrite(8, 0);
webiopi.digitalWrite(7, 0);
webiopi.digitalWrite(23, 0);
webiopi.digitalWrite(24, 1);
button_color("#left_back");
}
var last_id = "";
function button_color(id) {
$(last_id).css('background', "#808080");
$(id).css('background', "#CC0033");
last_id = id;
}
</script>
<style type="text/css">
button {
display: inline;
margin: 5px 5px 5px 5px;
width: 80px;
height: 45px;
border-radius: 10px;
font-size: 12pt;
font-weight: bold;
color: white;
background-color:#808080
}
body {
background-color:#C0C0C0
}
</style>
</body>
サーボのプログラムは
import webiopi
import time
import wiringpi as GPIO
SERVO_PAN = 26
SERVO_PAN_TRIM = 12 # degree
SERVO_PAN_LEFT_LIMIT = 60 # degree
SERVO_PAN_RIGHT_LIMIT = -60 # degree
SERVO SPECIFICATION
SERVO_ANGLE_MIN = -90 # degree
SERVO_ANGLE_MAX = 90 # degree
SERVO_PULSE_MIN = 0.75 # ms
SERVO_PULSE_MAX = 2.4 # ms
SERVO_CYCLE = 50 # ms
###############################
WIRINGPI SPECIFICATION
PWM_WRITE_MIN = 0
PWM_WRITE_MAX = 1024
################################
SERVO_DUTY_MIN = SERVO_PULSE_MIN/SERVO_CYCLE
SERVO_DUTY_MAX = SERVO_PULSE_MAX/SERVO_CYCLE
SERVO_PAN_DUTY_MIN = (SERVO_DUTY_MAX - SERVO_DUTY_MIN) / (SERVO_ANGLE_MAX - SERVO_ANGLE_MIN) * ((SERVO_PAN_LEFT_LIMIT +SERVO_PAN_TRIM) - SERVO_ANGLE_MIN) + SERVO_DUTY_MIN
SERVO_PAN_DUTY_MAX = (SERVO_DUTY_MAX - SERVO_DUTY_MIN) / (SERVO_ANGLE_MAX - SERVO_ANGLE_MIN) * ((SERVO_PAN_RIGHT_LIMIT+SERVO_PAN_TRIM) - SERVO_ANGLE_MIN) + SERVO_DUTY_MIN
SERVO_PAN_PWM_WRITE_MIN = PWM_WRITE_MAX * SERVO_PAN_DUTY_MIN
SERVO_PAN_PWM_WRITE_MAX = PWM_WRITE_MAX * SERVO_PAN_DUTY_MAX
def getServoPanPWMvalue(val):
pwm_value = int((SERVO_PAN_PWM_WRITE_MAX - SERVO_PAN_PWM_WRITE_MIN) * val + SERVO_PAN_PWM_WRITE_MIN)
return pwm_value
webiopi.setDebug()
def setup():
webiopi.debug("Script with macros - Setup")
GPIO.wiringPiSetupGpio()
GPIO.pinMode(SERVO_PAN,GPIO.OUTPUT)
GPIO.softPwmCreate(SERVO_PAN,0,50)
def loop():
webiopi.sleep(5)
def destroy():
webiopi.debug("Script with macros - Destroy")
@webiopi.macro
def setHwPWMforPan(duty):
GPIO.softPwmWrite(SERVO_PAN, getServoPanPWMvalue(float(duty)))
です。
コントロールパネルのスライドバーを使いサーボを回転させる方法を教えていただきたいのです。

0 コメント