• Welcome to Forum des utilisateurs de Blockly(s). Please login or sign up.
 

Lire capteur analogique de distance

Démarré par LoJo, janvier 08, 2017, 07:22:03 pm

« précédent - suivant »

LoJo

Bonjour,

J'ai des robots avec des capteurs de distance comme cela :
http://duinoedu.com/store1/04-modules-grove/34-detecteur-de-proximite-grove-80cm.html
http://wiki.seeed.cc/Grove-80cm_Infrared_Proximity_Sensor/

Je ne vois pas bien comment lire leur valeur avec blockly@rduino...
Il n'est pas dans les blocs Grove
Si j'utilise le bloc de lecture de l'entrée analogique, ça ne fonctionne pas. J'obtiens des valeurs foireuses.

Dans la doc seeed, ils ont l'air d'utiliser getVoltage()
Comment je peux faire ça dans blockly@arduino ?

Merci

SebCanet

Bonjour,
c'est exact : "This sensor SharpGP2Y0A21YK, boasts a small package and very low current consumption, takes a continuous distance reading and returns a corresponding analog voltage with a range of 10cm (4") to 80cm (30")."
Il agit comme une résistance ajustable. Il est très précis mais pas pratique : sa sortie n'est pas linéaire, donc il faut avoir le tabeau sous les yeux :

Ou bien attendre que quelqu'un rajoute le bloc grâce à cette bibliothèque : http://playground.arduino.cc/Main/SharpIR
Il est rajouté à ma TODO liste....

vahiny

Teste cette formule:

(8479.4/(1+1.167*(analogRead(0)))-5

Tu sais fabriquer les blocs?

J'ai aussi la formule l'autre capteur analogique OA41




LoJo

Bonjour,

Donc pour ceux qui galèrent comme moi avec leur capteur sharp :-\

Premier écueil : on ne peut rien mettre d'autre que "A0", "A1", etc. dans le bloc "la valeur numérisée de l'entrée analogique" avec la petite case intégrée. Il faut utiliser le bloc sans la case, et ajouter un bloc "nombre".

Deuxième souci : l'entrée marquée A0 sur le shield est en fait l'entrée analogique 1 (!)

Donc le programme ci-dessous fonctionne (enfin) parfaitement pour un capteur sharp banché sur A0 :

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(1));
  delay(100);
}


Et on peut même convertir la valeur en cm !
http://forum.arduino.cc/index.php?topic=206541.msg1520190#msg1520190

LoJo

Bon, en fait, tout est logique et dépend du brochage de la prise branchée sur le shield grove.
Sur les 4 fil, le jaune doit être connecté à droite pour lire en A0. S'il est en 3ème position, c'est bien écrit sur le shield que c'est A1.
Et donc ça fonctionne parfaitement avec le bloc dans lequel on écrit "A0", si la connexion se fait sur le bon fil.

SebCanet

J'ai créé des blocs pour ces capteurs Sharp, peux tu les tester ?

LoJo

Ah génial ;-)
Ça fonctionne parfaitement avec un 2Y0A21 :-)
C'est con, je viens juste de terminer mes fiches ressources :-\

LoJo

Bonjour,
Je viens de remettre en route mes robots, et j'ai un souci.
Avec la version fonctionnelle de mon programme de l'an dernier, lors de la vérification du code, j'obtiens le message d'erreur :
error: no member named 'getDistance' in 'SharpIR'
:-(

SebCanet


LoJo

Bonjour,

J'ai toujours le pb dans la version en ligne :-(

Voici mon programme :
#include <SharpIR.h>
#include <Servo.h>

SharpIR TELEM(0, 1080);
Servo SERVO_D;
Servo SERVO_G;
// Décrire cette fonction
void stop() {
  SERVO_D.write(84);
  SERVO_G.write(90);
}

// Décrire cette fonction
void avance() {
  SERVO_D.write(0);
  SERVO_G.write(180);
}

// Décrire cette fonction
void recule_un_peu() {
  SERVO_D.write(180);
  SERVO_G.write(0);
  delay(100);
}

// Décrire cette fonction
void tourne_sur_place() {
  SERVO_D.write(180);
  SERVO_G.write(180);
}


void setup() {
  SERVO_D.attach(7);
  SERVO_G.attach(8);
  pinMode(4, INPUT);
  pinMode(3, INPUT);
    while (!(digitalRead(4))) {
    stop();
  }
  delay(1000);

}

void loop() {
    if (TELEM.getDistance() < 10) {
      avance();

    }
    if (TELEM.getDistance() >= 10) {
      tourne_sur_place();

    }
    if (digitalRead(3) || digitalRead(3)) {
      recule_un_peu();

    }

}


et voici l'erreur :
la vérification a échoué, l'erreur est : (sketch file) sketch.ino:46:15: error: no member named 'getDistance' in 'SharpIR' if (TELEM.getDistance() < 10) {         ~~~~~ ^
(sketch file) sketch.ino:50:15: error: no member named 'getDistance' in 'SharpIR' if (TELEM.getDistance() >= 10) {         ~~~~~ ^
2 errors generated.

SebCanet

Bonjour,
c'est une erreur de bibliothèque. C'est corrigé pour celle que j'utilise : https://github.com/guillaume-rico/SharpIR

Merci de tester.