Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

eDOT - точные часы и метеостанция на базе Arduino

Компоненты и расходные материалы

Microchip Technology ATMEGA 328P-PU
× 1
MAXIM MAX7219
× 6
BOSCH BME280 - коммутационная плата GY-BMEP
× 1
матричный светодиодный дисплей Adafruit Luckylight 8x8 с точечной матрицей - M1603095
× 6
DS3231
ЧАСЫ RTC
× 1
Arduino Nano R3
× 1
Arduino UNO
× 1
eDOTcore
× 1

Необходимые инструменты и машины

Flashforge Dreamer

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

eDOT

- это точные часы и метеостанция на базе Arduino со встроенным ИК-приемником и автоматической регулировкой яркости.

Устройство было разработано так, чтобы его можно было легко расширить с помощью дополнительного оборудования, такого как модуль WIFI или другое.

Благодаря шести точечным матричным светодиодным дисплеям 8x8 его можно использовать для отображения различного рода информации, поступающей от внутреннего датчика, настраиваемых прокручиваемых сообщений или по беспроводной сети из Интернета (RSS и т. Д.)

Он имеет очень низкое энергопотребление, простой и элегантный дизайн, сочетающий стеклянную переднюю панель и детали корпуса, напечатанные на 3D-принтере.

В настоящее время проект находится в разработке, и я буду обновлять его.

Загрузите 3D-детали на Thingiverse

И смотрите также мой канал на Youtube, чтобы увидеть больше проектов:

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

Б.О.М.

  • Левая половина тела - 1 x 3D.
  • Правая половина тела размером 1 x напечатана на 3D-принтере
  • Левая обложка, напечатанная на 3D-принтере, 1 шт.
  • Правая обложка, напечатанная на 3D-принтере, 1 шт.
  • 2 лапки, напечатанные на 3D-принтере
  • Поддержка дисплеев, распечатанных на 3D-принтере, 12 шт.
  • N.1 x полированное стекло 240x75x5 (мм)
  • N.1 x оранжевый фильтр
  • N 6 x Adafruit 8x8 матричный дисплей типа Luckylight M1603095 (белый)
  • Плата контроллера N.6 x MAX7219
  • 1 коммутационная плата USB.
  • Коммутационная плата №1 x BME280
  • Микросхема № 1 x DS3231
  • N.1 x ИК-приемник IRM-56384
  • №1 фоторезистор типа LDR-07
  • N.1 x ATMEGA328PU (специализированная плата Arduino)
  • Тактильная кнопка № 6 x OMRON, 12 мм.

Плата eDOTcore

Наконец-то у меня есть самые первые прототипы платы управления для eDOT.

ПЕРЕЙДИТЕ НА страницу проекта eDOTcore

Код

  • eDOT:универсальная точная метеостанция и часы
eDOT:универсальная точная метеостанция и часы Arduino
 // eDOT:Универсальная точная метеостанция и часы // ИСТОРИЯ // 12.11.2105 Добавлены коэффициенты калибровки измерений // 06.09.2016 Добавлена ​​автоматическая яркость дисплея // 06.09.2016 Добавлен планировщик задач // 08.07.2016 Добавлен экран-заставка 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 (см. Http://arduino.cc/en/Reference/SPI) int numberOfHorizontalDisplays =7; int numberOfVerticalDisplays =1; Max72xxPanel matrix =Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); # определить ТЕМПЕРАТУРУ 0 # определить ВЛАЖНОСТЬ 1 # определить ДАВЛЕНИЕ 2 # определить ВРЕМЯ 3 # определить ДЕНЬ 4 # определить ДАТУ 5 температура всплывающего сообщения; float tempavg; char tempf [8]; float hum; float humavg; char humf [8]; float press; float pressavg; char pressf [8]; int screen =0; // начальный экран в длину previousLEDMillis =0; // для обновления светодиодного дисплея long LEDInterval =5000; // задержка между экранами int screenMax =5; // максимальное количество экранных изображений screenChanged =true; // статус экрана float lightsens; float screenBrt =0; float lightsensavg; Среднее значение  avetemp (60); // Среднее значение для температуры (80 образцов) Среднее значение  avehum (60); // Среднее значение влажности (80 образцов) Среднее значение  avepress (60); // Среднее значение давления (80 образцов) Среднее значение  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_s =1.0; float press_lin; // Коррекция датчика яркости float brt_o =-4; float brt_s =1.35; Schedular Task1; Schedular Task2; void setup () {Task1.start (); Task2.start (); Wire.begin (); // Запускаем I2C bme.begin (0x76); matrix.setIntensity (screenBrt); // Используйте значение от 0 до 15 для яркости // Настройте в соответствии с вашими потребностями // matrix.setPosition (0, 0, 0); // Первый дисплей находится в <0, 0> // matrix.setPosition (1, 1, 0); // Второй дисплей находится в <1, 0> matrix.setRotation (0, 1); // Регулируем матрицу ориентации дисплея. SetRotation (1, 1); // Регулируем матрицу ориентации дисплея. SetRotation (2, 1); // Регулируем матрицу ориентации дисплея. SetRotation (3, 1); // Регулируем матрицу ориентации дисплея. SetRotation (4, 1); // Регулируем матрицу ориентации дисплея. SetRotation (5, 1); // Регулируем матрицу ориентации дисплея. SetRotation (6, 1); // Регулируем матрицу ориентации дисплея. SetRotation (7, 1); // Регулировка ориентации дисплея / * matrix.setRotation (8, 1); // Регулируем матрицу ориентации дисплея. 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.write (); matrix.setCursor (12,0); matrix.print («eDOT»); для (screenBrt =0; screenBrt <=15; screenBrt ++) {задержка (25); matrix.setIntensity (screenBrt); // Используйте значение от 0 до 15 для яркости matrix.write (); } задержка (250); для (screenBrt =15; screenBrt> =0; screenBrt -) {задержка (50); matrix.setIntensity (screenBrt); // Используйте значение от 0 до 15 для яркости matrix.write (); } задержка (500); matrix.fillScreen (0); matrix.write (); delay (1000);} void loop () {Task1.check (acq1,500); Task2.check (acq2,20);} void acq1 () {// СБОР И УСРЕДНЕНИЕ ДАННЫХ temp =bme.readTemperature (); avetemp.push (темп); tempavg =avetemp.mean (); hum =bme.readHumidity (); авехум.пуш (гул); humavg =avehum.mean (); нажмите =bme.readPressure (); avepress.push (пресс); pressavg =avepress.mean (); DateTime now =rtc.now (); outSec =now.second (); outMin =now.minute (); outHour =now.hour (); outday =now.day (); outmonth =now.month (); outyear =now.year () - 2000; dow =now.dayOfTheWeek (); } void acq2 () {lightsens =analogRead (A3); avelightsens.push (лайтсенс); lightsensavg =avelightsens.mean (); screenBrt =ограничение (((lightsensavg / 1023 * 15) * brt_s + brt_o), 0, 15); matrix.setIntensity (screenBrt); // ЛИНЕАРИЗАЦИЯ ДАННЫХ temp_lin =tempavg * temp_s + temp_o; hum_lin =humavg * hum_s + hum_o; пресс_лин =прессавг * пресс_с + пресс_о; беззнаковый длинный currentLEDMillis =millis (); //Serial.println(screenBrt); if (currentLEDMillis - previousLEDMillis> LEDInterval) // сохраняем последний раз, когда вы меняли отображение {previousLEDMillis =currentLEDMillis; экран ++; если (экран> screenMax) экран =0; // возврат к начальному экрану после завершения цикла screenChanged =true; } // if (screenChanged) // обновляем измерение при смене экрана // {// screenChanged =false; // сброс для следующей итерацииwitch (экран) {case TEMPERATURE:dtostrf (temp_lin, 4, 2, tempf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (6,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (темпф); // выводим текущую температуру matrix.drawRect (37,0,2,2,255); // рисуем символ оценки matrix.setCursor (40,0); matrix.print ("C"); matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; case HUMIDITY:dtostrf (hum_lin, 4, 2, humf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (6,0); matrix.setTextSize (1); matrix.setTextColor (255); матрица.принт (хамф); // выводим текущую температуру matrix.setCursor (37,0); matrix.print ("%"); matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; case PRESSURE:dtostrf (press_lin, 6, 0, pressf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (прессф); // выводим текущую температуру matrix.setCursor (37,0); matrix.print ("Па"); matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; case TIME:// dtostrf (press_lin, 6, 0, pressf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); если (outHour <10) {matrix.print ("0"); } matrix.print (outHour, 0); // выводим текущие часы matrix.print (":"); если (outMin <10) {matrix.print ("0"); } matrix.print (outMin, 0); // выводим текущие минуты matrix.print (":"); если (outSec <10) {matrix.print ("0"); } matrix.print (outSec, 0); // выводим текущие секунды matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; case DATE:// dtostrf (press_lin, 6, 0, pressf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (0,0); matrix.setTextSize (1); matrix.setTextColor (255); если (outday <10) {matrix.print ("0"); } matrix.print (outday, 0); // выводим текущие часы matrix.print ("/"); если (outmonth <10) {matrix.print ("0"); } matrix.print (outmonth, 0); // выводим текущие минуты matrix.print ("/"); matrix.print (outyear, 0); // выводим текущие секунды matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; case DAY:// dtostrf (press_lin, 6, 0, pressf); // форматирование до пяти цифр с двумя десятичными знаками matrix.setCursor (15,0); matrix.setTextSize (1); matrix.setTextColor (255); matrix.print (daysOfTheWeek [dow]); matrix.write (); // записываем текущие данные в отображение matrix.fillScreen (0); // очистить displaybreak; }} 

Производственный процесс

  1. Метеостанция на основе Raspberry Pi
  2. Метеостанция Raspberry Pi 2
  3. Метеостанция V 2.0
  4. Часы видения Arduino pov
  5. Основные часы
  6. Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
  7. Портативная метеостанция Arduino (AWS) за 10 долларов
  8. Клеточные автоматы на основе Arduino и OLED
  9. Метеостанция ThingSpeak Arduino
  10. Система посещаемости на основе Arduino и Google Spreadsheet