Raspberry Piで赤外線受信
Raspberry Piで赤外線受信に挑戦しました。
用意するもの
商品
|
必須
|
備考
|
---|---|---|
Raspberry Pi Model B+ | ○ | RaspberryPi本体。 |
microSDカード | ○ | これがHDDになります。 |
micrUSB充電器 | ○ | これが電源になります。 |
ブレッドボード | ○ | はんだ付けなしで配線できます |
ジャンパーワイヤ(オス-メス) | ○ | LEDや抵抗をつなぐケーブル |
ジャンパーワイヤ(オス-オス) | ○ | LEDや抵抗をつなぐケーブル |
赤外線リモコン受信モジュールPL-IRM1261-C438 | ○ | 赤外線受信器です |
赤外線のリモコン | ○ | テレビのリモコンを使いました。 |
赤外線受信器
他の赤外線受信器で試したと頃うまくいかなかったのでこちらのブログを参考にC438の赤外線受信器を使いました。
構成
lirc
lircとはLinuxで赤外線をコントロールするソフトです。
インストール
$ sudo apt-get install lirc
モジュール登録
$ sudo vim /etc/modules
lirc_dev
lirc_rpi gpio_in_pin=23
再起動
$ sudo reboot
マウント
$ sudo mount -t debugfs debugfs /sys/kernel/debug
確認
$ lsmod | grep lirc
lirc_rpi 7355 0
lirc_dev 10391 1 lirc_rpi
rc_core 17576 1 lirc_dev
$ ls -l /dev/lirc0
crw-rw---T 1 root video 248, 0 Oct 26 11:28 /dev/lirc0
# gpio-23がinになっていることを確認$ sudo cat /sys/kernel/debug/gpio
GPIOs 0-53, bcm2708_gpio:
gpio-17 (lirc_rpi ir/out ) in lo
gpio-23 (lirc_rpi ir/in ) in hi
gpio-47 (led0 ) out lo
準備OKです。
実行
受信の準備をします。
$ mode2 -d /dev/lirc0
あとはリモコンの電源ボタンを押すと
受信できました!
参考
LIRC - Linux Infrared Remote Control
Raspberry Pi lirc_rpi - (IR Remote control) GPIO Lirc driver and homebrew receiver HOWTO
Devel/電子工作/RaspberryPi/赤外線学習リモコン - cubic9.com
Arduino勉強会/06-赤外線を使ってみる - PukiWiki
Raspberry Piでリアルアクセスカウンターを作る
はてなブログのアクセス数を表示するアクセスカウンターをRaspberryPiで作ってみました。
構成
4桁表示できるようにつなぎます
RaspberryPi(接続元) | 7セグLED(接続先) |
6 | なし(GND) |
7 | 1(E) |
9 | なし(GND) |
11 | 3(DP) |
12 | 2(D) |
15 | 5(G) |
16 | 4(C) |
22 | 6(1桁目) |
29 | 12(4桁目) |
31 | 11(A) |
32 | 9(3桁目) |
33 | 10(F) |
37 | 8(2桁目) |
36 | 7(B) |
コード
HTMLParserを使ってスクレイピングをしアクセス数を取得しました。
https://github.com/kashifuji/raspberrypi/blob/master/real_access_counter.py
4桁表示するだけのコードはこちら
https://github.com/kashifuji/raspberrypi/blob/master/show_all_number.py
実行結果
RaspberryPiでリアルアクセスカウンターを作る - YouTube
おしまい。
参考URL
HTMLParserでHTMLを解析する - YAMAGUCHI::weblog
Raspberry Piで数字を表現する
前回に続きいよいよ数字を表現したいと思います。
頼りにしていたのが秋月電子の組み立てキットです。
これを参考にコンバータを使えばできると思っていたのですが、調べてみると認識が間違っていました。
A/Dコンバータとはアナログ信号をデジタル信号に変えるもので、RaspberryPiはデジタル信号が入力なので使えません。。
そこで別の方法で作ることにしました。
配線で何とかする
7パターン×4桁+4桁=32個の入力で作る方法
しかし、Raspberry PiのGPIOの入力は11個なので足りません。
Raspberry Pi Pinout - Rev 2 Board
ググった結果、
入力を節約できる『ダイナミック点灯』という方法が使えそうなので試してみました。
ダイナミック点灯
人の目が認識できない速さで1桁ごとに点灯させることで、同時に複数桁点灯する方法です。
言葉ではよくわからないので図で説明します。
①1桁目は『1』を点灯
②2桁目は『7』を点灯
③①と②を高速で繰り返す。
すると、
人の目にはこのように映ります。
4桁の数字は
7パターン+4桁=11個の入力で表現できます。
これがダイナミック点灯です
部分的に点灯する
これも難しかったです。
AB点灯とAのみ点灯を表現しようとした場合です。
ABから電流が流れている場合はBから電流を流さないようにすればできるのですが、
と
電流の向きは逆なので、
と
すべてに電流が流れるか流れないかしか表現できません。
いろいろ試した結果、電流は高いほうから低いほうに流れることを利用してこんな構成にしました。
すべて入力をいれる。点灯しない
B側のみ入力しない。Bのみ点灯
A側のみ入力しない。Aのみ点灯
AB両方入力しない。AB両方点灯
中学時代の知識ですがこれでいいはず。
回路図
ジャンパーピンが足りないので1と7だけ自在に表示できるように配線しました。
コード
pythonでかきました。
入力された数字(1と7限定)を点灯します。
$ cat show_number.py import RPi.GPIO as GPIO import time import sys argv = sys.argv argc = len(argv) if ( argc != 3 ) : print "usage : sudo python show_number.py 1 7" sys.exit() degit1_value = argv[1] degit2_value = argv[2] class PrintLed: led_C = 11 degit1 = 12 led_B = 15 degit2 = 16 led_A = 18 def __init__(self): GPIO.setmode(GPIO.BOARD) GPIO.setup(self.led_C, GPIO.OUT) GPIO.setup(self.degit1, GPIO.OUT) GPIO.setup(self.led_B, GPIO.OUT) GPIO.setup(self.degit2, GPIO.OUT) GPIO.setup(self.led_A , GPIO.OUT) def show(self, degit, value): if value == '1' : self.show_1(degit); elif value == '7' : self.show_7(degit); else : self.print_off(degit); def show_1(self, degit): self.set_degit(degit) GPIO.output(self.led_C, 0) GPIO.output(self.led_B, 0) GPIO.output(self.led_A, 1) def show_7(self, degit): self.set_degit(degit) GPIO.output(self.led_C, 0) GPIO.output(self.led_B, 0) GPIO.output(self.led_A, 0) def print_off(self, degit): GPIO.output(self.degit1, 0) GPIO.output(self.degit2, 0) GPIO.output(self.led_C, 0) GPIO.output(self.led_B, 0) GPIO.output(self.led_A, 0) def set_degit(self, degit): if degit == 1 : GPIO.output(self.degit1, 1); else: GPIO.output(self.degit1, 0); if degit == 2 : GPIO.output(self.degit2, 1); else: GPIO.output(self.degit2, 0); def __del__(self): GPIO.cleanup() p = PrintLed(); for num in range(0, 100): p.show(1, degit1_value); time.sleep(0.01) p.show(2, degit2_value); time.sleep(0.01)
python難しい。
実験
$ sudo python show_number.py 1 7
17が表示されました。
$ sudo python show_number.py 1 1
入力通り一ケタ目が『1』2桁目も『1』です
$ sudo python show_number.py 7 a
数字以外の入力は消灯します。
数字を表示するだけなのにこれだけ難しいとは。。
参考
Raspberry Piで数字の1を表示する
LEDチカチカするのもあきたので数字を表示してみました。
用意するもの
商品
|
必須
|
備考
|
---|---|---|
Raspberry Pi Model B+ | ○ | RaspberryPi本体。 |
microSDカード | ○ | これがHDDになります。 |
micrUSB充電器 | ○ | これが電源になります。 |
ブレッドボード | ○ | はんだ付けなしで配線できます |
ジャンパーワイヤ(オス-メス) | ○ | LEDや抵抗をつなぐケーブル |
ジャンパーワイヤ(オス-オス) | ○ | LEDや抵抗をつなぐケーブル |
抵抗 | ○ | 電流の流れを制御する |
7セグメントLED表示器 | ○ | 数字を表示するLEDです |
7セグメントLED
数字を表示するするためにこれを買ってみました。
同梱されていた説明書です。
さっぱりです(´・_・`)
いろいろ実験してみた結果こんな感じの動きをしていました。
11番が左上から2番目、12番が一番左上です。
設計
原理も分かったので数字の1を表示させるためFritzingで設計しました。
数字の1はBとCを点灯させる必要があります
B:プラス側を12につなぎマイナス側を7につなぐことで点灯
C:プラス側を12につなぎマイナス側を4につなぐことで点灯
実験
ラズベリーパイで17番を点灯させる
# echo "17" > /sys/class/gpio/export
# echo "out" > /sys/class/gpio/gpio17/direction
# echo "1" > /sys/class/gpio/gpio17/value
数字の1が表示されました!
配線を工夫して数字の1を表示することができました。
次はコンバーターを使って自在に表示できるようにしてみたいと思います。
Raspberry Piでボタンを押してLチカさせる
今回はボタンを押してLEDをチカチカさせたいと思います。
用意するもの
商品
|
必須
|
備考
|
---|---|---|
Raspberry Pi Model B+ | ○ | RaspberryPi本体。 |
microSDカード | ○ | これがHDDになります。 |
micrUSB充電器 | ○ | これが電源になります。 |
ブレッドボード | ○ | はんだ付けなしで配線できます |
ジャンパーワイヤ(オス-メス) | ○ | LEDや抵抗をつなぐケーブル |
ジャンパーワイヤ(オス-オス) | ○ | LEDや抵抗をつなぐケーブル |
抵抗 | ○ | 電流の流れを制御する |
LED | ○ | これがチカチカする |
押しボタンスイッチ | ○ | ボタンです |
コードをつなぐ
以下のようにコードをつなぎます
上記の図はFritzingをつかって描いてみました。
ボタンは3番のGPIO 2 (SDA)につなぐといいようです。
LEDは前回と同じように11番のGPIO 17につなぎました。
Raspberry Pi Pinout - Rev 2 Board
コードを書く
import RPi.GPIO as GPIO
import time
led = 11
button = 3
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led, GPIO.OUT)
GPIO.setup(button, GPIO.IN)
GPIO.output(led, 0)
while GPIO.input(button) :
pass
GPIO.output(led, 1)
time.sleep(5)
GPIO.cleanup()
実行する
以下のコマンドで実行します
sudo python button.py
実行後ボタンを押すとLEDがチカチカします!
参考URL
Raspberry Pi Learning Resources
Raspberry Pi Pinout - Rev 2 Board
Fritzing Library Update: Raspberry Pi Model B #RaspberryPi « adafruit industries blog
Raspberry PiでLEDをチカチカさせる
前回の続き。Raspberry PiでLEDを点灯させます。
用意するもの
商品
|
必須
|
備考
|
---|---|---|
Raspberry Pi Model B+ | ○ | RaspberryPi本体。 |
microSDカード | ○ | これがHDDになります。 |
micrUSB充電器 | ○ | これが電源になります。 |
ブレッドボード | ○ | はんだ付けなしで配線できます |
ジャンパーワイヤ(オス-メス) | ○ | LEDや抵抗をつなぐケーブル |
抵抗 | ○ | 電流の流れを制御する |
LED | ○ | これがチカチカする |
ブレッドボード
青い線で描いてあるところが内部でつながっています。
ジャンパーワイヤ(オス-メス)
画像はオスオスとメスメスをつなげてます
抵抗
1Kのものを使いました
LED
プラスとマイナスがある。長いほうがプラス。
コードをつなぐ
以下のように配線します。
①ジャンパーワイヤーはRaspberryPiの『GPIO17』とブレッドボードにつながっています。RaspberryPiの『GPIO17』に電気を流すとブレッドボードに電気が流れます。
②LEDは向きがあるので注意。アノードを(長いほう)をGPIO17側につながるようにする
③抵抗はLEDのカソード側につなげます
④ジャンパーワイヤーを抵抗とRasberryPiのアースにつなげます
LEDをチカチカさせる
raspberryにログインし以下のコマンドを実行します
#GPIO17を入力に使っているので17を指定します。
$ echo "17" > /sys/class/gpio/export
$ echo "out" > /sys/class/gpio/gpio17/direction
# 点灯させます
$ echo "1" > /sys/class/gpio/gpio17/value
LEDが点きました!!!
消す場合は以下のコマンドを打ちます
$ echo "0" > /sys/class/gpio/gpio17/value
ピンについて
見た目はすべて同じ形状をしているのでGPIO17でどれがグランドかよくわかりません。
調べてみるとこちらにまとまっていました。
Raspberry Pi Pinout - Rev 2 Board
応用
web経由でLEDをチカチカさせたかったので、jenkinsと連動させてみました。
jenkinsのテストが失敗したら点灯、成功したら消灯します。
おわり。
参考資料
http://www.raspberrypi.org/wp-content/uploads/2014/04/bplus-gpio.png
Raspberry PiとRubyでLED制御 - Raspberry Pi 電子工作
Raspberry Pi Pinout - Rev 2 Board
Raspberry Piで電子工作
Raspberry Piで電子工作に挑戦します
用意するもの
商品
|
必須
|
備考
|
---|---|---|
Raspberry Pi Model B+ | ○ | RaspberryPi本体。 |
microSDカード | ○ | これがHDDになります。 |
micrUSB充電器 | ○ | これが電源になります。 |
モニター | △ | RaspberryPiの画面を表示。vncで代用 |
hdmiケーブル | △ | モニターにつなぐケーブル。vncで代用 |
有線キーボード | △ | キーボード。vncで代用 |
有線マウス | △ | マウス。vncで代用 |
USB無線LAN子機 | △ | 無線でネット接続する場合必要 |
有線LAN | △ | 有線でネット接続する場合必要 |
OSのインストール
Debian系のOS『RASPBIAN』をインストールしました。
OSのダウンロード
ここからダウンロードします
SDカードにOSを書き込み
Image Writer in LaunchpadでSDカードにダウンロードしたOSを書き込みます。
起動
microUSB、microSDカード、有線LANをつなげて起動。
terminalからログイン。ipアドレスはルーターかモニターにつなげて確認できます。
ユーザ:pi
パスワード:raspberry
$ ssh pi@192.168.1.40
pi@192.168.1.4's password:
VNCで接続
有線のキーボードがなかったのでwindowsからVNC接続しました。
RaspberryPiにtightvncserverをインストールします
# vpnサーバのインストール
$ sudo apt-get install tightvncserver# vpnサーバの起動
$ vncserver :1 -geometry 800x600
クライアント側はtightvncを使って接続しました。
無事接続できました。
macであればFinder->移動->サーバへ接続
パスワードの変更
ラズベリーパイに接続しconfigを起動します。
$ sudo raspi-config
『2 Change User Password』でパスワードを変更できます。
無線ランの設定
ラズベリーパイのデスクトップ画面で『Wifi Config』を起動
『scan』ボタンを押してwifi接続先を選択します。
『Connect』ボタンを押して接続。
ちゃんと接続できればFile->Save Configrationを押して保存します。
これで有線LANなしでネットに接続できるようになります。
初期設定おしまい。
次はLチカ(LEDをチカチカさせること)に挑戦します。
参考URL
RaspberryPi - Raspberry Pi Model B+セットアップ - Qiita
Raspberry PiとRubyでLED制御 - Raspberry Pi 電子工作