全7件 (7件中 1-7件目)
1

タイトルのとおり、無事に大根の芽がでました。種をまいて5日目には確認できました。結構、発芽は早いのだと感心しております。このまま順調に育つことを祈るばかりです。一方、サツマイモですが現在の状況は・・・な感じです。もうジャングルです。虫にかなり食べられていますが、それでもこの旺盛ぶりです。サツマイモの生命力の強さには感心させられます。収穫が楽しみだな
2021.09.20
コメント(0)

ついに最終章?になります。始めにお断りします。あまりうまくいっていません。でも、書きます。まず、RaspberryPiにOpenCvをインストールする必要があります。いろんなところでインストール方法が紹介されていますが、おっさんは最終的に、ココを参考にしてインストールしました。OpenCvのインストールが完了したら、前回のコードに以下のように追記します。import RPi.GPIO as GPIOimport cv2import numpy as npimport picamerafrom time import sleepLED1_GPIO = 21 LED2_GPIO = 27LED3_GPIO = 4TACT_GPIO = 17GPIO.setmode(GPIO.BCM)GPIO.setup(LED1_GPIO, GPIO.OUT)GPIO.setup(LED2_GPIO, GPIO.OUT)GPIO.setup(LED3_GPIO, GPIO.OUT)GPIO.setup(TACT_GPIO, GPIO.IN)try: while True: if GPIO.input(TACT_GPIO) == GPIO.HIGH: GPIO.output(LED3_GPIO, GPIO.LOW) sleep(0.01) break else: GPIO.output(LED3_GPIO, GPIO.HIGH) GPIO.output(LED1_GPIO, GPIO.LOW) GPIO.output(LED2_GPIO, GPIO.LOW) with picamera.PiCamera() as camera: camera.resolution=(640,480) camera.capture("area.jpg") aruco=cv2.aruco p_dict=aruco.getPredefinedDictionary(aruco.DICT_4X4_50) img = cv2.imread('area.jpg') corners, ids, rejectedImgPoints = aruco.detectMarkers(img, p_dict) img_marked = aruco.drawDetectedMarkers(img.copy(), corners, ids) img_marked_rgb=cv2.cvtColor(img_marked,cv2.COLOR_BGR2RGB) corners2 = [np.empty((1,4,2))]*4 for i,c in zip(ids.ravel(), corners): corners2[i] = c.copy() m = np.empty((4,2)) m[0] = corners2[0][0][2] m[1] = corners2[1][0][3] m[2] = corners2[2][0][0] m[3] = corners2[3][0][1] marker_coordinates = np.float32(m) np.float32(m) h1=((corners2[0][0][2][0]-corners2[3][0][1][0])**2+(corners2[0][0][2][1]-corners2[3][0][1][1])**2)**0.5 h2=((corners2[2][0][0][0]-corners2[1][0][3][0])**2+(corners2[2][0][0][1]-corners2[1][0][3][1])**2)**0.5 hhh=(h1+h2)/2 w1=((corners2[0][0][2][0]-corners2[1][0][3][0])**2+(corners2[0][0][2][1]-corners2[1][0][3][1])**2)**0.5 w2=((corners2[2][0][0][0]-corners2[3][0][1][0])**2+(corners2[2][0][0][1]-corners2[3][0][1][1])**2)**0.5 www=(w1+w2)/2 width, height = (int(www),int(hhh)) true_coordinates = np.float32([[0,0],[width,0],[width,height],[0,height]]) trans_mat = cv2.getPerspectiveTransform(marker_coordinates,true_coordinates) img_trans = cv2.warpPerspective(img,trans_mat,(width, height)) img_trans_rgb=cv2.cvtColor(img_trans,cv2.COLOR_BGR2RGB) img_trans_gray=cv2.cvtColor(img_trans,cv2.COLOR_BGR2GRAY) img_trans_gray_rgb=cv2.cvtColor(img_trans_gray,cv2.COLOR_GRAY2RGB) _,p_binary=cv2.threshold(img_trans_gray,70,255,cv2.THRESH_BINARY) p_binary_rgb=cv2.cvtColor(p_binary,cv2.COLOR_GRAY2RGB) p_binary=cv2.bitwise_not(p_binary) p_contours,_=cv2.findContours(p_binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) p_and_contours=np.copy(img_trans) min_p_area=60 large_contours=[cnt for cnt in p_contours if cv2.contourArea(cnt)>min_p_area] draw_p=cv2.drawContours(p_and_contours,large_contours,-1,(0,255,0)) sarea=0 for i, cnts in enumerate(large_contours): area = cv2.contourArea(cnts) sarea=sarea+area pm_area=sarea*(4.4*7)/(www*hhh) if pm_area >=20: GPIO.output(LED1_GPIO, GPIO.HIGH) GPIO.output(LED2_GPIO, GPIO.LOW) sleep(1) else: GPIO.output(LED1_GPIO, GPIO.LOW) GPIO.output(LED2_GPIO, GPIO.HIGH) sleep(1)except KeyboardInterrupt: passfinally: GPIO.cleanup()以前した面積計測を実装したものになります。内容としては、物体の面積を計測し、20cm以上なら赤のLEDを光らせ、それ以下ならば緑のLEDが光るようにしています。点灯時間はとりあえず1秒にしてそれをボタンを押すまで繰り返すようにしています。実際に、Thonnyを開き実行してみました。大きなピーマンを載せたら赤のLEDが光りました。小さなピーマンを載せたら緑のLEDが光りました。(見えづらくてすみません。)うまく判断しているのですが、ここで四隅のマークがない、もしくは隠れるとエラーになります。また、RaspberryPi起動時に自動実行するとこれもうまく動作しませんでした。う~ん。もう少しなんだが・・・・・
2021.09.13
コメント(0)

9月も中旬になったので、大根栽培に挑戦することにしました。竹パウダーの効果のほどはわかりませんが、あまり草が生えてきませんでした。むしろほとんど生えませんでした。この中に大根の種をまいて、芽がでるのか心配です。大根の種を一か所に2つまき土を被せました。後は水をたっぷりあげて完了です。完了後の写真は以下のとおりです。うまく芽がでますように・・・
2021.09.13
コメント(0)

おっさんは、川エビの全滅からようやく立ち直り、次なる手立てを考えました。それが、これジャジャジャジャーン。防水型のファンを購入。コードの接続部もビニルテープで巻いて完璧です。このファンからの風を水槽に送り、気化熱で水温を下げることにしました。ただ、24時間送風するわけにもいかないので、もう一つジャジャジャジャーン。タイマーコンセントも使用。これで指定した時間だけ送風することができます。早速、設置してみました。設定は、9時から18時までは連続運転とし、それ以外は1時間ごとに運転させることにしました。早速、効果のほどを確認。う~ん。ようわからん。グラフに整理してみました。このグラフは日平均気温がほぼ等しい時の平均外気温から平均水温を引いた値をまとめたものです。確かに、ファン有は外気温と水温に差がなく効果がでているように見えます。ん?ガガガガーン。微々たる差。付けたからには今後も使用していこうと思います。
2021.09.12
コメント(0)

これまで、カメラの接続やボタン、LEDの使い方の練習をしてきましたが、いよいよ最終段階になりました。その前に、前回から変更した点があるので、LEDやボタンの接続を再度確認します。変更点は、2番ピンに指してあったグレーの線を27番ピンに付け替えました。2番ピンは抵抗付きのピンなので避けました。それでは、RaspberryPiのThonnyを開き以下のコードを書いてください。import RPi.GPIO as GPIOfrom time import sleepLED1_GPIO = 21 LED2_GPIO = 27LED3_GPIO = 4TACT_GPIO = 17GPIO.setmode(GPIO.BCM)GPIO.setup(LED1_GPIO, GPIO.OUT)GPIO.setup(LED2_GPIO, GPIO.OUT)GPIO.setup(LED3_GPIO, GPIO.OUT)GPIO.setup(TACT_GPIO, GPIO.IN)try: while True: if GPIO.input(TACT_GPIO) == GPIO.HIGH: GPIO.output(LED3_GPIO, GPIO.LOW) sleep(0.01) break else: GPIO.output(LED3_GPIO, GPIO.HIGH)except KeyboardInterrupt: passfinally: GPIO.cleanup()このコードは前回のコードを少し改造しただけです。中身は、実行すると黄色のLEDがいきなり光り、ボタンを押すと消えるだけのコードです。このコードをarea_m.pyという名前で保存します。まず、「pi」直下に「python」フォルダを作成します。そこに保存します。そうしましたら、RaspberryPi起動直後にこれを実行させることをしていきます。まず、LXTerminalを開きます。そこに、crontab- e と入力し、enterキーを押します。すると、以下の画面が出てきます。1と入力してenterキーを押します。以下の画面が現れます。そこの、一番下に、@reboot cd ~/python/ ; echo RaspberryPiのパスワード ; sudo -S python ./area_m.py と入力してください。書き終えましたら、ctrlキーとOキーを同時に押して保存します。保存が終わりましたら、ctrlキーとXキーを同時に押して終了します。これで、RaspberryPi起動時にarea_m.pyが自動的に実行されます。何がしたかったかというと、モニターのない状態でRaspberryPiの電源をいれたらarea_m.pyが起動していることをLEDが光ることで確認が取れることと、ボタンを押したらarea_m.pyを停止することをしたかったのです。実際の実行状況が以下の写真になります。あとは、面積を計測するコードを実装すれば完了です。だけど、疲れたのでここで今回は終了します。お疲れでした。
2021.09.11
コメント(0)

最初に残念なお知らせです。一昨日、川エビ様が身を赤くしてお星さまになってしまいました。全滅です。その日の平均水温は27.9℃。最高水温は29.8℃でした。以前にもこれに似た水温の時がありましたが、その時は大丈夫でした。なので、調べてみるとアンモニアが水中に多すぎた場合も原因となるとのことでした。なので、pHを調べてみました。そこまで高くないような気がする・・・・・やはり水温なのか・・・・いずれにしても生物がいない水槽になってしまったため、一旦お休みです今週の状況です。小松菜もほぼ育っていません。水温が高すぎるとダメなのかな?今週分のデータです。期間 AWT(℃) AL(ルクス) AHD(g/m3) R2 H(cm) EC(mS/cm) 1週目 167.5 116254.5 2.4 7.6 3 0.18 2週目 353 371942.3 7.1 13.2 6 0.23 3週目 540.8 650497.3 9.0 38.6 7 0.34小松菜の背丈が7cmと前週から1cmしか伸びてません。何か対策を考えないと・・・・川エビが全滅したこともあり、今週分までのデータをまとめました。う~ん。バラバラなデータになっています。
2021.09.04
コメント(0)

タイトルにあるとおり今回はスイッチを設置しました。配線等は以下のとおりです。今回使用したスイッチはタクトスイッチといわれるものを使用しています。なお、ここでブレッドボードを大きなタイプに変更して、今後のためにLEDを追加してます。LEDに使用している抵抗は220Ωで、スイッチに使用している抵抗は10kΩです。実際に配線した写真は以下のとおりです。だんだん複雑になっていますが、一応これで完成形と思っています。また、ジャンパーワイヤーの代わりに剝き出しの線でつないでいる箇所がありますが、これはLEDや抵抗の切れ端を曲げて使用しています。節約です。忘れていましたが、今回参考にしたサイトはココになります。配線が終わりましたので、Thonnyを開きコードを書きます。コードは以下のとおりです。import RPi.GPIO as GPIOfrom time import sleepLED_GPIO = 4 TACT_GPIO = 17 GPIO.setmode(GPIO.BCM)GPIO.setup(LED_GPIO, GPIO.OUT)GPIO.setup(TACT_GPIO, GPIO.IN)try: while True: if GPIO.input(TACT_GPIO) == GPIO.HIGH: GPIO.output(LED_GPIO, GPIO.HIGH) else: GPIO.output(LED_GPIO, GPIO.LOW) sleep(0.01)except KeyboardInterrupt: passfinally: GPIO.cleanup()では、おっさんなりのコードの理解です。import RPi.GPIO as GPIO:これまでと同様from time import sleep:いつもはtimeをimportしていましたが、今回はtimeの中のsleepだけをimportしているみたいです。負荷が少なくなるのかな?LED_GPIO = 4 :LEDに接続するGPIO番号。上の黄色の線になります。このピンは3.3vの電圧を出したり、読み取ったりできます。TACT_GPIO = 17 : Tack Switchに接続するGPIO番号。上の紫の線になります。このピンも3.3vの電圧を出したり、読み取ったりできます。GPIO.setmode(GPIO.BCM):前回と同様。GPIO.setup(LED_GPIO, GPIO.OUT):LED用のピンを出力用として使いますという宣言。GPIO.setup(TACT_GPIO, GPIO.IN):スイッチ用のピンを読み取り用として使いますという宣言。try: :ここからexcept KeyboardInterrupt:までは例外処理をしますという指示。例外処理とは予期しない事象が起こった時に対処する方法で、exceptの下にある内容が例外処理の発生した場合の処理の内容になるみたいです。ここではKeyboardInterruptつまりキーボード関連の問題が発生した場合のみ対処するコードを書いています。なので、tryからexceptまでの間にキーボード関連の問題が発生した場合、passを実行することになります。passは何もしないという命令文ですので結局問題が発生しても何もしないことになるみたいです。順番が変わりますが、finally: GPIO.cleanup()は必ず実行する内容を指示しています。最後には・・・という感じです。while True: :繰り返しを指示しています。範囲は、 if GPIO.input(TACT_GPIO) == GPIO.HIGH: GPIO.output(LED_GPIO, GPIO.HIGH) else: GPIO.output(LED_GPIO, GPIO.LOW) sleep(0.01)になります。この内容をずっと繰り返し行います。if GPIO.input(TACT_GPIO) == GPIO.HIGH: :もしTACT_GPIOピンに3.3v(GPIO_HIGH)の電圧がかかっていればという内容になります。GPIO.output(LED_GPIO, GPIO.HIGH):LEDのピンに3.3vの電圧をかけなさいという内容になります。 else: :そうではない場合という内容になります。GPIO.output(LED_GPIO, GPIO.LOW):LEDのピンに0vの電圧をかけなさい(つまりoff)という内容になります。これを図で確認すると、まず、赤のジャンパーワイヤーから常に3.3vの電圧が供給されています。このピンは何も制御されていなくても常に3.3vの電圧がかかっているピンになります。スイッチが押されていない状況では、赤い矢印の経路に電圧3.3vがかかっています。ここで、スイッチを押すと、上の図の経路に電圧がかかります。そうすると、紫の線にも3.3vの電圧がかかります。なので、 if GPIO.input(TACT_GPIO) == GPIO.HIGH: の条件文を満たします。よって、 GPIO.output(LED_GPIO, GPIO.HIGH)を実行することになります。したがって、スイッチを押すとLEDが点灯することになります。実際の実行状況です。ちなみに水色の矢印は抵抗10kΩをとおるので電圧が下がります。そのため色分けしています。(電圧=電流×抵抗:電流は一定なので電圧が下がる)ここで、なぜ10kΩの抵抗を使用しているかは、推測ですがスイッチ自体に電流はいらないので、ほぼ電流を流さないために大きな抵抗をしようしているのではないかと思います。また、黄緑色と白色のジャンパーワイヤーはRaspberryPiのマイナス側のピンにつながっています。ジャンパーワイヤー1本あたりの最大許容電流値を調べるのは面倒だったので安全のために2本マイナス側をとっています。このコードはずっと繰り返していて終わらないので、終わらせたい場合は、Thonnyのストップボタンを押すか,ctrlキーとcキーを同時に押す必要があります。今回はここまでです。次回はついにゴールの予定です。お疲れでした。
2021.09.04
コメント(0)
全7件 (7件中 1-7件目)
1


