.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! 3.1.1 計数装置 ================ 前書き ----------------- ここでは、PIRセンサーと4桁のセグメントディスプレイで構成される数字表示カウンターシステムを作成する。 PIRが誰かが通り過ぎていることを検出すると、4桁のセグメントディスプレイの数字に1が加算される。 このカウンターを使用して、通路を歩いている人の数をカウントできる。 部品 --------------- .. image:: media/list_Counting_Device1.png :align: center .. image:: media/list_Counting_Device2.png :align: center 回路図 ---------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 SPIMOSI Pin 19 12 10 GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO26 Pin 37 25 26 ============ ======== ======== === .. image:: media/Schematic_three_one1.png :align: center 実験手順 ----------------------------- ステップ1: 回路を作る。 .. image:: media/image235.png :width: 800 C言語ユーザー向け ^^^^^^^^^^^^^^^^^^^^^^^^^ ステップ2: コードのフォルダーに入る。 .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/3.1.1/ ステップ3: コードをコンパイルする。 .. raw:: html .. code-block:: gcc 3.1.1_CountingDevice.c -lwiringPi ステップ4: EXEファイルを実行する。 .. raw:: html .. code-block:: sudo ./a.out コードの実行後、PIRが誰かが通り過ぎていることを検出すると、4桁のセグメントディスプレイの数字に1が加算される。 PIR モジュールには 2 つのポテンショメータがあり、 1 つは感度を調整するためのもので、もう 1 つは検出距離を調整するためのものです。 PIR モジュールがうまく機能するためには、両方を完全に反時計回りに回す必要があります。 **コードの説明** .. code-block:: c void display() {     clearDisplay();     pickDigit(0);     hc595_shift(number[counter % 10]);     clearDisplay();     pickDigit(1);     hc595_shift(number[counter % 100 / 10]);     clearDisplay();     pickDigit(2);     hc595_shift(number[counter % 1000 / 100]);       clearDisplay();     pickDigit(3);     hc595_shift(number[counter % 10000 / 1000]); } まず、4番目のセグメントディスプレイを開始し、1桁の数字を書き込む。 次に、3番目のセグメントディスプレイを開始し、10桁の数字を入力する。 その後、2番目と1番目のセグメントディスプレイをそれぞれ開始し、それぞれ数百桁と数千桁を書き込む。 リフレッシュ速度が非常に速いため、完全な4桁のディスプレイが表示される。 .. code-block:: c void loop(){     int currentState =0;     int lastState=0;     while(1){         display();         currentState=digitalRead(sensorPin);         if((currentState==0)&&(lastState==1)){             counter +=1;         }         lastState=currentState;     } } これが主な機能である:4桁のセグメントディスプレイに数字を表示し、PIR値を読み取る。 PIRが誰かが通り過ぎていることを検出すると、4桁のセグメントディスプレイの数字に1が加算される。 Python言語ユーザー向け ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ステップ2: コードのフォルダーに入る。 .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python/ ステップ3: EXEファイルを実行する。 .. raw:: html .. code-block:: sudo python3 3.1.1_CountingDevice.py コードの実行後、PIRが誰かが通り過ぎていることを検出すると、 4桁のセグメントディスプレイの数字に1が加算される。 **コード** .. note:: 以下のコードを **変更/リセット/コピー/実行/停止** できます。 ただし、その前に、 ``davinci-kit-for-raspberry-pi/python`` のようなソースコードパスに移動する必要があります。 .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time sensorPin = 26 SDI = 24 RCLK = 23 SRCLK = 18 placePin = (10, 22, 27, 17) number = (0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90) counter = 0 def clearDisplay(): for i in range(8): GPIO.output(SDI, 1) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def hc595_shift(data): for i in range(8): GPIO.output(SDI, 0x80 & (data << i)) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def pickDigit(digit): for i in placePin: GPIO.output(i,GPIO.LOW) GPIO.output(placePin[digit], GPIO.HIGH) def display(): global counter clearDisplay() pickDigit(0) hc595_shift(number[counter % 10]) clearDisplay() pickDigit(1) hc595_shift(number[counter % 100//10]) clearDisplay() pickDigit(2) hc595_shift(number[counter % 1000//100]) clearDisplay() pickDigit(3) hc595_shift(number[counter % 10000//1000]) def loop(): global counter currentState = 0 lastState = 0 while True: display() currentState=GPIO.input(sensorPin) if (currentState == 0) and (lastState == 1): counter +=1 lastState=currentState def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT) GPIO.setup(RCLK, GPIO.OUT) GPIO.setup(SRCLK, GPIO.OUT) for i in placePin: GPIO.setup(i, GPIO.OUT) GPIO.setup(sensorPin, GPIO.IN) def destroy(): # When "Ctrl+C" is pressed, the function is executed. GPIO.cleanup() if __name__ == '__main__': # Program starting from here setup() try: loop() except KeyboardInterrupt: destroy() **コードの説明** **1.1.5 4桁7セグメントディ** スプレイに基づいて、このレッスンでは、 PIRモジュール を追加して、レッスン1.1.5の自動カウントをカウント検出に変更する。 PIRが誰かが通り過ぎていることを検出すると、4桁のセグメントディスプレイの数字に1が加算される。 .. code-block:: python def display():     global counter                         clearDisplay()      pickDigit(0)       hc595_shift(number[counter % 10])     clearDisplay()     pickDigit(1)     hc595_shift(number[counter % 100//10])     clearDisplay()     pickDigit(2)     hc595_shift(number[counter % 1000//100])     clearDisplay()     pickDigit(3)     hc595_shift(number[counter % 10000//1000]) まず、4番目のセグメントディスプレイを開始し、1桁の数字を書き込む。 次に、3番目のセグメントディスプレイを開始し、10桁の数字を入力する。 その後、2番目と1番目のセグメントディスプレイをそれぞれ開始し、それぞれ数百桁と数千桁を書き込む。 リフレッシュ速度が非常に速いため、完全な4桁のディスプレイが表示される。 .. code-block:: python def loop(): global counter     currentState = 0     lastState = 0     while True:         display()         currentState=GPIO.input(sensorPin)         if (currentState == 0) and (lastState == 1):             counter +=1         lastState=currentState  これが主な機能である:4桁のセグメントディスプレイに数字を表示し、PIR値を読み取る。 PIRが誰かが通り過ぎていることを検出すると、4桁のセグメントディスプレイの数字に1が加算される。 現象画像 ------------------------- .. image:: media/image236.jpeg