Découvrez notre Chaîne YouTube "Devenir Ingénieur"
Le blog contient des publicités, elles permettent de financer l'hébergement et maintenir le blog en fonctionnement. Vous pouvez utiliser adblock pour une lecture sans publicités.

 Projet électronique Traitement du signal avec Arduino Lissage et Seuillage d’un signal 3-3- Schéma de principe

Objectifs du projet électronique

Générateur des signaux avec FPGA

projet-électronique-Générateur-des-signaux-à-base-du-PIC16877-à-fréquence-fixe-reseau-R-2R

Le seuil de basculement

On va utiliser un potentiomètre variable comme étant le seuil de déclenchement. Le potentiomètre est alimenté par une tension de 3.3V (ou 5V) fixe. Le pin 2 (voir la figure) sera branché avec le pin 2 de la carte Arduino.

Schéma de câblage avec Arduino

Projet électronique Traitement du signal avec Arduino Lissage et Seuillage d’un signal 3-3- Schéma cablage Arduino

Codes Arduino et autres fonctions

// SigProc.ino
#define Taille 64
// Sortie numériue
const int OutCompare = 2;
// Entrées Analogiques signal & seuil
const int InSignal = 1;
const int InSeuil = 2;
//Paramètres des signaux
float ValuSig[Taille];
float ValueSeuil[Taille];
float SeuilFixe =0.0;
float InputSignal=0.0;
int i=0;
void setup() {
  pinMode(OutCompare, OUTPUT);
  pinMode(InSignal, INPUT);
  pinMode(InSeuil, INPUT);
  // Calcul initial du seuil moyenne sur Taille échantillons
  // Accumulation des échantillons
  for( i=0;i<Taille ; i++)
  {
    ValueSeuil[i]=5.0*analogRead(InSeuil)/1023;
  }
  // Calcul de la moyenne des échantillons
  SeuilFixe = Moyenne(Taille, ValueSeuil);
  // Initialisation de la sortie TOR
  digitalWrite(OutCompare, LOW);
  delay(3000);
}
void loop()
{
    // Détection du seuil avec la méthode basée sur la comparaison
  InputSignal = 5.0*analogRead(InSignal)/1023;
  digitalWrite (OutCompare, CopareValue(SeuilFixe, InputSignal));
  // Détection du seuil avec la méthode de la Moyenne  - Solution 1
  /*for( i=0;i<Taille ; i++)
  {
    ValuSig[i]=5.0*analogRead(InSignal)/1023.0;
  }
  InputSignal =Moyenne(Taille, ValuSig);
  digitalWrite (OutCompare, CopareValue(SeuilFixe, InputSignal));*/
  /* // Détection du seuil avec la méthode de la Moyenne  - Solution 2
  ValuSig[i]=5.0*analogRead(InSeuil)/1023;
  //InputSignal =Moyenne(Taille, &ValuSig[0]);
  InputSignal=(ValuSig[0]+ValuSig[1]+ValuSig[2]+ValuSig[3])/Taille;
  digitalWrite (OutCompare, CopareValue(SeuilFixe, InputSignal));
  i=(i++) % Taille; */
  /* // Détection du seuil avec la méthode de la Médiane
  ValuSig[i]=5.0*analogRead(InSeuil)/1023;
  TableSort(Taille ,  ValuSig);
  InputSignal =Mediane(Taille, ValuSig);
  i=(i++) % Taille;
  digitalWrite (OutCompare, CopareValue(SeuilFixe, InputSignal)); */
}
// Fonction qui calcul la moyenne d'un tableau
float Moyenne(unsigned char taille,  float *DataIn)
{
        unsigned char i=0;
        float somme =0.0;
        for(i=0;i<taille; i++)
                somme+=DataIn[i];
        return somme/taille;
}
// Fonction qui calcul la valeur médiane d'un tableau
float Mediane(unsigned char taille,  float *DataSort)
{
        float MedValue = 0.0;
        MedValue = DataSort[round((taille-1.0)/2.0)];
        return MedValue;
}
// Fonction de tri d’un tableau
 void TableSort(unsigned char taille,  float *DataIn)
 {
         unsigned char  i, j ;
         float temp;
         for (i = 0; i < (taille - 1); ++i)
         {
                  for (j = 0; j < taille - 1 - i; ++j )
                  {
                           if (DataIn[j] > DataIn[j+1])
                           {
                                        temp = DataIn[j+1];
                                        DataIn[j+1] = DataIn[j];
                                        DataIn[j] = temp;
                           }
                  }
         }
 }
// Fonction comparateur basique
unsigned char CopareValue(float Seuil, float Value)
{
        unsigned char Sortie =0;
        if (Value >=Seuil)
                Sortie =1;
        else
                Sortie=0;
        return Sortie ;
}
// Conversion d'une valeur entière en tableau binaire
void int2BitArray(unsigned char dataIn,unsigned char taille, unsigned char *dataArray)
{
  int i=0;
  for(i=0;i<taille;i++)
    dataArray[taille-i-1]= (dataIn>>i)&0x01;
}
// Fonction de décalage des échantillons d'un tableau
void DataShiftArray(unsigned char NumShift,unsigned char taille,  unsigned char *DataIn, unsigned char *DataOutShift)
{
  int i=0;
  for(i=0;i<taille;i++)
    DataOutShift[i]= (DataIn[i]>>NumShift);
}
 
// SigProcArduino.c
#include <SigProcArduino.h>
#include "math.h"
float Moyenne(unsigned char NumMean,unsigned char taille,  unsigned char *DataIn)
{
        unsigned char i=0;
        float somme =0.0;
        for(i=0;i<NumMean; i++)
                somme+=DataIn[i];
        return somme/NumMean;
}
float Mediane(unsigned char taille,  unsigned char *DataSort)
{
        unsigned char MedValue = 0;
        //MedValue = DataSort[round((taille-1.0)/2.0)];
        return MedValue;
}
 void TableSort(unsigned char taille,  unsigned char *DataIn)
 {
         unsigned char  i, j, temp;
         for (i = 0; i < (taille - 1); ++i)
         {
                  for (j = 0; j < taille - 1 - i; ++j )
                  {
                           if (DataIn[j] > DataIn[j+1])
                           {
                                        temp = DataIn[j+1];
                                        DataIn[j+1] = DataIn[j];
                                        DataIn[j] = temp;
                           }
                  }
         }
 }
unsigned char CopareValue(unsigned char Seuil, unsigned char Value)
{
        unsigned char Sortie =0;
        if (Value >=Seuil)
                Sortie =1;
        else
                Sortie=0;
        return Sortie ;
}
void int2BitArray(unsigned char dataIn,unsigned char taille, unsigned char *dataArray)
{
  int i=0;
  for(i=0;i<taille;i++)
    dataArray[taille-i-1]= (dataIn>>i)&0x01;
}
void DataShiftArray(unsigned char NumShift,unsigned char taille,  unsigned char *DataIn, unsigned char *DataOutShift)
{
  int i=0;
  for(i=0;i<taille;i++)
    DataOutShift[i]= (DataIn[i]>>NumShift);
}

// SigProcArduino.h
float Moyenne(unsigned char NumMean,unsigned char taille,  unsigned char *DataIn);
float Mediane(unsigned char taille,  unsigned char *DataSort);
void TableSort(unsigned char taille,  unsigned char *DataIn);
unsigned char CopareValue(unsigned char Seuil, unsigned char Value);
void int2BitArray(unsigned char dataIn,unsigned char taille, unsigned char *dataArray);
void DataShiftArray(unsigned char NumShift,unsigned char taille,  unsigned char *DataIn, unsigned char *DataOutShift);

Photos du projet

  • Signal sin + seuil

Projet électronique FPGA 5 Générateur des signaux V1 - photos projets (2)

  • Résultat pour Signal sin + bruit non filtré 

https://www.electronique-mixte.fr/wp-content/uploads/2018/09/Projet-électronique-Traitement-du-signal-avec-Arduino-Seuillage-methode-1-2.jpg

  • Résultat pour Signal sin + bruit filtré 

Projet électronique Traitement du signal avec Arduino - Seuillage methode 1 (1)

************

Un petit commentaire de vous, un Grand encouragement pour nous 🙂

************

Téléchargement du projet

************


1 commentaire

  • coucou · 2020-03-13 à 4:41

    salut

  • Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Anti-Robot *

    You have successfully subscribed to the newsletter

    There was an error while trying to send your request. Please try again.

    FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.