////////////// DESCRIPTION ///////////////////////////////////////////////////////////
Il s’agit d’une application pour contrôler un moteur d’aspiration dentaire.
Le moteur a besoin d’un 24 volts signal (via un relais connecté à la sortie numérique de l’arduino) pour mettre en marche.
Lors de sa tournée sur elle remplit une bootle avec liquides forme bouche du patient.
Bouteille a deux interrupteurs de niveau (capteurs) pour bas et haut niveau de liquide.
État moteur doit être allumé jusqu'à ce que le liquide atteigne le niveau élevé. Puis État moteur doit être à OFF pour liquide va se pour écouler (qui se produit uniquement lorsque le moteur est éteint) et puis rallumé.
Tout cela fonctionne lorsque dentaires conseils sous vide sont sur les mains de médecins.
Le stand pour obtenir des conseils dentaires sous vide a un interrupteur donc lorsqu’il est placé dans le stand de l’interrupteur est ouvert et quand dans la main du dentiste, le commutateur est CLOSE.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
code par ALEXANDROS PAGONIDIS http://www.BiomedicalTechnology.gr ***
*/
#include < Time.h > //arduino peut lire le temps pour 50 jours d’initialisation et réinitialise ensuite fois
unsigned long temps ;
unsigned long time2 ;
nombre de broches *** / / /
int lowLevelPin = 2 ; la broche numérique (2) connecté à l’interrupteur de niveau bas de bootle. La broche 1 du commutateur va à broches numériques de l’arduino et broche 2 du commutateur va à la terre.
int highLevelPin = 3 ; la broche numérique (3) relié à l’interrupteur de niveau haut de bootle. La broche 1 du commutateur va à broches numériques de l’arduino et broche 2 du commutateur va à la terre.
int valveTipsPin = 4 ; la broche numérique (4) connectés au commutateur du stand où sont placés les trucs sous vide. La broche 1 du commutateur va à broches numériques de l’arduino et broche 2 du commutateur va à la terre.
int motorPin = 12 ; contrôle de la broche numérique 5V DC Relais module sorcière 24V AC singal (CAUSE mon chinois MODULE est stupide LOGIG est inversé donc lorsque POWER OFF non à tourner sur le moteur) du moteur
int ledPin = 13 ; le conduit interne de la carte arduino
/*
CETTE CONNEXION EST POUR FAUTEUIL SIRONA SPÉCIFIQUE AVEC L’ÉLECTRONIQUE DE CATANNI
ÉPINGLES ET CERTAINES DES COULEURS DE CÂBLES :
1,19,12,13,14 : NON CONNECTÉ
2, 3: 24VAC ENTRÉE DE BOÎTE
9, 11 : OUTPUR 24VAC POUR MOTEUR (PINS 3,9 SONT DES BROCHES D’UN RELAIS NORMALEMENT OUVERT)
4, 5: CONSEILS CHANGER (OÙ EN PIN 4 JAUNE-BRUN 5 BLANC GRIS-CÂBLES
6: CAPTEUR DE NIVEAU HAUT DE BOUTEILLE (CÂBLE ROUGE)
7: CAPTEUR DE NIVEAU BAS DE BOUTEILLE (CÂBLE BLANC)
8: BOUTEILLE COMMON, MIDDLE (CÂBLE NOIR)
*/
les valeurs d’État se (haut = ouvert ou faible = fermer)
int valveTipsVal ;
int lowLevelVal ;
int highLevelVal ;
temps de retard en millisecondes pendant laquelle *** / / /
int timeOfReadings = 200 ;
int problemInLowLevelSwitch = 8000 ;
int timeOfMotorMinON = 4000 ;
int timeOfMotorMaxON = 8000 ;
int timeOfTipOnStand = 2500 ;
int timeOfTipRest = 999 ;
Val qui indique si le moteur est ON ou OFF *** / / /
int motorState ; Obtient les valeurs de 0 ou 1
//////////////////////////////////////
void setup()
{
configurer les broches comme intrant et activer la résistance de pull-up interne
pinMode(lowLevelPin,INPUT_PULLUP) ;
pinMode(highLevelPin,INPUT_PULLUP) ;
pinMode(valveTipsPin,INPUT_PULLUP) ;
configurer les broches comme sorties
pinMode (motorPin, sortie) ;
pinMode (ledPin, sortie) ; TEMOIN led interne sur puce
motorOFF() ; Quand arudino que tips_checks moteur doit être mis hors service
} / / fin de l’installation
////////////////////////////////
void loop()
{
/*
digitalRead avec INPUT_PULLUP le programme d’installation se lit comme suit :
ÉLEVÉ par un interrupteur ou bouton est comme une connexion ouverte au sol.
FAIBLE lorsqu’un interrupteur ou bouton est comme une connexion fermée au sol.
*/
valveTipsVal=digitalRead(valveTipsPin);delay(1) ; lire
lowLevelVal = digitalRead (lowLevelPin);delay(1) ; tous les
highLevelVal=digitalRead(highLevelPin);delay(1) ; s'
////////////////////////////////////////
TIPS_CHECK :
tandis que (valveTipsVal == faible) //TIPS_CHECK tout en *** lorsque vide conseils sont dans les mains du dentiste, commutateur du stand est fermé. *****
{
valveTipsVal=digitalRead(valveTipsPin);delay(1) ;
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} vérifier à tous les niveaux du code si valve conseils sont sur le stand et si oui goto TIPS_CHECK
retard (timeOfReadings) ; temps de lectures... attendez de capteurs à stabiliser et à calmer proccessor de nombreuses lectures
LEVEL_CHECK_RUN :
{
lowLevelVal = digitalRead (lowLevelPin);delay(1) ; lire
highLevelVal=digitalRead(highLevelPin);delay(1) ; niveau s'
Si (lowLevelVal == HIGH & & highLevelVal == haut) / / si l’interrupteur de niveau haut ouvert, faible niveau interrupteur ouvert
{lowLevelVal = digitalRead (lowLevelPin);delay(1) ;
highLevelVal=digitalRead(highLevelPin);delay(1) ;
motorON() ;
}
Si (highLevelVal == HIGH & & lowLevelVal == faible) / / si l’interrupteur de niveau haut ouvert, faible niveau switch CLOSE
{lowLevelVal = digitalRead (lowLevelPin);delay(1) ;
highLevelVal=digitalRead(highLevelPin);delay(1) ;
motorON() ;
}
même si (highLevelVal == faible) / / LEVEL_CHECK_RUN tout en //while interrupteur de niveau haut est CLOSE
{
highLevelVal=digitalRead(highLevelPin);delay(1) ;
valveTipsVal=digitalRead(valveTipsPin);delay(1) ;
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} vérifier à tous les niveaux du code si valve conseils sont sur le stand et si oui goto TIPS_CHECK
motorOFF() ;
Si (highLevelVal == HIGH) //if!!! 03!!! besoin un si avant le moment obtenir donc temps et runonce à l’extérieur le tout en boucle
{
runonce int = 0 ; pour exécuter une fois certaines procédures à l’intérieur de l’autre tout en!!! 03!!!
temps = millis() ;
même si (highLevelVal == haute) //while!!! 03!!!
{lowLevelVal = digitalRead (lowLevelPin);delay(1) ; lire
highLevelVal=digitalRead(highLevelPin);delay(1) ; niveau s'
valveTipsVal=digitalRead(valveTipsPin);delay(1) ;
Si (valveTipsVal == HIGH)
{goto TIPS_CHECK;} vérifier à tous les niveaux du code si valve conseils sont sur le stand et si oui goto TIPS_CHECK
TIME2 = millis() ;
Si (time2 > (temps + problemInLowLevelSwitch) & & lowLevelVal! = HIGH & & (runonce == 0)) //if bas commutateur de niveau a un problème et ne s’éteignent
{runonce ++ ; avec un paramètre runonce pour arrêter le compteur
Delay(timeOfMotorMinON) ; séjour moteur tourné d’un retard et puis rallumé
motorON() ;
Goto LEVEL_CHECK_RUN ; Il faut faire cela dans le cas où vous n’utilisez pas l’instruction runonce
}
Si (lowLevelVal == HIGH & & (runonce == 0)) //if interrupteur de niveau bas est fermé
{runonce ++ ;
Delay(timeOfMotorMaxON) ; séjour REDUITE tourné de foa retard et puis rallumé
donc les liquides vont se pour écouler.
motorON() ;
Goto LEVEL_CHECK_RUN ; n’utilisez pas si vous l’utiliser fonctionne très bien.
}
} //end du tout!!! 03!!!
} //end d’if!!! 03!!!
} //end LEVEL_CHECK_RUN tandis que
} //end de LEVEL_CHECK_RUN
} / / fin de TIPS_CHECK tout en *** sous cette ligne code appartient au cas que les conseils sont sur support ***
//******************************** *******
motorOFF() ;
Switch(motorState) / / lorsque vide conseils sont en position, commutateur du stand est ouvert, donc le moteur doit être désactivée.
mais si le moteur a été allumé puis quand dentiste met la pointe sur le stand
il doit y avoir un retard des déchets liquides à l’intérieur du tuyau à vide va à boottle, puis vidange.
{
cas 1: delay(timeOfTipOnStand) ;
motorOFF() ;
rupture ;
case 0: delay(1) ;
motorOFF() ;
rupture ;
par défaut : break ;
}
Delay(timeOfTipRest) ; precausion en cas de pointe ne s’adapter ou astuce sortent en même temps.
} //End of loop//////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void motorON() //turn moteur en marche et motorstate 1
{//this est pour les switch(motorstate)
digitalWrite (motorPin, basse) ; Oui faible (logique inversée), la cause de la stupide module chinois
Delay(1) ;
motorState = 1 ;
digitalWrite (ledPin, HIGH) ;
retard (1) ;
}
void motorOFF() //turn moteur éteint et motorstate 0
{//this est pour les switch(motorstate)
digitalWrite (motorPin, HIGH) ; Oui élevé (logique inversée), cause de stupide module chinois
Delay(1) ;
motorState = 0 ;
digitalWrite(ledPin,LOW) ;
retard (1) ;
}
//////////////////////////////////////////////////////
void blink() //put dans le code d’essai où vous vous trouvez lorsque vous utilisez s'
{
digitalWrite (ledPin, HIGH) ; définit la LED sur
Delay(200) ; attend une seconde
digitalWrite (ledPin, basse) ; la LED se met
Delay(200) ; attend une seconde
digitalWrite (ledPin, HIGH) ; définit la LED sur
Delay(200) ; attend une seconde
}///////////////////////////////////////