100
Help us understand the problem. What are the problem?

posted at

updated at

ラズパイを使って、【ある作業】を自動化してみた

はじめに

みなさんの会社では、始業・終業はどういった感じでしょうか?
社内放送で知らせる・時間になったら各々勝手に仕事を始める(終わる)・時間になったら朝会(終礼)を始めるなどなどあるかと思います。

自分が以前勤めていた会社では、
1. ipodで始業時間にアラーム(小音)が鳴る
2. そのアラームを担当の人が止める
3. 以下のようなチャイム(?)を手動で鳴らして社内の人に伝える
image.png
↑これを棒で叩いて鳴らす

という流れでやっていました。

正直、毎日アラームを止めてチャイムを叩くのは非効率かなと。シンプルにアラームを定刻に鳴らせばいいのではないか。

しかし、それだと面白みがないのでどうせならこのチャイムを叩く動作を自動化してしまおう!ということでラズパイ(とPython)を使って自動化しました(勉強がてら)。
ちょうど同期がラズパイを持っていたこともあり同期と二人でネタ半分で作ることにしました。

準備

自動化するにあたって、何が必要かをまず調べました。とはいっても幸いラズパイは同期が持っていたので追加で準備するモノはあまりなかったです。購入物は以下の通りです。

  • サーボモーター
  • ジャンパーワイヤ

どちらもAmazonで購入!サーボモーターは、デジタルマイクロサーボSG90(770円)を買いました。

自動化の仕組みとしてはシンプルで、モーターの角度をプログラムで制御してチャイムを叩くだけ。自動化と言うとかっこいいですがやっていることはたいしたことありません(笑)

開発

今回書いたコードはこんな感じです。

# -*- coding: utf-8 -*-             #エンコードの指定
import RPi.GPIO as GPIO             #GPIO用のモジュールをインポート
import time                         #時間制御用のモジュールをインポート
import sys                          #sysモジュールをインポート

#ポート番号の定義
Servo_pin = 18                      #変数"Servo_pin"に18を格納

#GPIOの設定
GPIO.setmode(GPIO.BCM)              #GPIOのモードを"GPIO.BCM"に設定 GPIOをポート番号で扱う方法に設定
GPIO.setup(Servo_pin, GPIO.OUT)     #GPIO18を出力モードに設定

#PWMの設定
#サーボモータSG90の周波数は50[Hz]
Servo = GPIO.PWM(Servo_pin, 50)     #GPIO.PWM(ポート番号, 周波数[Hz])

Servo.start(0)                      #Servo.start(デューティ比[0-100%])

#角度からデューティ比を求める関数
def servo_angle(angle):
    duty = 2.5 + (12.0 - 2.5) * (angle + 90) / 180   #角度からデューティ比を求める
    Servo.ChangeDutyCycle(duty)                      #デューティ比を変更
    time.sleep(0.2)                                  #0.2秒間待つ

#サーボモータの角度をデューティ比で制御
#Servo.ChangeDutyCycle(デューティ比[0-100%])
servo_angle(0)                 #サーボモータを初期位置に移動
servo_angle(90)                #サーボモータ 90°
servo_angle(0)                 #サーボモータを初期位置に戻す
Servo.stop()                   #サーボモータをストップ
GPIO.cleanup()                 #GPIOをクリーンアップ
sys.exit()                     #プログラムを終了

コード自体は、ただサーボモーターの角度を制御するだけなので難しくなくネットにも沢山情報があったのでスムーズにできました。

自分は機械科卒ですが電子工作的なことはあまり経験がなかった(大学では旋盤、溶接、製図等を主に学んでいた)こともありジャンパーワイヤーをつなげる際ですらビビリつつも調べながらやりました。

自動化するということで、始業・終業時間にプログラムが作動するようクーロンで設定しました。
自分はクーロンの存在を知らず、同期から教えてもらいました(勉強になった)

cronとは、多くのUNIX系OSで標準的に利用される常駐プログラム(デーモン)の一種で、利用者の設定したスケジュールに従って指定されたプログラムを定期的に起動してくれるもの。
参照元:IT用語辞典 e-Words

できあがったもの

かなーりシンプルです!

sasatora.jpeg

ささとら君 photo1.PNG

こちらが、デモ動画になります。(音は想像で!)
ささとら君 動画.gif

どうでしょうか?かなりシュールな仕上がりになりました(笑)
実際に使用する際は、1度しか叩かないようにしております。
これでもうわざわざ手動で叩く必要も無く、かつチャイムの味(?)だけ残すことができました。

まとめ

今回は、始業・終業のチャイムをラズパイで自動化してみました。

こうやって、生活していて感じたちょっとした不便なこと・非効率的なことを解決することが出来るのがプログラミングの面白さなのかなと思います。
実際にやってみて面白かったし、知らなかったことも学べてとてもいい経験となりました。

みなさんもこんな感じで簡単なモノでいいので作ってみてはいかがでしょうか?

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
100
Help us understand the problem. What are the problem?