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 :
#include<stdio.h>
#include<math.h>
int main()
{
float a,b=1,c=4,d=8,e;
a=b*((1+(c/d))/(1-(c/d)));
e=a-b;
printf("Shifted Frequency= %f",a);
printf("\nDoppler Frequency= %f",e);
return(0);
}
v=(c.[delta]f)/2.f
Mais il ne fonctionne pas et je sais pas pourquoi .
Merci
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".
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.
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 !
//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
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
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 ()
{
}