Programmation arduino pour les débutants: le contrôleur traffic light

contrôleur de feux de circulationLa semaine dernière, nous avons appris sur la structure de base d`un programme Arduino et a pris un coup d`oeil de plus près l`exemple `blink`. Espérons que vous avez pris l`occasion d`expérimenter avec le code, le réglage des timings. Cette fois, nous allons être en train d`écrire quelque chose à partir de zéro. En fait, nous allons faire un feu de circulation.

En dehors de l`Arduino de base, vous aurez besoin:

  • Une LED rouge, jaune et vert.
  • A breadboard.
  • résistances 3 x appropriés pour les LEDs que vous avez (probablement 220 Ohms est très bien).
  • Raccordement des fils.
  • Un commutateur à bouton-poussoir.
  • Une résistance de valeur élevée (10k).

Remarque: Ceci est la dernière d`une série de didacticiels de niveau débutant pour Arduino, la plate-forme ouverte de prototypage électronique source. Voici une liste des articles précédents de la série:

Vous pouvez également télécharger et installer Fritzing, l`outil I utilisé pour dessiner les schémas de câblage pour ces projets.

Câblage

Voici un schéma rapide, je fis en Fritzing. Il est très simple - seulement les trois LED filaires avec des résistances à trois broches d`entrée séparées, et tout relié à la terre.

contrôleur de feux de circulation

La programmation

Nous allons commencer par des variables définissant afin que nous puissions aborder les lumières par nom plutôt que plusieurs. Démarrez un nouveau projet Arduino, et commencer par ces lignes:

int jaune rouge = 13 int = 12 int vert = 11-

Ensuite, nous allons ajouter la fonction de configuration, where`ll nous définissons les LED rouges, jaunes et verts pour être le mode de sortie. Depuis que nous avons créé des variables pour représenter les numéros de broches, nous pouvons maintenant se référer aux broches par des noms à la place.

void setup () {pinMode (rouge, OUTPUT) -pinMode (jaune, SORTIE) -pinMode (vert, SORTIE) -}

C`était facile. Maintenant, pour la partie difficile - la logique réelle d`un feu de circulation. Je vais créer une fonction distincte pour changer les lumières, et vous verrez pourquoi plus tard.

Lorsque vous commencez la programmation, le code lui-même est très rudimentaire - il est déterminer les détails logiques minute qui présente le plus gros problème. La clé pour être un bon programmeur est d`être capable de regarder à tout processus, et le décomposer en ses étapes fondamentales.

void loop () {changeLights () - retard (15,000) -} changeLights void () {// vert éteint, jaune pour 3 secondsdigitalWrite (vert, HIGH) -digitalWrite (jaune, LOW) -delay (3000) - // tour off jaune, puis au rouge pendant 5 secondsdigitalWrite (jaune, LOW) -digitalWrite (rouge, HIGH) -delay (5000) - // rouge et jaune pendant 2 secondes (rouge est déjà bien) digitalWrite (jaune, HIGH) -delay (2000) - // désactiver rouge et jaune, puis allumez greendigitalWrite (jaune, LOW) -digitalWrite (rouge, LOW) -digitalWrite (vert, HIGH) -}

Terminé! Maintenant, télécharger et exécuter. Vous devriez avoir un feu de travail qui change toutes les 15 secondes. Cependant, je pense qu`il est un peu basique en ce moment, donc nous allons ajouter dans un bouton-poussoir pour les piétons pour changer la lumière quand ils le veulent. Se reporter au schéma de circuit mis à jour ci-dessous:

contrôleur de feux de circulation

Vous remarquerez que le commutateur a une résistance de 10k à haute impédance attachée à elle, et peut-être se demander pourquoi. On appelle cela une résistance tirer vers le bas. Il est un concept difficile à saisir au premier abord, mais garder avec moi.

Un interrupteur permet soit le flux de courant, ou ne le fait pas. Cela semble assez simple, mais dans un circuit logique, le courant devrait être toujours couler soit dans un état haut ou bas (rappelez-vous - 0 ou 1, haute ou basse). Vous pourriez supposer qu`un bouton-poussoir qui est pas réellement poussé serait défini comme étant dans un état bas, mais en fait, il est dit être «flottant», car aucun courant est en cours d`élaboration du tout.

Dans cet état flottant, il est possible qu`une fausse lecture se produira comme il fluctue en fonction des interférences électriques. En d`autres termes, un interrupteur à flotteur donne ni une haute fiabilité, ni lecture faible de l`État. Une résistance de tirage vers le bas maintient une petite quantité de courant lorsque l`interrupteur est fermé, assurant ainsi une faible lecture précise de l`État. Dans d`autres circuits logiques, vous pouvez trouver une résistance de pull-up à la place - cela fonctionne sur le même principe, mais en sens inverse, en veillant à ce que la logique particulière porte par défaut élevé.

Maintenant, dans la partie de la boucle du code, au lieu de changer les lumières toutes les 15 secondes, nous allons lire l`état du commutateur à bouton-poussoir à la place, et seulement changer les lumières quand il est activé.

Commencez par ajouter de nouvelles variables au début de l`application:

bouton int = 2 // interrupteur est sur la broche 2INT buttonValue = 0- // passer par défaut à 0 ou LOW

Maintenant, dans la fonction de configuration, ajouter une nouvelle ligne à déclarer le commutateur comme entrée. J`ai aussi ajouté une seule ligne pour démarrer les feux de circulation dans le stade vert. Sans ce réglage initial, ils seraient éteints, jusqu`à ce que la première fois un changeLights () a été lancé en utilisant une fonction.

pinMode (commutateur, INPUT) -digitalWrite (vert, HIGH) -

Changer la fonction de boucle entière à ce qui suit à la place:

void loop () {// lire la valeur de la switchswitchValue = digitalRead (bouton) -
// Si le commutateur est HIGH, ie. poussé vers le bas - changer les lumières si (buttonValue == HIGH) {changeLights () - retard (15000) - // attendre pendant 15 secondes}}

Ça devrait le faire. En attendant à l`intérieur du "if" pendant 15 secondes, nous assurer que les feux de circulation ne peuvent pas changer pendant au moins cette durée. Une fois que 15 secondes est écoulé, le redémarrage de la boucle. Chaque redémarrage de la boucle, nous allons lire l`état de la touche à nouveau, mais si elle est pas pressé alors le "if" jamais active, les lumières ne changera jamais, et il redémarre tout simplement à nouveau.

Voilà pour cette fois, donc je l`espère, vous appris beaucoup et avait écrit amusant à partir de zéro. Vous avez vos mains sales avec quelques LED et résistance, ainsi que l`ajout d`un commutateur avec une résistance pull down - espérons que vous avez compris pourquoi nous avons besoin d`un. Jouez avec le code, l`ajuster, et surtout avoir du plaisir. Si vous apportez des ajouts ou des modifications, pourquoi ne pas laisser nous savoir dans les commentaires?

» » Programmation arduino pour les débutants: le contrôleur traffic light