Arduino kontrollerade Beehive Fumigator / Air Freshener (8 / 9 steg)
Steg 8: Arduino kod
#include "MAX31855.h" #include "LiquidCrystal.h" #include "Adafruit_MAX31855.h" LiquidCrystal lcd (12, 11, 5, 4, 3, 2); CONST int turnonAudioboard = 13. CONST int audioTrigger0 = A0; CONST int audioTrigger1 = A1; CONST int audioTrigger2 = A2; CONST int audioTrigger3 = A3; CONST int audioTrigger4 = A4; CONST int fanRelay = 10; // CONST int heaterRelay = 9; kontroller värmare CONST int countthreshold = 100; återställer de max och min värdena varje 100 sekunder CONST int startfrequency = 300; ställa in start frekvens signaler CONST int numberofbeepsmax = 50; Ange maximumnumber signaler möjligt int fancountdown = 0; int i; int count = 5; int freq = 0; int pip = 0; int beepthreshold = -10; Värdet ovan som Piper börjar vara lät int int audioCount0 = 0; int audioCount1 = 0; int audioCount2 = 0; int audioCount3 = 0; int audioCount4 = 0; int alarmpotvalue = 500. int tempsetpoint = 160; int blowersetpoint = 20; int bloweron = 0; int zeropotvalue = 0; int thermocoupleSOPin = 8; int thermocoupleCSPin = 7. int thermocoupleCLKPin = 6; temperatur variabler: dubbel setpoint; dubbel värmen. dubbel produktion; dubbel korsning; MAX31855 termoelement (thermocoupleSOPin, thermocoupleCSPin, thermocoupleCLKPin); void setup() { pinMode (audioTrigger0, produktionen); digitalWrite(audioTrigger0,HIGH); Låg utlöser ljud ljudet i FX-styrelsen pinMode (audioTrigger1, produktionen); digitalWrite(audioTrigger1,HIGH); Låg utlöser ljud ljudet i FX-styrelsen pinMode (audioTrigger2, produktionen); digitalWrite(audioTrigger2,HIGH); Låg utlöser ljud ljudet i FX-styrelsen pinMode (audioTrigger3, produktionen); digitalWrite(audioTrigger3,HIGH); Låg utlöser ljud ljudet i FX-styrelsen pinMode (audioTrigger4, produktionen); digitalWrite(audioTrigger4,HIGH); Låg utlöser ljud ljudet i FX-styrelsen Delay(500); pinMode (turnonAudioboard, produktionen); digitalWrite (turnonAudioboard, hög); pinMode (fanRelay, produktionen); initiera fan stafett pinnen som en utgång pinMode (heaterRelay, produktionen); digitalWrite (fanRelay, låg); Inaktivera relä. digitalWrite (heaterRelay, låg); tonen (A5, 400, 100); spelar upp ett 400 hz ljud för 100ms LCD.BEGIN(20,4); Ange dimensionen lcd LCD.Clear(); LCD-skärmen klart lcd.setCursor(2,0); LCD.Print ("Varroa Blaster"); Delay(2000); tonen (A5, 400, 100); spelar upp ett 400 hz ljud för 100ms lcd.setCursor(2,1); LCD.Print ("Get Industries"); Delay(2000); noTone (A5); Läs aktuell temperatur värme = thermocouple.readThermocouple(CELSIUS); värme = värme-3; // Om termoelement problem uppstå om ((heat == FAULT_OPEN) || (värme == FAULT_SHORT_GND) || Delay(500); Delay(500); Om potten är för varmt: While(Heat > värme = thermocouple.readThermocouple(CELSIUS); värme = LCD.Clear(); |
lcd.setCursor(0,0); LCD.Print ("var god, vΣnta medan");
lcd.setCursor(0,1); LCD.Print ("de enheten kyler");
lcd.setCursor(0,2); LCD.Print ("till nedan 100");lcd.print((char)223);lcd.print("C");
lcd.setCursor (0,3), lcd.print ("Probe
Temp:");LCD.Print(Heat);LCD.Print((Char)223);LCD.Print("C.");
tonen (A5, 300,
100). spelar ett 300 hz ljud för 100ms
Delay(3000);
}
om (värme < 90) //plays audio0 när temperaturen (värme) är les än 90 grader C.
{
digitalWrite(audioTrigger0,LOW); Låg
utlöser ljud ljudet i FX-styrelsen
Delay(500);
digitalWrite(audioTrigger0,HIGH);
}
annat {}
While(count>0) {
LCD.Clear();
lcd.setCursor(4,0); LCD.Print("Starting");
lcd.setCursor(2,1); LCD.Print("vapourisation");
lcd.setCursor(0,3); LCD.Print("count:"); lcd.setCursor(6,3);
LCD.Print(Count); lcd.setCursor(8,3);
LCD.Print("Temp:");LCD.Print(Heat);LCD.Print((Char)223);LCD.Print("C");
tonen (A5, 400,100);
antal = antal -1;
Delay(1000);
noTone (A5);
}
}
void loop()
{
Läs aktuell temperatur
värme = thermocouple.readThermocouple(CELSIUS);
värme = värme-3;
korsningen = thermocouple.readJunction(CELSIUS);
Om termoelement problem uppstå
om ((heat == FAULT_OPEN) || (värme == FAULT_SHORT_GND) ||
(Heat == FAULT_SHORT_VCC))
blowersetpoint = 20;
värme = 17; tillfällig linje för felsökning
LCD.Clear();
lcd.setCursor(0,0); LCD.Print ("Blow tid:"); lcd.setCursor(10,0);lcd.print(blowersetpoint,DEC);
lcd.setCursor(14,0);lcd.print("Secs.");
lcd.setCursor(0,1); LCD.Print ("Temp börvärde:"); lcd.setCursor(15,1);
LCD.Print(tempsetpoint,dec);LCD.setCursor(18,1);LCD.Print((Char)223);LCD.Print("C");
lcd.setCursor(0,2);lcd.print("Int.Temp:");lcd.print(junction);lcd.print((char)223);lcd.print("C");
lcd.setCursor (0,3), lcd.print ("Probe Temp:");lcd.print(heat);lcd.print((char)223);lcd.print("C");
om
((Heat>100) & &(heat<105) & &(audioCount1<1)) //plays audio1 när temperaturen (värme) blir till 100 grader C.
{
audioCount1 = 1;
digitalWrite(audioTrigger1,LOW); Låg
utlöser ljud ljudet i FX-styrelsen
Delay(500); VIKTIGT detta måste vara minst 500!
digitalWrite(audioTrigger1,HIGH);
}
annat {}
om
((Heat>130) & &(heat<135) & &(audioCount2<1)) //plays audio2 när temperaturen (värme) blir till 130 grader C.
{
audioCount2 = 1;
digitalWrite(audioTrigger2,LOW); Låg utlöser ljud ljudet i FX-styrelsen
Delay(500);
digitalWrite(audioTrigger2,HIGH);
}
annat {}
om
((Heat>150) & &(heat<155) & &(audioCount3<1)) //plays audio3 när temperaturen (värme) blir till 150 grader C.
{
audioCount3 = 1;
digitalWrite(audioTrigger3,LOW); Låg utlöser ljud ljudet i FX-styrelsen
Delay(500);
digitalWrite(audioTrigger3,HIGH);
}
annat {}
göra pipande ljud vid ökande frekvenser
Freq =
startfrequency;
Piper = 0;
beepBeepThreshold
= beepthreshold;
While(beeps < numberofbeepsmax) {
IF(Heat >beepBeepThreshold)
tonen (A5, freq, 9); spela en anteckning från stift 1 på freq för 9ms
Piper ++;
beepBeepThreshold
= beepBeepThreshold + 10.
Freq = freq +
200.
Delay(10);
}
noTone (A5);
om (värme
}
annat
{digitalWrite (heaterRelay, låg), bloweron = 1;
}
fancountdown = blowersetpoint;
Delay(1000);
Nu temperaturen har uppnåtts och fläkten måste vara påslagen.
Starta ljud först:
om (bloweron > 0) {
digitalWrite(audioTrigger4,LOW); Låg utlöser ljud ljudet i FX-styrelsen
Delay(500);
digitalWrite(audioTrigger4,HIGH);
Delay(14000);
}
annat {}
Slå på fläkten:
While(bloweron >0) {/ / bloweron har staus i '1' och så denna slinga aktiveras:
digitalWrite (fanRelay, hög);
om (värme
}
annat
{digitalWrite (heaterRelay, låg);
}
Läs aktuell temperatur
värme = thermocouple.readThermocouple(CELSIUS);
värme = värme-3;
korsningen = thermocouple.readJunction(CELSIUS);
Om termoelement problem uppstå
om ((heat == FAULT_OPEN) || (värme == FAULT_SHORT_GND) ||
(Heat == FAULT_SHORT_VCC))
tonen (A5, 1500, 100); spelar ett 1500 hz ljud för 100ms
Delay(500);
tonen (A5, 1500,100); spelar ett 1500 hz ljud för 100ms
Delay(500);
fancountdown = fancountdown -1;
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print("blowing:");
lcd.setCursor(10,0);lcd.print(fancountdown,DEC);
lcd.setCursor(14,0);lcd.print("Secs.");
lcd.setCursor(0,1);
LCD.Print ("Temp börvärde:"); lcd.setCursor(15,1);
LCD.Print(tempsetpoint,dec);LCD.setCursor(18,1);LCD.Print((Char)223);LCD.Print("C");
lcd.setCursor(0,2);lcd.print("Int.Temp:");lcd.print(junction);lcd.print((char)223);lcd.print("C");
lcd.setCursor (0,3), lcd.print ("Probe
Temp:");LCD.Print(Heat);LCD.Print((Char)223);LCD.Print("C");
noTone (A5);
om (fancountdown < 1) {
Detta skapar en "Färdig" loop
medan (fancountdown < 1) {
LCD.Clear();
Läs aktuell temperatur
värme = thermocouple.readThermocouple(CELSIUS);
värme = värme-3;
korsningen = thermocouple.readJunction(CELSIUS);
Om termoelement problem uppstå
om ((heat == FAULT_OPEN) || (värme == FAULT_SHORT_GND) ||
(Heat == FAULT_SHORT_VCC))
lcd.setCursor(0,0); LCD.Print("finished");
lcd.setCursor(10,0);lcd.print(fancountdown,DEC);
lcd.setCursor(13,0);lcd.print("Secs.");
lcd.setCursor(0,1); LCD.Print ("Temp set
punkt: "); lcd.setCursor(15,1);
LCD.Print(tempsetpoint,dec);LCD.setCursor(18,1);LCD.Print((Char)223);LCD.Print("C");
lcd.setCursor(0,2);lcd.print("Int.Temp:");lcd.print(junction);lcd.print((char)223);lcd.print("C");
lcd.setCursor (0,3), lcd.print ("Probe
Temp:");LCD.Print(Heat);LCD.Print((Char)223);LCD.Print("C");
digitalWrite (heaterRelay, låg);
digitalWrite (fanRelay, låg);
Delay(1000);
}
}
annat {}
}
}