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

eDOT - Arduino 기반 정밀 시계 및 기상 관측소

구성품 및 소모품

Microchip Technology ATMEGA 328P-PU
× 1
MAXIM MAX7219
× 6
BOSCH BME280 - GY-BMEP 브레이크아웃 보드
× 1
Adafruit Luckylight 8x8 도트 매트릭스 LED 디스플레이 - M1603095
× 6
DS3231
RTC 시계
× 1
Arduino Nano R3
× 1
Arduino UNO
× 1
eDOTcore
× 1

필요한 도구 및 기계

Flashforge 드리머

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

eDOT

IR 원격 수신기와 자동 밝기 조정 기능이 내장된 Arduino 기반 정밀 시계 및 기상 관측소입니다.

이 장치는 WIFI 모듈 등의 추가 하드웨어로 쉽게 확장할 수 있도록 설계되었습니다.

6개의 8x8 도트 매트릭스 LED 디스플레이 덕분에 내부 센서, 맞춤형 스크롤 메시지 또는 인터넷(RSS 등)의 무선에서 오는 다양한 유형의 정보를 표시하는 데 사용할 수 있습니다.

그것은 매우 낮은 전력 소비, 유리 전면과 본체의 3D 인쇄 부품을 결합한 단순하고 우아한 디자인을 가지고 있습니다.

프로젝트는 현재 개발 중이며 업데이트하겠습니다.

Thingiverse에서 3D 부품 다운로드

더 많은 프로젝트를 보려면 내 YouTube 채널도 참조하세요.

https://www.youtube.com/channel/UCbIomyFKzBiLHqEb2xv9GHQ

B.O.M.

<울>
  • N.1 x 3D 인쇄된 왼쪽 반신
  • <울>
  • N.1 x 3D 프린팅 오른쪽 반신
  • <울>
  • N.1 x 3D 인쇄 왼쪽 표지
  • <울>
  • N.1 x 3D 인쇄 오른쪽 표지
  • <울>
  • N.2 x 3D 인쇄 발
  • <울>
  • N.12 x 3D 인쇄 디스플레이 지원
  • <울>
  • N.1 x 광택 유리 240x75x5(mm)
  • <울>
  • N.1 x 주황색 필터
  • <울>
  • N.6 x Adafruit 8x8 도트 매트릭스 디스플레이 유형 Luckylight M1603095(흰색)
  • <울>
  • N.6 x MAX7219 컨트롤러 보드
  • <울>
  • N.1 x USB 브레이크아웃 보드
  • <울>
  • N.1 x BME280 브레이크아웃 보드
  • <울>
  • N.1 x DS3231 칩
  • <울>
  • N.1 x IR 수신기 유형 IRM-56384
  • <울>
  • N.1 x 포토레지스터 유형 LDR-07
  • <울>
  • N.1 x ATMEGA328PU(Arduino 맞춤형 보드)
  • <울>
  • N.6 x OMRON 12mm 촉각 버튼
  • eDOTcore PCB

    드디어 eDOT용 제어 보드의 첫 프로토타입이 생겼습니다.

    eDOTcore 프로젝트 페이지로 이동

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • eDOT:다목적 정밀 기상 관측소 및 시계
  • eDOT:다목적 정밀 기상 관측소 및 시계Arduino
    // eDOT:다목적 정밀 기상 관측소 및 시계//HISTORY// 11/12/2105 측정 보정 계수 추가// 09/06/2016 자동 디스플레이 밝기 추가// 09/06/2016 작업 스케줄러 추가// 2016년 7월 8일 추가된 eDOT 스플래시 화면#include #include #include #include #include #include  #include #include "RTClib.h#include Adafruit_BME280 bme; // I2CRTC_DS3231 rtc;int pinCS =10; // CS를 이 핀에 연결하고 DIN을 MOSI에 연결하고 CLK를 SCK에 연결합니다(cf http://arduino.cc/en/Reference/SPI )int numberOfHorizontalDisplays =7;int numberOfVerticalDisplays =1;Max72xxPanel matrix =Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);#define 온도 0#define 습도 1#define 압력 2#define 시간 3#define DAY 4#define DATE 5float temp;float tempavg;char tempf[8];float hum;float humavg;char humf[8] float 프레스;float pressavg;char pressf[8];int 화면 =0; // 초기 화면 길이 이전LEDMillis =0; // LED 디스플레이용 updatelong LEDInterval =5000; // 화면 간 지연 int ​​screenMax =5; // screenbool의 최대 수 screenChanged =true; // 화면 상태float lightsens;float screenBrt =0;float lightsensavg;Average avetemp(60); //온도 평균(80개 샘플)Average avehum(60); //습도 평균(샘플 80개)Average avepress(60); //압력에 대한 평균(80개 샘플)Average avelightsens(40); //압력 평균(80개 샘플)//교정 계수float temp_o =-1.70;float temp_s =1.0;float temp_lin;float hum_o =2.45;float hum_s =1.0;float hum_lin;float press_o =0.0;float press_ press_lin;//밝기 센서 보정float brt_o =-4;float brt_s =1.35;스케줄 작업1;스케줄 작업2;void setup() { Task1.start(); Task2.start(); Wire.begin(); // I2C 시작 bme.begin(0x76); matrix.setIntensity(스크린브릿); // 밝기에 0에서 15 사이의 값을 사용합니다. // 필요에 따라 조정합니다. // matrix.setPosition(0, 0, 0); // 첫 번째 디스플레이는 <0, 0>에 있습니다. // matrix.setPosition(1, 1, 0); // 두 번째 디스플레이는 <1, 0>에 있습니다. matrix.setRotation(0, 1); // 디스플레이 방향 조정 matrix.setRotation(1, 1); // 디스플레이 방향 조정 matrix.setRotation(2, 1); // 디스플레이 방향 조정 matrix.setRotation(3, 1); // 디스플레이 방향 조정 matrix.setRotation(4, 1); // 디스플레이 방향 조정 matrix.setRotation(5, 1); // 디스플레이 방향 조정 matrix.setRotation(6, 1); // 디스플레이 방향 조정 matrix.setRotation(7, 1); // 디스플레이 방향 조정/* matrix.setRotation(8, 1); // 디스플레이 방향 조정 matrix.setRotation(9, 1); // 디스플레이 방향 조정*/ rtc.begin();// matrix.setRotation(3, 2); // 마지막 디스플레이에 대한 동일한 유지 // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));// rtc.adjust(DateTime(2016, 02, 28, 16, 44, 0)); //Serial.begin(9600);//eDOT SPLASHSCREEN matrix.fillScreen(0); 행렬.쓰기(); matrix.setCursor(12,0); matrix.print("eDOT"); for(screenBrt =0; screenBrt <=15; screenBrt++){지연(25); matrix.setIntensity(스크린브릿); // 밝기에 대해 0에서 15 사이의 값을 사용합니다. matrix.write(); }지연(250); for(screenBrt =15; screenBrt>=0; screenBrt--){지연(50); matrix.setIntensity(스크린브릿); // 밝기에 대해 0에서 15 사이의 값을 사용합니다. matrix.write(); }지연(500); matrix.fillScreen(0); matrix.write();delay(1000);}void 루프() { Task1.check(acq1,500); Task2.check(acq2,20);} void acq1(){// 데이터 수집 및 평균 온도 =bme.readTemperature(); avetemp.push(온도); tempavg =avetemp.mean(); 윙윙거리는 소리 =bme.readHumidity(); avehum.push(흠흠); humavg =avehum.mean(); 프레스 =bme.readPressure(); avepress.push(누르기); pressavg =avepress.mean(); 지금 날짜 시간 =rtc.now(); outSec =now.second(); outMin =지금.분(); outHour =now.hour(); 외출 =now.day(); outmonth =now.month(); outyear =now.year() - 2000; 다우 =now.dayOfTheWeek(); } 무효 acq2(){ 조명 감지 =analogRead(A3); avelightsens.push(lightsens); lightsenavg =avelightsens.mean(); screenBrt =제약(((lightsensavg /1023 * 15 ) * brt_s + brt_o), 0, 15); matrix.setIntensity(스크린브릿); // 데이터 선형화 temp_lin =tempavg * temp_s + temp_o; hum_lin =humavg * hum_s + hum_o; press_lin =pressavg * press_s + press_o; 부호 없는 긴 전류LEDMillis =millis(); //Serial.println(screenBrt); if(currentLEDMillis - previousLEDMillis> LEDInterval) // 마지막으로 디스플레이를 변경한 시간을 저장합니다. { previousLEDMillis =currentLEDMillis; 화면++; if (화면> screenMax) 화면 =0; // 사이클이 완료되면 초기 화면으로 재설정 screenChanged =true; }// if (screenChanged) // 화면 변경 시 측정 업데이트// {// screenChanged =false; // 다음 반복을 위해 재설정switch(screen){case TEMPERATURE:dtostrf(temp_lin,4, 2, tempf); // 2개의 소수를 사용하여 5자리로 형식을 지정합니다. matrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(tempf); // 현재 온도를 출력한다. matrix.drawRect(37,0,2,2,255); // 등급 기호를 그립니다. matrix.setCursor(40,0); matrix.print("C"); 행렬.쓰기(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // clear displaybreak;case HUMIDITY:dtostrf(hum_lin,4, 2, humf); // 2개의 소수를 사용하여 5자리로 형식을 지정합니다. matrix.setCursor(6,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(흠흠); // 현재 온도를 출력한다. matrix.setCursor(37,0); matrix.print("%"); 행렬.쓰기(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // clear displaybreak;case PRESSURE:dtostrf(press_lin,6, 0, pressf); // 2개의 소수를 사용하여 5자리로 포맷합니다. matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(pressf); // 현재 온도를 출력한다. matrix.setCursor(37,0); matrix.print("파"); 행렬.쓰기(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // clear displaybreak;case TIME:// dtostrf(press_lin,6, 0, pressf); // 2개의 소수를 사용하여 5자리로 포맷합니다. matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); if (outHour <10){ matrix.print("0"); } matrix.print(outHour,0); // 현재 시간을 출력합니다. matrix.print(":"); if (outMin <10){ matrix.print("0"); } matrix.print(outMin,0); // 현재 분을 출력한다. matrix.print(":"); if (outSec <10){ matrix.print("0"); } matrix.print(outSec, 0); // 현재 초를 출력한다. matrix.write(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // clear displaybreak;case DATE:// dtostrf(press_lin,6, 0, pressf); // 2개의 소수를 사용하여 5자리로 포맷합니다. matrix.setCursor(0,0); matrix.setTextSize(1); matrix.setTextColor(255); if (outday <10){ matrix.print("0"); } matrix.print(outday,0); // 현재 시간을 출력한다. matrix.print("/"); if (outmonth <10){ matrix.print("0"); } matrix.print(outmonth,0); // 현재 분을 출력한다. matrix.print("/"); matrix.print(outyear,0); // 현재 초를 출력한다. matrix.write(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // clear displaybreak;case DAY:// dtostrf(press_lin,6, 0, pressf); // 2개의 소수를 사용하여 5자리로 형식을 지정합니다. matrix.setCursor(15,0); matrix.setTextSize(1); matrix.setTextColor(255); matrix.print(daysOfTheWeek[dow]); 행렬.쓰기(); // 디스플레이에 현재 데이터를 기록합니다. matrix.fillScreen(0); // 디스플레이 브레이크 지우기; } }

    제조공정

    1. Raspberry Pi 기반 기상 관측소
    2. Raspberry Pi 2 기상 관측소
    3. Weather Station V 2.0
    4. Arduino 관점 시계
    5. 마스터 시계
    6. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    7. $10 휴대용 Arduino 기상 관측소(AWS)
    8. Arduino 및 OLED 기반 Cellular Automata
    9. ThingSpeak Arduino 기상 관측소
    10. Arduino 및 Google 스프레드시트 기반 출석 시스템