Comment afficher la vitesse doppler

Bonjour , je vous explique ma situation !
Depuis environ maintenant 2 semaines j’essaie de programmer mon capteur doppler pour radar pédagogique sur arduino or je n’y arrive pas du tout !

Mon but est d’afficher la vitesse en km/h sur un plaque lcd 8x2 !

Pour sa j’ai la formule f=2x(v/c)xFo
Donc v= (fxc)/(2xFo)

f (Hz) : fréquence obtenue par l’analyse des données du capteur, comprise entre 3 et 80 Hz.
v (m/s) : vitesse du spectateur bougeant devant le capteur.

c (m/s) : vitesse de la lumière dans le vide, 3.10^8 m/s.
Fo (Hz) : 9,9 GHz.

Voilà de quoi vous aidez !

Donc mon problème est comment puis-je afficher la vitesse en km/h alors que je dois seulement utilisé cette formule ?

Comment puis-je programmer mon capteur ?

Et comment faire si en plus je voudrais changer la couleur de l’affichage de rouge si par exemple la vitesse dépasse 20km/h et en vert si la vitesse est en dessous ?

ps: Je sais qu’il faut utiliser #include <LiquidCrystal.h> , j’ai aussi déclarer les variables , mais comment puis-je declarer l’ecran lcd et le capteur , Je n’en ai aucune idée !

J’ai un début de programme :

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. float a,b=1,c=4,d=8,e;
  6. a=b*((1+(c/d))/(1-(c/d)));
  7. e=a-b;
  8. printf(“Shifted Frequency= %f”,a);
  9. printf("\nDoppler Frequency= %f",e);
  10. return(0);
  11. }
    v=(c.[delta]f)/2.f

Mais il ne fonctionne pas et je sais pas pourquoi .
Merci

Mais il ne fonctionne pas et je sais pas pourquoi .

peut être qu'il manque un void setup et un void loop :slight_smile:

Bonjour,
Non seulement ça ne peut pas fonctionner, mais en plus tu doit avoir des erreurs à la compilation, non?
Sur Arduino, tu dois avoir une fonction qui s'appelle setup() dans lequel tu initialise tes entrées/sorties, les divers périphériques connectés, des variables etc..
Ensuite tu dois avoir une boucle infinie qui s'appelle loop(), dans laquelle tu vas effectuer test calculs et ton affichage du résultat.

Je te conseille de te documenter en regardant sur ce site l'onglet "Learning".

C'est quoi la question ?

calcul de la vitesse en km ?
affichage d'un caractère alphanumérique sur un LCD ?
Les deux ?

Chaque cas peut et c'est même préférable se gérer séparément :

  • Le calcul de la vitesse peut s'afficher dans le "Serial-Monitor" de l'IDE
  • L'affichage d'un caractère sur un LCD --> il suffit de suivre l'un des innombrables tutos que l'on trouve sur le Web

PS : suite à la remarque d'Infobarquee
L'IDE fournie par arduino est spéciale.
Elle cache la fonction main() et elle fait elle même les déclarations de fonctions.

Le minimum à fournir est :
la fonction setup et la fonction loop

C'est l'IDE qui construit le fichier cpp définitif
Structure finale crée par l'IDE

void setup():
void loop();

int main()
{
   setup();
   while (1)
   {
      loop() ;
   }
}

Bien évidement il est possible de créer d'autres fonctions que l'on peut appeler de setup() ou de loop()

Je pense que tu n'as pas lu le message de bienvenue qui conseille l'apprentissage avec le tuto d'Eskimon.

Salut,

Il existe dans les exemples de base Arduino un programme déja fait pour un afficheur LCD, voir :

Puis adapter celui-ci pour afficher la vitesse, par contre pas de gestion de la couleur de l'affichage, ce n'est pas un LCD TFT.
@+

Alexandre95200:
Mais il ne fonctionne pas et je sais pas pourquoi .

Il faudrait développer un peu plus sur ce que "il ne fonctionne pas" veut dire : as-tu essayé de le compiler avec l'environnement Arduino ? utilises-tu gcc sous linux pour tester ton bout de code ? as-tu seulement écrit toi même ce bout de code ?

J’ai essayé de compiler tout c’est bien déroulé mais rien ne se passe , " se bout de code " une personne ma dit de faire sa mais j’ai rien compris !

Mais comment puis-je afficher la vitesse sur mon lcd qui a comme broche (3,2,4,5,6,7); ?

Vu qu’il faut que le capteur doppler que j’ai “MC1368C” puisse afficher sur arduino , or sur arduino il faut qu’il puisse calculer donc comment arduino peux t’il afficher la vitesse en km/h ?

Normalement je suis censé pouvoir calculer la vitesse d’une voiture j’ai toute les formules de calcule mais je n’ai aucune idée comment faire pour qu’arduino calcule lui meme et affiche en km/h

Si vous pouviez m’aider en me montrant des exemples ou des tutos se serais sympa merci

Alexandre95200:
J’ai essayé de compiler tout c’est bien déroulé mais rien ne se passe , " se bout de code " une personne ma dit de faire sa mais j’ai rien compris !

Bonjour,

Qu’est ce que tu as essayé de compiler?

laisse tombé se que j'ai compiler ne sert a rien !

Mais dans les variables je dois déclarer le lcd et le capteur doppler ? ya pas besoin d'initialiser les formules ?

Salut,

Mais comment puis-je afficher la vitesse sur mon lcd qui a comme broche (3,2,4,5,6,7); ?

Regarde le tuto et bien d'autres infos qui semblent te manquer ici

d'une part il faut initialisé ton LCD
du type

//Vérifier les broches !
LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2); //liaison 8 bits de données
LiquidCrystal lcd(11,10,5,4,3,2); //liaison 4 bits de données

ensuite les variables
f= entrée du capteur
c= 3.10^8 m/s.
fo=9,9 GHz.
Vitesse=0; //vitesse tu l'initialise a 0 au demarrage de ton programme
vitesse = (fxc)/(2xFo) ( ta formule math que tu va faire)
void setup()
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("la vitese est de: %d !", vitesse); //petit test pour vérifier que tout marche

Donc voici mon programme maintenant :

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3, 2, 4, 5, 6, 7);

int f = 2 ;
int c= 310000000;
int fo= 9900000;
int fo2 =1000;
int Vitesse = 0 ;
int vitesse =(2310000000)/(2(9900000*1000));

void setup() {
lcd.begin(16,2); //utilisation d’un écran 16 colonnes et 2 lignes
lcd.println((“la vitese est de: %d !”, vitesse));
}

void loop ()
{

}

Le problème : sur le lcd sa n’affiche pas la vitesse ya pas d’erreur de programmation mais le programme est incorrecte .

Donc comment puis-je faire pour afficher la vitesse en km/h apres avoir déclaré les variables ?

Merci

ps: fo2 est juste la pour pouvoir écrire 9,9 GHz sans puissance j’ai pas trouver de variable pour sa donc j’en ai crée deux

Bonjour,

METS TON CODE ENTRE BALISES
Ensuite les valeurs que tu utilises dépassent très largement les capacités des entiers. Fait le calcul en flottant

Je peux pas mettre entre BALISES , les valeurs en flottant ne fonctionnent pas

Alexandre95200:
les valeurs en flottant ne fonctionnent pas


Pour mettre ton code entre balises tu cliques sur 'more...' en bas à droite de ton message puis modify et tu suis les instructions du lien donné dans mon message précédent.

cd sa n'affiche pas la vitesse ya pas d'erreur de programmation mais le programme est incorrecte

Ou la ... Il y a du boulot !

Déjà les int c'est au max 32768 ... Pas la peine d'essayer de faire int c = 31000000;

Tu déclares 2 fois int Vitesse ... Et dans une déclaration on ne met pas de formules mathématique car une variable c'est un nombre, elle ne contient pas la formule magique ... Écris plutôt une fonction vitesse(int f) qui prend en paramètre la fréquence et qui te renvoie la vitesse calculée

float vitesse(int f) {
retrun=(f31)/(2990.0)); // on peut simplifier quelques zéros....
}

Le lcd.println(("la vitese est de: %d !", vitesse)); ne marchera pas, il faut décomposer en print de chaînes et de valeurs numériques

La fonction return=(f31)/(2990.0));
ne fonctionne pas j’ai un message d’erreur

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3, 2, 4, 5, 6, 7);

int f = 2  ;
float c= 310000000;
float fo= 9900000;
int fo2 =1000;
float vitesse(int f) {
return=(f*31)/(2*990.0));

}

void setup() {
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.print((("la vitese est de: %d !", vitesse)));
}


void loop ()
{

}

Le message d’erreur est le suivant :
alex2.ino: In function ‘float vitesse(int)’:
alex2:12: error: expected primary-expression before ‘=’ token
alex2:12: error: expected ‘;’ before ‘)’ token
alex2:12: error: expected primary-expression before ‘)’ token
alex2:12: error: expected `;’ before ‘)’ token
alex2.ino: In function ‘void setup()’:
alex2:17: error: call of overloaded ‘print(float (&)(int))’ is ambiguous
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:58: note: candidates are:
size_t Print::print(char)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:59: note:
size_t Print::print(unsigned char, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:60: note:
size_t Print::print(int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:61: note:
size_t Print::print(unsigned int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:62: note:
size_t Print::print(long int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:63: note:
size_t Print::print(long unsigned int, int)

Bonjour,

Il n'y a pas de = après return. C'est return val;

Ca me met exactement le même message d'erreur

Salut,

il va falloir te mettre à lire les doc/blog et autres supports sur la programmation Arduino et aussi les messages d’erreurs. Le compilateur te dis ou est l’erreur et si tu as bien observé il surligne l’endroit de la première erreur. Bon comme j’avais trop rien de mieux à faire je te file un dernier coup de main. Le code suivant est réparé, je dis pas qu’il fonctionnes* car je ne peux pas le tester mais il ne donne plus d’erreur de compilation.

*Elle sert à quoi la fonction vitesse()?

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3, 2, 4, 5, 6, 7);

int f = 2;
float c = 310000000;
float fo = 9900000;
int fo2 = 1000;


float vitesse(int f) {
  return (f*31)/(2*990.0);
}

void setup() {
  char message[32] = "";
  lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
  sprintf(message,"la vitesse est de: %d !", vitesse);
  lcd.print(message);
}


void loop ()
{

}