제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
동기
오후 회의를 통과하기 위해 애쓴 적이 있습니까? 하품을 멈출 수 없습니까? 3시간 강의를 듣고 잠이 드시나요? 아니요, 에너지 보충제를 판매하는 것이 아닙니다. 당신은 아마도 지난 밤에 충분한 수면을 취하지 못했을 것입니다. 우리 대부분은 그렇지 않습니다. 그러나 졸음이 완전히 당신의 잘못은 아닐 수도 있습니다! 열악한 환기와 높은 수준의 이산화탄소는 졸음을 유발할 수 있습니다!
이 NDIR CO2 센서를 사용하면 CO2 수준을 정확하게 측정하고 간단한 UART 직렬 인터페이스를 사용하여 값을 읽을 수 있습니다. 기존의 CO2 센서는 많은 전력을 소비하고 판독을 위해 준비되기 전에 램프를 예열하는 데 시간이 걸렸습니다. 이제 LED 및 적외선 감지기를 사용하여 평균 1.5ma 미만을 당기는 이 3.3v 센서를 사용하여 가스를 정확하게 측정할 수 있습니다. 광학 분산 및 기타 마법을 사용합니다. 자세한 내용은 Cozir의 데이터시트를 확인하세요. 인상적입니다.
시작하기
제 사무실 칸막이의 '수면 요인' 측정을 시작하려면 무엇이 필요합니까?
<울>이것에 대한 연결은 간단합니다. 센서에는 10개의 핀이 있지만 4개만 연결하면 됩니다.
Due를 사용하여 3.3v를 3V3에 연결하고 GND를 접지로, Rx(DIO19)를 Tx로, Tx(DIO18)를 Rx에 연결합니다. UART 와이어를 "교차"했는지 확인하고 판독값을 모니터링하기 위해 직렬 용어를 사용하는 것을 포기하지 않는 한 Tx(DIO1) 및 Rx(DIO0)를 사용할 수 없음을 기억하십시오. 센서에 Serial1을 사용했지만 나머지 세 가지 UART를 사용할 수 있습니다.
** 지금은 Arduino를 우회하고 센서에 직접 명령을 보내는 테스트를 하고 싶다면 퍼티 또는 선호하는 직렬 용어를 열고 9600 보드, 8비트, 패리티 없음, 1 정지 비트에서 연결하십시오. ASCII를 제출할 때마다 '/r/n' 전송을 활성화해야 할 수도 있습니다.**
***이 센서는 3.3v입니다. TTL이므로 통신이 5v 소스에서 시작된 경우 논리 시프터를 사용해야 합니다.***
센서 보정
CO2 센서를 보정하는 몇 가지 방법이 있습니다. 가장 좋은 방법 중 하나는 이산화탄소를 포함하지 않는 알려진 가스(질소)에서 센서를 포화시키는 것입니다. 이것은 알려진 0 판독값을 생성합니다. 주위에 질소가 없다면 신선한 공기를 사용하여 상당히 정확하게 보정할 수도 있습니다. 그러니 선글라스를 챙기고 견학을 가자.
그림> 그림>밖에 있을 때 아래 예제 스케치를 실행하고 주석을 제거하고 싶을 것입니다.
<사전><코드> calibrationFreshAir(); 코드>Setup() 루틴에서. 이것은 'G' 명령을 직렬을 통해 요청하는 센서에 보냅니다...
구경 측정! 지금은 여기 NYC의 14층에 있는 현재 CO2 농도 조건이 실제로 무엇인지 정확히 알지 못하기 때문에 완벽하지 않습니다(하와이의 "지구" 평균보다 여기가 약간 높을 수 있음). 그러나 실제로 물리적으로 환경의 차이를 감지하는 임계값은 1,000ppm이므로 이 450ppm의 신선한 공기 측정값을 회의실과 교실 측정을 위한 보정 지점으로 사용하는 것이 안전하다고 생각합니다.
문자 버퍼[20] ={0}; 정수 c =0; 무효 설정() { Serial.begin(9600); 동안(!직렬){}; Serial1.begin(9600); 동안(!직렬){}; Serial.println("CO2 수준 읽기 시작"); //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrationFreshAir(); } 무효 루프() { 지연(10000); c =요청("Z"); Serial.print("CO2 :");Serial.println(c); Serial.println(""); } int 요청(char* s) { 버퍼[0] ='\0'; 정수 idx =0; 명령(들); 지연(250); while(Serial1.available()) { 버퍼[idx++] =Serial1.read(); } 버퍼[idx] ='\0'; uint16_t rv =0; switch(buffer[1]) { case 'T' :rv =atoi(&buffer[5]); if (버퍼[4] ==1) rv +=1000; 부서지다; 기본값 :rv =atoi(&buffer[2]); 부서지다; } 리턴 rv; } 무효 명령(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrationFreshAir() { 반환 요청("G"); } 무효 setOperatingMode(uint8_t 모드) { sprintf(버퍼, "K %u", 모드); 명령(버퍼); } 코드>
또한 스케치 상단에 있는 두 개의 #define 문을 빠르게 기록해 두십시오. 센서를 처음 개봉할 때 setOperatingMode()를 사용하여 센서를 구성해야 할 수도 있습니다. 이 스케치는 폴링 모드에서 작동하도록 설계되었습니다. 성공적으로 보정하고 터미널에서 CO2 수준을 읽는 중이면 이를 클라우드에 게시할 준비가 된 것입니다. Adafruit IO에 연결하여 데이터 시각화를 시작해 보겠습니다.
클라우드에 CO2 측정항목 게시
아직 anduinoWiFi를 사용하여 Adafruit IO에 연결하지 않았다면 시작할 이 프로젝트 작성을 확인하세요. 여기에서 설명할 모든 세부 사항을 다룹니다. 다음은 1분마다 CO2 수치를 게시할 수 있는 스케치입니다.
#include #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "AnduinoLCD.h" // WiFi 매개변수 #define WLAN_SSID "YOUR_SSID" #define WLAN_PASS "YOUR_PASSWD" // Adafruit IO #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "YOUR_AIO_USERNAME" #define AIO_KEY "YOUR_AIO_KEY" WiFiClient 클라이언트; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /****************************** 피드 ****************** *********************/ // co2용 피드 설정 Adafruit_MQTT_Publish carbonDioxide =Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2"); /* AnduinoLCD 인스턴스 생성 */ AnduinoLCD LCD =AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13); 정적 정수 CO2 =0; 정적 정수 co2Prev =0; #define CZR_STREAMING 0x01 #define CZR_POLLING 0x02 char 버퍼[20] ={0}; 무효 설정() { Serial.begin(115200); 지연(3000); Serial1.begin(9600); //WiFi &Adafruit.IO에 연결 connectToWiFi(); connectToAdafruit(); //LCD 초기화 LCD.begin(); LCDinit(); //CO2 보정 및 초기 설정 //setOperatingMode(CZR_STREAMING); //setOperatingMode(CZR_POLLING); //calibrationFreshAir(); } void loop() { // 연결 상태를 유지하기 위해 adafruit io를 몇 번 ping if(! mqtt.ping(3)) { // adafruit io에 다시 연결 if(! mqtt.connected()) connect(); } // 현재 co2 읽기 co2 =Request("Z"); // int temp를 char 배열로 변환 char b[20]; 문자열 str; str=문자열(co2); for(int i=0; i=0) mqtt.disconnect(); Serial.println(F("연결 시도 중...")); 지연(5000); } Serial.println(F("Adafruit IO 연결되었습니다!")); } void displayCo2(int co2, int co2Prev) { //부실 값 지우기 LCD.setTextColor(ST7735_BLACK); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(40,60); LCD.setTextSize(3); LCD.print(co2Prev); LCD.setTextSize(1); LCD.print("ppm"); //새로운 값 인쇄 LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(40,60); LCD.setTextSize(3); LCD.print(CO2); LCD.setTextSize(1); LCD.print("ppm"); } void connectToWiFi() { // WiFi 액세스 포인트에 연결합니다. 지연(10); Serial.print(F("연결 중 ")); 직렬.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); Serial.print(F(".")); } Serial.println(F("와이파이 연결!")); } void connectToAdafruit() { // adafruit에 연결 io connect(); } 무효 LCDinit() { LCD.setBacklight(ON); LCD.fillScreen(ST7735_BLACK); //화면 지우기 LCD.showBanner(); //앤디움 배너 로드 LCD.setTextColor(ST7735_WHITE); LCD.setTextSize(2); LCD.setTextWrap(true); LCD.setCursor(0,40); LCD.print("CO2:"); } uint16_t 요청(char* s) { 버퍼[0] ='\0'; 정수 idx =0; //CO2 명령 요청 'Z' 보내기 Command(s); 지연(250); while(Serial1.available()) { 버퍼[idx++] =Serial1.read(); } 버퍼[idx] ='\0'; uint16_t rv =0; rv =atoi(&버퍼[2]); 리턴 rv; } 무효 명령(char* s) { Serial1.print(s); Serial1.print("\r\n"); } uint16_t calibrationFreshAir() { 반환 요청("G"); } 무효 setOperatingMode(uint8_t 모드) { sprintf(버퍼, "K %u", 모드); 명령(버퍼); } 코드>
그게 다야!
이것은 매우 민감하므로 환기가 잘 되는 방에서도 CO2 농도를 기반으로 방 점유율 수준을 거의 추적할 수 있습니다. 당신을 실망시키는 것은 'diff eq'가 아니라 환기가 잘 안 되기 때문이라는 것을 교수님에게 증명할 시간입니다! 수업을 해변으로 이동할 시간입니다!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
제조공정
지문 센서 지문 센서 회로는 엔지니어나 설계자가 보안 애플리케이션을 만들기 위한 완벽한 프로젝트 아이디어입니다. 지문은 각 개인에게 고유하기 때문에 센서는 구축하려는 보안 시스템에 대한 추가 보안 계층을 추가합니다. 의심할 여지 없이 건물 지문 센서는 특히 초보자 엔지니어인 경우 복잡하게 들립니다. 그러나 그것은 로켓 과학이 아닙니다. 이 문서에서는 지문 센서의 작동 방식, 응용 프로그램 및 장치에 지문 센서를 설치하는 방법을 보여줍니다. 지문 센서란 무엇입니까? 보안에 대한 수요가 높을 때 사람들은 생체 인식에
최근 IEC가 도입한 최신 안전 표준 중 하나는 로봇과 인간이 더 가깝게 상호 작용할 수 있는 기능입니다. 이로 인해 로봇이 외부 부하를 정확하게 측정하는 능력이 그 어느 때보다 중요해졌습니다. 운반되는 외부 하중을 정확하게 측정할 수 있으므로 로봇은 이러한 하중에 필요한 힘을 보다 정확하게 감지할 수 있습니다. 인간 작업자와 함께 작업하도록 만들어진 로봇을 포함한 로봇에는 로봇이 운반하는 외부 하중을 이동하는 데 필요한 압력과 힘을 측정하는 데 도움이 되는 토크 및 힘 센서가 장착되어 있습니다. 이것은 로봇의 움직임을 보다 예측