Étape 4: Étape 4: Code de l’Arduino
Je vais aller discuter les principales caractéristiques du code de section par section. Bibliothèques tierces peuvent être importés de GitHub. Les bibliothèques innovente et IRremote peuvent être trouvés à GitHub. J’ai dû créer la bibliothèque à partir de zéro pour le capteur de proximité de HCSR04 (j’espère que vous trouverez attaché au-dessus). Dans ces bibliothèques, vous pouvez trouver les variables nécessaires à l’envoi d’une commande ou d’appeler une fonction. Chaque bibliothèque a un C++ (logiciel de codage) et .h (extension fichier d’en-tête). Si la création de vos propres bibliothèques, vous devez créer ces deux.
Ensuite je passe à l’initialisation des variables. Nous avons plusieurs classes de bibliothèques Servo, IRremote, innovente et HCSR04 et les variables qui sont déclarées. J’ai également défini plusieurs des boutons sur la télécommande, que j’ai utilisé. La classe innovente instancie un objet de LCD appelé « lcd ». L’adresse de l’écran LCD est 0 x 27 avec 16 colonnes et 2 rangs. Le capteur de proximité HCSR04 a deux déclencheurs. La broche « déclencheur » est responsable de l’envoi une impulsion. Cette impulsion rebondit (echos) ou obtient dissipée dans l’espace. La broche « echo » reçoit une valeur flottante assignée à broche 8. Ce déclencheur prend le pouls déclenché et convertit la valeur en centimètres (par ma propre bibliothèque conçue). Les distances que reçoit le capteur de proximité sont définis comme flottant de valeurs. Ils pouvaient ont été définies comme valeurs entières mais je voulais les mesures exactes, et cela signifie que les valeurs lues ont des valeurs décimales (un exemple serait cm 6,52).
Passer à l’installation, j’Initialise le bus i2C sur l’écran LCD que j’utilise. I2C essentiellement réduit le nombre de quilles que je dois utiliser sur mon Arduino. J’initialise le rétro-éclairage sur l’écran à cristaux liquides aussi bien. Si vous souhaitez consulter vos résultats sur un moniteur de la série, vous devez utiliser une commande de Serial.begin(baudrate) pour établir combien de symboles à lire. Cette opération démarre la communication entre l’Arduino et le moniteur de la série. Effacer l’écran LCD dans le cas où il existe des symboles erronés ou lettres sur l’écran. J’ai mis le curseur au milieu de la première rangée et salue l’utilisateur pour le module. Il attend une seconde et l’écran s’efface à nouveau. Le récepteur IR est prêt à prendre dans les valeurs de l’IR à distance. De même, le servomoteur est déplacé sur la position 0.
Enfin, nous nous déplaçons sur la boucle principale. distance1 est déclarée comme l’élément déclencheur qui est envoyé et reçu. Cette valeur est lue à partir du senor de proximité à l’Arduino en centimètres. last_distance est comme son nom l’indique. Il stocke la dernière distance qui est lue. Plus de détails seront fournis quant à la fonction de ces commandes plus tard. Le si commande (irrecv.decode (et résultats)) est utilisé pour mapper l’adresse à chaque pression de touche. Chaque bouton possède son propre flux de bits qui lui sont associé. Parce que ce projet est sur l’ouverture d’une serrure à l’aide d’une valeur spécifiée, cette commande doit être la première boucle dans la boucle principale. last_distance > distance1 compare les valeurs qui étaient stockés. Si la distance précédente était supérieure à la distance actuelle, puis l’écran s’efface comme il n’y a personne à la porte. De même, si distance1 < = 7 (cm), alors l’utilisateur sera invité à entrer le mot de passe. Qu’une seule valeur fonctionnera (9). Toutes les autres valeurs (0-8) demandera à l’utilisateur d’essayer à nouveau. Toutefois, pour la valeur = 9, la porte sera déverrouiller et saluer l’utilisateur. Il y a également une imbriquée boucle for en cela si déclaration. L’imbriqués pour boucle permet le moteur à coup sur et simuler le déverrouillage de la porte. La distance < = 7 est là pour vérifier si l’utilisateur est toujours à la porte ou si il/elle est allé à l’intérieur ou vers la gauche. Si l’utilisateur est toujours à la porte, la porte restera ouverte. La porte restera ouverte pendant environ 4 secondes pour permettre à l’utilisateur de passer par la porte, et puis il va se fermer. Après que la seconde 4 retarder, le servomoteur est détaché. Je fais ça pour éviter l’excès étant envoyées au moteur quand il n’est pas en cours d’utilisation. En outre, j’ai serial.println() de commandes pour afficher les résultats sur le moniteur de la série.
Comme prieur brièvement discuté, en appuyant sur n’importe quel autre bouton pas actionnera le moteur donc j’ai dû faire en sorte que n’importe quelle autre touche n’a rien fait (valeurs 0-8). L’écran LCD vous invite l’utilisateur à essayer de nouveau. Si vous avez oublié votre mot de passe, vous pouvez appuyer sur l’EQ bouton et l’écran LCD vont invite à noter le cours. C’est un message « Reminder » disant "rappel : sur une échelle de 0 à 9, comment AWESOME est cette classe?" Après cela, efface l’écran et vous pouvez maintenant mettre à la valeur correcte de 9.
Cette commande suivante est très importante : irrecv.resume() ; Si vous ne le mettez pas ici, le récepteur ne vérifie n’est plus une autre entrée. Cette commande empêche l’enfermer après une pression de bouton ou l’itération de la boucle.
Si la distance est supérieure à 7 cm, mais inférieure à 10 cm, Cela symbolise l’utilisateur approchant le module ou la porte. Vous serez à nouveau invité à entrer le mot de passe.
Clôture de la boucle, j’ai une dernière si déclaration. Si la dernière distance est supérieure à la distance actuelle, cela signifie que l’utilisateur est introuvable. En outre, je l’ai vérifié pour s’assurer que l’utilisateur n’est pas n’importe où pour être vu en incluant & & distance1 > 12 (cm). Cela signifie que quelqu'un était là et à gauche. L’écran s’efface à nouveau. Il y a une imbriquée pour la boucle qui dit : OK, j’ai vu que la porte ouverte, la serrure a été déplacée à la position déverrouillée et maintenant je remonte à la position verrouillée. Le servomoteur est attaché et l’écran LCD indique la personne au revoir. Le moteur est recalée 35 degrés à la position verrouillée. Après que le servomoteur est terminé sa tâche, il est détaché à nouveau afin d’éviter la saturation du moteur et en réduisant la puissance utilisée pour alimenter le moteur d’asservissement. C’est la fin de la boucle et fonctionnera de façon continue.