Mesure la vitesse d'un hand spinner avec la photo resistance (LDR); utilise le Timer, la console et la LDR.

Dependencies:   mbed

Ca tourne vite ! et une photoresistance (LDR) est lente !

La boucle du programme:

  1. Calibration du capteur
  2. Mesures
  3. Affichage sur la console

Le code utilise un Timer pour mesurer le temps écoulé, des fonctions et des structures.

Console

La vitesse de la communication USB est configurée à 115.200 baud (par défaut elle est de 9600.) A cette vitesse on peut se permettre d'envoyer chaque mesure sur la console et on reste dans les 1ms par boucle.

Au début, a 9600 bauds, on a regroupé les mesures par paquet de 1.000 pour les afficher d'un coup. Pendant la boucle on ne fait que remplir un tableau de float[1000] (il semble avoir du mal á aller au delá de 1000?) et apres les mesures on dump (affiche) le tableau.

Physique

La carte est assez rapide pour faire environs 30.000 mesures par seconde. Donc théoriquement mesurer des vitesses de rotation jusqu'a 15.000 tours/s ! La premiere limite qu'on atteindra est la latence de la photoresistance. A priori entre 10 et 500 ms et ce n'est pas linéaire. Elle met plus de temps (j'ai lu jusqu'à une seconde !?) pour augmenter sa résistance après avoir été éclairée.

Premières visu

Après avoir visualisé les mesures par paquets de 1.000. Il semble y avoir un autre phénomène. On observe une sorte de peigne, comme si une mesure sur deux ne rencontrait pas de résistance (valeur a 1). Mais ce n'est pas systématique non plus. https://docs.google.com/spreadsheets/d/1bWVamwfsqNKRFRfbD6L3g7Slo4lBYWXPn2ICLtPI5HI/edit?usp=sharing

Avec capa

Avec la capa de 10µF on a une courbe plus lisse.

Avec sortie des valeurs

afficher chaque valeur ralenti un peu la boucle, mais on reste à 1 ms par mesure, ce qui est suffisant.

On constate mieux le problème de saturation. Si la LDR est bien éclairé elle reste à 1.0, elle met du temps à re-descendre, mais montre des oscillations dès qu'on ne sature plus (pas besoin d'attendre 500ms!). On voit du 3 à 20 Hz environs, avec 25 points d'amplitude.

Sur une oscillation on pourra faire environs 50 mesures et voir un écart de 25 points. Ca reste largement suffisant.

A suivre ...

Next

  • Il faut juste indiquer les conditions d'éclairage:
    • LED rouge si on a trop de lumiere (on sature á 1)
    • LED bleu si on a pas assez de lumiere (a determiner)
    • LED orange si on a pas assez d'amplitude
  • Passer le AnalogIn de float (32b) à unsigned short (16b) https://developer.mbed.org/handbook/C-Data-Types
  • FFT https://developer.mbed.org/questions/tag/FFT/?sort=votes
  • Faire clignoter une LED a la vitesse du HandSpinner pour faire un effet stroboscopique et "arrêter" l'image.
  • Accélérer le HandSpinner avec un électro-aimant. (principe du moteur électrique).

Reference

Download repository: zip gz

Files at revision 11:ba42369ffdc0

Name Size Actions
[up]
main.cpp 3824 Revisions Annotate
mbed.bld 66 Revisions Annotate