projet 7 synthé 4 notes [arduino uno]

Bonjour,

J'ai réalisé le projet 7 du livre fournis avec la arduino uno sans souci.

Pour pousser un peut plus loin l’expérience j'ai voulu ajouter une 5eme note mais sans succès.
J'ai pataugé pendant une après midi à chercher la résistance pour le 5eme switch.

En essayant de la placer à 3,5V sur l'échelle de 0.49 à 5V

Puisque la sorti A0 est un convertisseur analogique / numérique (ADC) je pensai qu'il était possible de fractionner l'échelle de 1024 valeur de l'ADC et donc de passer sur 5 valeur analogique.

Au multimètre j'ai bien mes 4 valeur en volt, 0.49V / 2.5V / 4,5V / 5V (de mémoire...)
J'ai modifier le code en ajoutant la valeur en Hz de la note 'sol' ainsi que les condition pour les valeur reçu sur A0, sur l'échelle de 1024 toujours.

--

Où est mon erreur ? puisque je ne suis pas arrivé à obtenir 3,5V dans la plage des 5 valeurs analogique, mal grès mes calcul.
je début sous arduino et me cours d'électronique remonte à très loin.

cordialement,
major_ghz.

p.s. je n'ai pas trouvé de référence web de ce livre fournis avec la arduino uno, car il est évident que sans cette référence on peut difficilement comprendre de quoi il sagit.

Bonjour,
Difficile de répondre sans schéma et sans ton code.
Donne nous au minium le code pour voir ce que l'on peut en déduire.

Le principe de base quand on veut détecter l'appui d'un des boutons qui se partagent une seule entrée analogique (A0) est de mettre des résistances selon une progression croissante.
Avec 5 boutons :


Si tu rajoutes un bouton au milieu de la série, ça modifie les seuils des autres ponts diviseurs.

merci pour ta réponse christian_R,

je me demandai s'il fallait pas modifier toutes les résistances...

du coups :

23.7 ADC Conversion Result

After the conversion is complete (ADIF is high
), the conversion result can be found in the ADC
Result Registers (ADCL, ADCH).
For single ended conversion, the result is

ADC = Vin * 1024 / Vref

where V
IN
is the voltage on the selected input pin and V
REF
the selected voltage reference (see
Table 23-3 on page 262
and
Table 23-4 on page 263
). 0x000 represents analog ground, and
0x3FF represents the selected reference voltage minus one LSB.

ATmega48PA/88PA/168PA/328P datasheet

sachant que j'ai 5V en Vcc
et que mes Vref seront 1,2,3,4,5 V +/- les tolérences

pont diviseur si j'ai bonne mémoire :
R1+R2 / R1*R2

il me reste donc plus qu'a calculer les Req pour avoir ses tensions...

et calculer le résultat du registre...

je poste résolu si ça marche jeudi,
cdlt.

apparemment j'ai dit un grosse connerie, c'est pas

Vref = Vcc * (R1*R2 / R1 + R2)

mais

Vref = Vcc * (R2 / R1 + R2)

mais ça remonte à trop loin, impossible à faire ne connaissant pas une des deux valeur.

sachant que R2 est ma résistance équivalente.

je me suis bien pris la tête et je doit dire qu'elle manque d'élasticité :frowning:

un petit coups de pousse ne serai pas de refus,
cdlt,
major.

à moins de prendre le valeur tel quel mais sur le schéma du livre il y a une résistance de 1Mohm entre le dernier switch et la mass.

donc plutôt partir sur 4,3,2,1,0V

pardon si je semble abrutis, mais pas facile de se remettre au maths après des problème de santé.

cdlt

p.s. si vous avez des jeux amusant pour faire travailler des neurones malade je suis preneur.

Bonjour
Tu peux mettre "n'importe quoi" comme valeur de résistance puis ensuite calculer les valeurs de tension que tu vas retrouver en sortie. Il suffit de faire les bonnes comparaisons dans ton prog et ça roule. sur mon projet actuel, j'en ai 8 de boutons et je peux en mettre bien plus. J'ai fais un petit prog qui m'affiche la valeur d'un analogRead(a0) sur le seriel. Après avoir appuyé sur tous les bouton en relevant la valeur, j'ai fais un SWITCH CASE ( avec hystérésis). Je n'ai aucun problème de fausse valeur. J'en ai fais une lib avec un debounce logiciel + détection appui continu avec réémission du code de la touche comme un clavier de PC.

En fait, j'ai même fais plus mais c'était a l’époque ou je testé plein de truc. La ça me calcul directement les valeurs en fonction du nombre de boutons. Si mon clavier fait 5 touches ou 8, j'ai juste a changer le chiffre dans l'init de la lib. Il me semble que j'ai utiliser que des résistances de 1k mais je n'ai pas mon clavier, je ne peux pas vérifier. Je fais toujours un SWITCH CASE mais avec les valeur retournées par la lib. C'est très simple et très souple.

Je peux si tu veux donner la lib et un schema mais pas avant demain soir minimum.

J’espère ne pas t'avoir embrouillé.

A+

La seule raison à vouloir calculer des rapports précis, ce serait si la valeur mesurée est convertie immédiatement en fréquence. Sinon, comme dit plus haut, il suffit de déterminer la touche enfoncée et de là calculer l'action adéquate.

Manipuler des valeurs compréhensives de tension est plus simple pour la gestion du programme.
D'autant que ce n'est pas difficile à faire.
Il faut commencer par choisir les valeurs de tensions que tu désires : exemple : 0V, 1V, 2V, 3V 4V

En reprenant la numérotation du schéma joint :
Si Right = 1 (poussé) Vs = 0V -> cas hyper simple n'importe quelle valeur pour R2 convient

Si Up = 1 on doit avoir 1V
Calculons : on a un pont potentiométrique formé par R2 et R3.
Si on appelle alpha le rapport 1V/5V et Ro la valeur de R2 on aura une formule générale qui s'appliquera pour tous les autres cas.
alpha = Vs/Valim = R3 (R3+R2) = R3(R3+Ro)
R3 = alpha*Ro / (1 -alpha)

Premier calcul pour Up = 1
alpha = 1V/5V = 0,2
donc R3 = 0,250*Ro

Deuxième calcul Down = 1
alpha = 2V/5V = 0,4
donc R'4 = 0,666Ro
--> subtilité pourquoi R' -> parce qu'en fait on n'a pas calculé R4 mais R3+R4 donc R4 = 0,666
Ro - 0,25Ro = 0,416Ro
et ainsi de suite pour les autre interrupteurs.

Au final on trouve
R3 = 0,250 Ro
R4 = 0,416 Ro
R5 = 0,84 Ro
R6 = 2,50 Ro

Il ne reste plus qu'a fixer arbitrairement une valeur pour Ro (=R2 sur le schéma).
Toute valeur comprise entre 1k et 10k conviendra parfaitement.

Il existe également un autre schéma -> voir "Réseau R/2R" qui n'utilise que 2 valeurs de résistance (donc aucun calcul à faire) mais qui ne donne pas des niveaux de sortie équidistants. Il est utilisé dans les conversions Numérique/Analogique

Et pour une échelle logarithmique ? :grinning:

C'est exactement le même calcul :grin:
C'est une autre demande :Les tensions de sorties ne sont plus choisies pour simplifier la vie mais étagées logarithmiquement.

Mais il me semble que le sujet de départ était d'ajouter un 5 eme bouton :grin:

Moi, je mettrais que des résistances de 1K. quelque soit le nombre de boutons, on aurait une tension U(n) = VCC x n/(1+n), soit une valeur numérisée de A(n) = 1024 x n/(1+n).

Avec la tolérance courante 20%, on arrive à Amax(n) : 1536 x n/(1+n) et Amin(n) : 682 x n/(1+n), cependant, ça limite les valeurs possibles de n (le nombre de boutons)...

OK, je m'aperçois qu'avec 3 boutons, dans le cas le plus défavorable, les valeurs se croisent... mais combien de chance a-t-on de tomber sur des résistances comme par zazard aussi défaillantes?

Le plus simple, c'est de faire un scan des boutons et relever les valeurs réelles, comme le fait caape

Le scan est sans doute la meilleure solution pour un prototype unique.

Evidemment pour de la fabrication en série il faudrait choisir des résistances qui répartissent les tensions de façon à peu près équidistantes pour éviter tout recouvrement.

Remarque 1 : les résistances à piquer vendues en ruban proviennent du même lot de fabrication : elles sont très homogènes entre elles.
La valeur moyenne sera peut être à 15% du nominal mais, entre elles, elle seront à mieux que 1%.
C'est pour cette raison que les réseaux R/2R peuvent être très précis quand on utilise des résistances provenant d'un même ruban

Remarque 2 Plus on a à corriger plus c'est difficile à faire. C'est valable pour absolument tout. Donc je préfère ne pas mettre les valeurs "en vrac et voir ce que ça donne" . Un peu de calcul préparatoire ne peut pas faire de mal.
On peut aussi calculer ce que cela donne en fonction de ses fonds de tiroir.

Remarque 3 Avec 5 boutons il n'y a aucun risque de recouvrement ou alors il faut s'y prendre très mal.

68tjs:
Remarque 3 Avec 5 boutons il n'y a aucun risque de recouvrement ou alors il faut s'y prendre très mal.

+1

mon calcul de tolérance était mauvais, car j’appliquais +20% et -20% à une même résistance... alors qu'en fait, même avec des tolérances pourries, les min et max varient très peu...

Bonsoir,

Super_Cinci:
+1

mon calcul de tolérance était mauvais, car j’appliquais +20% et -20% à une même résistance... alors qu'en fait, même avec des tolérances pourries, les min et max varient très peu...

Un élément extrêmement important dont il faut absolument tenir compte, la loi de Murphy.
:wink: