Étape 5: Arduino Code
Dans la première partie du code, vous remarquerez que les deux signaux différents peuvent être utilisés pour lancer la commande de démarrage de voiture :
1) en envoyant un « s » à l’Arduino via le module bluetooth (qui agit comme un port série) peut être utilisé pour lancer la séquence de démarrage. Il est utilisé lors du démarrage du véhicule depuis un terminal sur un ordinateur.
2) définissant une épingle sur l’Arduino haute lancera également la séquence de démarrage. Cette broche d’entrée sur l’Arduino est connectée à la carte Bluetooth. Lorsque vous utilisez l’application Daisy on/off d’un téléphone Android, l’application provoquera la broche sur le plateau de Bluetooth pour être placée haute, qui à son tour, on le verra par l’Arduino et générer la séquence de départ commencer.
Voici mon code :
/ * Programme : distance Auto Start
* Auteur : Chris Johnson
* Révisé: 5 décembre 2011
*
* Entrées : BT Module signal « ON »
* Signal sonore de « Coupure » Module BT
* Véhicule capteur de régime
* Capteur de Position neutre du véhicule
* Capteur de vitesse du véhicule
* Serial port
* Sorties : Relais de commande d’allumage
* Relais de commande accessoire
* Relais de commande de starter
* Embrayage sécurité interrupteur relais
* Port série
*/
ÉQUIVAUT
Entrées
int BT_on = 2 ; Bluetooth « ON » signal inscription sur broche 2
int RPM_sens = 3 ; Capteur de régime de véhicule entré à la broche 3
int neutral_sens = 4 ; Capteur de Position de neutre de véhicule entré à la borne 4 (12 volts +/-0,5 volts)
int speed_sens = 5 ; Véhicule vitesse Sesor, entré à la broche 5
int BT_off = 7 ; Inscription sur la broche 7 du signal Bluetooth « OFF »
Sorties
int ign_ctrl = 8 ; Relais de commande d’allumage commandé par broche 8
int start_ctrl = 9 ; Relais de contrôle de démarrage contrôlé par broche 9
int clutch_sfty = 10 ; Embrayage sécurité Swithc relais commandé par broche 10
int acc_ctrl = 11 ; Accessoire relais de commande contrôlée par broche 11
start_time long non signé ; Variable utilisée pour stocker le temps auquel le démarreur est engagé
char de données = 0 ; Variable utilisée pour stocker les données reçues via le port série
DÉFINITIONS
void setup()
{
pinMode (entrée, BT_on) ; Définir les broches entrées et sorties
pinMode (entrée, RPM_sens) ;
pinMode (neutral_sens, entrée) ;
pinMode (speed_sens, entrée) ;
pinMode (entrée, BT_off) ;
pinMode (ign_ctrl, sortie) ;
pinMode (start_ctrl, sortie) ;
pinMode (clutch_sfty, sortie) ;
pinMode (acc_ctrl, sortie) ;
Serial.Begin(9600) ; Initialiser le port série avec une vitesse de transmission 9600
}
PROGRAMME
Fonction de boucle : attendez une commande de démarrage être reçu (commande via un port série ou
tension appliquée à la broche de BT_on)
void loop()
{
Si (Serial.available() > 0) //Check si toutes les données séries sont disponibles
{
données = Serial.read() ; Variable « Données » données série actuellement disponible
Check() ; Passer à « vérification » funtion s’il dispose des données série
}
ElseIf (digitalRead(BT_on) == HIGH) //Check si Module BT a mis des broches haute
{
Begin() ; BEGIN commencer séquence si la broche est élevée
}
d’autre
{
Loop() ; Répétez cette fonction jusqu'à la réception d’une commande de démarrage
}
}
Vérifier la fonction : Test pour le jeu de caractères approprié de BT
check() Sub
{
Si (données == de ') //Check si un « s » a été envoyé
{
Begin() ; BEGIN commencer séquence si « s » a été envoyé
}
d’autre
{
Serial.println ("commande non valide") ; Si rien d’autre qu’un « s » a été envoyé, envoyer message d’erreur « Commande non valide »
Loop() ; Revenir au début du programme
}
}
Amorcer : mettre l’accessoire et d’allumage
void begin()
{
Delay(500) ; 0,5 délai de secondes
digitalWrite (acc_ctrl, HIGH) ; Allumer accessoire sur
digitalWrite (ign_ctrl, HIGH) ; Mettez en marche d’allumage
Delay(500) ; 0,5 délai de secondes
Neutral() ; Aller à « neutre » funciton
}
Fonction de neutre : vérifier si la transmission du véhicule est en position neutre.
Continuer si le véhicule est au point mort. Sortie début séquence si le véhicule est en train.
Sub neutral()
{
Si (digitalRead(neutral_sens) == haute) //Continue que si le véhicule est au point mort
{
Start() ; Démarrez le véhicule en cas de neutre
}
d’autre
{
Serial.println ("véhicule pas au point mort") ; En cas de gear, envoyer message d’erreur « Véhicule pas au neutre »
vehicle_off() ; Sortie début séquence en cas de vitesse
}
}
Fonction de démarrage : démarreur s’engager que si le moteur n’est pas déjà en cours d’exécution.
void start()
{
int t/mn = pulseIn (RPM_sens, haute, 1000000) ; Valoriser les tr/min
if(RPM == 0) //Continue commencer séquence uniquement si le véhicule n’est pas en cours d’exécution.
{
digitalWrite (clutch_sfty, HIGH) ; Embrayage « Appuyer sur »
digitalWrite (acc_ctrl, basse) ; Désactiver (OFF) accessoire
Delay(500) ; 0,5 délai de secondes
digitalWrite (start_ctrl, HIGH) ; Actionnez le starter
start_time = millis() ; Saisir le temps qui a été engagé le démarreur
starter_engaged() ; Aller à Starter_engaged fonction
}
d’autre
{
Serial.println ("véhicule en cours d’exécution") ; Envoyer message « Véhicule déjà en marche » si le moteur a été démarré précédemment
vehicle_off() ; Sortie début séquence si déjà en cours d’exécution
}
}
Starter_engaged fonction : désengager le démarreur une fois véhicule démarreur ou désactiver le démarrage si
véhicule n’a pas commencé dans les 4 secondes.
Sub starter_engaged()
{
int t/mn = pulseIn (RPM_sens, élevé) ; Valoriser les tr/min
Si //Continue (> 1000 RPM) si le moteur a démarré (faible atteint inactif)
{
Serial.println ("moteur marche") ; Envoyer message « Moteur marche » après avoir démarré le moteur
disengage_starter() ; Aller à disengage_starter après que le moteur est en marche
}
sinon si ((start_time+4000) < millis()) //Test si 4 secondes s’est écoulé depuis le démarrage a été engagé
{
disengage_starter_timeout() ; Aller à disengage_starter si le moteur n’a pas commencé dans les 4 secondes de l’engagement de démarreur
}
d’autre
{
starter_engaged() ; Répétez cette fonction si le moteur n’a pas démarré ou 4 secondes soit écoulé pas
}
}
Disengage_starter fonction : dégager le démarreur.
Sub disengage_starter()
{
digitalWrite (start_ctrl, basse) ; Dégager le démarreur
digitalWrite (clutch_sfty, basse) ; « Libérer » l’embrayage
digitalWrite (acc_ctrl, HIGH) ; Allumer accessoire sur
vehicle_off_sense() ; Aller à vehicle_off_sense fonction
}
Disengage_starter_timeout fonction : dégager le démarreur (utilisé après 4 secondes soit écoulé sans démarrage moteur)
Sub disengage_starter_timeout()
{
digitalWrite (start_ctrl, basse) ; Dégager le démarreur
digitalWrite (clutch_sfty, basse) ; « Libérer » l’embrayage
Serial.println ("véhicule Start infructueuse") ; Envoyer « Véhicule Start infructueuse »
vehicle_off() ; Séquence de démarrage de sortie
}
Vehicle_off_sense fonction : attend un signal « off » à envoyer lorsque le moteur est en marche.
Si aucun signal « off » est reçu, s’éteint le véhicule après 30 minutes s’est écoulé depuis le démarrage du moteur.
Sub vehicle_off_sense()
{
int déplacement = pulseIn (speed_sens, HIGH) ; Obtenir la vitesse du véhicule
Si (déplacement > 1000) //Check si le véhicule est en mouvement
{
Serial.println (« véhicule hors--mouvement ») ; Envoyer « Véhicule hors ‑‑ mouvement » message ifvehcile est en mouvement
vehicle_off() ; Éteignez véhicule s’il se déplace
}
ElseIf (start_time + 1800000 < millis()) //Check si 30 minutes s’est écoulé depuis le démarrage du moteur
{
Serial.println ("véhicule hors--délai d’expiration automatique") ; Envoyer le message « Véhicule hors ‑‑ automatique Timeout » si le moteur a été
en cours d’exécution pendant 30 minutes
vehicle_off() ; Éteignez véhicule moteur en marche pendant 30 minutes
}
ElseIf (Serial.available() > 0) //Check si un signal a été envoyé par l’intermédiaire de données série
{
données = Serial.read() ; Magasin de série envoyé des données série
Si (données == ' o ') //Check si le signal transmis est une commande d’arrêt ("o")
{
Serial.println (« véhicule hors--utilisateur commandé ») ; Envoyer message « Véhicule hors ‑‑ l’utilisateur commande automatique » si les données en série sont OFF
commande ("o")
vehicle_off() ; Éteignez véhicule si la commande est envoyée par l’intermédiaire de données série
}
}
ElseIf (digitalRead(BT_off) == HIGH) //Check si large de commande a été envoyé via le module BT
{
Serial.println (« véhicule hors--utilisateur commandé ») ; Envoyer le message « Véhicule hors ‑‑ l’utilisateur commande automatique » si OFF
commande a été envoyée
vehicle_off() ; Désactiver le véhicule si commande a été envoyée via le module BT
}
d’autre
{
vehicle_off_sense() ; Si aucune des conditions ci-dessus sont remplies, répétez cette fonction
}
}
Fonction Vehicle_off : désactive le vechile et recommence l’ensemble du programme
Sub vehicle_off()
{
digitalWrite (ign_ctrl, basse) ; Coupez contact
digitalWrite (acc_ctrl, basse) ; Désactiver (OFF) accessoire
Loop() ; Programme de répétition (recherchez la commande start)
}