Programmation arduino pour les débutants: le contrôleur de feux de circulation

Le feu est un projet peu de plaisir, qui peut être complété en moins d`une heure. Apprenez à construire votre propre - en utilisant un Arduino - et comment modifier le circuit pour un modèle avancé.

Ne vous inquiétez pas si vous ne l`avez jamais utilisé un Arduino avant, nous avons Guide du débutant.Mise en route avec Arduino: Guide du débutantMise en route avec Arduino: Guide du débutantArduino est une plate-forme de prototypage électronique open source basée sur flexible, facile à utiliser du matériel et des logiciels. Il est destiné aux artistes, designers, amateurs, et toute personne intéressée par la création d`objets interactifs ou des environnements.Lire la suite

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

De quoi as-tu besoin

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

  • LED rouge, jaune et vert.
  • Une planche à pain.
  • 6 x 220? résistances.
  • des fils de connexion.
  • 1 x interrupteur à bouton-poussoir.
  • 1 x 10k? résistance

Presque tous les Arduino sera approprié, pourvu qu`il ait assez broches. Assurez-vous de lire notre Guide d`achat si vous n`êtes pas sûr de ce modèle dont vous avez besoin. Vous avez probablement ces pièces dans votre kit de démarrage déjà.Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Il y a tellement de différents types de cartes Arduino là-bas, vous seriez pardonné d`être confus. Que devriez-vous acheter pour votre projet? Aidons, avec ce guide d`achat Arduino!Lire la suite

Un exemple simple

Commençons petit. Une base, feu de circulation unique est un bon endroit pour commencer. Voici le circuit:

arduino_traffic_light

Connecter l`anode (branche longue) de chaque LED à broches numériques huit, neuf et dix (via un 220? Résistance). Connectez les cathodes (jambes courtes) pour Arduino sol.

Je Fritzing pour dessiner ces schémas. Non seulement il est facile à utiliser, il est gratuit!

Le code

Commencez par définir les variables afin que nous puissions répondre aux lumières par leur nom plutôt qu`un numéro. Démarrez un nouveau projet Arduino, et commencer par ces lignes:

int rouge = dix-int jaune = 9-int vert = 8-

Ensuite, nous allons ajouter la fonction de configuration, where`ll nous configurons les LED rouges, jaunes et vertes pour être sorties. Étant donné que vous avez créé des variables pour représenter les numéros de broches, vous pouvez vous référer aux broches par nom au lieu.

vide installer(){pinMode(rouge, SORTIE)-pinMode(jaune, SORTIE)-pinMode(vert, SORTIE)-}

C`était facile. Maintenant pour la partie difficile - la logique réelle d`un feu de circulation. Créer une fonction distincte pour changer les lumières (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 en mesure d`examiner tout processus, et le décomposer en ses étapes fondamentales. Voici le reste du code:

vide boucle(){changeLights()-retard(15000)-}vide changeLights(){// vert au large, jaune pendant 3 secondesdigitalWrite(vert, FAIBLE)-digitalWrite(jaune, HAUTE)-retard(3000)-// désactiver le jaune, puis au rouge pendant 5 secondesdigitalWrite(jaune, FAIBLE)-digitalWrite(rouge, HAUTE)-retard(5000)-// rouge et jaune pendant 2 secondes (rouge est déjà bien)digitalWrite(jaune, HAUTE)-retard(2000)-// désactiver le rouge et le jaune, puis allumez vertdigitalWrite(jaune, FAIBLE)-digitalWrite(rouge, FAIBLE)-digitalWrite(vert, HAUTE)-retard(3000)-}

Terminé! Maintenant, télécharger et exécuter (assurez-vous de sélectionner la carte et le port de la Outils gt; Port et Outils gt; Planche menus). Vous devriez avoir un feu de travail qui change toutes les 15 secondes, comme celui-ci (accéléra):

single_traffic_light

Un passage pour piétons

Maintenant que vous connaissez les bases, nous allons l`améliorer. Ajouter un bouton-poussoir pour les piétons pour changer la lumière chaque fois qu`ils aiment:

arduino_traffic_light_with_button

Remarquez comment le feu de circulation est exactement le même que l`exemple précédent. Connectez le bouton à la broche numérique 12. Vous remarquerez que le commutateur a un 10k à haute impédance? résistance attachée, et vous pouvez vous demander pourquoi. On appelle cela une résistance de traction 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 fonctionne pas. Cela semble assez simple, mais dans un circuit logique, le courant doit être toujours couler soit dans un état haut ou bas (rappelez-vous - 1 ou 0, haut ou bas). Vous pourriez supposer qu`un bouton-poussoir qui est pas réellement poussé serait défini comme étant dans un état faible, 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 haute fiabilité, ni la lecture à l`état bas. Une résistance de traction vers le bas maintient une petite quantité de courant lorsque l`interrupteur est fermé, assurant ainsi une lecture faible état précis. Dans d`autres circuits logiques, vous pouvez trouver une résistance à la place pull-up - cela fonctionne sur le même principe, mais en sens inverse, en vous assurant que les valeurs par défaut de porte logique particulière à haute.

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é.

Le code

Commencez par ajouter une nouvelle variable au début du programme:

bouton int = 12- // interrupteur est sur la broche 12

Maintenant, dans la fonction de configuration, ajouter une nouvelle ligne de déclarer le commutateur comme entrée. J`ai aussi ajouté une seule ligne pour démarrer les feux de circulation dans la scène verte. 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(bouton, CONTRIBUTION)-digitalWrite(vert, HAUTE)-

Changer l`ensemble de la fonction de boucle à la place suivante:

vide boucle() {si (digitalRead(bouton) == HAUTE){retard(15)- // logiciel anti-rebondsi (digitalRead(bouton) == HAUTE) {// si le commutateur est élevée, à savoir. poussé vers le bas - changer les lumières!changeLights()-retard(15000)- // attendre 15 secondes}}}

Ça devrait le faire. Vous demandez peut-être pourquoi le bouton est contrôlé deux fois (digitalRead (bouton)), Séparés par un petit retard. On appelle cela debouncing. Tout comme la résistance déroulez était nécessaire pour le bouton, cette simple vérification arrête le code de détection d`interférences mineures comme une presse de bouton. Vous ne devez pas le faire (et il serait probablement très bien sans elle), mais il est une bonne pratique.

En attendant à l`intérieur du si déclaration pendant 15 secondes, les feux de circulation ne peut pas changer pendant au moins cette durée. Une fois que 15 secondes est écoulé, le redémarrage en boucle. Chaque redémarrage de la boucle, lire l`état du bouton à nouveau, mais si elle n`est pas pressé, la si déclaration active jamais, les lumières changent jamais, et il redémarre simplement à nouveau.

Voici à quoi cela ressemble (accéléré):

pelican_crossing

A Junction

Essayons un modèle plus avancé. Au lieu d`un passage pour piétons, modifier votre circuit d`avoir deux feux de circulation:

arduino_dual_traffic_light

Connectez le deuxième feu de circulation sur les broches numériques 11, 12 et 13.

Le code

Tout d`abord, attribuer de nouveaux axes de feux de circulation à des variables, et les configurer comme sorties, comme dans le premier exemple:

// une lumièreint red1 = dix-int jaune1 = 9-int green1 = 8-// lumière deuxint rouge2 = 13-int jaune2 = 12-int green2 = 11-vide installer(){// une lumièrepinMode(red1, SORTIE)-pinMode(jaune1, SORTIE)-pinMode(green1, SORTIE)-// lumière deuxpinMode(rouge 2, SORTIE)-pinMode(jaune2, SORTIE)-pinMode(green2, SORTIE)-}

Maintenant, mettez à jour votre boucle d`utiliser le code du premier exemple (au lieu du passage pour piétons):

vide boucle(){changeLights()-retard(15000)-}

Encore une fois, tout le travail est en cours dans la changeLights () fonction. Plutôt que d`aller rouge gt; rouge & jaune gt; vert, ce code alterne les feux de circulation. Quand on est sur le vert, l`autre sera sur le rouge. Voici le code:

vide changeLights(){// tourner les deux jaunes surdigitalWrite(green1, FAIBLE)-digitalWrite(jaune1, HAUTE)-digitalWrite(jaune2, HAUTE)-retard(5000)-// tourner les deux jaunes au large, et vert et rouge en facedigitalWrite(jaune1, FAIBLE)-digitalWrite(red1, HAUTE)-digitalWrite(jaune2, FAIBLE)-digitalWrite(rouge 2, FAIBLE)-digitalWrite(green2, HAUTE)-retard(5000)-// les deux jaunes sur à nouveaudigitalWrite(jaune1, HAUTE)-digitalWrite(jaune2, HAUTE)-digitalWrite(green2, FAIBLE)-retard(3000)-// tourner les deux jaunes au large, et vert et rouge en facedigitalWrite(green1, HAUTE)-digitalWrite(jaune1, FAIBLE)-digitalWrite(red1, FAIBLE)-digitalWrite(jaune2, FAIBLE)-digitalWrite(rouge 2, HAUTE)-retard(5000)-}

Voilà ce qui ressemble à (accéléra):

dual_traffic_light

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

Articles connexes