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

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

CrowPiレッスン12:ステップモーターを使用し、ステップ動作を行う

2020-11-08 16:24:49 | CrowPi

Using the step motor and making step movements.

レッスン12"ステップモーターを使用し、ステップ動作を行う"をやっていく。
ステップモーターを使えるようになれば、ロボットや3Dプリンターなど応用の幅が広がる。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • ステップモーターを制御し、ステップ動作を行う方法を学びます

何が必要か

  • 初期設定後のCrowPiボード
  • ステップモーター(CrowPiキットに含まれています)

Requires switching modules using the switch

  • はい、右スイッチ-ピン番号3,4,5,6-スイッチを上にしてオンにします(センサーの切り替え方法を忘れた場合は、ページ番号5を参照してください)

CrowPi上のステップモーターモジュールの位置



↑そこにステップモーターを接続

ステップモーターの操作

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

Examples/stepmotor.py
import time
import RPi.GPIO as GPIO
import math

class Stepmotor:

def __init__(self):

 # set GPIO mode
 GPIO.setmode(GPIO.BCM)
 # These are the pins which will be used on the Raspberry Pi
 self.pin_A = 5
 self.pin_B = 6
 self.pin_C = 13
 self.pin_D = 19
 self.interval = 0.010

 # Declare pins as output
 GPIO.setup(self.pin_A,GPIO.OUT)
 GPIO.setup(self.pin_B,GPIO.OUT)
 GPIO.setup(self.pin_C,GPIO.OUT)
 GPIO.setup(self.pin_D,GPIO.OUT)
 GPIO.output(self.pin_A, False)
 GPIO.output(self.pin_B, False)
 GPIO.output(self.pin_C, False)
 GPIO.output(self.pin_D, False)
(省略)
def main():

 print("moving started")
 motor = Stepmotor()
 print("One Step")
 motor.turnSteps(1)
 time.sleep(0.5)
 print("20 Steps")
 motor.turnSteps(20)
 time.sleep(0.5)
 print("quarter turn")
 motor.turnDegrees(90)
 print("moving stopped")
 motor.close()

if __name__ == "__main__":
 main()

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

修正後
 # set GPIO mode
 GPIO.setmode(GPIO.BOARD)
 # These are the pins which will be used on the Raspberry Pi
 self.pin_A = 29
 self.pin_B = 31
 self.pin_C = 33
 self.pin_D = 35

 self.interval = 0.010

このスクリプトを実行すると、ステップモーターがブルブル震え出すが特段何が動く様子はなかった。
てっきり軸の部分が回転するものだと思ってた😅
そもそもステップモーターって何だ?
ロボットとかに使えるんだよね?🤔





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

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でシェアする