<Raspberry Pi-52>

Raspberry Pi-51で、最新OSのRaspbian stretchでのwebからアクセスしてのGPIO制御で
自分で作ったボタンでLEDのON/OFFを紹介しました。

今度は、モーターなどの回転数を制御するPWMについてやって見たいと思います。
モーター以外に電球の調光にもPWMが使われているようです。

PWMは、Pulse Width Modulationの略で、周期一定で、パルスの幅だけが変化する(変化させる)


紹介するのは、下の画像のように5個のボタンを配置して、左から
デューティー比0%、10%、50%、90%、100%に設定しています。
*0%は、0V、100%は、Hレベルのまま、(Hレベル:3.3V)


デューティー比0%から100%までのPWM波形とデジボルで測定した電圧。(GPIO25端子使用)
波形から周期は20msなので、f=1/tから、このGPIO25のPWM出力の周波数は、おおよそ50Hzのようです。
計測結果から、デューティー比を変えることにより出力電圧が可変できることが分かりました。

デューティー比0% デジボル0V (計算値:3.3V×0%=0V)


デューティー比が10% デジボル0.3429V (計算値:3.3V×10%=0.33V)


デューティー比が50% デジボル1.658V (計算値:3.3V×50%=1.65V)


デューティー比が90% デジボル2.986V (計算値:3.3V×90%=2.97V)


デューティー比が1000% デジボル3.329V (計算値:3.3V×100%=3.3V)



必要ファイルはconfig、index.htmlとscript.pyで、/home/pi/webiopi_kisoフォルダを作成し
ここに置きます。

それでは、下記の@ABを行っていきます。

@/etc/webiopi/configファイルで、index.htmlとscript.pyを/home/pi/webiopi_kisoフォルダに置く設定をします。
(下の←←←←←ここですを追加)
#------------------------------------------------------------------------#

[SCRIPTS]
# Load custom scripts syntax :
# name = sourcefile
#   each sourcefile may have setup, loop and destroy functions and macros
#myscript = /home/pi/webiopi/examples/scripts/macros/script.py
myscript = /home/pi/webiopi_kiso/script.py             #←←←←←ここです
#------------------------------------------------------------------------#
[HTTP]
# HTTP Server configuration
enabled = true
port = 8000

# File containing sha256(base64("user:password"))
# Use webiopi-passwd command to generate it
passwd-file = /etc/webiopi/passwd

# Change login prompt message
prompt = "WebIOPi"

# Use doc-root to change default HTML and resource files location
#doc-root = /home/pi/webiopi/examples/scripts/macros
doc-root = /home/pi/webiopi_kiso               #←←←←←ここです
# Use welcome-file to change the default "Welcome" file
#welcome-file = index.html

#------------------------------------------------------------------------#

Aindex.html(<は半角に修正のこと)
-------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="ja">
<head>
<meta  charset="UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>PWM制御</title>

<!--  ボタンサイズ設定  -->
<style>
        .class2 {
                width: 70px;
                height: 70px;
                background-color:aqua;
        }
</style>

<script type="text/javascript" src="/webiopi.js"></script>

<script>

//power初期値(pwmのデューティ比))設定
webiopi().ready( function(){
        Speedlevel( 50 );
} );


//起動直後の設定
function Speedlevel(level){
        webiopi().callMacro( "Speedlevel", level); // Speed制御
}



// function speed(x)、 switch (x)、webiopi().callMacro( "Speedlevel", x) のxは同じに名前にすること
// 文字は何でもOK
function speed(power){

        switch (power) {
                case 0:
                         webiopi().callMacro( "Speedlevel", power); // Speed制御
                         //alert(power); break;  //power値を画面に表示
                case 10:
                         webiopi().callMacro( "Speedlevel", power); // Speed制御
                         //alert(power); break;

                case 50:
                         webiopi().callMacro( "Speedlevel", power); // Speed制御
                         //alert(power); break;

                case 90:
                         webiopi().callMacro( "Speedlevel", power); // Speed制御
                         //alert(power); break;

                case 100:
                         webiopi().callMacro( "Speedlevel", power); // Speed制御
                         //alert(power); break;

        }
}

</script>

</head>
<body>

<!--   ボタンを5個 onclick="speed(x)で 関数function speed(power)へ-->
<input class="class2" type="radio" name="speed" onclick="speed(0)" >
<input class="class2" type="radio" name="speed" onclick="speed(10)" >
<input class="class2" type="radio" name="speed" onclick="speed(50)" checked><!-- checkedはチェックマークの初期 -->
<input class="class2" type="radio" name="speed" onclick="speed(90)" >
<input class="class2" type="radio" name="speed" onclick="speed(100)" >

</body>
</html>
-------------------------------------------------------------------------------

Bscript.py
-------------------------------------------------------------------------------
import webiopi

GPIO = webiopi.GPIO

SPEED_PWM = 25
GPIO.setFunction( SPEED_PWM, GPIO.PWM )

@webiopi.macro
def Speedlevel(dc):


                        GPIO.pwmWrite( SPEED_PWM, int(dc)/100 )
-------------------------------------------------------------------------------


webiopiを起動させます、コマンドラインから、下のように打ち込みます。
pi@raspberrypi:~ $ sudo /etc/init.d/webiopi start
停止はstartをstopにする

そして、webブラウザから、http://192.168.0.30:8000/にアクセスするとボタンが
表示します。(IPアドレスは自分の環境)

また、Raspberry Piの電源ON時に自動起動させるには、下記の/etc/rc.localファイルの
←ここを追加をすれば、自動で起動します。

/etc/rc.local
---------------------------------------------------------------------
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo /etc/init.d/webiopi start      #←ここを追加

exit 0
---------------------------------------------------------------------



Raspberry メニューに戻る