Analog 입출력 내장의 위력
Analog 입출력이 있으면 편리
온도 센서(MCP9700)를 소재로 Arduino의 Analog 입력과 AD 컨버터를 비교해 보았다.
사용한 것
온도 센서(MCP9700): 데이터시트는 여기
AD 컨버터(MCP3008): 데이터시트는 여기 Arduino IDE에서 사용한 라이브러리는 여기
소스 코드 및 결과
온도 센서(MCP9700) 데이터시트를 읽습니다.
온도가 0도일 때는 500mV의 출력, 온도가 1도 올라가면 10mV 출력이 올라가는 것을 알 수 있다.
Arduino의 Analog 및 MCP3008의 분해능은 모두 1024(0-1023)이다.
아날로그 입력 사용
TempSensor_Analog_.inoconst int analogInPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int read_val = analogRead(analogInPin);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
AD 컨버터 이용
TempSensor_MCP3008.ino#include <Adafruit_MCP3008.h>
Adafruit_MCP3008 adc;
const int mcp3008_ch = 0;
void setup() {
Serial.begin(9600);
// (sck, mosi, miso, cs);
adc.begin(13, 11, 12, 10);
}
void loop() {
int read_val = adc.readADC(mcp3008_ch);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
에 대해 차이가 없어 보이지만,.
진짜 비교
배선도
브레드 보드의 왼쪽에있는 것이 아날로그 입력에 연결된 온도 센서, 중앙에있는 것이 AD 컨버터 (Arduino와는 SPI 연결), 중앙 아래에있는 것이 AD 컨버터에 연결된 온도 센서입니다. .
사진
Analog 입력에서는 이렇게 된다. 깔끔하게.
AD 컨버터에서는 이렇게 된다. 조금 혼돈.
AD 컨버터 MCP3008 라이브러리
TempSensor_MCP3008.ino에서 사용하는 adc.begin()과 adc.readADC()가 도서관에서 몇 줄 있는지 확인하면,
- adc.begin() 20행
- adc.readADC() 56행
일반적으로 라이브러리를 사용합니다. 다만 스크래치로 만들면 AD 컨버터의 데이터 시트와 SPI를 이해할 필요가 있다. 그것에 귀찮게.
감상
어떤 것은 사용하는 것이 좋다. Analog 입력이 있는 것은 편리합니다.
Reference
이 문제에 관하여(Analog 입출력 내장의 위력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/infinite1oop/items/ca2e5dc08d1d916f1a6c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const int analogInPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int read_val = analogRead(analogInPin);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
#include <Adafruit_MCP3008.h>
Adafruit_MCP3008 adc;
const int mcp3008_ch = 0;
void setup() {
Serial.begin(9600);
// (sck, mosi, miso, cs);
adc.begin(13, 11, 12, 10);
}
void loop() {
int read_val = adc.readADC(mcp3008_ch);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
Reference
이 문제에 관하여(Analog 입출력 내장의 위력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/infinite1oop/items/ca2e5dc08d1d916f1a6c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)