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

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

CrowPiレッスン11:RFIDモジュールを使用してRFIDカードを読み取り/書き込みする

2020-11-08 11:05:41 | CrowPi

Read / Write RFID card using the RFID module.

レッスン11"RFIDモジュールを使用してRFIDカードを読み取り/書き込みする"をやっていく。

Wikiによると
RFID(英: radio frequency identifier)とは、ID情報を埋め込んだRFタグから、電磁界や電波などを用いた近距離(周波数帯によって数cm~数m)の無線通信によって情報をやりとりするもの、および技術全般を指す。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • RFIDを制御し、RFIDからデータを読み書きして、チップを認識します

何が必要か

  • 初期設定後のCrowPiボード
  • RFIDチップ(CrowPiに含まれています)
↓RFIDチップとして以下の二種類が用意されている。



Requires switching modules using the switch

  • いいえ

CrowPi上のRFIDモジュールの位置


↑USBが結構邪魔😅


RFIDの操作

このレッスンのスクリプトは、PDFやレッスン動画で紹介されているものとExamplesに用意されているもので異なる。
PDFやレッスン動画では、pirc522ライブラリを使った以下のスクリプトが紹介されている。
  • RFID_Read.py
一方、Examplesでは、RFIDフォルダに以下の4つのスクリプトが用意されており、いずれもMFRC522ライブラリが使用されている。
  • Dump.py
  • MFRC522.py
  • Read.py
  • Write.py
そこで、例えば、Read.pyは以下の通り。

Examples/RFID/Read.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
# Copyright 2014,2018 Mario Gomez
import RPi.GPIO as GPIO
import MFRC522
import signal

continue_reading = True
# Incase user wants to terminate, this function is exactly for that reason.
def end_read(signal,frame):
 global continue_reading
 print("Ctrl+C captured, ending read.")
 continue_reading = False
 GPIO.cleanup()

signal.signal(signal.SIGINT, end_read)
# create the reader object
MIFAREReader = MFRC522.MFRC522()

# Welcome greeting
print("Welcome to MFRC522 RFID Read example")
print("Press CTRL+C anytime to quit.")

# The function will continue running to detect untill user said otherwise
while continue_reading:
 # detect touch of the card, get status and tag type
 (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
 # check if card detected or not
 if status == MIFAREReader.MI_OK:
  print("Card detected")

 # Get the RFID card uid and status
 (status,uid) = MIFAREReader.MFRC522_Anticoll()

 # If status is alright, continue to the next stage
 if status == MIFAREReader.MI_OK:
  # Print UID
  print("Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3]))
  # standard key for rfid tags
  key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
  # Select the scanned tag
  MIFAREReader.MFRC522_SelectTag(uid)
  # authenticate
  status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)
  # check if authenticated successfully, read the data
  if status == MIFAREReader.MI_OK:
   MIFAREReader.MFRC522_Read(8)
   MIFAREReader.MFRC522_StopCrypto1()
  else:
   print("Authentication error")

このスクリプトを実行して、RFIDチップをかざすと以下のようにチップから情報を読み込むことができる。



上の写真の場合、RFIDチップは初期状態のため、何も情報が設定されておらず、0が並んだものが表示される。

Write.pyを実行すると、RFIDチップに情報が書き込まれ、もう一度Read.pyで読み取ると、その書き込まれた情報が表示されることを確認した。

Dump.pyは、RFIDチップに書き込まれた情報を元に承認処理を行うスクリプトのようであるが、情報を書き込んだRFIDチップでも初期状態のRFIDチップでも承認はされなかった。

また、MFRC522.pyに関しては、RFIDチップをかざす間もなくスクリプトが終了するため、何をやっているのかは現時点で不明である。
→たぶん、Read.pyやWrite.pyでimportしているライブラリの本体なのだろう。

もうちょっとスクリプトの中身を見て勉強しようと思う。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン10:LCDディスプレイの制御

2020-11-08 00:30:02 | CrowPi

Controlling the LCD Display

レッスン10"LCDディスプレイの制御"をやっていく。
LCDとは、liquid crystal displayの略で液晶ディスプレイのこと。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • LCDディスプレイを制御してデータを書き込む方法を学びます

何が必要か

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPiのLCD画面の位置



LCDの明るさの設定


↑ここのネジにより、LCD画面の明るさとコントラストを調整することができる

LCDの操作

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

Examples/lcd.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Example using a character LCD backpack.
import time
import Adafruit_CharLCD as LCD

# Define LCD column and row size for 16x2 LCD.
lcd_columns = 16
lcd_rows = 2

# Initialize the LCD using the pins
lcd = LCD.Adafruit_CharLCDBackpack(address=0x21)

try:
 # Turn backlight on
 lcd.set_backlight(0)

 # Print a two line message
 lcd.message('Hello world!')

 # Wait 5 seconds
 time.sleep(5.0)

 # Demo showing the cursor.
 lcd.clear()
 lcd.show_cursor(True)
 lcd.message('Show cursor')

 time.sleep(5.0)

 # Demo showing the blinking cursor.
 lcd.clear()
 lcd.blink(True)
 lcd.message('Blink cursor')

 time.sleep(5.0)

 # Stop blinking and showing cursor.
 lcd.show_cursor(False)
 lcd.blink(False)

 # Demo scrolling message right/left.
 lcd.clear()
 message = 'Scroll'
 lcd.message(message)
 for i in range(lcd_columns-len(message)):
  time.sleep(0.5)
  lcd.move_right()
 for i in range(lcd_columns-len(message)):
  time.sleep(0.5)
  lcd.move_left()

 # Demo turning backlight off and on.
 lcd.clear()
 lcd.message('Flash backlight in 5 seconds...')
 time.sleep(5.0)
 # Turn backlight off.
 lcd.set_backlight(1)
 time.sleep(2.0)
 # Change message.
 lcd.clear()
 lcd.message('Goodbye!')
 # Turn backlight on.
 lcd.set_backlight(0)
 # Turn backlight off.
 time.sleep(2.0)
 lcd.clear()
 lcd.set_backlight(1)
except KeyboardInterrupt:
 # Turn the screen off
 lcd.clear()
 lcd.set_backlight(1)

LCDの場合も、GPIOではなくI2Cを使用する。
また、LCDの制御には、AdafruitフレームワークであるAdafruit_CharLCDBackpackを使用する。

このスクリプトを実行すると、LCDに色々なメッセージが表示される。



↑カーソルが点滅する

↑大きいカーソルが点滅する

↑"Scroll"という文字が右や左にスクロールする

↑バックライトが5秒間点灯し

↑バックライトが消える

↑"Goodbye!"と表示され終了する

レッスン動画では、LCDのデモを行うはずが、Segment LED(スクリプトはsegment.py)を使った時刻表示のデモが行われる。
どうやらレッスン10とレッスン15のデモ部分が入れ替わってしまっているらしい。
レッスン動画は、解説部分とデモ部分の2部構成になっており、解説部分は正しいのにデモ部分をつなぎ合わせるときに混乱したのかな?
Youtubeのコメント欄にも動画がチグハグになっているよって指摘が寄せられているみたいだけど、対応できていないんだな😅 

ちなみに、このレッスンの動画から小太り兄ちゃんの服が変わっている。
黒のロンティー→パーカー
また、この動画により、撮影場所が香港であることが分かる。
Elecrowって香港にある会社なんだな。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン9:超音波センサーを使用して距離情報を取得する

2020-11-07 17:18:05 | CrowPi

Getting distance information using the Ultrasonic sensor.

レッスン9"超音波センサーを使用して距離情報を取得する"をやっていく。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • 超音波センサーを制御し、出力として距離を取得します

何が必要か

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPi上の超音波センサーの位置




超音波距離センサーの操作

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

Examples/distance.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author : www.modmypi.com
# Link: https://www.modmypi.com/blog/hc-sr04-ultrasonic-range-sensor-on-the-raspberry-pi

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

TRIG = 16
ECHO = 12

print("Distance Measurement In Progress")

GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)

GPIO.output(TRIG, False)
print("Waiting For Sensor To Settle")
time.sleep(2)

GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)

while GPIO.input(ECHO)==0:
 pulse_start = time.time()

while GPIO.input(ECHO)==1:
 pulse_end = time.time()

pulse_duration = pulse_end - pulse_start

distance = pulse_duration * 17150

distance = round(distance, 2)

print("Distance: %scm" % distance)

GPIO.cleanup()

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

修正後
GPIO.setmode(GPIO.BOARD)

TRIG = 36
ECHO = 32


このスクリプトを実行すると、障害物までの距離がターミナルに表示される。


どのくらいの精度なのかは不明だけど工夫次第で色々遊べそうだな。
例えば、ぶつからないロボットカー🚙とか
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン8:ーションセンサーを使用してモーションを検出する

2020-11-07 16:45:20 | CrowPi

Detect motion using the motion sensor.

レッスン8"モーションセンサーを使用してモーションを検出する"をやっていく。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • モーションセンサーから出力を取得し、CrowPiの周りの動きを検出します。

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPi上のモーションセンサーの位置



感度の設定

↑プラスドライバーで感度を調節できる。

モーションセンサーの操作

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

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

import RPi.GPIO as GPIO
import time

# define motion pin
motion_pin = 23

# set GPIO as GPIO.BOARD
GPIO.setmode(GPIO.BCM)
# set pin mode as INPUT
GPIO.setup(motion_pin, GPIO.IN)

try:
while True:
if(GPIO.input(motion_pin) == 0):
print("Nothing moves ...")
elif(GPIO.input(motion_pin) == 1):
print("Motion detected!")
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()

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

修正後
# define motion pin
motion_pin = 16

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

このスクリプトを実行すると、ターミナルに"Nothingu moves ..."が表示され、モーションセンサーが動きを検出すると、"Motion detected!"が表示される。


無限ループとなるので、終了するには、CTRL+C。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン7:室温と湿度を検出する

2020-11-07 16:26:15 | CrowPi

Detect room temperature and humidity

レッスン7"室温と湿度を検出する"をやっていく。
この辺はそのまま実用できそうだな。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • DH11センサーから湿度と温度を制御および取得する方法を学習します

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPi上のDH11センサーの位置



サウンドセンサーからの入力の取得

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

Examples/dh11.py
import sys
import Adafruit_DHT

# set type of the sensor
sensor = 11
# set pin number
pin = 4

# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
 print(' Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))
else:
 print('Failed to get reading. Try again!')

このスクリプトでもGPIOは使わないようで、代わりにAdafruit_DHTライブラリを使用するようだ。

このスクリプトを実行すると、気温と湿度がターミナルに表示される。

↑温度の単位は摂氏なのかな?華氏じゃないよね?🤔
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする