読者です 読者をやめる 読者になる 読者になる

決まった時間にLEDの明るさを変える:Arduinoを使う

input-r.hatenablog.jp

以前,こんなページを書いたが,これを実行中にRaspberry Piがお亡くなりになるという不幸があったので,別の方法を考えてみる。

PWM調光はArduinoで対応することにして,Raspberry Piからシリアル通信で明るさを変えるようにする。

Arduinoで明るさを変える

analogWrite()で変えられる。UnoのようにATmega328Pを搭載しているArduinoボードでは,デジタルピン3,5,6,9,10,11で使える。5,6番ポートは約980Hzで,残りは約490Hzで出力する。

Arduino 日本語リファレンス

Raspberry PiからArduino経由でLEDの明るさを変える

参考にしたのは次のサイト。

karaage.hatenadiary.jp

まず,Arduinoのプログラム。

#define LED_PIN (3)
byte val;
void setup(){
  // Serial Setting
  Serial.begin(9600);
  // Port Setting
  pinMode(LED_PIN, OUTPUT);
  analogWrite(LED_PIN, 0);
}
void loop(){
  if(Serial.available() > 0){
    val=Serial.read();
    Serial.write(val);
    if(val == 'A'){
      analogWrite(LED_PIN, 255);
    }
    if(val == 'B'){
      analogWrite(LED_PIN, 0);
    }
  }
}
Raspberry Piは上記サイトの設定,プログラムをそのまま利用。

決まった時間にLEDの明るさを変える

cronを利用する。
crontab -eで設定ファイルを開き,下の内容を入力。ctrl+X→Y→Enterで上書き保存して終了。
#毎日18時に,上記のRaspberry Piのプログラムを実行する。
00 18 * * * python /home/hoge/script1.py
以上で,18時にLEDの明るさを変えられる(はず)。

 

決まった時間にLEDの明るさを変える

Raspberry PiでLEDの明るさを,決まった時間に変えることを試してみる。

明るさを変える

明るさはPWM調光で変える。その前に,精度の高いPWM信号を生成するのに,WiringPiというツールを使う。

WiringPiのインストー

まず,この書籍のp209に書いてある手順で,Python2用にWiringPi-Pythonをイン ストールする。

(追記)「Raspbianのカーネルと呼ばれるソフトウェアがバージョン4.9になると、書籍のままのインストールコマンドではWiringPi-Python正常動作しなくなります」ので,サポートページ(http://raspibb1.blogspot.jp/)に記載の方法でインストールする。が,rpi-updateを行うと,wiringpiにエラーが出るので,このページ(WiringPiでエラーになった場合のメモ - 豆腐とコンソメ)をもとにダウングレードする。

次いで,サポートページ(応用演習のPDF)にある手順で,Python3用にインストールしなおす。

bluebacks.kodansha.co.jp

一応,これでWiringPiをPythonでインポートできる。 

WiringPi2のインストー

次にWiringPi2をインストール。手順は次のサイトにあるとおり。

hombre-nuevo.com

ようやく,明るさを変える

参考にしたのは次のサイト。書いてあるとおりにすると,徐々に明るくなり,徐々に暗くなるようにできる。なお,wiringpiを用いる場合には管理者権限が必要なので,Terminalで「sudo idle」として開くこと。

blog.kakakikikeke.tk

ここで,余談。wiringpi2は入れなくても良さそうで,最初のimportでwiringpiをいれておけば上記のコードは同じように動く。

決まった時間にLEDの明るさを変える

ようやく本題。参考にしたのは次のサイト。

raspberrypi.stackexchange.com

で,次のコードで指定した時間に明るさを(DUTY1からDUTY2へ)変えられる。

import wiringpi
import datetime
from time import sleep
OUTPUT = 2
PWM_PIN = 18
DUTY1 = 600
DUTY2 =  20
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(PWM_PIN, OUTPUT)
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(375)
wiringpi.pwmWrite(PWM_PIN, DUTY1)
try:
    while True:
        time = datetime.datetime.now().strftime("%H:%M")
        if time == "00:00":
            wiringpi.pwmWrite(PWM_PIN, DUTY2)
    sleep(0.2)
except KeyboardInterrupt:
    pass
wiringpi.pwmWrite(PWM_PIN, 0)

(参考)決まった時間に処理する

決まった時間に処理する方法としてはcronを使うのが一般的みたい。

make.bcde.jp

Raspberry PIでLED点灯コントロール、Part5 cronとPythonでLEDをコントロール | ものづくりエクスペリメント

Arduinoを使ってみる

Raspberry piに続いて,ArduinoArduino Uno R3)も買ってみたので,使ってみる。

参考にしたのは次のサイト。

Arduino のすすめ

Arduinoでお手軽電子工作:LEDを光らせてみる | Device Plus - デバプラ

初心者でもわかる・できる!Arduinoを使った初めての電子工作実践 | HTML5Experts.jp

開発環境「Arduino IDE」をダウンロード(Arduino - Software)して,Windows PCにインストール。PCとArduinoボードをつないで,ツールからボードとシリアルポートで使用するものを選択。これで一応使えたので,プログラムを作成して,コンパイル→アップロード。

 

複数のLEDを点灯させる

電子工作で最初に出てくるLピカをしてみる。

tool-lab.com

www.marutsu.co.jp

抵抗値計算

電流制限抵抗がないと過大電流が流れてしまうので,抵抗をおく。必要な抵抗値は次のサイトで計算。

diy.tommy-bright.com

使用したLED

秋月電子通商で購入した,次のLEDを使用。

5mm赤外線LED OSI3CA5111A (10個入): LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販

5mm赤外線LED OSI3CA5111A (10個入)
[OSI3CA5111A]
通販コード I-04779
発売日 2011/07/26
メーカーカテゴリ OptoSupply

5mmタイプの赤外線(IR)LEDです。 この赤外線LEDは可視光(赤色)をわずかに残すことで 防犯カメラの威嚇の効果にも最適です。

■主な仕様(Ta=25℃)
・本体:ウォータークリアー(無色透明)
・直径:5mm
・順方向電圧(VF):1.6V(標準)(@50mA)
・放射強度:45mW/sr(@50mA)
・ピーク波長:850nm(標準)(@50mA)
・逆耐圧:5.0V
・半減角:15°(狭角)
・PD:126mW

LEDが1個の場合

手持ちの抵抗が330Ωなので,ひとまずこれで点灯させる。Raspberry PiのGPIOでLEDを光らせる場合,電圧は3.3Vになるので,流れる電流は(3.3V-1.6V)/330Ω=5.2mAとなる(オームの法則から)。

 LEDが複数の場合

順方向電圧1.6Vなので,直列でたくさん点灯させようとすると,Raspberry PiのGPIOから電圧3.3Vでは流れない。そこで,手持ちの24V電源を活用する。10個のLEDを直列に接続すると,流れる電流は(24V-(1.6V×10))/330Ω=24.2mAとなる(オームの法則から)。

 なお,直列接続と並列接続のメリット,デメリットは次のサイトを参照。

LED駆動における直列接続と並列接続 - EDN Japan

余談

チャーリープレキシングによる点灯というのもあるらしい。

http://razzpisampler.oreilly.com/ch04.html

Pi NoIR Camera V2の付属品

赤外線カメラモジュールv2を購入すると,白いプラスチックでできた丸い物と青いシートがついてくる。あまり説明がなかったので,調べてみた。

Raspberry Pi PiNoir Camera V2 | Raspberry Pi カメラモジュール | Raspberry Pi 【通販RS】

白いプラスチック

カメラのピントが合う範囲は概ね1m-無限遠なので,それよりも近距離にピントを合わせるに,レンズを回すための治具。詳しくは次のサイトを参考。

a244.hateblo.jp

a244.hateblo.jp

青いシート

カメラをInfragramのように使える青いプラスチックフィルタ。詳細はRaspberry Pi公式サイトのWhat’s that blue thing doing here? にっちなまとめ。: 光合成を見よう「Infragram」を参考に。

WiFi設定(IPアドレス固定)とVNCによるリモート接続

Raspberry PiIPアドレスを固定する

単一Wifiの場合

まず,家のルーターで接続する際のIPアドレスを固定する。

参考にしたのは次のサイト。このサイトの記載をもとに,DHCPにより割り当てられるIPアドレスを把握して,固定するIPアドレスを決める。

raspibb.blogspot.jp

実際の設定は,ターミナルで次のコマンドを実行し,設定ファイル /etc/dhcpcd.conf を開いて,設定ファイル /etc/dhcpcd.conf を管理者権限で編集する。

sudo leafpad /etc/dhcpcd.conf

そして,ファイルの末尾に次の4行を入力して,保存。再起動。

interface wlan0
static ip_address=192.168.0.100/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

複数Wifiの場合

複数の場合は次のサイトを参考に作業を進める。

kouki-hoshi.hatenablog.com

/etc/wpa_supplicant/wpa_supplicant.conf にWifiの設定が保存されている(作業前に接続したいWifiに接続しておくと,接続情報がこのファイルに保存されている)ので,内容を確認。

次に,/etc/dhcpcd.confを上と同じように開き,ファイル末尾に次の行を入力して保存。再起動。要は,ssidの設定を追加すればOKみたい。

interface wlan0
ssid SSID1 ← wpa_supplicant.confで保存されているSSID
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

ssid SSID2← wpa_supplicant.confで保存されているSSID
static ip_address=192.168.43.123/24
static routers=192.168.43.1
static domain_name_servers=192.168.43.1

追記

画面右上のネットワークのアイコン付近を右クリックすると,Wireless&Wired Network Settingsというメニューがあるので,選択。Network Preferencesウィンドウが表示されるので,ここで設定してもいいみたい。

リモート接続する

RASPBIAN JESSIE WITH PIXELに標準実装されたRealVNCを利用して,パソコンからraspberry piに接続する。

raspberry pi側で,設定-Rasbperry Piの設定-インターフェイスを開き,VNCを有効にする。具体的な方法は次のサイトを参考に。

ラズベリーパイ覚え書き

ラズベリーパイのRealVNC Serverを試します | pinky blog てきとぅ ブログ

パソコン側で,次のサイトから使用するOSに合わせて,viewerを好きなフォルダにダウンロード。

Download VNC Viewer | RealVNC

"Enter a VNC Server address or search"と書かれたところに,上で設定したIPアドレスを入力。"Duplicate VNC Server identity"という警告がでるので内容を確認してcontinueをクリック。UsernameとPasswordを聞かれるので入力する(標準では,piとraspberry)と,接続が始まる。

追記:画面解像度の変更

HDMIケーブルをつながずにリモート接続すると,画面解像度がVGA相当でとても小さいので,次の手順で設定を変更。

Terminalでsudo idle3 /boot/config.txtと入力し,テキストエディタを管理者権限で開く。

RealVNC | Troubleshooting VNC Server on the Raspberry Piを参考に,次のとおり入力する。

hdmi_force_hotplug=1 Tells your Pi an HDMI display is attached.
hdmi_ignore_edid=0xa5000080   
hdmi_group=2  
hdmi_mode=16 Forces a resolution of 1024x768 at 60Hz. See here for more options.

保存して再起動。

Bluetooth マウスとキーボードの接続

毎回USBマウスとキーボードを接続するのは面倒なので,次のサイトを参考にBluetooth接続での利用を検討。

ラズベリーパイ3のBluetoothを使ってみる | pinky blog てきとぅ ブログ

Model Bシリーズ最新版・Raspberry Pi 3!内蔵Bluetoothを使ってみよう | Device Plus - デバプラ

使っているものは次のもの。

 

 

結論から言うと,マウスはBluetooth接続できるけど,「this device has no services which can be used with Raspberry Pi.」と表示が出て,マウスポインタが動かない。Unifyingレシーバー経由での利用は問題なくできている。

キーボードはどちらも,問題なく利用できている。