WEBカメラにシャッター

ラズパイのタクトキーをシャッターに

前回のWEBカメラはPythonのプログラムを実行したときに写真が撮れるというものだった。
その前の時にはタクトキーでLEDをチカチカさせるということをやった。

目の前にWEBカメラとタクトキーとLEDが載ったブレッドボードが目に入って、そうだこのままタクトキーをカメラのシャッターにすれば良い、と思い立った。
思い立たない方がおかしかったのかもしれないけど。

Pythonのプログラムも両方とも実験済み。
今回は、少し手抜きな感じ。装置も組み込まれている、プログラムもコピー&ペースト。

import sys
import subprocess
import datetime
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(24,GPIO.IN)

def webcam():
    boolean = subprocess.call(cmd, shell=True)
    if boolean == 0:
        pass
    else:
        subprocess.call(cmd, shell = True)
try:
    while True:
        today = datetime.datetime.today()
        now = today.strftime("%y%m%d%H%M%S")
        cmd = "fswebcam -r 1280x960 /home/pi/camera/%s.jpg" % now     
        if GPIO.input(24) == GPIO.HIGH:
            GPIO.output(25,GPIO.HIGH)
            webcam()
            sleep(1)
        else:
            GPIO.output(25,GPIO.LOW)
        sleep(0.01)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

“WEBカメラにシャッター” の続きを読む

ラズパイでWEBカメラを使う

LOGICOOLのウエブカメラC270を使ってみる

ラズパイにはカメラモジュール専用のカメラが存在する。
今回は、それより一般的に出回っているUSBに接続するWEBカメラを購入して見た。
千円台で買える非常に安価なもので、通常はディスプレイの上にポン置きしてチャットとかに使用するのであろうか。
チャットの相手が居ない独居老人には本来縁のないものであるが。

接続は、上の写真のようにUSBポートにポンと刺すだけ。
今は被写体(?)である時計を向いている。
(それにしても乱雑だな、ま、独りもんだしそんなもの)
あとはラズパイでの設定、操作、プログラムになる。

“ラズパイでWEBカメラを使う” の続きを読む

ラズパイでLチカ

ラズパイでは定番というか鉄板

Lチカというのは、LEDをチカチカさせるという意味。
ラズパイはミニチュアのパソコンであるとも言えるが真骨頂はGPIO。
GPIOで外部の電子機器をコントロールする。
手始めというより一番最初に皆がする(かどうか)のがLチカ。

その前にケースを変えた

左がキットで付属していたケース。右が今回購入したケース。
左のケースは色も黒で、ラズパイのマークを掘り抜いて空気穴にしていたり格好良いのだが、比較してわかるように肝心のGPIOやカメラモジュールなどへのアクセスが悪いというよりできない。
蓋を開けた状態で接続するのを前提にしているが、GPIOはケースの壁に非常に近くて、ほとんど不可能に近い。
右のケースは、GPIOを含む全てのモジュールにアクセスするための窓が開いており、透明のなんと言うことは無いケースだが機能的である。

パーツセット

LEDをチカチカさせるには抵抗とLEDが1個あれば良い。
だが、GPIOと接続するには、抵抗とLEDを接続するには・・・永久的なものなら、半田付けという手もあるが、しばらくは実験的なもので有り抜き差しが容易である必要がある。
それで、ケーブルやボードなどをセットにした”パーツセット”をアマゾンで購入した。

¥3000程度の品である。抵抗からLED,平行ケーブルブレッドボードそして説明書CD(英語・・・)日の字液晶、スィッチまでほとんど揃っている。
しかし、これは本体のGPIOからふらっとケーブルでブラッドボードに引き出して使用することを前提としており、1~2本をGPIOから引き出してLチカをする程度の場合に大仰である。そしてGPIOから引き出すためのオスメスコードが付いていない。
それで、オスメスコードと小さなブレッドボードのセットをまた購入した。
¥500くらいだった。

“ラズパイでLチカ” の続きを読む

Pythonで宝くじを当てよう #5

ROTO6の当選番号の予測はできるのか

なにを今更寝ぼけた話を・・・ということになるが
前回は開発環境を変えて、配列のライブラリの使い方を勉強して、これまでの当選番号には若干バラツキがあるが、ほぼ均等にそれぞれの番号は出現しているらしいことが分かった。

しかし、問題はその出現の仕方である。全くランダムに出てきているなら、せいぜいこれまでの出現回数の多寡くらいしか予測の情報は無いことになる。

出現回数の変動

これまでの当選番号の出現の仕方について少し整理してみる。
下の図は、各番号のこれまでの累計の回数の変動図である。

“Pythonで宝くじを当てよう #5” の続きを読む

Pythonで宝くじを当てよう #4

今更だけどIDLEとNumPy

Pythonを扱うのにVSCODEを使ってきた。Debugの昨日も付いているし一々コマンドプロントとエディターの間を行き来する必要もないから。

しかし、PythonにはIDLEという開発環境がPythonと一緒にインストールされる。


このIDLEでもデバッグは可能だし、IDLEから実行も可能なので暫くIDLEを使ってみることにした。

“Pythonで宝くじを当てよう #4” の続きを読む

Pythonで宝くじを当てよう #3

データを読もう

過去の当選番号のデータは、CSVファイルで下記のようにdata.csvに保存しています。
現在は第1386回くらいになります。

第1回,2,8,10,13,27,30
第2回,1,9,16,20,21,43
第3回,1,5,15,31,36,38
第4回,16,18,26,27,34,40
第5回,9,15,21,23,27,28

過去のデータを基に当たり番号を予想するので、まず過去のデータを読む必要があります。
読み込みは、前回作成した関数の中で行い、データ変数はグローバル変数としました。

“Pythonで宝くじを当てよう #3” の続きを読む

Pythonで宝くじをあてよう #2

関数を使おう

どんなプログラムにせよ、一連の作業をひとまとめにして関数とする。
Pythonも同様だが、その姿は全く同様ではない。

普通は関数は

void func1(int nn)
{
        ・・・・・
         return(f);
}

等のように始まり'{‘と終わり’}’がある。

しかし、Pythonの関数はif文やwhile文あるいはfor文も同様で

for  i in data:
         処理1
         処理2

ここで終わり、はじめは何となくわかるが、終わりがわからない。
ドアを開けて閉めずに行ってしまう、行儀の悪い奴、みたいな感じ。

“Pythonで宝くじをあてよう #2” の続きを読む

Pythonで宝くじを当てよう #1

Pythonの2次元配列は手ごわい

前回のtest.pyではリスト型に直接データを書き入れた。
しかし、これでは1400×6個のデータを書き込む必要があるし、追加のたびにソースを開いて修正する必要がある。
当然、データファイルを用意してそれに追加データを書き込み、プログラムはそのファイルから読み込むことになる。

で、その前にtest.pyの初期入力のリストデータを後から追加する形に変更した。

test_data = [[0]*3]*3
v = 1
for i in range(3):
     for j in range(3):
         test_data[i][j] = v
         v += 1
 
for v in test_data:
      print(v)

リスト型2次元配列(3×3)を用意して一つずつインクリしてデータに書き込んでいく。
この結果を表示させる。
当然結果は
[1,2,3] [4,5,6] [7,8,9] となるはず・・・

結果を見てみよう

[7, 8, 9] [7, 8, 9] [7, 8, 9]

ヌヌヌヌ
こんな筈はない。正直、そう思って、ほぼ一日イングリモングリ考えたりソースを書き換えたり。

“Pythonで宝くじを当てよう #1” の続きを読む

Pythonで宝くじをあてよう #0

宝くじを当てよう、というと語弊があるので少し修正すれば、ROTO6を勉強してプログラミングで当選確率を上げよう、という企画です。

前にも書いたように、プログラムは目標を達成するための道具です。
目標に向かって、必要なことから勉強していくのが私のやり方。

金銭欲、性欲、睡眠の三大欲(違ったかな)の達成のためにプログラムを勉強する。
勉強する意欲がわくでしょう。

少なくとも、サイコロで選ぶのではなく、自分の考えた理屈で番号を選べば外れたにしても納得がいくし、別の考え方を模索する。

1~43の組み合わせ

ロト6は、1~43の数字から6個を小さい順に選ぶくじなので、その組み合わせは・・・とてつもない組み合わせになります。

ただ、この6個の数字になにか法則はないだろうか、まずそれから探していきたい。

当然、1~43の数字のなかから一つの数字が選ばれる確率は1/43になる。
今現在抽選回数は1400回弱なので、1つの数字が出現する回数は1400*6/43=195回、過去のデータを調べて回数が少ない数字はこれから出てくる可能性は大きい。
また、調べた結果1~6の当選組み合わせは、この1400回弱のなかで一度も重複していない。

1桁~6桁それぞれの桁で出現する可能性のある数字はある確率で予想できる。
つまり、1,2,3,4,5,6という組み合わせや38,39,40,41,42,43という組み合わせは非常に確率が低い。

これ以外にも過去のデータから出現する傾向というものが得られるかもしれない。
これは、データ数が多いこともあり、プログラムに持ってこい、ということになる。

プログラムの前に

“Pythonで宝くじをあてよう #0” の続きを読む

Python の開発環境

Pythonは、ネットからダウンロードして使います。
さすがに徒手空拳では寂しいかもしれません。
私も、Pythonについては観ている人と同レベル以下で、これから勉強します。

なんでも始めるときはまず書籍に頼るのが私の癖ですから、AMAZONで本を買いました。
「Pythonスタートブック ISBN978-4-7741-4229-6]です。
これは何でも良いと思います。ネットの場合、閉じたり開いたりしながら煩雑なので、パソコンの前に開いて、そのまま進められる本を選んでいます。

本に沿ってPythonをインストールすると、今ならVer3.7でしょうか。
Pythonは、2.*系と3.*系で少し差があるようです。
本は2.7対応なので、少し新しい本(3.*対応)を探すなり、ネットで検索する方が良いかもしれません。

Python3.*系からはIDLEというPython shellがついてきますので、今までのようにファイルをエディターで書きpyコマンドで実行する、ということなく、Pythonの環境の中で1行づつ実行が可能です。

これだけでも、開発環境として使えるかもしれませんが、VS Codeを開発環境として利用する方がデバッグの面などで有効なようです。

これからは、VS Codeを開発環境としてPythonで勉強しながら進めていきます。