제조공정
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
![]() |
| |||
![]() |
|
이 프로젝트의 비하인드 스토리
어떻게 우리가 호두 도브테일 케이스를 만들고 쉽게 찾을 수 있는 Arduino 구성 요소를 사용하여 목공소를 위한 세련되고 유용한 습도 및 온도 모니터를 제작했는지 알아보십시오. 이 DIY 프로젝트는 Arduino Uno와 Adafruit의 일부 우수한 부품을 사용하여 호두 도브테일 및 초보자 전자 제품으로 약간의 목공 작업을 보여줍니다.
우리는 특정 목공 프로젝트에 재앙이 될 수 있는 봄에 습도와 온도가 크게 변동하는 센트럴 텍사스에 살고 있습니다. 이 멋진 프로젝트는 습도가 변하거나 높아지기 시작할 때 알림을 제공하여 목재 프로젝트를 집으로 옮기거나 습도가 높은 날씨에 밀링 작업을 하지 않는 것과 같은 예방 조치를 취할 수 있도록 도와줍니다. 또한 멋지고 우리의 달콤한 로고가 있습니다!
우리는 Arduino와 전자공학을 처음 접하기 때문에 이것을 만들 때 배웠습니다. 훌륭한 일을 하는 것이 얼마나 쉬운지 알게 되었기 때문에 더 많은 프로젝트를 만들게 되어 매우 기쁩니다.
자세한 빌드 비디오를 시청하세요!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
#include#include #include #include #include #include #include // 온라인에서 찾을 수 있는 DHTXX 라이브러리가 많이 있습니다. 그들은 모두 다양한 수준의 기능을 가지고 있습니다.// 핀 정의#define TFT_CS 10#define TFT_RST 9#define TFT_DC 8#define DHT_PIN 2#define PIXEL_PIN 6#define PIXEL_NUM 24#define SD_PIN 4#define BMP_BUF 20 // 글로벌 변수 int 9999; //(숫자는 차트에 해당합니다. 아래 참조)CRGB leds[PIXEL_NUM];Adafruit_ST7735 tft =Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);DHT22 dht(DHT_PIN);int loopDelay =2000; //ms// SETUPvoid setup() { Serial.begin(9600); Serial.println("시작 중입니다."); // DHT 시작 dht.begin(); // LCD 화면 초기화 tft.initR(INITR_144GREENTAB); // SD 카드 초기화 Serial.print("SD 카드 초기화 중입니다."); if (!SD.begin(SD_PIN)) { Serial.println("실패!"); 반품; } // 화면 배경을 검은색으로 설정 tft.fillScreen(ST7735_BLACK); // LED 초기화 FastLED.addLeds (leds, PIXEL_NUM); // 루프를 시작하기 전에 모든 것을 따라잡도록 합니다. delay(500);}// LOOPvoid loop() { // 센서 데이터 가져오기 dht.readTemperature(); dht.read습도(); int f =dht.temperature_F; // 화씨 도 int h =dht.humidity; // 백분율 // 각도 아이콘 그리기 tft.fillCircle(102, 42, 6, ST7735_WHITE); tft.fillCircle(102, 42, 4, ST7735_BLACK); // LCD 화면에 온도 그리기 drawTemperature(f); // 습도 setHumidityColors(h); //시리얼 모니터에 데이터 출력 Serial.print("Temperature:"); Serial.println(f); Serial.print("습도:"); Serial.print(h); Serial.println("%"); // 지연 지연(1000); }// 비트맵 그리기 - LCD Screenvoid bmpDraw(char *filename, uint8_t x, uint8_t y) { File bmpFile; int bmp폭, bmp높이; // W+H(픽셀) uint8_t bmpDepth; // 비트 깊이(현재 24여야 함) uint32_t bmpImageoffset; // 파일의 이미지 데이터 시작 uint32_t rowSize; // 항상 그런 것은 아님 =bmpWidth; 패딩이 있을 수 있음 uint8_t sdbuffer[3*BMP_BUF]; // 픽셀 버퍼(픽셀당 R+G+B) uint8_t buffidx =sizeof(sdbuffer); // sdbuffer의 현재 위치 부울 goodBmp =false; // 유효한 헤더 구문 분석에서 true로 설정 부울 flip =true; // BMP는 아래에서 위로 저장됩니다. int w, h, row, col; uint8_t r, g, b; uint32_t 위치 =0, 시작 시간 =밀리(); if((x>=tft.width()) || (y>=tft.height())) return;// Serial.println();// Serial.print("비트맵 이미지 로드:'"); // Serial.print(파일명);// Serial.println('\''); // SD 카드에서 요청한 파일 열기 if ((bmpFile =SD.open(filename)) ==NULL) { Serial.print("비트맵 파일을 찾을 수 없습니다!"); 반품; } // BMP 헤더 구문 분석 if(read16(bmpFile) ==0x4D42) { read32(bmpFile); (무효)read32(bmp파일); bmpImageoffset =read32(bmp파일); //Serial.println()); read32(bmp파일); bmp폭 =read32(bmp파일); bmp높이 =read32(bmp파일); if(read16(bmpFile) ==1) { bmpDepth =read16(bmpFile); //Serial.print("비트 깊이:"); if((bmpDepth ==24) &&(read32(bmpFile) ==0)) { goodBmp =true; // BMP 행은 (필요한 경우) 4바이트 경계로 채워집니다. rowSize =(bmpWidth * 3 + 3) &~3; // bmpHeight가 음수이면 이미지는 하향식 순서입니다. // 이것은 표준이 아니지만 야생에서 관찰되었습니다. if(bmpHeight <0) { bmpHeight =-bmpHeight; 뒤집기 =거짓; } // 로드할 자르기 영역 w =bmpWidth; h =bmp 높이; if((x+w-1)>=tft.width()) w =tft.width() - x; if((y+h-1)>=tft.height()) h =tft.height() - y; // TFT 주소 창을 잘린 이미지 경계로 설정 tft.setAddrWindow(x, y, x+w-1, y+h-1); for (row=0; row =sizeof(sdbuffer)) { bmpFile.read(sdbuffer, sizeof(sdbuffer)); 버피드x =0; } // 픽셀을 BMP에서 TFT 형식으로 변환하고 푸시하여 표시 b =sdbuffer[buffidx++]; g =sdbuffer[버피드x++]; r =sdbuffer[버피드x++]; tft.pushColor(tft.Color565(r,g,b)); } } } } } bmpFile.close(); if(!goodBmp) Serial.println("BMP 형식이 인식되지 않습니다.");}// Bitmap/LCD Screenuint16_t read16(File f) { uint16_t result; ((uint8_t *)&결과)[0] =f.read(); // LSB((uint8_t *)&결과)[1] =f.read(); // MSB return result;}// Bitmap/LCD용 Screenuint32_t read32(File f) { uint32_t result; ((uint8_t *)&결과)[0] =f.read(); // LSB((uint8_t *)&결과)[1] =f.read(); ((uint8_t *)&결과)[2] =f.read(); ((uint8_t *)&결과)[3] =f.read(); // MSB return result;}// LCD Screenvoid drawTemperature(int temp) { // 온도의 자릿수 가져오기 intdigits =numDigits(temp); // 비트맵을 그리기 위한 커서 위치 정의 int x1_2 =62; 정수 x2_2 =32; 정수 x1_3 =1; 정수 x2_3 =1; 정수 x3_3 =1; 정수 y =38; 문자 숫자1[12]; 문자 숫자2[12]; 문자 숫자3[12]; 문자 숫자Str1[24]; 문자 숫자Str2[24]; 문자 숫자Str3[24]; // 첫 번째 숫자 가져오기 itoa(temp % 10, digit1,10); //Serial.println(임시 % 10); strcpy(digitStr1, ""); strcat(숫자Str1, 숫자1); strcat(digitStr1, ".bmp"); // 두 번째 숫자 얻기 if(digits ==2){ itoa((temp / 10) % 10, digit2,10); strcpy(digitStr2, ""); strcat(digitStr2, 숫자2); strcat(digitStr2, ".bmp"); } // 세 번째 숫자 얻기 if(digits ==3){ itoa((temp / 100) % 10, digit3,10); strcpy(digitStr3, ""); strcat(digitStr3, digit3); strcat(digitStr3, ".bmp"); } if(숫자> 2){ bmpDraw(digitStr1,x1_3,y); bmpDraw(digitStr2,x2_3,y); bmpDraw(digitStr3,x3_3,y); } else { bmpDraw(digitStr1,x1_2,y); bmpDraw(digitStr2,x2_2,y); }}// 스크린에서의 배치를 결정하기 위해 온도의 자릿수를 가져옵니다. int numDigits(int number){ int valLen =0; if(숫자> 99) valLen =3; 그렇지 않으면 valLen =2; return valLen;}// LED 색상 설정 무효 setColors(int r, int g, int b){ for(int i =0; i 섹션> 맞춤형 부품 및 인클로저
회로도
Fritzing은 실제 구성 요소가 거의 없었기 때문에 사물의 흐름을 표현하기 위해 최선을 다했습니다.![]()
제조공정
구성품 및 소모품 Arduino UNO × 1 DHT11 온도 및 습도 센서(3핀) × 1 점퍼 와이어(일반) × 3 브레드보드(일반) × 1 Arduino USB 2.0 케이블 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 이 프로젝트에서는 KY-015 Arduino DHT11 온도/습도 센서를 사용하여 Arduino IDE 직렬 모니터에 표시합니다. 이 프로젝트는
이 Arduino 튜토리얼에서는 Arduino 보드로 온도와 습도를 측정하기 위해 DHT11 또는 DHT22 센서를 사용하는 방법을 배웁니다. 자세한 내용은 다음 동영상을 보거나 아래에 작성된 튜토리얼을 참조하세요. 개요 이 센서는 매우 저렴하지만 여전히 우수한 성능을 제공하기 때문에 전자 애호가들에게 매우 인기가 있습니다. 다음은 이 두 센서의 주요 사양과 차이점입니다. DHT22는 분명히 더 나은 사양을 가진 더 비싼 버전입니다. 온도 측정 범위는 섭씨 -40 ~ +125도(섭씨 +-0.5도)이고 DHT11 온도 범위는 섭