////////////// DESCRIPTION ///////////////////////////////////////////////////////////
Esta es una aplicación para controlar un motor de aspiración dental.
El motor necesita un 24 voltios señal (a través de un relé conectado a la salida digital del arduino) para encender.
Cuando su dado vuelta en él llena un bootle con boca de líquidos forma paciente.
La botella tiene dos interruptores de nivel (sensores) para bajo y alto nivel de líquido.
Estado motor debe ser ON hasta que el líquido llegue a alto nivel. Estado motor debe estar apagado para que el líquido va a drenar (que ocurre solamente cuando el motor está apagado) y luego se enciende otra vez.
Todo esto funciona cuando consejos de vacío dentales están en manos de los médicos.
El soporte para puntas de vacío dentales tiene un interruptor para que cuando se coloca en posición el interruptor está abierto y esté en manos del dentista cerca.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
código por ALEXANDROS PAGONIDIS http://www.BiomedicalTechnology.gr ***
*/
#include < Time.h > //arduino puede leer tiempo de 50 días de inicialización y luego restablece el tiempo otra vez
tiempo largo sin firmar;
tiempo2 largo sin firmar;
números de pines *** / / /
int lowLevelPin = 2; pin digital (2) conectado al interruptor de nivel bajo de bootle. Pin 1 del interruptor va al pin digital de arduino y pin 2 del interruptor va al suelo.
int highLevelPin = 3; pin digital (3) conectado al interruptor de nivel alto de bootle. Pin 1 del interruptor va al pin digital de arduino y pin 2 del interruptor va al suelo.
int valveTipsPin = 4; pin digital (4) conectado al interruptor del soporte donde se colocan puntas de vacío. Pin 1 del interruptor va al pin digital de arduino y pin 2 del interruptor va al suelo.
motorPin INT = 12; pin digital 5V DC Relés módulo la bruja controles 24V AC singal (causa mi chino módulo es estúpido LOGIG es invertida así cuando energía apagado NO para giro en el MOTOR) de motor
int ledPin = 13; interior led de la placa arduino
/*
ESTE LAS CONEXIONES SON PARA SILLA DE SIRONA ESPECÍFICOS CON ELECTRÓNICA CATANNI
PERNOS Y ALGUNOS DE LOS COLORES DE LOS CABLES:
1,19,12,13,14: NO CONECTADO
2, 3: 24 VCA ENTRADA DE CAJA
9,11: 24VAC OUTPUR AL MOTOR (PERNOS 3,9 SON PATILLAS DE UN RELÉ NORMALMENTE ABIERTO)
4, 5: CONSEJOS DE INTERRUPTOR (DONDE EN PIN 4 CABLES AMARILLO-MARRÓN 5 BLANCO-GRIS CABLES
6: SENSOR DE NIVEL DE BOTELLA ALTA (CABLE ROJO)
7: SENSOR DE NIVEL BAJO DE BOTELLA (CABLE BLANCO)
8: BOTELLA COMÚN, MEDIO (CABLE NEGRO)
*/
valores del estado de los swithes (alto = abierto o bajo = cerrar)
int valveTipsVal;
int lowLevelVal;
int highLevelVal;
tiempos de retardo en milisegundos *** / / /
int timeOfReadings = 200;
int problemInLowLevelSwitch = 8000;
int timeOfMotorMinON = 4000;
int timeOfMotorMaxON = 8000;
int timeOfTipOnStand = 2500;
int timeOfTipRest = 999;
Val que indica si el motor es encendido o apagado *** / / /
int motorState; Obtiene valores de 0 ó 1
//////////////////////////////////////
void setup()
{
configurar los pines como entrada y permitir que la resistencia interna de pull-up
pinMode(lowLevelPin,INPUT_PULLUP);
pinMode(highLevelPin,INPUT_PULLUP);
pinMode(valveTipsPin,INPUT_PULLUP);
configurar los pines como salidas
pinMode (motorPin, salida);
pinMode (ledPin, salida); interna en el chip led indicador
motorOFF(); Cuando arudino que tips_checks motor debe estar apagado
} / / fin de la instalación
////////////////////////////////
void loop()
{
/*
digitalRead con configuración INPUT_PULLUP dice:
ALTO cuando un interruptor o botón es como una conexión abierta en el suelo.
BAJA cuando un interruptor o botón es como una conexión cerrada al suelo.
*/
valveTipsVal=digitalRead(valveTipsPin);delay(1); leer
lowLevelVal = digitalRead (lowLevelPin);delay(1); todos
highLevelVal=digitalRead(highLevelPin);delay(1); swithes
////////////////////////////////////////
TIPS_CHECK:
mientras que (valveTipsVal == LOW) //TIPS_CHECK mientras *** al vacío consejos están en mano del dentista, del stand es cerrada. *****
{
valveTipsVal=digitalRead(valveTipsPin);delay(1);
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} comprobar en todos los niveles del código si consejos de válvula en el soporte y sí goto TIPS_CHECK
retardo (timeOfReadings); tiempo de lecturas... esperar para que sensores estabilizar y calmar proccessor de muchas lecturas
LEVEL_CHECK_RUN:
{
lowLevelVal = digitalRead (lowLevelPin);delay(1); leer
highLevelVal=digitalRead(highLevelPin);delay(1); swithes nivel
Si (lowLevelVal == alto & & highLevelVal == HIGH) / / si el interruptor de nivel alto abierto, bajo nivel interruptor abierto
{lowLevelVal = digitalRead (lowLevelPin);delay(1);
highLevelVal=digitalRead(highLevelPin);delay(1);
motorON();
}
Si (highLevelVal == HIGH & & lowLevelVal == LOW) / / si el interruptor de nivel alto abierto, bajo nivel interruptor de cierre
{lowLevelVal = digitalRead (lowLevelPin);delay(1);
highLevelVal=digitalRead(highLevelPin);delay(1);
motorON();
}
mientras que (highLevelVal == LOW) / / LEVEL_CHECK_RUN mientras //while interruptor de nivel alto es cercano
{
highLevelVal=digitalRead(highLevelPin);delay(1);
valveTipsVal=digitalRead(valveTipsPin);delay(1);
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} comprobar en todos los niveles del código si consejos de válvula en el soporte y sí goto TIPS_CHECK
motorOFF();
Si (highLevelVal == HIGH) //if!!!!!! 03!!!!!! Necesita un if antes del tiempo así que tiempo y runonce fuera el tiempo bucle
{
runonce int = 0; para ejecutar una vez algunos procedimientos dentro de los próximos mientras!!! 03!!!!!!
tiempo = millis();
mientras que (highLevelVal == HIGH) //while!!!!!! 03!!!!!!
{lowLevelVal = digitalRead (lowLevelPin);delay(1); leer
highLevelVal=digitalRead(highLevelPin);delay(1); swithes nivel
valveTipsVal=digitalRead(valveTipsPin);delay(1);
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} comprobar en todos los niveles del código si consejos de válvula en el soporte y sí goto TIPS_CHECK
tiempo2 = millis();
Si (tiempo2 > (tiempo + problemInLowLevelSwitch) & & lowLevelVal! = alto & & (runonce == 0)) //if interruptor de nivel bajo tiene un problema y no se apagan
{runonce ++; con un parámetro de runonce para dejar de contar
Delay(timeOfMotorMinON); motor se volvió de un retraso y luego se encienden otra vez
motorON();
Goto LEVEL_CHECK_RUN; necesidad de usar esto en caso de no usar la declaración de runonce
}
Si (lowLevelVal == alto & & (runonce == 0)) //if interruptor de nivel bajo se cierra
{runonce ++;
Delay(timeOfMotorMaxON); Ciencias estancia vuelta del retraso de foa y entonces encendido otra vez
así que para drenar líquidos.
motorON();
Goto LEVEL_CHECK_RUN; no lo use pero si usas funciona bien.
}
} //end de mientras! 03!!!!!!
} //end de if! 03!!!!!!
} //end LEVEL_CHECK_RUN mientras que
} //end de LEVEL_CHECK_RUN
} / / fin de TIPS_CHECK mientras *** bajo esta línea de código pertenece al caso que consejos de soporte ***
//******************************** *******
motorOFF();
Switch(motorState) / al vacío consejos están en pie, interruptor de pie está abierta para que el motor debe estar apagado.
pero si el motor se enciende entonces cuando dentista pone la punta en el stand
debe haber un retraso para que residuos líquidos dentro de tubo de vacío va a boottle y de drenaje.
{
caso 1: delay(timeOfTipOnStand);
motorOFF();
rotura;
caso 0: delay(1);
motorOFF();
rotura;
default: break;
}
Delay(timeOfTipRest); PRECAUSION en el caso de punta no encaja o Punta sale a la vez.
} //End of loop//////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void motorON() //turn motor encendido y motorstate 1
{//this es para el switch(motorstate)
digitalWrite (motorPin, LOW); SÍ baja (lógica invertida), causa del estúpido módulo chino
Delay(1);
motorState = 1;
digitalWrite (ledPin, HIGH);
retardo (1);
}
vacío motorOFF() //turn motor y motorstate 0
{//this es para el switch(motorstate)
digitalWrite (motorPin, HIGH); SÍ alto (lógica invertida), causa del estúpido módulo chino
Delay(1);
motorState = 0;
digitalWrite(ledPin,LOW);
retardo (1);
}
//////////////////////////////////////////////////////
void blink() //put en código para la prueba donde estás cuando utilice swithes
{
digitalWrite (ledPin, HIGH); el LED se pone en
Delay(200); espera un segundo
digitalWrite (ledPin, LOW); fija el LED apagado
Delay(200); espera un segundo
digitalWrite (ledPin, HIGH); el LED se pone en
Delay(200); espera un segundo
}///////////////////////////////////////