Raspberry Piで赤外線受信

Raspberry Piで赤外線受信に挑戦しました。

 

用意するもの

商品
必須
備考
Raspberry Pi Model B+ RaspberryPi本体。
microSDカード これがHDDになります。
micrUSB充電器 これが電源になります。
ブレッドボード はんだ付けなしで配線できます
ジャンパーワイヤ(オス-メス) LEDや抵抗をつなぐケーブル
ジャンパーワイヤ(オス-オス) LEDや抵抗をつなぐケーブル
赤外線リモコン受信モジュールPL-IRM1261-C438 赤外線受信器です
赤外線のリモコン テレビのリモコンを使いました。

 

赤外線受信器

他の赤外線受信器で試したと頃うまくいかなかったのでこちらのブログを参考にC438の赤外線受信器を使いました。

f:id:katashiyo515:20141026204134j:plain

構成

f:id:katashiyo515:20141026202251j:plain

 

f:id:katashiyo515:20141026204026j:plain

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

あとはリモコンの電源ボタンを押すと

f:id:katashiyo515:20141026204705j:plain

f:id:katashiyo515:20141026204410j:plain

受信できました!

 


RaspberryPiで赤外線受信 - YouTube

参考

LIRC - Linux Infrared Remote Control

Raspberry Pi lirc_rpi - (IR Remote control) GPIO Lirc driver and homebrew receiver HOWTO

Umbrella RaspberryPiでLIRCする

Devel/電子工作/RaspberryPi/赤外線学習リモコン - cubic9.com

LIRC (日本語) - ArchWiki

Arduino勉強会/06-赤外線を使ってみる - PukiWiki

Raspberry Pi で赤外線リモコン - 猫ぱーんち!

Raspberry Piで赤外線リモコンを学習し発信する (r271-635)

Raspberry Piでリアルアクセスカウンターを作る

はてなブログのアクセス数を表示するアクセスカウンターをRaspberryPiで作ってみました。

 

f:id:katashiyo515:20141023000852j:plain

構成

4桁表示できるようにつなぎます

f:id:katashiyo515:20141023000127j:plain

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はデジタル信号が入力なので使えません。。

f:id:katashiyo515:20141019231234j:plain

そこで別の方法で作ることにしました。

配線で何とかする

7パターン×4桁+4桁=32個の入力で作る方法

f:id:katashiyo515:20141019232313j:plain

しかし、Raspberry PiのGPIOの入力は11個なので足りません。

Raspberry Pi Pinout - Rev 2 Board

 

ググった結果、

入力を節約できる『ダイナミック点灯』という方法が使えそうなので試してみました。

 

ダイナミック点灯

人の目が認識できない速さで1桁ごとに点灯させることで、同時に複数桁点灯する方法です。

言葉ではよくわからないので図で説明します。

①1桁目は『1』を点灯

f:id:katashiyo515:20141019233311j:plain

②2桁目は『7』を点灯

f:id:katashiyo515:20141019233318j:plain

③①と②を高速で繰り返す。

すると、

f:id:katashiyo515:20141019233509j:plain

 人の目にはこのように映ります。

 

4桁の数字は

7パターン+4桁=11個の入力で表現できます。

f:id:katashiyo515:20141019233707j:plain

これがダイナミック点灯です

 

 部分的に点灯する

 これも難しかったです。

f:id:katashiyo515:20141019235022j:plainAB点灯とf:id:katashiyo515:20141019235043j:plainAのみ点灯を表現しようとした場合です。

ABから電流が流れている場合はBから電流を流さないようにすればできるのですが、

f:id:katashiyo515:20141019234830j:plainf:id:katashiyo515:20141019235246j:plain

電流の向きは逆なので、

f:id:katashiyo515:20141019235851j:plainf:id:katashiyo515:20141019235915j:plain

すべてに電流が流れるか流れないかしか表現できません。

 

いろいろ試した結果、電流は高いほうから低いほうに流れることを利用してこんな構成にしました。

f:id:katashiyo515:20141020000559j:plain

f:id:katashiyo515:20141020000909j:plainすべて入力をいれる。点灯しない

f:id:katashiyo515:20141020000930j:plainB側のみ入力しない。Bのみ点灯

f:id:katashiyo515:20141020000918j:plainA側のみ入力しない。Aのみ点灯

 f:id:katashiyo515:20141020001045j:plainAB両方入力しない。AB両方点灯

中学時代の知識ですがこれでいいはず。

回路図

ジャンパーピンが足りないので1と7だけ自在に表示できるように配線しました。

f:id:katashiyo515:20141020001551j:plain

コード

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

f:id:katashiyo515:20141020002113j:plain

17が表示されました。

 $ sudo python show_number.py 1 1

f:id:katashiyo515:20141020002151j:plain

 入力通り一ケタ目が『1』2桁目も『1』です

 

$ sudo python show_number.py 7 a

f:id:katashiyo515:20141020002215j:plain

数字以外の入力は消灯します。

 

数字を表示するだけなのにこれだけ難しいとは。。

参考

arduinoで2桁7セグLEDをカウントアップ。(ダイナミック点灯) - つくったブログ

電子工作室

Raspberry Pi Pinout - Rev 2 Board

Raspberry Piで数字の1を表示する

LEDチカチカするのもあきたので数字を表示してみました。

 

用意するもの 

商品
必須
備考
Raspberry Pi Model B+ RaspberryPi本体。
microSDカード これがHDDになります。
micrUSB充電器 これが電源になります。
ブレッドボード はんだ付けなしで配線できます
ジャンパーワイヤ(オス-メス) LEDや抵抗をつなぐケーブル
ジャンパーワイヤ(オス-オス) LEDや抵抗をつなぐケーブル
抵抗 電流の流れを制御する
7セグメントLED表示器 数字を表示するLEDです

 

7セグメントLED

数字を表示するするためにこれを買ってみました。

同梱されていた説明書です。

f:id:katashiyo515:20141018200706j:plain

さっぱりです(´・_・`)

 

 

いろいろ実験してみた結果こんな感じの動きをしていました。

f:id:katashiyo515:20141018201902j:plain

 11番が左上から2番目、12番が一番左上です。

f:id:katashiyo515:20141018195148j:plain

設計

原理も分かったので数字の1を表示させるためFritzingで設計しました。

数字の1はBとCを点灯させる必要があります

B:プラス側を12につなぎマイナス側を7につなぐことで点灯

C:プラス側を12につなぎマイナス側を4につなぐことで点灯

f:id:katashiyo515:20141018203629j:plain

 実験

ラズベリーパイで17番を点灯させる

# echo "17" > /sys/class/gpio/export

# echo "out" > /sys/class/gpio/gpio17/direction

# echo "1" > /sys/class/gpio/gpio17/value

f:id:katashiyo515:20141018204543j:plain

数字の1が表示されました!

 

 

配線を工夫して数字の1を表示することができました。

次はコンバーターを使って自在に表示できるようにしてみたいと思います。

Raspberry Piでボタンを押してLチカさせる

前回コマンドラインからLEDをチカチカさせました

今回はボタンを押してLEDをチカチカさせたいと思います。

用意するもの 

商品
必須
備考
Raspberry Pi Model B+ RaspberryPi本体。
microSDカード これがHDDになります。
micrUSB充電器 これが電源になります。
ブレッドボード はんだ付けなしで配線できます
ジャンパーワイヤ(オス-メス) LEDや抵抗をつなぐケーブル
ジャンパーワイヤ(オス-オス) LEDや抵抗をつなぐケーブル
抵抗 電流の流れを制御する
LED これがチカチカする
押しボタンスイッチ ボタンです

コードをつなぐ

以下のようにコードをつなぎます

f:id:katashiyo515:20141014224449j:plain

上記の図はFritzingをつかって描いてみました。

ボタンは3番のGPIO 2 (SDA)につなぐといいようです。

LEDは前回と同じように11番のGPIO 17につなぎました。

Raspberry Pi Pinout - Rev 2 Board

コードを書く

サンプルをもとにpythonでコードを描きました。

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がチカチカします!

f:id:katashiyo515:20141014225609j:plain

参考URL

Raspberry Pi Learning Resources

Raspberry Pi Pinout - Rev 2 Board

Fritzing Download

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 これがチカチカする

 

ブレッドボード

青い線で描いてあるところが内部でつながっています。

f:id:katashiyo515:20141013181518j:plain

ジャンパーワイヤ(オス-メス)

画像はオスオスとメスメスをつなげてます

f:id:katashiyo515:20141013181506j:plain

抵抗

1Kのものを使いました

f:id:katashiyo515:20141013181509j:plain

LED

プラスとマイナスがある。長いほうがプラス。

f:id:katashiyo515:20141013181512j:plain

コードをつなぐ

以下のように配線します。

f:id:katashiyo515:20141013175651j:plain

①ジャンパーワイヤーはRaspberryPiの『GPIO17』とブレッドボードにつながっています。RaspberryPiの『GPIO17』に電気を流すとブレッドボードに電気が流れます。

f:id:katashiyo515:20141013182921j:plain

②LEDは向きがあるので注意。アノードを(長いほう)をGPIO17側につながるようにする

f:id:katashiyo515:20141013183413j:plain

③抵抗はLEDのカソード側につなげます

f:id:katashiyo515:20141013183513j:plain

④ジャンパーワイヤーを抵抗とRasberryPiのアースにつなげます

f:id:katashiyo515:20141013183609j:plain

LEDをチカチカさせる

raspberryにログインし以下のコマンドを実行します

#GPIO17を入力に使っているので17を指定します。

$ echo "17" > /sys/class/gpio/export

$ echo "out" > /sys/class/gpio/gpio17/direction

# 点灯させます

$ echo "1" > /sys/class/gpio/gpio17/value

f:id:katashiyo515:20141013183925j:plain

LEDが点きました!!!

 

消す場合は以下のコマンドを打ちます

$ echo "0" > /sys/class/gpio/gpio17/value

f:id:katashiyo515:20141013174203j:plain

ピンについて

見た目はすべて同じ形状をしているのでGPIO17でどれがグランドかよくわかりません。

調べてみるとこちらにまとまっていました。

Raspberry Pi Pinout - Rev 2 Board

 

 応用

web経由でLEDをチカチカさせたかったので、jenkinsと連動させてみました。

jenkinsのテストが失敗したら点灯、成功したら消灯します。


YouTube

 

おわり。

参考資料

Model B+ | Raspberry Pi

http://www.raspberrypi.org/wp-content/uploads/2014/04/bplus-gpio.png

Raspberry Pi Documentation

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をつなげて起動。

f:id:katashiyo515:20141012121446j:plain

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を使って接続しました。

f:id:katashiyo515:20141012114807j:plain

無事接続できました。

f:id:katashiyo515:20141012114836j:plain

macであればFinder->移動->サーバへ接続

vnc://pi@192.168.1.40:5901

 でvnc接続できます。

パスワードの変更

ラズベリーパイに接続しconfigを起動します。

$ sudo raspi-config 

『2 Change User Password』でパスワードを変更できます。

f:id:katashiyo515:20141012120021j:plain

無線ランの設定

ラズベリーパイのデスクトップ画面で『Wifi Config』を起動

f:id:katashiyo515:20141012120157j:plain

『scan』ボタンを押してwifi接続先を選択します。

f:id:katashiyo515:20141012120208j:plain

『Connect』ボタンを押して接続。

ちゃんと接続できればFile->Save Configrationを押して保存します。

これで有線LANなしでネットに接続できるようになります。

 

 

初期設定おしまい。

次はLチカ(LEDをチカチカさせること)に挑戦します。

 

参考URL

Raspberry Pi

RaspberryPi - Raspberry Pi Model B+セットアップ - Qiita

Raspberry PiとRubyでLED制御 - Raspberry Pi 電子工作