Arduino nano styra en dental vakuum motor genom att kontrollera flytande avfall nivå
////////////// DESCRIPTION ///////////////////////////////////////////////////////////
Detta är ett program för styra en dental vakuum motor.
Motorn behöver en 24 volts signal (via ett relä ansluten till arduino's digital utgång) att slå.
När avstängd på den fyller en bootle med flytande form patientens mun.
Flaskan har två nivå växlar (sensorer) för låg och hög nivå av vätska.
Motoriska tillstånd måste vara ON tills vätskan når hög. Sedan motoriska tillstånd måste vara OFF så vätskan går för att dränera (det händer bara när motorn är avstängd) och sedan aktiverat igen.
Allt detta fungerar när dental vakuum tips är på läkare händer.
Stativet för dental vakuum tips har en switch så när den placeras i monter växeln är öppen och när i tandläkarens hand är nära.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
kod av ALEXANDROS PAGONIDIS http://www.BiomedicalTechnology.gr ***
*/
#include < Time.h > //arduino kan läsa dags för 50 dagar från initiering och sedan återställer tid igen
osignerad länge;
osignerade långa time2;
numrerar av pins *** / / /
int lowLevelPin = 2; Digital pin (2) ansluten till låga brytare av bootle. Stift 1 i växel går till digital stift arduino och stift 2 av switch går till marken.
int highLevelPin = 3; Digital pin (3) ansluten till hög brytare av bootle. Stift 1 i växel går till digital stift arduino och stift 2 av switch går till marken.
int valveTipsPin = 4; Digital pin (4) ansluten till i montern switch där vakuum tips är placerade. Stift 1 i växel går till digital stift arduino och stift 2 av switch går till marken.
int motorPin = 12; Digital pin 5V DC relä modul häxa styr motor 24V AC singal (orsak min kinesiska modul är dum LOGIG är INVERTERAD så när POWER OFF nej till TURN ON THE MOTOR)
int ledPin = 13. inre ledde av arduino ombord
/*
DENNA ANSLUTNINGAR ÄR FÖR SPECIFIKA BÄGGE STOL MED CATANNI ELEKTRONIK
STIFT OCH NÅGRA AV KABLAR FÄRGER:
1,19,12,13,14: INTE ANSLUTEN
2, 3: 24VAC INPUT FRÅN BOX
9,11: 24VAC OUTPUR TILL MOTOR (STIFT 3,9 ÄR STIFTEN PÅ ETT NORMALT ÖPPET RELÄ)
4, 5: TIPS VÄXLA (VAR I STIFT 4 GUL-BRUN KABLAR 5 VIT-GRÅ KABLAR
6: FLASKA HÖG NIVÅGIVARE (KABEL RÖD)
7: FLASKA LÅG NIVÅGIVARE (KABEL VIT)
8: FLASKA COMMON, MITTEN (KABEL SVART)
*/
värden i swithes stat (hög = öppna eller låg = Stäng)
int valveTipsVal;
int lowLevelVal;
int highLevelVal;
fördröjningstiderna i uppdateringsförsök *** / / /
int timeOfReadings = 200.
int problemInLowLevelSwitch = 8000;
int timeOfMotorMinON = 4000;
int timeOfMotorMaxON = 8000;
int timeOfTipOnStand = 2500;
int timeOfTipRest = 999;
val att staterna om motorn är ON eller OFF *** / / /
int motorState; får värdena 0 eller 1
//////////////////////////////////////
void setup()
{
Konfigurera pins som indata och aktiverar de inre pull-up resistorn
pinMode(lowLevelPin,INPUT_PULLUP);
pinMode(highLevelPin,INPUT_PULLUP);
pinMode(valveTipsPin,INPUT_PULLUP);
Konfigurera pins som utgångar
pinMode (motorPin, produktionen);
pinMode (ledPin, produktionen); internt på chip led-indikator
motorOFF(); När arudino TIPS_CHECKs upp motor bör vara avstängda
} / / slutet av installationen
////////////////////////////////
void loop()
{
/*
digitalRead med INPUT_PULLUP setup lyder:
HÖG när en växel eller knappen är som en öppen anslutning till marken.
LÅG när en växel eller knappen är som en sluten anslutning till marken.
*/
valveTipsVal=digitalRead(valveTipsPin);delay(1); Läs
lowLevelVal = digitalRead (lowLevelPin);delay(1); alla
highLevelVal=digitalRead(highLevelPin);delay(1); swithes
////////////////////////////////////////
TIPS_CHECK:
medan (valveTipsVal == låg) //TIPS_CHECK medan *** när vakuum tips är tandläkarens hand, stand's växeln är stängd. *****
{
valveTipsVal=digitalRead(valveTipsPin);delay(1);
om (valveTipsVal == hög)
{goto TIPS_CHECK;} kolla på alla nivåer av koden om ventilen tips på stativ och om ja gå till TIPS_CHECK
fördröjning (timeOfReadings); tid av avläsningar... vänta för sensorer för att stabilisera och lugna ner proccessor från många avläsningar
LEVEL_CHECK_RUN:
{
lowLevelVal = digitalRead (lowLevelPin);delay(1); Läs
highLevelVal=digitalRead(highLevelPin);delay(1); nivå swithes
om (lowLevelVal == hög & & highLevelVal == hög) / / om brytare för hög öppen, låg nivå växla öppen
{lowLevelVal = digitalRead (lowLevelPin);delay(1);
highLevelVal=digitalRead(highLevelPin);delay(1);
motorON();
}
om (highLevelVal == hög & & lowLevelVal == låg) / / om brytare för hög öppen, låg nivå växla nära
{lowLevelVal = digitalRead (lowLevelPin);delay(1);
highLevelVal=digitalRead(highLevelPin);delay(1);
motorON();
}
medan (highLevelVal == låg) / / LEVEL_CHECK_RUN medan //while brytare för hög är nära
{
highLevelVal=digitalRead(highLevelPin);delay(1);
valveTipsVal=digitalRead(valveTipsPin);delay(1);
om (valveTipsVal == hög)
{goto TIPS_CHECK;} kolla på alla nivåer av koden om ventilen tips på stativ och om ja gå till TIPS_CHECK
motorOFF();
om (highLevelVal == hög) //if! 03!!! behöver en om det innan medan så få tid och runonce utanför while loop
{
int runonce = 0; att köra en gång vissa procedurer inne nästa samtidigt!!! 03!!!
tid = millis();
medan (highLevelVal == hög) //while! 03!!!
{lowLevelVal = digitalRead (lowLevelPin);delay(1); //read
highLevelVal=digitalRead(highLevelPin);delay(1); nivå swithes
valveTipsVal=digitalRead(valveTipsPin);delay(1);
om (valveTipsVal == hög)
{goto TIPS_CHECK;} kolla på alla nivåer av koden om ventilen tips på stativ och om ja gå till TIPS_CHECK
Time2 = millis();
om (time2 > (tid + problemInLowLevelSwitch) & & lowLevelVal! = hög & & (runonce == 0)) låg brytare för //if har ett problem och inte gå ut
{runonce ++; //with en runonce parameter att sluta räkna
Delay(timeOfMotorMinON); motoriska vistelse vände av för försening och sedan aktiverats igen
motorON();
gå till LEVEL_CHECK_RUN; behöver använda detta om du inte använder programsatsen runonce
}
om (lowLevelVal == hög & & (runonce == 0)) //if låg nivå växeln är stängd
{runonce ++;
Delay(timeOfMotorMaxON); motory vistelse vände foa försening och sedan aktiverats igen
så gå vätskor rinna.
motorON();
gå till LEVEL_CHECK_RUN; Använd inte men om du använder det fungerar okej.
}
} //end av samtidigt!!! 03!!!
} //end av om!!! 03!!!
} //end LEVEL_CHECK_RUN medan
} //end av LEVEL_CHECK_RUN
} / / end av TIPS_CHECK medan *** under den här raden tillhör koden så att tips på stand ***
//******************************** *******
motorOFF();
Switch(motorState) / / när vakuum tips i stå, stås växel är öppen så motor måste iväg.
men om motorn var aktiverad sedan när tandläkaren sätter spets på stativ
Det måste finnas en försening så avfall-vätskan inuti vakuum slangar går till boottle och än avlopp.
{
fall 1: delay(timeOfTipOnStand);
motorOFF();
bryta;
fall 0: delay(1);
motorOFF();
bryta;
standard: bryta;
}
Delay(timeOfTipRest); precausion om tips inte passar eller spets kommit ut på en gång.
} //End of loop//////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void motorON() //turn motor på och motorstate 1
{//this är för switch(motorstate)
digitalWrite (motorPin, låg); Ja låg (inverterad logik), orsaka av dumma kinesiska modul
Delay(1);
motorState = 1;
digitalWrite (ledPin, hög);
fördröjning (1).
}
void motorOFF() //turn motor off och motorstate 0
{//this är för switch(motorstate)
digitalWrite (motorPin, hög); Ja hög (inverterad logik), orsaka av dumma kinesiska modul
Delay(1);
motorState = 0;
digitalWrite(ledPin,LOW);
fördröjning (1).
}
//////////////////////////////////////////////////////
void blink() //put i koden för testning där du är när du använder swithes
{
digitalWrite (ledPin, hög); anger LED på
Delay(200); väntar på en sekund
digitalWrite (ledPin, låg); framhäver LED
Delay(200); väntar på en sekund
digitalWrite (ledPin, hög); anger LED på
Delay(200); väntar på en sekund
}///////////////////////////////////////