제조공정
일반적으로 프로그래머는 디스크의 데이터로 작업하고 운이 좋으면 화면에 그림을 그립니다. 이것은 프로그래머가 현실 세계에서 감지된 데이터로 작업하고 현실 세계에서 움직이는 장치를 제어할 수 있게 해주는 물리적 컴퓨팅과 대조됩니다.
Raspberry Pi를 사용하여 가속도계 값을 읽고 서보 모터를 제어합니다.
이 기사에서는 Raspberry Pi의 하드웨어 기능을 보여주기 위해 네 가지 기본 Python 프로젝트를 살펴보겠습니다. 해당 프로젝트는 다음과 같습니다.
<울>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 센서 및 액추에이터 제어
제조공정
구성품 및 소모품 라즈베리 파이 3 모델 B × 1 Arduino Micro × 2 Onion Corporation OLED 확장 × 1 이 프로젝트 정보 소개:Raspberry Pi 및 Arduino 노트북 몇 년 전 Raspberry Pi에 대해 듣고 놀게 된 날부터 나는 Raspberry Pi 기반 노트북을 만들고 싶었고 이제 Raspberry Pi 3의 이유로 마침내 보기로 결정했습니다. 그것을 통해. 이제 Raspberry Pi
구성품 및 소모품 Arduino UNO × 1 초음파 센서 - HC-SR04(일반) × 1 Adafruit 128X64 LED LCD OLED × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 OLED 화면 사용 방법 여기에 대한 이전 자습서가 있습니다. #포함 및 #define , setup(): 실행 전 #include //OLED를 위한 모든 불쾌한 라이브러리가 필요합니다.#inclu