Bonjour,
J'ai réalisé un détecteur de métaux par boucle à induction : le principe est que lorsque j'approche un objet métallique de ma bobine, la fréquence de mon signal change.
Je souhaite donc mesurer la fréquence d'un signal en créneau afin d'en détecter la variation.
Déjà une question pour ne pas griller ma carte : la tension qui doit être entre 5 et 12 V c'est la tension crête à crête ou l'amplitude ? Et est-ce que ça pose problème que mon signal soit centré en 0 (et donc passe par des valeurs négatives) ?
Je pensais utiliser pulseIn pour mesurer ma fréquence, voici le début du programme que j'ai réalisé:
int pin = 7;
unsigned long duration;
int frequence;
int frequence_de_ref=722;
Dans le domaine de validité de tes variables "duration" et "frequence"
ces 2 variables sont des entiers (donc pas de décimales)
dans ta formule "frequence=1/((2*duration)*10^-6)" tu ne donne pas d'indication au compilateur pour qu'il effectue un transtypage sur tes variables.
"10^-6" dans un domaine de validité de nombre entier est égal à 0
donc "(2*duration)*10^-6" est égal à 0
au final, si on simplifie, tu obtiens 1/0 et là je sais pas donner de résultat
Dans un cas comme celui-la, et de façon générale, en phase de debuggage, fais afficher un maximum de renseignements.
Ta variable "frequence" est le résultat d'un calcul.
Il te vaut mieux afficher les informations "à la source", autrement dit la valeur brute juste après acquisition
Donc, fait afficher la valeur de "duration"
Ensuite, il te faut vérifier les grandeurs physiques en entrée de la carte
Est-ce que les tensions électriques sont dans les plages admises ?
pas au dessus de 5V et pas au dessous de 0V
Est-ce que le signal est compréhensible par rapport au moyen de mesure utilisé
la fonction pulseIn() attend des transitions 0 1 0. Est-ce qu'elles existent ?
Il serait bienvenu de vérifier le signal en entrée
Est-ce que tu as du matériel de type fréquencemètre, intervallemètre, oscilloscope, analyseur logique ?