【 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 |