From 445123bf093e8a4010030978f4fdf32177a62ad2 Mon Sep 17 00:00:00 2001 From: kazu634 Date: Sun, 4 Apr 2021 11:19:59 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A8=98=E4=BA=8B=E3=81=AE=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2021-04-04-raspberrypi-electronics.md | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 content/labs/electronics/2021-04-04-raspberrypi-electronics.md diff --git a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md new file mode 100644 index 0000000..7fc4176 --- /dev/null +++ b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md @@ -0,0 +1,119 @@ ++++ +title = "RaspberryPIで電子工作を始めてみました" +date = 2021-04-04T13:47:22+09:00 +description = "なかなか外出できないので、おうちでRaspberryPIをいじってみた結果をまとめました。" +tags = ["electronics"] +categories = ["Labs"] +author = "kazu634" ++++ + +日本に帰国し、リモートワークが徹底されていることに気がついたため、自宅内でCO2濃度を計測してみたいと思い立って、手を動かしています。そのメモになります。 + +## RaspberryPIとは +RaspberryPIとは、GPIOと呼ばれる入出力端子を持つLinuxボックス…という言い方ができそうです。GPIOというのを経由して、センサーなどの機器とLinuxボックスであるRaspberryPIがやりとりできる仕組みのようです。 + +お手軽で安価に、センサーなどの電子機器とやりとりして、電子機器の情報をITの世界に持ってこれるというのが、RaspberryPIのすごいところ…というのが今の理解です。 + +## ラズパイと繋げてみます +[『ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! (ブルーバックス)』](https://www.amazon.co.jp/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A44%E5%AF%BE%E5%BF%9C-Raspberry-Pi%E3%81%A7%E5%AD%A6%E3%81%B6%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C-%E4%BD%9C%E3%82%8B%E3%80%81%E5%8B%95%E3%81%8B%E3%81%99%E3%80%81%E3%81%97%E3%81%8F%E3%81%BF%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B-%E3%83%96%E3%83%AB%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9/dp/4065193397)を参考書籍としてラズパイと繋げていきます。 + +この書籍のすごいところは、扱われている部品一式もセットで提供されているところです。[ラズパイ4対応 Raspberry Piで学ぶ電子工作(書籍+パーツセット)](https://akizukidenshi.com/catalog/g/gK-15352/)です。このセットを購入しました。 + +ちなみに、この時点でラズパイは全く触ったことなしでした。。上のパーツセットにはラズパイOSイメージ書き込み済みのSDカードが入っていたので、それを繋げて起動させることができました。ラズパイは起動さえしてしまえば、Linuxが動作するため、すんなり入っていけました。 + +#### LEDの点灯 +まずは第一歩ということで、ラズパイとブレッドボードを単純に繋げて、LEDを光らせてみました: + +![Image](https://farm66.staticflickr.com/65535/51058486767_857ab12b88_c.jpg) + +GPIOと呼ばれる端子から電源を取って、LEDを点灯させています。ただ、これだと乾電池から電流を流しているのと何も変わらなくて、面白みはないですね。。 + +学んだこと: + +- ラズパイは小さなLinux box + 「`GPIO` (General Purpose Input/Output)」と呼ばれる電子機器とのインターフェースを備えている +- `GPIO`の中には「電源 (3.3 V と 5.0 V)」と「GND」と呼ばれるピンがあって、電源→GNDの方向に繋げると、電流が流れていく + +#### GPIOでLEDを制御してみた +上の例だと、乾電池をラズパイに変えただけです。これだけではつまらないので、ラズパイでLEDの制御をしてみます。ラズパイの`GPIO`はプログラム的に制御ができるようです。ソースはこちら: + +```python +#!/usr/bin/python3 + +import RPi.GPIO as GPIO +from time import sleep + +GPIO.setmode(GPIO.BCM) +GPIO.setup(25, GPIO.OUT) + +try: + while True: + GPIO.output(25, GPIO.HIGH) + sleep(0.5) + GPIO.output(25, GPIO.LOW) + sleep (0.5) + +except KeyboardInterrupt: + pass + +GPIO.cleanup() +``` + +こちらは`GPIO`の25番目のピンを0.5秒ごとに電源オン (`GPIO.HIGH`)・オフ (`GPIO.LOW`)しているイメージのようです。動作させるとこうなります: + +{{< youtube U0vWhKOWksQ >}} + +学んだこと: + +- `GPIO`の制御を`Python`を用いてできることがわかりました + +#### ボタンスイッチでLEDのオン・オフを制御する +こちらはボタンを押すと、LEDを光らせ、もう一度押すとLEDを消す例です。プログラム的に状態を持たせて制御している感じです。 + +{{< youtube m8tjJlKoqkk >}} + +### 電子機器とのインターフェース +これまでの例だと、電流を流す流さないだけを制御していました。これからは、電子機器からの情報を取得していきます。 + +電子機器の情報はどうやら以下の2つのパターンで提供されているみたいです: + +1. 「アナログ」と呼ばれる形式で、ラズパイがそのままだと識別できない +2. 「デジタル」と呼ばれる形式で、ラズパイがそのまま識別できる + +1.の場合には、A/Dコンバーターと呼ばれる電子機器を間に挟むことになるようです。 + +### A/Dコンバーターを利用する (SPI通信を利用する) +A/Dコンバーターというのは、要するに流れてくる電圧を測るもののようで、それをデジタルに変換するようです。A/DコンバーターをSPI通信と呼ばれる方式で利用してみます。 + +#### 半固定抵抗の電圧をA/Dコンバーターで取得する +最初の例では、「半固定抵抗」というもので、手動で抵抗の値を変えて、流れてくる電圧を変えられるようにして、その値を読み取ります: + +![Image](https://farm66.staticflickr.com/65535/51058488412_496ab3a90f_c.jpg) + +青のつまみを回すと、抵抗の値が変わっていき、流れてくる電圧を変更できます。それをA/Dコンバーターが読み取って、ラズパイのコンソールに出力します。コンソール出力はこんな感じです。 + + + +#### 照度センサーの値をA/Dコンバーター経由で取得する +同じようにして、照度センサーの値をA/Dコンバーター経由で取得してみます。 + +![Image](https://farm66.staticflickr.com/65535/51058403726_03e95d6766_c.jpg) + +#### 照度センサーの値に応じてLEDを点灯する +発展形として、照度センサーの値に応じてLEDを点灯させます: + +{{< youtube 8m0BwBY4jEs >}} + +### デジタル値を取得する (I2C通信を利用する) +デジタル値を取得する例として、I2C通信で温度センサーから値を取得してみます。 + +### 温度センサーの値を取得する +このような形で、温度センサーを取り付けて、ラズパイと繋げました。 + +![Image](https://farm66.staticflickr.com/65535/51057680893_2f634d2f01_c.jpg) + +### LEDディスプレイと連動させる +![Image](https://farm66.staticflickr.com/65535/51057679453_f5343ea29e_c.jpg) + +{{< youtube wL9cgpSBSng >}} + + From 17a53313267771360c4d47e0206326d755beb4fd Mon Sep 17 00:00:00 2001 From: kazu634 Date: Sun, 4 Apr 2021 12:51:48 +0900 Subject: [PATCH 2/4] =?UTF-8?q?asciinema=E3=81=B8=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=82=92=E7=84=A1=E3=81=8F=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../labs/electronics/2021-04-04-raspberrypi-electronics.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md index 7fc4176..00ce5d2 100644 --- a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md +++ b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md @@ -89,9 +89,7 @@ A/Dコンバーターというのは、要するに流れてくる電圧を測 ![Image](https://farm66.staticflickr.com/65535/51058488412_496ab3a90f_c.jpg) -青のつまみを回すと、抵抗の値が変わっていき、流れてくる電圧を変更できます。それをA/Dコンバーターが読み取って、ラズパイのコンソールに出力します。コンソール出力はこんな感じです。 - - +青のつまみを回すと、抵抗の値が変わっていき、流れてくる電圧を変更できます。それをA/Dコンバーターが読み取って、ラズパイのコンソールに出力します。 #### 照度センサーの値をA/Dコンバーター経由で取得する 同じようにして、照度センサーの値をA/Dコンバーター経由で取得してみます。 From 9a56098f01d8a483068ee23faac5fbd3e1930055 Mon Sep 17 00:00:00 2001 From: kazu634 Date: Sun, 4 Apr 2021 14:14:37 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E8=AA=AC=E6=98=8E=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2021-04-04-raspberrypi-electronics.md | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md index 00ce5d2..381e6fb 100644 --- a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md +++ b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md @@ -71,6 +71,10 @@ GPIO.cleanup() {{< youtube m8tjJlKoqkk >}} +学んだこと: + +- プログラム的に制御できるのだから、状態をプログラムで持たせて制御することも当然ながらできる! + ### 電子機器とのインターフェース これまでの例だと、電流を流す流さないだけを制御していました。これからは、電子機器からの情報を取得していきます。 @@ -101,17 +105,36 @@ A/Dコンバーターというのは、要するに流れてくる電圧を測 {{< youtube 8m0BwBY4jEs >}} -### デジタル値を取得する (I2C通信を利用する) -デジタル値を取得する例として、I2C通信で温度センサーから値を取得してみます。 +学んだこと: -### 温度センサーの値を取得する +- A/Dコンバーターがデリケートすぎるようで、何個か壊していたようで、書籍通りにやってもうまく動かないことが多々ありました。トライアンドエラーが必要でした。。 + +### デジタル値を取得する (I2C通信を利用する) +ここからはデジタル値を取得していきます。取得する例として、I2C通信で温度センサーから値を取得してみます。 + +#### 温度センサーの値を取得する このような形で、温度センサーを取り付けて、ラズパイと繋げました。 ![Image](https://farm66.staticflickr.com/65535/51057680893_2f634d2f01_c.jpg) +学んだこと: + +- A/Dコンバーターが間に挟まらないので、シンプルに値を取得できました + ### LEDディスプレイと連動させる +上の例で取得した温度センサーの値をLEDディスプレイに表示されます。このようにLEDディスプレイを接続してみました: + ![Image](https://farm66.staticflickr.com/65535/51057679453_f5343ea29e_c.jpg) + +実際の動作はこのようになります: + {{< youtube wL9cgpSBSng >}} +学んだこと: + +- LEDもI2C接続でやりとりすることで表示していることが理解できました。 + +## ここまでの振り返り +CO2センサーをRaspberryPIで値を取得するために、まずはRaspberryPIでセンサーの値を取得する方法まで駆け足で学んでみました。細かな原理原則は理解できていないですが、一通り何をすればいいのか、何を準備しとかなきゃいけないのかを、実際に手を動かす中で理解することができました。 From 85bad7996106a5da271e353986eb61777bdcbab5 Mon Sep 17 00:00:00 2001 From: kazu634 Date: Sun, 4 Apr 2021 17:21:11 +0900 Subject: [PATCH 4/4] =?UTF-8?q?Amazon=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/labs/electronics/2021-04-04-raspberrypi-electronics.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md index 381e6fb..c0caa93 100644 --- a/content/labs/electronics/2021-04-04-raspberrypi-electronics.md +++ b/content/labs/electronics/2021-04-04-raspberrypi-electronics.md @@ -138,3 +138,4 @@ A/Dコンバーターというのは、要するに流れてくる電圧を測 ## ここまでの振り返り CO2センサーをRaspberryPIで値を取得するために、まずはRaspberryPIでセンサーの値を取得する方法まで駆け足で学んでみました。細かな原理原則は理解できていないですが、一通り何をすればいいのか、何を準備しとかなきゃいけないのかを、実際に手を動かす中で理解することができました。 + \ No newline at end of file