Bonjour à tous, à toutes.
Dans le cadre d'un projet de TIPE, j'aimerai capter un signal sonore, le traiter puis le déphaser. Il y aurait ainsi deux codes, correspondant à un traitement électrique et un traitement numérique du signal.
Etant en classe préparatoire, je n'ai pas beaucoup de temps pour apprendre le langage arduino, et c'est cela qui me pose problème, je ne comprends pas/ne connais pas ce langage, qui m'apparaît comme très compliqué en sachant que je ne connais que les bases de python et que, même içi j'ai du mal.....
Voici le matériel à ma disposition :
-Ordinateurs
-ALI
-haut parleur
-Micro groove
Malgré de nombreuses recherches je ne trouve pas de code tout fait ni pour l'un ni pour l'autre...
Voici celui réalisé pour le traitement électrique. Il consiste à simplement capter le signal sonore, et le renvoyer à un montage électrique se chargeant de déphaser le signal (Il a déja été réalisé et fonctionne, on ne peut pas directement brancher le micro sur le montage pour des problèmes d'impédances).
Ce premier programme ne fonctionne pas :
flot sensorPin = A0;
float sensorValue=0;
float outpoutvalue=0;
float analogOutPin=9;
float valeur = 0
void setup() {
tone(8,valeur);
Serial.begin(9600);
}
void loop() {
sensorValue=analogRead(sensorPin);
valeur= analogWrite(9,sensorValue);
}
Le deuxième traitement , numérique cette fois-ci, consiste à capter, traiter,déphaser, et renvoyer le signal en un programme, j'ai décomposé ce programme en plusieurs programme, mais je bloque complètement sur le calcul d'un écart type, traiter un tableau de valeurs etc....
Le voici :
//Récupérer le signal en analogique :
//1024 points sur une plage de 5 volts donne une précision absolue de 4,9mV.
//La précision de la mesure (10 bits) n'est pas modifiable, La mesure prend environ 100µs, cela fait un maximum de 10 000 mesures par seconde
//mesurer une tension sur une broche non connectée retourne des valeurs de l'ordre de 300 à 500, même s’il n'y a pas de signal
//Le résultat est sur 10 bits, soit entre 0 et 1023 (inclus).
void setup() {
Serial.begin(9600); //initialise la communication avec le PC.
}
void loop() {
int valeur = analogRead(A0); //Mesure la tension sur la broche A0
float tension = valeur * (5.0 / 1023.0); //Transforme le résultat de la mesure en un nombre à virgule (type float)
Serial.println(tension);
delay(10); //Envoie la valeur au PC et attendre 10ms pour avoir le temps de lire
}
//Calculer moyenne lissé , Lissage : moyenne glissante
const int nEchantillons = 1000000; // Nombre d'échantillons : sur 100s
int echantillon[nEchantillons,1]; // un tableau pour stocker les échantillons lus
int indice = 0; // l'indice de l'échantillon courant
float total = 0; // la somme des échantillons mémorisés
float moyenne = 0; // la moyenne des échantillons mémorisés
int inputPin = A0;
void setup() {
// Initialisation du port série
Serial.begin(9600);
// On remplit le tableau d'échantillons avec des 0
for (int i = 0; i < nEchantillons; i++) {
echantillon[i] = 0;
}
}
void loop() {
// Soustraction de l'echantillon précédent
total = total - echantillon[indice];
// Lecture du capteur
echantillon[indice] = analogRead(inputPin);
Serial.print(echantillon[indice]);
// Ajout du dernier echantillon
total = total + echantillon[indice];
// Incrémentation de l'indice
indice++;
// si on est à la fin du tableau ...
if (indice >= nEchantillons) {
// ...retour au début
indice = 0;
}
// calcul de la moyenne
moyenne = total / nEchantillons;
Serial.print(",");
Serial.println(moyenne);
delay(1);
}
//Calculer l'écart type :
//Filtrer les points +- ecart type:
int echantillonfiltre[nEchantillons,1]; // un tableau pour stocker les échantillons filtres
for (int i = 0; i < nEchantillons; i++) {
if echantillon[nEchantillons,1]<moyenne+ecarttype
echantillonfiltre }
// si on est à la fin du tableau ...
if (indice >= nEchantillons) {
//Nouveau tableau de valeurs filtrées
//Calculer le maximum des valeurs filtrés
//Calculer le minimum des valeurs filtrés
//Avoir la valeur de t telle que V(t)=Vmin
//Avoir la valeur de t telle que V(t')=Vmax
//Calculer t'-t=T
//Renvoie les valeurs de t à t+T en digital :
//Idée : POur contrer le temps de réponse du système, ajouter t+T+A avec A : temps de rep du système
Pourriez vous m'aider à écrire ces programmes s'il vous plait ?