Elixir에서 DYP-A01 초음파 거리 센서 사용

にほんご

다른 날 나는 DYP-A01 ultrasonic distance sensor 전원이 공급되는 Nerves에서 Raspberry Pi을 가지고 놀았습니다. 여기 내 메모가 있습니다.



짧은 이야기


  • Raspberry Pi의 직렬 포트를 통해 초음파 센서와 통신할 수 있도록 하는 Elixir 프로그램을 작성했습니다.
  • 초음파 센서를 다음에 연결하여 거리를 측정할 수 있었습니다.
  • Raspberry Pi Zero의 UART Rx 핀
  • Raspberry Pi 4의 UART Rx 핀
  • Raspberry Pi 4의 USB 포트


  • 신경 펌웨어



    Nerves을 사용하여 Raspberry Pi용 펌웨어를 빌드합니다.

    여기서는 Nerves 펌웨어에 대해 이야기하지 않고 Elixir 프로그래밍 언어로 펌웨어를 빌드하기 위한 플랫폼입니다. 좋은 자원이 있습니다.

    저는 개인적으로 Nerves 공식 문서를 읽고 Nerves를 시작했습니다. 그런 다음 막혔을 때 Elixir Slack#nerves 채널에서 질문을 했습니다. 사람들은 지역 사회에서 친절하고 친절합니다.
  • Nerves documentation
  • Nerves • Elixir School

  • 다음은 실험할 수 있는 몇 가지 예제 펌웨어 프로젝트입니다.
  • Nerves Livebook firmware
  • Nerves example firmware collection

  • 다음 YouTube 동영상에서는 Nerves Project의 공동 저자인 가 초보자를 위한 Nerves에 대해 이야기합니다.

  • Elixir in Embedded Systems using Nerves Livebook (유튜브)

  • Elixir Wizards Live: Frank and the Wizards (유튜브)

  • 사용된 하드웨어



    다음은 실험에 사용한 목록입니다.





    DYP-A01 ultrasonic distance sensor


    USB to TTL Serial Cable


    Jumper wires


    Raspberry Pi 4


    Raspberry Pi Zero W (with Headers)



    배선



    배선은 USB 또는 GPIO 핀을 통해 수행할 수 있습니다.

    USB



    Adafruit의 catalog에서 읽은 내용을 기반으로 DYP-A01 초음파 거리 센서와 USB to TTL 직렬 케이블을 구입했습니다.

    This sensor has UART output, so it can connect to a microcontroller or microcomputer with a TTL serial port. You can also connect it to a computer using a USB-to-serial adapter and read data from the operating system's COM or serial port device.



    처음에 나는 그것들을 어떻게 연결해야 할지 몰랐다. USB 케이블에는 4개의 전선이 나오는 반면 센서 케이블 끝에는 커넥터가 하나 있습니다. 잠시 후 점퍼선을 사용하여 연결할 수 있다는 것을 알게 되었습니다.






    제 경우에는 고맙게도 전선이 색상으로 잘 구분되어 있어 배선이 쉽습니다. 이 특정 센서의 경우 Raspberry Pi에서 센서로 신호를 전송하지 않기 때문에 하나의 와이어가 필요하지 않습니다. 우리는 센서에서 주기적으로 전송되는 신호를 수신할 뿐이며, 이를 센서data sheet에서 "UART 자동 출력"이라고 합니다.


    DYP-A01
    USB-TTL 직렬 케이블


    빨간색(3.3-5V)
    레드(5V)

    블랙(접지)
    블랙(접지)

    흰색(TX/전송)
    흰색(RX/수신)

    GPIO 핀



    또는 Raspberry Pi의 GPIO 핀을 통해 센서를 연결할 수 있습니다.


    DYP-A01
    라즈베리 파이


    빨간색(3.3-5V)
    5V

    블랙(접지)
    지면

    흰색(TX/전송)
    GPIO 15(수신/수신)


    Raspberry Pi pinout

    엘릭서 프로그램



    필요한 코드를 Elixir 라이브러리dypa01로 패키징합니다. 펌웨어dypa01 파일의 종속성 목록에 mix.exs를 추가하여 설치할 수 있습니다.

    def deps do
      [
        {:dypa01, "~> 0.1"}
      ]
    end
    


    직렬 포트 이름 찾기



    먼저 Nerves로 구동되는 Raspberry Pi를 실행합니다.

    다음을 실행하여 현재 연결된 모든 직렬 포트를 나열할 수 있습니다.

    iex> Circuits.UART.enumerate
    %{
      "ttyAMA0" => %{},
      "ttyS0" => %{},
      "ttyUSB0" => %{
        description: "CP2102 USB to UART Bridge Controller",
        manufacturer: "Silicon Labs",
        product_id: 60000,
        serial_number: "0001",
        vendor_id: 4292
      }
    }
    

    /boot/config.txt에서 UART용 기본 Nerves 직렬 포트를 찾을 수 있습니다.

    iex> cmd "cat /boot/config.txt | grep tty"
    # Enable the UART (/dev/ttyS0)
    0
    


    내 경우에는 내 Rasperry Pi Zero가 UART에 ttyAMA0를 사용하고 내 Rasperry Pi 4가 ttyS0를 사용한다는 것을 알았습니다.

    거리 측정



    직렬 포트 이름을 찾으면 초음파 거리 센서에서 거리 데이터를 쉽게 읽을 수 있습니다.

    # Start a gen server for interacting with a DYP-A01 sensor on port ttyAMA0
    iex> {:ok, pid} = DYPA01.start_link(port_name: "ttyAMA0")
    {:ok, #PID<0.1407.0>}
    
    # Measure the current distance
    iex> DYPA01.measure(pid)
    {:ok, %DYPA01.Measurement{distance_mm: 1680, timestamp_ms: 321793}}
    

    좋은 웹페이지 즐겨찾기