1、LEDの明るさを調整する!
LEDをPWMで光らせることで明るさが調整できるらしいです。
注意
・私は電子機器については電圧=抵抗×電流がわかる程度の全くの素人です。
2、本題
(1)接続
(2)Raspberry piの設定
シリアルを有効にすることで、ピンを制御できるようになります。
(3)実行プログラム
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinPwmOutput;
import com.pi4j.io.gpio.Pin;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.util.CommandArgumentParser;
public class TestPwmLed {
public static void main(String[] args) throws InterruptedException {
pwm(args);
}
/**
* 100Hzで出力
* @param args
* @throws InterruptedException
*/
public static void pwm(String[] args) throws InterruptedException{
final GpioController gpio = GpioFactory.getInstance();
Pin pin = CommandArgumentParser.getPin(
RaspiPin.class,
RaspiPin.GPIO_00,
args);
GpioPinPwmOutput pwm = gpio.provisionSoftPwmOutputPin(pin);
pwm.setPwmRange(100);//出力時間を100分割
int sleep = 1000;
for(int i = 0 ;i<10;i++){
//常にON
pwm.setPwm(100);//デューティー比100
System.out.println("PWM rate is: " + pwm.getPwm());
Thread.sleep(sleep);
//半分ON
pwm.setPwm(50);//デューティー比50
System.out.println("PWM rate is: " + pwm.getPwm());
Thread.sleep(sleep);
//一瞬ON
pwm.setPwm(10);//デューティー比10
System.out.println("PWM rate is: " + pwm.getPwm());
Thread.sleep(sleep);
//常にOFF
pwm.setPwm(0);//デューティー比0
System.out.println("PWM rate is: " + pwm.getPwm());
Thread.sleep(sleep);
}
gpio.shutdown();
System.out.println("pwm end");
}
}
(4)実行結果
3、おわりに
本当はハードのPWMを使用したかったのですが、どうしてもうまくいきませんでした。
javaから制御ができていないように思います。権限の問題でしょうか・・・。
疑似的ではありますが、PWMを操れたので、次はモータを制御したくなります。
参考
SoftPwmExample.java
参考にしてプログラム作成しました。