LoginSignup
36
5

More than 1 year has passed since last update.

クリスマスなのでラズパイでイルミネーションしてみた

Last updated at Posted at 2021-12-25

クリスマスなのでラズパイとRubyを使ってイルミネーションを作りました

完成イメージ

3つのLEDで順次点灯、順次消灯、全部点滅を繰り返します
IMG_5370.JPG

作り方

ラズパイのGPIOとRubyを使ってLEDの制御をしていきます

準備編

pinoutというコマンドを使ってどこのピンが何ていう名前なのか確認出来ます
このコマンドで出てきたGPIO + 数字というピンのところに接続するとラズパイから入出力の制御を行えます。今回はT型GPIO拡張ボードとブレッドボードを使っているのでラズパイから一本一本ピンを接続することはしていませんがイメージはおんなじ感じかと思います

pi@raspberrypi:~$ pinout
~省略~
J8:
   3V3  (1) (2)  5V
 GPIO2  (3) (4)  5V
 GPIO3  (5) (6)  GND
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
   GND (25) (26) GPIO7
 GPIO0 (27) (28) GPIO1
 GPIO5 (29) (30) GND
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21
~省略~

接続イメージ

ちょっとわかりずらいですが
IMG_5365.JPG

接続例(GPIO5を使う場合)

echo 5 > /sys/class/gpio/export

/sys/class/gpio/gpio5/ディレクトリが作られる
中身はこんな感じ

pi@raspberrypi:~$ ls -l /sys/class/gpio/gpio5/
合計 0
-rwxrwx--- 1 root gpio 4096 12月 25 10:42 active_low
lrwxrwxrwx 1 root gpio    0 12月 25 10:42 device -> ../../../gpiochip0
-rwxrwx--- 1 root gpio 4096 12月 25 10:43 direction
-rwxrwx--- 1 root gpio 4096 12月 25 10:42 edge
drwxrwx--- 2 root gpio    0 12月 25 10:42 power
lrwxrwxrwx 1 root gpio    0 12月 25 10:42 subsystem -> ../../../../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 12月 25 10:42 uevent
-rwxrwx--- 1 root gpio 4096 12月 25 10:42 value

入力用か出力用かをin outで切り替えられます。今回は出力なのでout
echo out > /sys/class/gpio/gpio5/direction
点灯する
echo 1 > /sys/class/gpio/gpio5/value
消灯する
echo 0 > /sys/class/gpio/gpio5/value

Rubyから制御する

点灯

File.open('/sys/class/gpio/gpio5/value', 'w', 0755){ |f| f.print('1') }

消灯

File.open('/sys/class/gpio/gpio5/value', 'w', 0755){ |f| f.print('0') }

これをいい感じにまとめてそれっぽくする(GPIOの4, 5, 22を使ってます)

# 全部off
def off_all
  File.open('/sys/class/gpio/gpio4/value', 'w', 0755){ |f| f.print('0') }
  File.open('/sys/class/gpio/gpio22/value', 'w', 0755){ |f| f.print('0') }
  File.open('/sys/class/gpio/gpio5/value', 'w', 0755){ |f| f.print('0') }
end

# 全部on
def on_all
  File.open('/sys/class/gpio/gpio4/value', 'w', 0755){ |f| f.print('1') }
  File.open('/sys/class/gpio/gpio22/value', 'w', 0755){ |f| f.print('1') }
  File.open('/sys/class/gpio/gpio5/value', 'w', 0755){ |f| f.print('1') }
end

# 順次点灯or消灯
def toggle(status)
  text = status ? '0' : '1'
  File.open('/sys/class/gpio/gpio4/value', 'w', 0755){ |f| f.print(text) }
  sleep(1)
  File.open('/sys/class/gpio/gpio22/value', 'w', 0755){ |f| f.print(text) }
  sleep(1)
  File.open('/sys/class/gpio/gpio5/value', 'w', 0755){ |f| f.print(text) }
  sleep(1)
end

5.times do |index|
  toggle(index.odd?)
  if index.odd?
    3.times do
      on_all
      sleep(1)
      off_all
      sleep(1)
    end
  end
end
off_all

それではみなさん メリークリスマス!

Image from Gyazo

36
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
5