본문 바로가기

3D Printer/OctoPrint

Chamber Manager Board 제작 #9 (Chamber Manager 뼈대 제작)

【 3D 프린터 챔버 만들기 】



[ Control Board 제작 #9 : Chamber Manager 뼈대 제작 ]




□ 필요 모듈


 : ServoTimer2

 : DHT

 : Door Control

 : Fan Control

 : Temperature Control



[ ChamberManager.ino ]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <ServoTimer2.h>
#include <DHT.h>
#include "Door.h"
#include "FANControl.h"
#include "DeviceCMD.h"
#include "TempControl.h"
 
#define D0                  0
#define D1                  1
#define D2                  2
#define D3                  3
#define D4                  4
#define D5                  5
#define D6                  6
#define D7                  7
#define D8                  8
#define D9                  9
#define D10                 10
#define D11                 11
#define D12                 12
#define D13                 13
 
#define TEMP_SENSOR_DHT22   D4
#define DHTTYPE             DHT22
 
#define SERVO_FILTER        D6
#define SERVO_VENTIL        D5
#define FAN1_RPM_READ       D7
#define FAN2_RPM_READ       D8
// Pins 9 and 10 controlled by timer 1
#define FAN1_RPM_WRITE      D9
#define FAN2_RPM_WRITE      D10
 
unsigned long g_ulMils = 0;
 
DeviceCMD CMDParser;
 
Door g_DoorFilter;
Door g_DoorVentil;
 
FANControl g_FanVentil;
FANControl g_FanFilter;
 
DHT g_DHT(TEMP_SENSOR_DHT22, DHTTYPE);
 
TempControl g_TempControl;
 
float g_fAmbentTemp = 0;
float g_fHumidity = 0;
float g_fAmbientTempTarget = 23.0;
float g_fAmbientTempDeviation = 1.0;
 
TEMP_CONTROL_MODE g_TempCtrlMode = ONOFF;
 
void setup() {
  // LCD setup
  Serial.begin(115200);
 
  // Ventilation degree : Close 10, Open 135 (0, 140)
  // Filter degree      : Close 47, Open 137
  g_DoorVentil.SetRange(SERVO_POS_MAX, SERVO_POS_MIN);
  g_DoorVentil.Attach(SERVO_VENTIL);
  g_DoorFilter.SetRange(SERVO_POS_MAX, SERVO_POS_MIN);
  g_DoorFilter.Attach(SERVO_FILTER);
  
  // Flap door open when power on
  g_DoorFilter.Open();
  g_DoorVentil.Open();
 
  // Fans Control
  FANControl::InitFanTimer();
  g_FanVentil.Attach(FAN1_RPM_WRITE, FAN1_RPM_READ);
  g_FanFilter.Attach(FAN2_RPM_WRITE, FAN2_RPM_READ);
 
  g_FanVentil.SetSpeed(100);
  g_FanFilter.SetSpeed(100);
 
  // Temperature control
  g_DHT.begin();
  delay(2000);
  g_fAmbentTemp = g_DHT.readTemperature();
  g_fHumidity = g_DHT.readHumidity();
 
  if(isnan(g_fAmbentTemp) || isnan(g_fHumidity))
  {
    Serial.println(F("ERROR Failed to read from DHT sensor!"));
    g_fAmbentTemp = 25;
    g_fHumidity = 50;
  }
 
  Serial.println(F("OK Device ready."));
 
  g_ulMils = millis();
}
 
bool Execute(CMD cmd)
{
 
    return false;
}
 
void loop()
{
  unsigned long m = millis();
 
  // Check Serial Command
  while(Serial.available()>0)
  {
    CMD_QUEUE_STATUS ret = CMDParser.QueueBuffer(Serial.read());
 
    if(ret == FALSE) Serial.println(F("ERROR Command buffering error."));
    if(ret == DECODED)
      if(!Execute(CMDParser.GetCMD())) Serial.println(F("ERROR Command excution error."));
  }
 
  // Refresh status
  Door::Refresh();
  FANControl::Refresh();
 
  if((m-g_ulMils)>500)
  {
    g_ulMils = m;
 
    int angle = g_TempControl.CheckTemp(g_DHT.readTemperature());
    if(angle>=0)
    {
      g_DoorVentil.SetAngle(angle);
      g_DoorFilter.SetAngle(angle);
    }
 
  }
 
}
cs