不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

CrowPiレッスン21:RaspberryPiカメラを使用して写真を撮る

2020-11-12 08:52:20 | CrowPi

Taking a picture using the Raspberry Pi camera

いよいよ最後のレッスンとなる、レッスン21"RaspberryPiカメラを使用して写真を撮る"をやっていく。

最後のレッスンはちょっと趣向が違ってアプリを使ったデモンストレーションとなっているようだ。
概要もあっさりしている。
CrowPiカメラはどのように使用できますか? 次の手順に従うと簡単になりますので、ご安心ください。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • CrowPi RaspberryPiカメラを使用して写真を撮る

何が必要か

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

camoramaのインストール

  1. 以下を実行してソフトウェアソースを更新する:
    sudo apt-get update
    sudo apt-get upgrade
    「apt-get upgrade」を実行すると、続行するかどうかを尋ねられるので、 yを入力する。
    (訳注:自分の環境だとディスク容量が足りないとのことでupgradeできなかった😅
  2. 実行時にソフトウェア「camorama」をインストールする:
    sudo apt-get install camorama
    (訳注:camoramaは廃止されたかなんだかで上記のコマンドではインストールできなかった😖
    そこでhttp://ftp.br.debian.org/debian/pool/main/c/camorama/camorama_0.19-5+b1_armhf.debでダウンロードして、インストールした。
    sudo apt-get install ./camorama_0.19-5+b1_armhf.deb
    あるいはCheeseというアプリをインストールしても良い。
    sudo apt-get install cheese
    ただその場合、/etc/modulesに以下を追記する必要がある。
    bcm2835-v4l2
    ↑最後から2番めの文字はLの小文字。数字の1ではない。以下参考。
    https://physical-computing-lab.net/raspberry-pi/rpi_camera.html
  3. ソフトウェアをインストールした後、ソフトウェアを開くには2つの方法がある。
    方法1:ソフトウェアを開いて実行時に写真を撮る:
    camorama
    方法2:デスクトップアイコンから:
    「Raspberrypiロゴ→グラフィックス→CamoramaWebcamViewer」をクリックします
    ソフトウェアを開くと、カメラが機能していることがわかります。 キーの組み合わせCTRL + Tを使用して写真を撮ったり、CTRL + Qで終了したりすることができます。 [編集]-> [設定]->Local Capture->Directory for captured pics->Browse...を選択して、写真を保存するパスを変更できます。 写真を保存する必要のあるパスを選択したら、[OK]をクリックして違いを確認し、最後に[閉じる]をクリックして設定を終了します。 もう一度写真を撮ると、新しく設定したパスに写真が保存されます。

CrowPi上のカメラの位置

一応今までのレッスンに即して、カメラの位置を示す。


camoramaを起動したところ


↑VNCでリモートアクセスしたCrowPiでcamoramaを起動したところ。
設定にもよるのかもしれないが、
camoramaの方が軽量だが低画質なのに対して、
cheeseは高画質だがその分重いって印象。

一応以上で"CrowPi-lessons.pdf"で解説されている21個のレッスンはすべて完了した。
ただ、YouTubeではレッスン動画の他にもいくつか動画がアップされているようなので、できる範囲でやってみたい。

CrowPiレッスン20:ブレッドボードを使用して独自のカスタム回路を作成する

2020-11-12 00:02:21 | CrowPi

Making your own custom circuit using the Bread Board

レッスン20"ブレッドボードを使用して独自のカスタム回路を作成する"をやっていく。
残り2レッスン、いよいよブレッドボードを使って回路を作成していくことになるのか。

とりあえず概要を引用
ブレッドボードは、CrowPiの一部として非常に便利です。これにより、独自のカスタム回路や機能を作成できます。
これらすべてのセンサーの使用方法を学んだ後、自分でセンサーを作成する方法を学ぶ時が来ました。
このレッスンでは、LEDの点滅の例を使用して、最初のカスタム回路を作成します。

LEDの点滅(通称、Lチカ)って結構この手のキットだと、最初にあったりするのだが、満を持してここで登場!
CrowPiだと回路を自分で設定しなくても色々なセンサーが試せたから、それってやっぱり改めてすごく便利なのだなって思う。😌 
自分は特にソフト屋だから、こういったハード系ってちょっと敷居高いんだよね。
だから、最初からセンサーが取り付けられた状態でプログラムが動くのって"できてる"って感覚が直ぐに体験できるのって大事。

色々CrowPiのこと褒めたけど、実はこのレッスンの説明は間違いだらけでかなりひどいものであった。
できる限り自分なりに修正したが、これを参考にする人も自己責任でやってほしい。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • ブレッドボードの上にカスタム回路を作成し、LEDを点滅させます。

何が必要か

  • 初期設定後のCrowPiボード
  • ジャンパー
  • 3mm / 5mm LED
  • 抵抗器
※ ってかジャンパーコードって付属していないぞっ!?仕方ないまた別のキットから拝借してくるか。😵 

Requires switching modules using the switch

  • はい、サーボピンを使用してカスタム回路を作成します。ピン番号7、9(※9ではなく、8。ただし、8はオンにする必要はない)は、スイッチを上にしてオンにします(センサーの切り替え方法を忘れた場合は、ページ番号5を参照してください)。

CrowPiのブレッドボードの場所

多分、2段落目が重要そうだから、とりあえず引用
ブレッドボードはCrowPiの真ん中にあり、カスタム回路を作成するために使用される多くの穴が内部にある小さなホワイトボードのように見えます。
一方、カスタム回路を作成するために、チュートリアルで前に示したサーボのインターフェイス、特にサーボ1インターフェイスも使用します。

↑右下のSERVO1も使う

「LEDの点滅」回路

回路の説明も重要だから、以下引用
文字通りLEDを点滅させるカスタム回路を作成します。
始める前に、正しいスイッチを正しく切り替えるようにしてください!
そのためには、前のレッスンで使用したように、出力としてGPIOを使用し、GNDを使用する必要があります。 GPIO 37ではサーボインターフェース(具体的にはSERVO1インターフェース)を使用します。
最初にカスタム回路を作成します。次の図を見てください。

この写真を参照して、ブレッドボード上に回路を作成できます。
PinNo37はSERVO1インターフェイスのGPIOポートにあることを忘れないでください。
GNDも同様にSERVO1インターフェイスのGNDポートにあります。
CrowPiパッケージに付属の抵抗を1つ取り、それをLEDのマイナス側プラス側に配線する必要があります(LEDのマイナス側は、2つのLEDレッグの間の短い方のレッグです)。
抵抗器の反対側から、ジャンパーを使用してSERVO1インターフェイスのGNDピンに直接配線します。(訳注:ここの説明が正しく図が間違い)
もう1つのLEDレッグはプラスのピンで、SERVO1のGPIO37ピンに直接配線して、制御して点滅させることができます。(訳注:ここも説明が正しく図が間違い)
最終結果は次のようになります。

↑多分、この最終結果の写真は正しく配線できていると推測されるが、いかんせん詳細が分からない。
そして、そもそもCrowPiに取り付けられているブレッドボード内の回路の仕組みについて何も説明がない。
おそらく、横方向にだけ回路がつながっているのだろう。
端っこの方は縦方向に回路がつながっているブレッドボードもあるが、これはそういうタイプではないと思われる。

ちなみに、抵抗器には極性がないらしいので、向きは気にしなくてよい。

電気が流れる回路なので極力間違いがないようにしてもらいたいが、上記のように惨憺たる内容なので、他のサイトも参考にして確認を取りつつ、なんとか、回路を作成した。
その結果、上記の最終結果の写真のように、回路を作り終えた途端にLEDが点灯したので、間違いではないらしい。

ほんとに回路ってちょっと間違っただけで簡単に部品が死ぬので、こういった間違いはあってはならないと思うのだが。😡 

点滅しているLEDの操作

解説も引用
点滅するLED回路を正常に作成したら、それを制御するコードを作成します。
このコードでは、LEDが接続されているサーボGPIO PINにGPIO.HIGHを送信し、0.2秒待ってから、GPIO.LOWでオフにします。
その無限の回数を繰り返して、LEDのオンとオフを切り替え、基本的に点滅させます。

このレッスンで使用するPythonスクリプトは以下の通り。

Examples/blinking_led.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# http://elecrow.com/

import time
import RPi.GPIO as GPIO

# define LED pin
led_pin = 26

# set GPIO mode to GPIO.BOARD
GPIO.setmode(GPIO.BCM)
# set puin as input
GPIO.setup(led_pin, GPIO.OUT)

try:
 while True:
  # turn on LED
  GPIO.output(led_pin, GPIO.HIGH)
  # Wait half a second
  time.sleep(0.2)
  # turn off LED
  GPIO.output(led_pin, GPIO.LOW)
  # Wait half a second
  time.sleep(0.2)
except KeyboardInterrupt:
 # CTRL+C detected, cleaning and quitting the script
 GPIO.cleanup()

例のごとく、GPIO.setmodeとpin番号を修正。

修正後
# define LED pin
led_pin = 37

# set GPIO mode to GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

このスクリプトを実行すると、点灯していたLEDが点滅をし始める。

↑消えて

↑点くの繰り返し

このスクリプトは無限ループとなるので、CTRL+Cで終了する。

また、レッスン動画の兄ちゃんの服が変わっとる😏 
なんだ?HILFIGERって?
そんなことはどうでもいいのだが、ちなみに、レッスン動画の解説部分でGPIOのピン番号を16としているが、37の間違い。
あと抵抗も使っていない。
いや奥の方に抵抗器が付いているようだ。
ただ、解説でトランジスタと呼んでいるように聞こえるが、抵抗だからレジスタじゃないのか?

回路の作成に関しては、楽しみにしていただけに、レッスンPDFの内容は実に残念なものであった。