Une veilleuse fabriquée à partir d'une vieille ampoule, basée sur Arduino et WS2812. Connecter une photorésistance à un arduino et travailler avec un capteur de lumière

Pour une mission supplémentaire

    1 LED de plus

    1 résistance supplémentaire de 220 Ohm

    2 fils de plus

Diagramme schématique

Schéma d'implantation

Remarque

    Dans cette expérience, nous installons une photorésistance entre l'alimentation et l'entrée analogique, c'est-à-dire positionner R1 dans le circuit diviseur de tension. Nous en avons besoin pour que lorsque l'éclairage diminue, nous recevions une tension plus faible à l'entrée analogique.

    Essayez de positionner les composants de manière à ce que la LED n'allume pas la photorésistance.

Esquisser

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup () (pinMode (LED_PIN, OUTPUT);) void loop () ( // lit le niveau de luminosité. Au fait, déclarez // une variable et lui affecter une valeur à la fois int légèreté = analogRead (LDR_PIN); // lire la valeur du potentiomètre que nous ajustons // valeur seuil entre l'obscurité conditionnelle et la lumière int seuil = analogRead (POT_PIN); // déclare une variable booléenne et lui attribue une valeur // "c'est sombre maintenant?" Variables booléennes, contrairement // entiers, ne peut contenir qu'une des deux valeurs : // vrai ou faux. De telles valeurs // également appelé booléen. boolean tooDark = (légèreté< threshold) ; // utiliser le branchement de programme : le processeur exécutera l'un des // deux blocs de code, en fonction de la réalisation de la condition. // Si (anglais "if") est trop sombre ... si (trop sombre) ( // ... allumer l'éclairage digitalWrite (LED_PIN, HAUT); ) autre ( // ... sinon la lumière n'est pas nécessaire - éteignez-la digitalWrite (LED_PIN, LOW); ))

Explications du code

    Nous utilisons un nouveau type de variables - booléennes, qui ne stockent que les valeurs true (true, 1) ou false (false, 0). Ces valeurs sont le résultat de l'évaluation d'expressions booléennes. Dans cet exemple, l'expression booléenne est la légèreté< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    Nous mettons cette expression booléenne entre parenthèses juste pour plus de clarté. Il est toujours préférable d'écrire du code lisible. Dans d'autres cas, les parenthèses peuvent affecter l'ordre des actions, comme dans l'arithmétique normale.

    Dans notre expérience, l'expression booléenne sera vraie lorsque la valeur de luminosité est inférieure à la valeur seuil, car nous avons utilisé l'opérateur< . Мы можем использовать операторы > , <= , >=, ==,! =, qui signifient respectivement "supérieur à", "inférieur ou égal", "supérieur ou égal", "égal", "différent".

    Soyez particulièrement prudent avec l'opérateur logique == et ne le confondez pas avec l'opérateur d'affectation =. Dans le premier cas, nous comparons les valeurs des expressions et obtenons une valeur booléenne (vrai ou faux), et dans le second cas, nous attribuons à l'opérande de gauche la valeur de celui de droite. Le compilateur ne connaît pas nos intentions et ne lancera pas d'erreur, et nous pouvons modifier par inadvertance la valeur d'une variable, puis rechercher une erreur pendant une longue période.

    L'opérateur conditionnel if ("if") est l'une des clés de la plupart des langages de programmation. Avec son aide, nous pouvons non seulement effectuer une séquence d'actions strictement définie, mais également prendre des décisions sur la branche de l'algorithme à utiliser, en fonction de certaines conditions.

    L'expression booléenne légèreté< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    Avec le même succès, on pourrait dire « si l'éclairage est inférieur au niveau seuil, alors allumez la LED », c'est-à-dire passer l'expression booléenne entière au if :

si (légèreté< threshold) { // ... }

    L'instruction conditionnelle if doit être suivie d'un bloc de code qui est exécuté si l'expression logique est vraie. N'oubliez pas les deux accolades () !

    Si, dans le cas où l'expression est vraie, il suffit d'exécuter une instruction, vous pouvez l'écrire juste après if (...) sans accolades :

si (légèreté< threshold) digitalWrite(LED_PIN, HIGH) ;

    L'instruction if peut être étendue avec une construction else ("autrement"). Un bloc de code ou une seule instruction qui le suit ne sera exécuté que si l'expression booléenne dans if est évaluée à false. Les règles pour les accolades sont les mêmes. Dans notre expérience, nous avons écrit "s'il fait trop sombre, allumez la LED, sinon éteignez la LED".

Tout le monde a probablement eu un rêve dans son enfance (et plus d'un). Vous pouvez même essayer de vous souvenir du sentiment qui submerge l'âme d'un enfant lorsque ses rêves deviennent réalité, ou cette lointaine lueur familière dans ses yeux... Enfant, je rêvais d'avoir ma propre veilleuse.

Maintenant, je suis étudiant en 4ème année de BSUIR, et lorsqu'on nous a dit qu'un projet de cours sur les circuits peut se faire non pas sur du papier, mais sur un morceau de fer, il m'est venu à l'esprit : la veilleuse, que je voulais tant dans enfance, peut être fait par moi-même. De plus, pour faire non seulement un objet qui illuminera la pièce dans l'obscurité, mais un appareil qui peut être facilement contrôlé pour n'importe quelle humeur. Pourquoi pas? J'ai décidé d'ajouter la possibilité de changer de couleur à l'aide de mes mains : plus la main est rapprochée de la veilleuse, plus l'une des couleurs (RVB) brûle. Et j'aimerais aussi contrôler la veilleuse à l'aide de la télécommande.

Je dois avouer tout de suite que j'ai vu l'idée sur le site cxem.net. En bref, cet exemple utilisait une matrice RVB contrôlée par des registres à décalage et des capteurs de distance à ultrasons. Mais je pensais que la matrice brille exclusivement dans une direction, mais je voulais que la veilleuse brille sur les côtés.

Justification des éléments du régime


J'ai tourné mon attention vers les microcontrôleurs Arduino. UNO est une option tout à fait appropriée pour mon idée, d'une part, car c'est la plate-forme la plus populaire et le nombre de broches n'est pas trop grand, contrairement à Mega, et d'autre part, vous pouvez y connecter une alimentation externe, dans mon cas c'est 12V, contrairement au Nano, troisièmement... bon, je pense qu'on peut s'attarder sur ces deux points. La plate-forme est très populaire dans le monde entier en raison de la commodité et de la simplicité du langage de programmation, ainsi que de l'architecture ouverte et du code du programme.

Des informations plus détaillées sur ce forum peuvent être facilement trouvées sur Internet, je ne vais donc pas surcharger l'article.

Donc, les exigences de base pour le système. Obligatoire:
- des capteurs qui suivront la distance jusqu'à l'obstacle pour contrôler le système ;
- capteur de lecture des signaux de la télécommande ;
- des LED, qui fourniront la fonctionnalité d'éclairage nécessaire ;
- un bloc de contrôle qui gérera l'ensemble du système.

Des télémètres sont nécessaires comme capteurs de distance pour le projet, dont chacun correspondra à une couleur spécifique : rouge, vert, bleu. Les capteurs de distance suivront la distance de la main à la veilleuse, et plus la main est proche d'un capteur particulier, plus la couleur correspondant à ce télémètre brillera. A l'inverse, plus l'aiguille est éloignée, moins la tension est appliquée à la couleur correspondant au capteur.

Les télémètres les plus populaires en ce moment sont les Sharp GP2Y0A21YK et HC-SR04. Sharp GP2Y0A21YK est un télémètre infrarouge. Il est équipé d'un émetteur IR et d'un récepteur IR : le premier sert de source de faisceau dont le reflet est capté par le second. Dans le même temps, les rayons infrarouges du capteur sont invisibles à l'œil humain et, à une telle intensité, sont inoffensifs.

Comparé au transducteur à ultrasons HC-SR04, ce transducteur présente à la fois des avantages et des inconvénients. Les avantages incluent la neutralité et l'innocuité. Et les inconvénients sont une portée plus petite et une dépendance aux interférences externes, y compris certains types d'éclairage.

Les télémètres à ultrasons HC-SR04 ont été utilisés comme capteurs de distance pour le projet.
Le principe de fonctionnement du HC-SR04 est basé sur le phénomène bien connu de l'écholocation. Lors de son utilisation, l'émetteur génère un signal acoustique qui, après avoir été réfléchi par l'obstacle, retourne au capteur et est enregistré par le récepteur. Connaissant la vitesse de propagation des ultrasons dans l'air (environ 340 m/s) et le délai entre le signal émis et reçu, il est aisé de calculer la distance à la barrière acoustique.

L'entrée TRIG se connecte à n'importe quelle broche du microcontrôleur. Un signal numérique pulsé d'une durée de 10 s doit être appliqué à cette broche. Sur le signal à l'entrée TRIG, le capteur envoie une salve d'impulsions ultrasonores. Après avoir reçu le signal réfléchi, le capteur génère un signal d'impulsion sur la broche ECHO, dont la durée est proportionnelle à la distance à l'obstacle.

Capteur infrarouge. Bien entendu, le signal nécessaire à la télécommande sera lu et décodé à partir de ce capteur. Les TSOP18 ne diffèrent les uns des autres que par la fréquence. Le capteur VS1838B TSOP1838 a été sélectionné pour le projet.

Le projet était basé sur l'idée d'éclairer une pièce avec n'importe quelle couleur, ce qui signifie qu'il faudra 3 couleurs primaires à partir desquelles l'éclairage sera obtenu : rouge, vert, bleu. Par conséquent, le modèle LED SMD 5050RGB a été choisi, qui fera parfaitement face à la tâche.

Selon la quantité de tension appliquée à chaque LED, ils modifieront l'intensité de cet éclairage. La LED doit être connectée via une résistance, sinon nous risquons de ruiner non seulement elle, mais aussi l'Arduino. La résistance est nécessaire afin de limiter le courant sur la LED à une valeur acceptable. Le fait est que la résistance interne de la LED est très faible et, si vous n'utilisez pas de résistance, un tel courant traversera la LED, ce qui brûlera simplement à la fois la LED et le contrôleur.

Les bandes LED utilisées dans le projet sont alimentées en 12V.

En raison du fait que la tension aux bornes des LED à l'état "éteint" est de 6 V et qu'il est nécessaire de réguler l'alimentation, qui dépasse 5 V, il est nécessaire d'ajouter des transistors au circuit en mode clé. Mon choix s'est porté sur le modèle BC547c.

Considérons brièvement, pour ceux qui l'auraient oublié, le principe de fonctionnement d'un transistor n-p-n. Si la tension n'est pas appliquée du tout, mais simplement prendre et court-circuiter les bornes base et émetteur, même si ce n'est pas brièvement, mais à travers une résistance de plusieurs ohms, il s'avère que la tension base-émetteur est nulle. Par conséquent, il n'y a pas non plus de courant de base. Le transistor est fermé, le courant collecteur est négligeable, exactement le même courant initial. Dans ce cas, le transistor est dit dans un état de coupure. L'état opposé est appelé saturation : lorsque le transistor est complètement ouvert, de sorte qu'il n'y a nulle part où s'ouvrir davantage. Avec un tel degré d'ouverture, la résistance de la section collecteur-émetteur est si faible qu'il est tout simplement impossible d'allumer le transistor sans charge dans le circuit collecteur, il grillera instantanément. Dans ce cas, la tension résiduelle sur le collecteur peut être aussi faible que 0,3 ... 0,5V.

Ces deux états, saturation et coupure, sont utilisés lorsque le transistor fonctionne en mode clé comme un contact de relais normal. La signification principale de ce mode est qu'un courant de base faible contrôle un courant de collecteur important, qui est plusieurs dizaines de fois supérieur au courant de base. Un grand courant de collecteur est obtenu grâce à une source d'énergie externe, mais tout de même, l'amplification du courant, comme on dit, est évidente. Dans notre cas, le microcircuit, dont la tension de fonctionnement est de 5V, comprend 3 bandes à LED fonctionnant à partir de 12V.

Calculons le mode de fonctionnement de l'étage clé. Il est nécessaire de calculer l'amplitude de la résistance dans le circuit de base afin que les LED brûlent à pleine puissance. Une condition nécessaire dans le calcul pour que le gain de courant soit supérieur ou égal au quotient de la division du courant de collecteur maximal possible par le courant de base minimal possible :

Par conséquent, les bandes peuvent être pour une tension de fonctionnement de 220V et le circuit de base est contrôlé à partir d'un microcircuit avec une tension de 5V. Si le transistor est conçu pour fonctionner avec cette tension de collecteur, les LED s'allumeront sans problème.
La chute de tension à la jonction base-émetteur est de 0,77 V, à condition que le courant de base soit de 5 mA, le courant de collecteur soit de 0,1 A.
La tension aux bornes de la résistance de base sera :

La loi d'Ohm :

Sélectionnez la résistance de 8,2 kΩ dans la gamme de résistances standard. Ceci termine le calcul.

Je voudrais attirer votre attention sur un problème que j'ai rencontré. Lors de l'utilisation de la bibliothèque IRremote, l'Arduino était bloqué lors du réglage du bleu. Après une longue et minutieuse recherche sur Internet, il s'est avéré que cette bibliothèque utilise le timer 2 par défaut pour ce modèle Arduino. Les temporisateurs sont utilisés pour contrôler les sorties PWM.

Minuterie 0 (heure système, PWM 5 et 6);
Minuterie 1 (PWM 9 et 10);
Minuterie 2 (PWM 3 et 11).

J'avais à l'origine un PWM 11 utilisé pour régler la couleur bleue. Par conséquent, soyez prudent lorsque vous travaillez avec PWM, des minuteries et des bibliothèques tierces qui peuvent les utiliser. Il est étrange que sur la page principale du github rien n'ait été dit à propos de cette nuance. Si vous le souhaitez, vous pouvez décommenter la ligne avec la minuterie 1 et commenter 2.

La connexion des éléments sur la maquette est la suivante :

Après des tests sur la maquette, les phases « Mise en place des éléments sur la planche » et « Travail avec un fer à souder » ont commencé. Après le premier test de la planche finie, la pensée s'insinue dans ma tête : quelque chose s'est mal passé. Et ici commence la phase familière à beaucoup de "Travail minutieux avec le testeur". Cependant, les dysfonctionnements (plusieurs contacts voisins soudés accidentellement) ont été rapidement éliminés, et il est désormais la lumière espiègle tant attendue des LED.

De plus, l'affaire n'était que derrière l'affaire. Pour cette raison, du contreplaqué avec des trous pour nos capteurs a été coupé. La couverture arrière a été spécialement amovible pour que vous puissiez profiter de la vue de l'intérieur et, si vous le souhaitez, faire quelque chose pour finir ou modifier. Il dispose également de 2 trous pour reprogrammer la carte et l'alimentation.

Le corps a été collé avec un adhésif époxy à deux composants. Il convient de noter la particularité de cette colle, pour ceux qui ne l'ont jamais rencontrée auparavant. Ce compagnon est fourni dans deux récipients séparés, lors du mélange du contenu duquel une réaction chimique instantanée se produit. Après le mélange, vous devez agir rapidement, dans les 3-4 minutes. Pour une utilisation ultérieure, vous devez mélanger une nouvelle portion. Donc, si vous essayez de reproduire cela, mon conseil est de mélanger par petites portions et d'agir très rapidement, il n'y aura pas beaucoup de temps pour réfléchir. Par conséquent, il convient de déterminer à l'avance comment et où coller le boîtier. De plus, il ne sera pas possible de le faire en une seule séance.

Pour fixer les bandes à LED, un tube a été inséré dans le capot supérieur à travers lequel tous les fils sont parfaitement passés.

Lorsque la question de l'abat-jour s'est posée, je me suis souvenue comment, enfant, je faisais de l'artisanat à partir de simple fil, de colle et d'un ballon, qui servait de base. Le principe de l'abat-jour est le même, mais enrouler un polyèdre s'est avéré plus difficile qu'une boule. En raison de la pression exercée par les fils sur la structure, celle-ci a commencé à se rétrécir vers le haut et les fils ont commencé à tomber. De toute urgence, les mains dans la colle, il a été décidé de renforcer la structure par le haut. Et puis le CD est venu à la rescousse. En conséquence, nous avons obtenu la veilleuse suivante :

Ce que je veux dire à la fin

Que dois-je changer dans le projet ? Une sortie Arduino pourrait être utilisée au lieu de trois pour alimenter le signal TRIG des capteurs de distance. De plus, j'aurais prévu un trou pour le capteur IR (que j'avais oublié), qui, hélas, est toujours caché dans le cas où, bien sûr, il ne peut pas lire les signaux de la télécommande. Cependant, qui a dit que rien ne peut être ressoudé et percé ?

Je voudrais noter que ce fut un semestre intéressant, et une belle opportunité d'essayer de faire quelque chose qui ne soit pas sur papier, grâce à quoi je peux mettre une coche de plus à côté de l'item "rêve d'enfance". Et s'il vous semble qu'essayer quelque chose de nouveau est difficile et que vous ne savez pas quoi faire en premier, ne vous inquiétez pas. Une pensée traverse l'esprit de beaucoup : par où commencer ici et comment cela peut-il être fait ? Dans la vie, il y a beaucoup de tâches à partir desquelles vous pouvez vous perdre, mais vous n'avez qu'à essayer et vous remarquerez qu'avec une étincelle dans vos yeux, vous pouvez déplacer des montagnes, même si vous devez essayer un peu pour cela.

Pour notre prochain projet, nous utiliserons une photorésistance. Et nous envisagerons la mise en place d'une veilleuse dans la chambre, qui s'allumera automatiquement lorsqu'il fait noir et s'éteindra lorsqu'il fera jour.

La résistance d'une photorésistance dépend de la lumière qui y pénètre. En utilisant une photorésistance en conjonction avec une résistance conventionnelle de 4,7 kohms, nous obtenons un diviseur de tension dans lequel la tension traversant la photorésistance change, en fonction du niveau d'éclairage.

La tension du diviseur, nous l'appliquons à l'entrée de l'Arduino ADC. Là, nous comparons la valeur reçue avec un certain seuil et allumons ou éteignons la lampe.

Le schéma de principe du diviseur est présenté ci-dessous. Lorsque l'éclairement augmente, la résistance de la photorésistance chute et, par conséquent, la tension à la sortie du diviseur (et à l'entrée du CAN) augmente. Lorsque l'illumination tombe, c'est le contraire qui est vrai.

La photo ci-dessous montre le circuit assemblé sur une maquette. Les tensions 0V et 5V proviennent de l'Arduino. La jambe A0 est utilisée comme entrée ADC.

Un croquis Arduino est montré ci-dessous. Dans ce tutoriel, nous allumons et éteignons simplement la LED, qui est intégrée à la carte Arduino. Une lumière LED plus brillante, vous pouvez vous connecter à la jambe 13 (via une résistance de ~ 220 ohms). Si vous connectez une charge plus puissante, telle qu'une lampe à incandescence, elle doit être connectée via un relais ou un thyristor.

Il y a des sections commentées dans le code du programme, elles sont utilisées pour le débogage. Il sera possible de contrôler la valeur ADC (de 0 à 1024). De plus, vous devez modifier la valeur de 500 (seuil d'activation et de désactivation) dans le code par celle que vous sélectionnerez empiriquement en modifiant l'éclairage.

/ * ** Veilleuse ** ** www.hobbytronics.co.uk * / int sensorPin = A0; // définit le pied d'entrée ADC unsigned int sensorValue = 0; // valeur numérique de la configuration vide de la photorésistance () (pinMode (13, OUTPUT); Serial.begin (9600); // démarrer la sortie de données série (pour les tests)) boucle vide () (sensorValue = analogRead (sensorPin); / / lire la valeur de la photorésistance if (sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }

Bon après-midi ou nuit, comment faire autrement. Aujourd'hui, je vais partager des instructions pour faire une petite veilleuse. La base sera un diffuseur mat d'une ampoule LED grillée. Et à l'intérieur, nous mettrons les LED Arduino Pro Mini et SW2812. Je ne posterai qu'un seul croquis, mais il peut y avoir beaucoup d'options de couleurs ou des débordements. Commençons, comme toujours, par une liste des incontournables :

Diffuseur de lampe LED, culot E27
- Alimentation 5V
-Arduino Pro Mini 5V
- USB-TTL (pour télécharger le croquis sur arduino)
- LED WS2812
- Plastique fin
- Ruban adhésif double face
- La charge depuis le téléphone n'est pas nécessaire, mais fonctionne
- Fer à souder
- Fils
- Soudure, colophane
- Pistolet à colle chaude

Étape 1. Fabrication du boîtier.
Pour commencer, nous devons nous procurer un diffuseur. On prend une ampoule LED avec un culot E27. Mieux vaut, bien sûr, prendre votre ampoule déjà épuisée :

D'une main nous tenons l'ampoule par le culot et le boîtier en plastique, de l'autre nous saisissons le diffuseur et cassons l'ampoule. Le diffuseur doit s'éloigner facilement du corps, car il ne repose que sur le mastic :

Maintenant, nous devons faire une base sur laquelle nous collerons les LED. Pour ce faire, nous prenons du plastique mince, une couverture d'un classeur en plastique fera l'affaire. Maintenant, nous mesurons le diamètre intérieur de l'alésage du diffuseur et nous devons également mesurer la profondeur du diffuseur. Passons à la fabrication de la base. Il se présentera sous la forme d'un cylindre dont le diamètre devra être inférieur de 5 mm au diamètre intérieur de l'alésage du diffuseur. Et la hauteur est de 7 mm inférieure à la profondeur du diffuseur. Ça devrait ressembler a quelque chose comme ca:

Sur ce pour l'instant, terminons.

Étape 2. Électricien.
Comme je l'ai dit plus tôt, le contrôleur sera l'Arduino Pro Mini, la version 5 volts. La bande LED est connectée assez simplement, pour cela vous devez connecter le contact + 5V au plus de l'alimentation 5 volts, et GND au moins. Connectez la broche DIN (entrée) à la broche 6 de l'Arduino. Le port de connexion de la bande peut être remplacé par tout ce qui convient dans le croquis. L'Arduino sera alimenté par la même alimentation. Puisque nous utiliserons une alimentation stabilisée, nous connectons le plus de l'alimentation à la broche 5V de l'Arduino. Le moins de l'alimentation doit être connecté au GND de l'Arduino. Le schéma est le suivant :

Ainsi, une LED, à la luminosité maximale des trois couleurs, consomme 60 mA. J'en ai 25, ce qui signifie qu'il s'avère :

25 x 60 mA = 1500 mA = 1,5 A

C'est-à-dire que j'ai besoin d'une alimentation 5 V, 1,5 A. C'est le courant maximum qui sera lorsque toutes les LED seront allumées à la luminosité maximale des trois couleurs.

Prenons un vieux chargeur de téléphone comme source d'alimentation. L'alimentation doit être choisie pour 5 volts, et en terme de puissance, calculez combien de LED vous avez :

Nous en coupons la fiche et soudons les fils directement au ruban, n'oubliez pas de vérifier la polarité avec un testeur ou un multimètre. Vous devez également tirer les conclusions des fils pour l'alimentation de l'Arduino. Et le fil de signal de la bande à l'Arduino.

Dans la partie inférieure du cylindre on fait une fente afin de faire passer les contacts du ruban avec les fils soudés à l'intérieur :

J'ai inséré l'extrémité du ruban avec des fils dans la fente, fixez-le avec de la colle chaude. Ensuite, nous collons le linge en cercle, le soulevons légèrement pour obtenir une spirale du ruban. On colle aussi le scotch sur le haut du cylindre, le nombre de diodes dépend du diamètre, j'ai au maximum deux leds sur le haut en diagonale, et même pour que les contacts pendent :

Si vous faites la même chose, ne vous inquiétez pas, coupez simplement le ruban qui pend autour des bords et soudez les fils directement aux LED. Contacts WS2812 :

Attention, la bande LED du WS2812B a une direction, d'un côté (début ou entrée) elle a des contacts DIN, + 5V, GND. Et d'autre part (fin ou sortie) DO, + 5V, GND. Si vous soudez directement aux LED, regardez l'emplacement des contacts, en vous concentrant sur la clé (coin coupé). Pour faciliter l'installation, des flèches directionnelles sont dessinées sur le ruban. Portez une attention particulière à la transition vers le haut, un virage très prononcé est obtenu, il y a une forte probabilité de casser la bande. Je l'ai eu comme ça :


D'en haut, il a été soudé directement aux LED :

Et au milieu, le deuxième niveau, il y a quelques LED :

Et pour plus de fiabilité, nous remplissons les fils de colle chaude :

Maintenant, nous insérons notre cylindre avec des LED à l'intérieur de la boule de l'ampoule. À l'aide de colle thermofusible, nous fixons le cylindre à l'intérieur de la boule en cercle :

N'oubliez pas de faire une fente pour faire sortir le fil d'alimentation :

Étape 3. Préparez l'environnement et le micrologiciel.
Pour télécharger un sketch (ou firmware), nous utiliserons l'IDE Arduino. Téléchargez la dernière version à partir de la version officielle et installez-la.

Pour ce faire, téléchargez d'abord l'archive. Ensuite, nous décompressons cette archive. Et déplacez les fichiers décompressés dans le dossier "Bibliothèques", qui se trouve dans le dossier avec l'IDE Arduino installé. Cela peut être facilité. Lancez l'IDE Arduino. Ne décompressez pas l'archive téléchargée. Dans l'IDE Arduino, sélectionnez l'élément de menu Sketch - Connect Library. Tout en haut de la liste déroulante, sélectionnez l'élément "Add.Zip Library". Une boîte de dialogue devrait apparaître. Ensuite, sélectionnez notre bibliothèque, Adafruit_NeoPixel-master. Cela vaut la peine d'attendre un peu. Ouvrez à nouveau l'élément de menu Sketch - Connect Library. Maintenant, tout en bas de la liste déroulante, vous verrez la nouvelle bibliothèque. En redémarrant l'IDE Arduino, la bibliothèque peut être utilisée.

Téléchargement de mon croquis :

Il reste à télécharger le croquis sur l'Arduino. Nous utilisons Arduino Pro Mini. Cette version du populaire Arduino n'a pas de puce USB-TTL soudée sur la carte. Par conséquent, un USB-TTL séparé doit être utilisé pour communiquer avec l'ordinateur et télécharger le croquis. Connexion selon le schéma suivant :

Arduino - USB-TTL
Réception (P0) - Émission
Émission (P1) - Réception
GND - GND

L'alimentation USB-TTL proviendra du port USB de l'ordinateur. L'Arduino peut être alimenté par USB-TLL ou utiliser une alimentation externe. L'essentiel est que la broche GND USB-TTL et l'Arduino soient connectés. Le plus souvent en vente, vous rencontrez USB-TTL sans sortie de broche DTR. La broche DTR doit être connectée à Reset Arduino pour redémarrer automatiquement avant de télécharger le croquis. Si vous n'avez pas, comme moi, une telle sortie, vous devez redémarrer manuellement avant de télécharger le croquis. Nous agissons comme ceci : nous connectons tout le monde selon le schéma décrit ci-dessus, ouvrons l'IDE Arduino, ouvrons le sketch que vous avez téléchargé, cliquez sur le bouton Télécharger et voyez ce qui est écrit ci-dessous. Pendant que la "compilation" est en cours, on ne fait rien, on attend juste que le message "loading" apparaisse, il faut appuyer sur le bouton Reset de l'Arduino. S'il n'est pas pratique d'appuyer sur le bouton de la carte, vous pouvez faire ressortir le bouton connecté à GND et Reset. Ou amenez simplement les fils aux mêmes bornes et fermez-les au bon moment.

Je veux dire qu'il y a beaucoup d'options pour la lueur de la veilleuse, j'ai noté dans le croquis seulement quelques-unes que j'aimais moi-même. Vous pouvez modifier le croquis comme vous le souhaitez. Expérimentez et choisissez ce que vous préférez.

Dans cette expérience, la LED doit s'allumer lorsque le niveau d'éclairage tombe en dessous du seuil défini par le potentiomètre.

LISTE DES PIÈCES EXPÉRIMENTALES

- 1 carte Arduino Uno ;

- 1 planche à pain sans soudure ;

- 1 DEL ;

- 1 photorésistance ;

- 1 résistance de 220 Ohm, 1 résistance de 10 kOhm ;

- 1 résistance variable (potentiomètre) ;

- 10 fils "papa-papa".

PIÈCES D'AFFECTATION SUPPLÉMENTAIRES

1 LED supplémentaire ;

Une autre résistance d'une valeur nominale de 220 ohms ;

2 fils de plus.

SCHÉMA PRINCIPAL

SCHÉMA À BORD

ESQUISSER

télécharger le croquis pour Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup () (pinMode (LED_PIN, OUTPUT);) void loop () (// lire le niveau de lumière. Au fait, vous pouvez déclarer // une variable et affecter une valeur à elle juste int lightness = analogRead (LDR_PIN); // lire la valeur du potentiomètre, que nous ajustons // la valeur seuil entre l'obscurité conditionnelle et la lumière int threshold = analogRead (POT_PIN); // déclarer une variable booléenne et attribuez-lui une valeur // "est-ce qu'il fait noir maintenant". Les variables booléennes, contrairement aux // nombres entiers, ne peuvent contenir qu'une des deux valeurs : // vrai ou faux. Ces valeurs sont // également appelées booléennes. Boolean tooDark = (légèreté< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

EXPLICATION DU CODE

  • Nous utilisons un nouveau type de variables - booléen qui ne stockent que des valeurs vrai (vrai, 1) ou faux (faux, 0). Ces valeurs sont le résultat de l'évaluation d'expressions booléennes. Dans cet exemple, l'expression booléenne est légèreté< threshold ... En langage humain, cela ressemble à : « illumination en dessous du niveau de seuil ». Une telle déclaration sera vraie lorsque l'éclairage est inférieur au niveau de seuil. Le microcontrôleur peut comparer les valeurs des variables légèreté et seuil, qui, à leur tour, sont les résultats des mesures, et calculent la vérité de l'expression logique.
  • Nous mettons cette expression booléenne entre parenthèses juste pour plus de clarté. Il est toujours préférable d'écrire du code lisible. Dans d'autres cas, les parenthèses peuvent affecter l'ordre des actions, comme dans l'arithmétique normale.
  • Dans notre expérience, l'expression booléenne sera vraie lorsque la valeur légèreté moins de valeur seuil parce que nous avons utilisé l'opérateur < ... On peut utiliser des opérateurs > , <= , >= , = = , != , qui signifient respectivement "supérieur à", "inférieur ou égal", "supérieur ou égal", "égal", "différent".
  • Soyez particulièrement prudent avec l'opérateur booléen = = et ne le confondez pas avec l'opérateur d'affectation = ... Dans le premier cas, nous comparons les valeurs des expressions et obtenons une valeur booléenne (vrai ou faux), et dans le second cas, nous attribuons à l'opérande de gauche la valeur de celui de droite. Le compilateur ne connaît pas nos intentions et ne lancera pas d'erreur, et nous pouvons modifier par inadvertance la valeur d'une variable, puis rechercher une erreur pendant une longue période.
  • Opérateur conditionnel sisi") - l'une des clés de la plupart des langages de programmation. Avec son aide, nous pouvons non seulement effectuer une séquence d'actions strictement définie, mais également prendre des décisions sur la branche de l'algorithme à utiliser, en fonction de certaines conditions.
  • Expression booléenne légèreté< threshold il y a un sens : vrai ou faux... Nous l'avons calculé et mis dans une variable booléenne trop sombre("Trop sombre"). Ainsi, nous disons en quelque sorte "s'il fait trop sombre, alors allumez la LED"
  • Avec le même succès, on pourrait dire « si l'éclairage est inférieur au niveau seuil, alors allumez la LED », c'est-à-dire Transférer à si l'expression booléenne entière :
si (légèreté< threshold) { // ... }
  • Derrière l'instruction conditionnelle si un bloc de code doit être suivi, qui est exécuté si l'expression logique est vraie. N'oubliez pas les deux accolades {} !
  • Si, dans le cas où l'expression est vraie, il suffit d'exécuter une instructions, vous pouvez l'écrire juste après si (...) sans accolades :
si (légèreté< threshold) digitalWrite(LED_PIN, HIGH);
  • Opérateur si peut être étendu par construction autre("autrement"). Un bloc de code ou une seule instruction qui le suit ne sera exécuté que si l'expression booléenne dans si a le sens faux , « Couché". Les règles pour les accolades sont les mêmes. Dans notre expérience, nous avons écrit "s'il fait trop sombre, allumez la LED, sinon éteignez la LED".

QUESTIONS À VÉRIFIER PAR VOUS-MÊME

  1. Si nous installons une photorésistance entre l'entrée analogique et la masse, notre appareil fonctionnera dans l'autre sens : la LED s'allumera lorsque la quantité de lumière augmentera. Pourquoi?
  2. Quel résultat de l'appareil obtiendrons-nous si la lumière de la LED tombe sur la photorésistance ?
  3. Si nous avons installé la photorésistance comme indiqué dans la question précédente, comment devons-nous modifier le programme pour que l'appareil fonctionne correctement ?
  4. Disons que nous avons un code si (condition) (action ;)... Dans quels cas sera-t-il effectué action ?
  5. A quelles valeurs oui expression x + y> 0 sera vrai si x> 0 ?
  6. Est-il nécessaire d'indiquer quelles instructions exécuter si la condition de l'instruction si faux?
  7. Quelle est la différence entre l'opérateur = = de l'opérateur = ?
  8. Si on utilise la construction si (condition) action1 ; sinon action2;, peut-il y avoir une situation où aucune des actions ne sera exécutée ? Pourquoi?

TÂCHES POUR LA SOLUTION INDÉPENDANTE

  1. Réécrire le programme sans utiliser de variable trop sombre tout en maintenant la fonctionnalité de l'appareil.
  2. Ajoutez une autre LED au circuit. Complétez le programme de sorte que lorsque l'éclairage tombe en dessous de la valeur seuil, une LED s'allume et lorsque l'éclairage tombe en dessous de la moitié de la valeur seuil, les deux LED s'allument.
  3. Changez le circuit et le programme pour que les LED s'allument de la même manière, mais brillent d'autant plus fort, moins la lumière tombe sur la photorésistance.

2021 wisemotors.ru. Comment ça fonctionne. Le fer. Exploitation minière. Crypto-monnaie.