Table des matières:

Sélecteur de réglage DIP à l'aide d'une broche : 4 étapes
Sélecteur de réglage DIP à l'aide d'une broche : 4 étapes

Vidéo: Sélecteur de réglage DIP à l'aide d'une broche : 4 étapes

Vidéo: Sélecteur de réglage DIP à l'aide d'une broche : 4 étapes
Vidéo: Techniques de Dessoudure 2024, Juillet
Anonim
Sélecteur de réglage DIP utilisant 1 broche
Sélecteur de réglage DIP utilisant 1 broche

Il y a quelque temps, j'ai travaillé sur un projet de "boîte à musique" qui devait choisir entre jusqu'à 10 extraits de morceaux différents. Un choix naturel pour choisir une mélodie spécifique était un commutateur DIP à 4 broches puisque 4 commutateurs en fournissent 24=16 réglages différents. Cependant, la mise en œuvre de la force brute pour cette approche nécessite 4 broches de périphérique, une pour chaque commutateur. Comme je prévoyais d'utiliser l'ATtiny85 pour le développement, la perte de 4 broches était un peu trop importante. Heureusement, je suis tombé sur un article qui décrit une méthode ingénieuse pour utiliser 1 broche analogique pour gérer plusieurs entrées de commutateur.

La technique multi-switch;1-input utilise un circuit diviseur de tension pour fournir une valeur entière unique pour chacune des 16 combinaisons de réglage de commutateur possibles. Cet ensemble de 16 identifiants entiers est ensuite utilisé dans le programme applicatif pour associer une action à un réglage.

Cette instructable utilise la méthode multi-commutateur pour mettre en œuvre la sélection de la mélodie pour l'application de la boîte à musique. La mélodie sélectionnée est ensuite jouée via un buzzer piézo à l'aide de la fonction de tonalité Arduino.

Étape 1: Matériel requis

Matériel requis
Matériel requis

L'utilisation de l'UNO comme plate-forme de mise en œuvre minimise le nombre de composants matériels requis. La mise en œuvre de la méthode d'entrée multi-commutateur ne nécessite qu'un commutateur DIP à 4 broches, les 5 résistances utilisées pour le diviseur de tension et un fil de raccordement pour les connexions. Un buzzer piézo est ajouté à la configuration pour la mise en place du sélecteur de mélodie de boîte à musique. En option, selon le type de commutateur DIP utilisé, il est utile d'utiliser une prise 2x4 à 8 broches pour connecter le commutateur DIP à la planche à pain, car les broches du commutateur DIP standard semblent conçues pour être soudées à une carte perforée ne se branchant pas directement sur une planche à pain. La prise stabilise les connexions des commutateurs DIP et empêche le commutateur d'être facilement soulevé lors du réglage des commutateurs à bascule.

Nom Source possible Comment utilisé
commutateur DIP à 4 broches Sélection de mélodie
Prise 2x4 broches (en option) Amazone Les poteaux de la plupart des commutateurs DIP ne tiennent pas très bien le commutateur dans une planche à pain. Une prise permet de rendre la connexion plus solide. Une alternative consiste à trouver un commutateur DIP qui est vraiment conçu pour une utilisation sur planche à pain avec des broches IC ordinaires.

résistances:

  • 10K x2
  • 20K
  • 40K
  • 80K
Mettre en œuvre un diviseur de tension
buzzer piézo passif Amazone Jouez la mélodie telle que pilotée par l'application via la fonction de tonalité Arduino

Étape 2: Explication de la méthode à plusieurs commutateurs

Explication de la méthode à plusieurs commutateurs
Explication de la méthode à plusieurs commutateurs

Cette section traite des concepts sous-jacents de la méthode à commutateurs multiples et développe les équations requises pour le calcul autonome d'identifiants uniques pour chacune des 16 configurations de réglage de commutateur DIP possibles. Ces identifiants peuvent ensuite être utilisés dans un programme d'application pour associer une configuration de commutateur à une action. Par exemple, vous voudrez peut-être que le réglage - allumer 1, éteindre 2, éteindre 3, éteindre 4 (1, 0, 0, 0) - pour jouer à Amazing Grace et (0, 1, 0, 0) pour jouer Lion dort ce soir. Par souci de concision et de concision, les identifiants de configuration sont appelés comparateurs dans la suite du document.

Image
Image

Le concept de base de la méthode multi-commutateur est le circuit diviseur de tension qui se compose de 2 résistances en série connectées à une tension d'entrée. Le fil de tension de sortie est connecté entre les résistances, R1 et R2, Comme montré ci-dessus. La tension de sortie du diviseur est calculée comme la tension d'entrée multipliée par le rapport de la résistance R2 à la somme de R1 et R2 (équation 1). Ce rapport est toujours inférieur à 1 donc la tension de sortie est toujours inférieure à la tension d'entrée.

Comme indiqué dans le schéma de conception ci-dessus, le multi-commutateur est configuré comme un diviseur de tension avec R2 fixe et R1 égale à la résistance composite/équivalente pour les 4 résistances de commutateur DIP. La valeur de R1 dépend des commutateurs DIP activés et, par conséquent, contribue à la résistance composite. Étant donné que les résistances du commutateur DIP sont en parallèle, l'équation de calcul de la résistance équivalente est exprimée en termes d'inverse des résistances de composant. Pour notre configuration et le cas où tous les interrupteurs sont allumés, l'équation devient

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

donner R1 = 5333,33 volts. Pour tenir compte du fait que la plupart des paramètres ont au moins un des commutateurs désactivé, l'état du commutateur est utilisé comme multiplicateur:

1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

où le multiplicateur d'état, sje, est égal à 1 si l'interrupteur est allumé et égal à 0 si l'interrupteur est éteint. R1 peut maintenant être utilisé pour calculer le rapport de résistance nécessaire dans l'équation 1. En utilisant à nouveau le cas où tous les commutateurs sont activés comme exemple

RAPPORT = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

La dernière étape du calcul de la valeur prédite du comparateur est la multiplication du RATIO par 1023 afin d'émuler l'effet de la fonction analogRead. L'identifiant du cas où tous les interrupteurs sont allumés est alors

comparateur15 = 1023*.6522 = 667

Toutes les équations sont maintenant en place pour le calcul des identifiants pour les 16 réglages de commutateurs possibles. Résumer:

  1. R1 est calculé à l'aide de l'équation 2
  2. R1 et R2 sont utilisés pour calculer le RATIO de résistance associé
  3. le RATIO est multiplié par 1023 pour obtenir la valeur du comparateur
  4. en option, la tension de sortie prédite peut également être calculée comme RATIO*Vin

L'ensemble de comparateurs ne dépend que des valeurs de résistance utilisées pour le diviseur de tension et constitue une signature unique pour la configuration. Étant donné que les tensions de sortie du diviseur fluctuent d'une exécution à l'autre (et d'une lecture à l'autre), ce qui est unique dans ce contexte signifie que même si deux ensembles d'identifiants peuvent ne pas être exactement les mêmes, ils sont suffisamment proches pour que les différences entre les comparateurs de composants se situent dans une petite pré- intervalle spécifié. Le paramètre de taille d'intervalle doit être choisi suffisamment grand pour tenir compte des fluctuations attendues, mais suffisamment petit pour que les différents réglages de commutateur ne se chevauchent pas. Habituellement, 7 fonctionne bien pour l'intervalle demi-largeur.

Un ensemble de comparateurs pour une configuration particulière peut être obtenu par plusieurs méthodes - exécutez le programme de démonstration et enregistrez les valeurs pour chaque paramètre; utilisez la feuille de calcul dans la section suivante pour calculer; copier un ensemble existant. Comme indiqué ci-dessus, tous les ensembles seront probablement légèrement différents mais devraient fonctionner. Je suggère d'utiliser l'ensemble d'identifiants de l'auteur de la méthode pour la configuration à plusieurs commutateurs et la feuille de calcul de la section suivante si l'une des résistances est modifiée de manière significative ou si plusieurs résistances sont ajoutées.

Le programme de démonstration suivant illustre l'utilisation des comparateurs pour identifier le réglage actuel du commutateur DIP. Dans chaque cycle de programme, une analogRead est effectuée pour obtenir un identifiant pour la configuration actuelle. Cet identifiant est ensuite comparé à travers la liste de comparateurs jusqu'à ce qu'une correspondance soit trouvée ou que la liste soit épuisée. Si une correspondance est trouvée, un message de sortie est émis pour vérification; s'il n'est pas trouvé, un avertissement est émis. Un délai de 3 secondes est inséré dans la boucle afin que la fenêtre de sortie série ne soit pas submergée de messages et pour laisser le temps de réinitialiser la configuration des commutateurs DIP.

//-------------------------------------------------------------------------------------

// Programme de démonstration pour lire la sortie du diviseur de tension et l'utiliser pour identifier la // configuration actuelle du commutateur DIP en recherchant la valeur de sortie dans un tableau de // valeurs de comparaison pour chaque réglage possible. Les valeurs du tableau de recherche peuvent // être obtenues à partir d'une exécution précédente de la configuration ou par le biais d'un calcul // basé sur les équations sous-jacentes. //------------------------------------------------ -------------------------------------- comparateur int[16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Définir les variables de traitement int dipPin = A0; // broche analogique pour l'entrée du diviseur de tension int dipIn = 0; // maintient la sortie de tension du diviseur traduite par analogRead int count = 0; // compteur de boucle int epsilon = 7; // intervalle de comparaison demi-largeur bool dipFound = false; // true si la sortie du diviseur de tension actuelle est trouvée dans la table de recherche void setup() { pinMode(dipPin, INPUT); // configurer la broche du diviseur de tension en tant que INPUT Serial.begin (9600); // activer la communication série } void loop() { delay(3000); // empêche la sortie de défiler trop vite // Initialise les paramètres de recherche count = 0; dipFound = false; // Lire et documenter la tension de sortie actuelle dipIn = analogRead(dipPin); Serial.print("sortie du diviseur "); Serial.print(dipIn); // Recherche dans la liste des comparateurs la valeur actuelle while((count < 16) && (!dipFound)) { if(abs(dipIn - comparator[count]) <= epsilon) { // l'a trouvé dipFound = true; Serial.print(" trouvé à l'entrée "); Serial.print(count); Serial.println(" value " + String(comparator[count])); Pause; } compter++; } if(!dipFound) { // la valeur n'est pas dans la table; ne devrait pas se produire Serial.println(" OOPS! Not found; mieux vaut appeler Ghost Busters"); } }

Étape 3: feuille de calcul du comparateur

Image
Image

Les calculs pour les 16 valeurs du comparateur sont donnés dans la feuille de calcul ci-dessus. Le fichier Excel qui l'accompagne est disponible en téléchargement au bas de cette section.

Les colonnes A-D de la feuille de calcul enregistrent les valeurs de résistance des commutateurs DIP et les 16 réglages de commutateurs possibles. Veuillez noter que le commutateur DIP matériel illustré dans le schéma de conception fritzing est en fait numéroté de gauche à droite au lieu de la numérotation de droite à gauche indiquée dans la feuille de calcul. J'ai trouvé cela un peu déroutant, mais l'alternative ne place pas la configuration "1" (0, 0, 0, 1) en premier de la liste. La colonne E utilise la formule 2 de la section précédente pour calculer la résistance équivalente du diviseur de tension R1 pour le réglage. La colonne F utilise ce résultat pour calculer le RATIO de résistance associé, et, enfin, la colonne G multiplie le RATIO par la valeur analogRead max (1023) pour obtenir la valeur de comparateur prédite. Les 2 dernières colonnes contiennent les valeurs réelles d'une exécution du programme de démonstration ainsi que les différences entre les valeurs prévues et réelles.

La section précédente mentionnait trois méthodes pour obtenir un ensemble de valeurs de comparateur, y compris l'extension de cette feuille de calcul si les valeurs de résistance sont modifiées de manière significative ou si plusieurs commutateurs sont ajoutés. Il semble que de petites différences dans les valeurs de résistance n'affectent pas de manière significative les résultats finaux (ce qui est bien car les spécifications de résistance donnent une tolérance, disons 5%, et la résistance est rarement égale à sa valeur réelle déclarée).

Étape 4: Jouez un morceau

Jouer un air
Jouer un air

Pour illustrer comment la technique multi-switch peut être utilisée dans une application, le programme de démonstration de comparaison de la section " Explication de la méthode " est modifié pour implémenter le traitement de sélection de mélodie pour le programme de boîte à musique. La configuration de l'application mise à jour est indiquée ci-dessus. Le seul ajout au matériel est un buzzer piézo passif pour jouer la mélodie sélectionnée. Le changement de base apporté au logiciel est l'ajout d'une routine pour jouer une mélodie, une fois identifiée, à l'aide du buzzer et de la routine de tonalité Arduino.

Les extraits de morceaux disponibles sont contenus dans un fichier d'en-tête, Tunes.h, avec la définition des structures de support nécessaires. Chaque morceau est défini comme un ensemble de structures liées aux notes contenant la fréquence et la durée de la note. Les fréquences des notes sont contenues dans un fichier d'en-tête séparé, Pitchs.h. Le programme et les fichiers d'en-tête sont disponibles en téléchargement à la fin de cette section. Les trois fichiers doivent être placés dans le même répertoire.

La sélection et l'identification se déroulent comme suit:

  1. L'"utilisateur" règle les dip switchs dans la configuration associée à la mélodie souhaitée
  2. à chaque cycle de boucle de programme, l'identifiant du réglage actuel du commutateur DIP est obtenu via analogRead
  3. L'identifiant de configuration de l'étape 2 est comparé à chacun des comparateurs de la liste de mélodies disponible
  4. Si une correspondance est trouvée, la routine playTune est appelée avec les informations nécessaires pour accéder à la liste des notes de mélodie

    En utilisant la fonction de tonalité Arduino, chaque note est jouée via le buzzer

  5. Si aucune correspondance n'est trouvée, aucune action n'est entreprise
  6. répéter 1-5

Les réglages des commutateurs DIP pour les morceaux disponibles sont indiqués dans le tableau ci-dessous, où 1 signifie que le commutateur est activé, 0 qu'il est désactivé. Rappelons que l'orientation du dip switch place le switch 1 dans la position la plus à gauche (celle associée à la résistance 80K).

NOM Commutateur 1 Commutateur 2 Commutateur 3 Commutateur 4
garçon Danny 1 0 0 0
Petit ours 0 1 0 0
Lion dort ce soir 1 1 0 0
Personne ne connaît le problème 0 0 1 0
Amazing Grace 0 0 0 1
Espace vide 1 0 0 1
MoqueurBird Hill 1 0 1 1

La qualité sonore d'un buzzer piezo n'est certes pas excellente mais elle est au moins reconnaissable. En fait si les tons sont mesurés, ils sont très proches de la fréquence exacte des notes. Une technique intéressante utilisée dans le programme consiste à stocker les données de syntonisation dans la section mémoire flash/programme au lieu de la section mémoire de données par défaut en utilisant la directive PROGMEM. La section de données contient les variables de traitement du programme et est beaucoup plus petite, environ 512 octets pour certains des microcontrôleurs ATtiny.

Conseillé: