亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
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 Dreamer

应用和在线服务

Arduino IDE

关于这个项目

电子点

是一个基于 Arduino 的精密时钟和气象站,内置红外遥控接收器和自动亮度调节。

该设备的设计可以通过附加硬件(如 WIFI 模块或其他)轻松扩展。

由于其六个 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 项目页面

代码

  • eDOT:多功能精密气象站和时钟
eDOT:多功能精密气象站和时钟Arduino
// eDOT:多功能精密气象站和时钟//HISTORY// 11/12/2105 添加测量校准系数// 09/06/2016 添加自动显示亮度// 09/06/2016 添加任务调度器// 07/08/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 (cf http://arduino.cc/en/Reference/SPI)int numberOfHorizo​​ntalDisplays =7;int numberOfVerticalDisplays =1;Max72xxPanel matrix =Max72xxPanel(pinCS, numberOfHorizo​​ntalDisplays, numberOfVerticalDisplays);#define TEMPERATURE 0#define HUMIDITY 1#define PRESSURE 2#define TIME 3#define DAY 4#define DATE 5float temp;float tempavg;char tempf[8];float hum;float humavg;char humf[8];浮动按;浮动pressavg;字符按f[8];int屏幕=0; // 初始屏幕长度 previousLEDMillis =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_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); // 调整显示方向 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);矩阵写();矩阵.setCursor(12,0); matrix.print("eDOT"); for(screenBrt =0; screenBrt <=15; screenBrt++){延迟(25); matrix.setIntensity(screenBrt); // 使用 0 到 15 之间的值作为亮度 matrix.write(); }延迟(250); for(screenBrt =15; screenBrt>=0; screenBrt--){delay(50); matrix.setIntensity(screenBrt); // 使用 0 到 15 之间的值作为亮度 matrix.write(); }延迟(500);矩阵.fillScreen(0); matrix.write();delay(1000);}void loop() { Task1.check(acq1,500); Task2.check(acq2,20);} void acq1(){// 数据采集和平均温度 =bme.readTemperature(); avetemp.push(temp); tempavg =avetemp.mean();哼 =bme.readHumidity(); avehum.push(嗡嗡声); humavg =avehum.mean();按 =bme.readPressure(); avepress.push(press); pressavg =avepress.mean();现在日期时间 =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(lightsens); 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; press_lin =pressavg * press_s + press_o; unsigned long currentLEDMillis =millis(); //Serial.println(screenBrt); if(currentLEDMillis - previousLEDMillis> LEDInterval) // 保存上次更改显示的时间 { previousLEDMillis =currentLEDMillis;屏幕++;如果(屏幕> screenMax)屏幕=0; // 循环完成后重置为初始屏幕 screenChanged =true; }// if (screenChanged) // 在屏幕变化时更新测量// {// screenChanged =false; // 重置下一次迭代switch(screen){case TEMPERATURE:dtostrf(temp_lin,4, 2, tempf); // 格式化为五位两位小数 matrix.setCursor(6,0);矩阵.setTextSize(1);矩阵.setTextColor(255);矩阵打印(tempf); // 打印当前温度 matrix.drawRect(37,0,2,2,255); // 绘制等级符号 matrix.setCursor(40,0);矩阵打印(“C”);矩阵写(); // 将当前数据写入显示 matrix.fillScreen(0); // 清除 displaybreak;case HUMIDITY:dtostrf(hum_lin,4, 2, humf); // 格式化为五位两位小数 matrix.setCursor(6,0);矩阵.setTextSize(1);矩阵.setTextColor(255);矩阵打印(嗡嗡声); // 打印当前温度 matrix.setCursor(37,0);矩阵.print("%");矩阵写(); // 将当前数据写入显示 matrix.fillScreen(0); // 清除 displaybreak;case PRESSURE:dtostrf(press_lin,6, 0, pressf); // 格式化为五位两位小数 matrix.setCursor(0,0);矩阵.setTextSize(1);矩阵.setTextColor(255);矩阵打印(pressf); // 打印当前温度 matrix.setCursor(37,0); matrix.print("Pa");矩阵写(); // 将当前数据写入显示 matrix.fillScreen(0); // 清除显示中断;case TIME:// dtostrf(press_lin,6, 0, pressf); // 格式化为五位两位小数 matrix.setCursor(0,0);矩阵.setTextSize(1);矩阵.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); // 清除显示中断;case DATE:// dtostrf(press_lin,6, 0, pressf); // 格式化为五位两位小数 matrix.setCursor(0,0);矩阵.setTextSize(1);矩阵.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); // 清除 displaybreak;case DAY:// dtostrf(press_lin,6, 0, pressf); // 格式化为五位两位小数 matrix.setCursor(15,0);矩阵.setTextSize(1);矩阵.setTextColor(255); matrix.print(daysOfTheWeek[dow]);矩阵写(); // 将当前数据写入显示 matrix.fillScreen(0); // 清除显示中断; } }

制造工艺

  1. 基于树莓派的气象站
  2. Raspberry Pi 2 气象站
  3. Weather Station V 2.0
  4. Arduino pov 视觉时钟
  5. 主时钟
  6. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  7. $10 便携式 Arduino 气象站 (AWS)
  8. 基于 Arduino 和 OLED 的元胞自动机
  9. ThingSpeak Arduino 气象站
  10. 基于Arduino和谷歌电子表格的考勤系统
  11. 基于 Arduino、Windows 和 Azure 的跌倒检测系统
  12. 基于 GPS 的廉价而准确的时钟