산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Raspberry Pi 센서 및 액추에이터 제어

일반적으로 프로그래머는 디스크의 데이터로 작업하고 운이 좋으면 화면에 그림을 그립니다. 이것은 프로그래머가 현실 세계에서 감지된 데이터로 작업하고 현실 세계에서 움직이는 장치를 제어할 수 있게 해주는 물리적 컴퓨팅과 대조됩니다.

목표

Raspberry Pi를 사용하여 가속도계 값을 읽고 서보 모터를 제어합니다.

정의

<울>
  • 라즈베리 파이
    • USB 포트 2개, HDMI 출력, 이더넷, 그리고 가장 중요한 것은…
  • GPIO 핀
    • 범용 입력/출력 핀
    • 이것이 진정한 "물리적 컴퓨팅"을 가능하게 하는 구성 요소입니다. 프로그래머는 각 핀에서 전압을 높거나 낮도록 설정할 수 있으며, 이것이 액추에이터와 통신하는 방법입니다. 각 핀의 현재 전압을 읽을 수도 있습니다. 이것이 센서가 사용자에게 응답하는 방식입니다. 각 핀은 이진 상태를 나타내며 0 또는 1만 출력할 수 있고 그 사이에는 아무 것도 출력할 수 없다는 점에 유의하는 것이 중요합니다.
  • 이 기사에서는 Raspberry Pi의 하드웨어 기능을 보여주기 위해 네 가지 기본 Python 프로젝트를 살펴보겠습니다. 해당 프로젝트는 다음과 같습니다.

    <울>
  • LED를 깜박입니다.
  • 냄비를 읽습니다.
  • 스트림 데이터.
  • 서보를 제어합니다.
  • LED를 깜박입니다.

    LED는 발광 다이오드입니다. 다이오드는 전류가 한 방향으로 흐르고 다른 방향으로는 흐르지 않도록 하는 회로 소자입니다. 발광이란… 빛을 발산한다는 뜻입니다. 일반적인 LED는 10-30mA 범위의 전류가 필요하며 약 2-3V가 떨어집니다. LED를 Pi의 GPIO에 직접 연결하면 30mA보다 훨씬 더 많이 공급되고 아마도 LED(및 Pi)가 튀게 ​​될 것입니다. 이를 방지하려면 저항을 넣어야 합니다. 수학을 하고 싶다면 다음 방정식을 사용하여 적절한 저항을 계산할 수 있습니다.

    R =(Vs - Vd) / 나

    그러나 수학을 하고 싶지 않다면 500-1500옴 사이의 저항을 선택하십시오. 모든 회로 요소(LED 및 저항기)를 수집한 후

    코드도 꽤 간단합니다. 그러나 먼저 RPi.GPIO를 설치해야 합니다. (OS에 사전 설치되어 있을 수 있습니다.)

    <사전> itertools에서 가져오기 주기 가져오기 RPi.GPIO를 ioio.setmode(io.BCM)io.setup(12, io.OUT)o =주기([1, 0])while True:io.output(12, o)으로 가져오기 .next()) time.sleep(0.5)

    기본적으로 중요한 라인은 다음과 같습니다.

    io.setup(12, io.OUT)io.output(12, 1)

    이 코드 라인은 핀 12를 출력으로 설정한 다음 1(3.3볼트)을 출력합니다. 회로에 연결된 위의 코드를 실행하면 LED가 0.5초마다 깜박이는 것을 볼 수 있습니다.

    냄비를 읽으십시오.

    pot은 가변 저항기인 potentiometer의 줄임말입니다. 이것은 손잡이에 대한 멋진 단어입니다. 기본적으로 손잡이를 돌리면 저항에 영향을 미치며, 이는 포트의 전압에 영향을 줍니다. (V =IR , 기억하다?). 일부 물리적 값에 상대적인 전압 변경은 작동하는 센서의 수이며, 이러한 종류의 센서를 아날로그 센서라고 합니다. . GPIO 핀이 바이너리 상태만 나타낼 수 있다고 말한 것을 기억하십니까? 아날로그 전압 값을 Pi가 처리할 수 있는 비트의 이진 스트림으로 변환하려면 더 많은 실리콘을 요청해야 합니다.

    이 실리콘 덩어리를 ADC(아날로그-디지털 변환기)라고 합니다. 제가 좋아하는 MCP3008은 8개의 10비트 채널을 가지고 있습니다. 즉, 각각 1024(2^10)의 해상도로 8개의 센서 값을 읽을 수 있습니다. 이것은 0 – 3.3V의 입력 전압을 0에서 1023 사이의 정수로 매핑합니다.

    다이어그램을 단순화하기 위해 Pi를 임시 노란색 레이블로 바꿨습니다.

    칩과 대화하려면 spidev라는 python 패키지가 필요합니다. 패키지 및 MCP3008과의 작동 방식에 대한 자세한 내용은 이 훌륭한 블로그 게시물을 확인하세요.

    spidev가 설치되고 회로가 구축된 상태에서 다음 프로그램을 실행하여 라이브 센서 값을 읽고 표준 출력으로 인쇄합니다.

    import spidev import timespi =spidev.SpiDev()spi.open(0,0)def readadc(adcnum):0이 아닌 경우 <=adcnum <=7:return -1 r =spi.xfer2([1, ( 8+adcnum)<<4, 0]) adcout =((r[1] &3) <<8) + r[2] return adoutwhile True:val =readadc(0) print val time.sleep(0.5) 

    가장 중요한 부분은 다음 두 줄입니다.

    r =spi.xfer2([1, (8+adcnum)<<4, 0])adcout =((r[1] &3) <<8) + r[2]

    그들은 읽기 명령을 보내고 관련 반환 비트를 추출합니다. 여기서 무슨 일이 일어나고 있는지에 대한 자세한 내용은 위에 링크된 블로그 게시물을 참조하세요.

    <시간 />

    스트림 데이터.

    유선을 통해 데이터를 스트리밍하기 위해 ØMQ 네트워킹 라이브러리를 사용하고 REQUEST/REPLY 패턴을 구현할 것입니다. ØMQ를 사용하면 Python에서 클라이언트와 서버를 매우 간단하게 설정할 수 있습니다. 다음은 완전한 작업 예입니다.

    서버

    <사전>가져오기 zmqcontext =zmq.Context()socket =context.socket(zmq.REP)socket.bind('tcp://*:1980')while True:message =socket.recv() 인쇄 메시지 socket.send ("나 여기 있어")

    클라이언트

    import zmqcontext =zmq.Context()socket =context.socket( zmq.REQ)a ='tcp://192.168.1.6:1980'socket.connect(a) for request in range(10):socket. send('집에 왔니?') 메시지 =socket.recv() 메시지 인쇄

    이제 특성과 enaml을 사용하여 클라이언트 측에서 멋진 UI를 만들 수 있습니다. github 리포지토리에서 acc_plot 데모를 확인하여 클라이언트가 그리는 유선을 통한 Pi 스트리밍 데이터의 예를 확인하세요.

    <시간 />

    서보 제어

    서보는 특정 위치로 운전할 수 있는 (종종 작은) 모터입니다. 예를 들어, 주어진 서보에 대해 드라이브 샤프트를 0도에서 18o도 또는 그 사이의 어느 곳에서나 설정할 수 있습니다. 상상할 수 있듯이 이것은 로봇 공학을 비롯한 많은 작업에 유용할 수 있습니다.

    샤프트 회전은 GPIO 핀의 고전압 펄스 기간 동안 정보를 인코딩하는 PWM(펄스 폭 변조)에 의해 제어됩니다. 대부분의 취미 서보는 표준 펄스 폭 의미를 따릅니다. 0.5ms 펄스는 최소 위치로 이동함을 의미하고 2.5ms 펄스는 최대 위치로 이동함을 의미합니다. 이제 이 펄스를 20ms마다 반복하면 서보를 제어하게 됩니다.

    펄스 폭은 주파수보다 훨씬 더 중요합니다.

    이러한 종류의 타이밍은 Python에서는 불가능합니다. 사실, 최신 운영 체제에서는 실제로 불가능합니다. 인터럽트는 제어 코드에서 언제든지 올 수 있어 원하는 펄스보다 긴 펄스와 서보의 지터를 유발할 수 있습니다. 타이밍 요구 사항을 충족하려면 재미있는 커널 모듈의 세계로 들어가야 합니다. ServoBlaster는 DMA 제어 블록을 사용하여 CPU를 완전히 우회하는 커널 모듈입니다. 로드되면 커널 모듈은 /dev/servoblaster에서 기기 파일을 엽니다. 위치 명령을 쓸 수 있습니다.

    서보 제어를 더 간단하게 만드는 작은 객체 지향 레이어를 작성했습니다. 여기에서 내 라이브러리를 찾을 수 있습니다.

    https://github.com/jminardi/RobotBrain

    서보를 5v에 연결하고 Pi에서 접지한 다음 제어 와이어를 핀 4에 연결하기만 하면 됩니다.

    파이썬 코드는 매우 간단합니다.

    <사전>import timeimport numpy from npfrom robot_brain.servo import Servoservo =Servo(0, min=60, max=200) for val in np.arange(0, 1, 0.05):servo.set(val) time.sleep( 0.1)

    서보를 인스턴스화하고 set()를 호출하기만 하면 됩니다. 0과 1 사이의 부동 소수점 값을 사용하는 메서드입니다. 네트워크를 통해 구현된 서보 제어를 보려면 github의 servo_slider 데모를 확인하세요.

    자세한 내용:Raspberry Pi 센서 및 액추에이터 제어


    제조공정

    1. NodeMCU와 Raspberry Pi 3 B+ 간의 MQTT 통신
    2. 라즈베리 파이 온도 로거
    3. 1선 DS18B20 센서와 Raspberry Pi로 온도 측정
    4. Python 및 Raspberry Pi 온도 센서
    5. 라즈베리 파이 기상 관측소
    6. 초음파 센서(HC-SR04) + 라즈베리파이
    7. Raspberry Pi를 사용한 모션 센서
    8. 라즈베리 파이 토양 수분 센서
    9. JAVA의 Raspberry Pi 디지털 홀 센서
    10. Raspberry Pi 온도 및 광 센서