nouveau sur arduino

Bonjour,

Je m’appelle Jules j’ai 18 ans et suis nouveau dans le monde de l’arduino, j’ai commencé à bidouiller un peu et j’ai écrit un programme pour faire varier la position d’un servo en fonction de la luminosité:

#include <Servo.h>
Servo monservo;
int positionservo = 0;
long va;
const int capt=A0;

void setup() {
monservo.attach(9);
monservo.write(positionservo);
Serial.begin(9600);
// put your setup code here, to run once:

}

void loop() {
va =analogRead(capt);
Serial.println(va);
delay(400);
positionservo = analogRead(capt);
positionservo = map(positionservo,150,300,0,180);
monservo.write(positionservo);
delay(25);
// put your main code here, to run repeatedly:

}

Ca c’est la théorie dans la pratique ça marche mais avec très peu de précision, car oui j’utilise une led en tant que capteur.
Et on en vient a mon problème: j’ai écrit un autre programme de façon à ce que en dessous d’un certain seuil de luminosité le servo est une position bien précise et qu’en dessous il en ait une autre, mais ça ne marche pas, soit le servo me fait des choses “bizarre” soit il ne fait rien, donc la faute à mon programme ou à la led? (cette dernière possibilité est peu probable vu que ça marche sur le premier programme et que les valeur qui sont retourné sur mon pc sont cohérentes)
Merci d’avance!

Le deuxième programme qui pose problème:
#include <Servo.h>
Servo monservo;
long va;
const int capt=A0;

void setup() {
monservo.attach(9);
Serial.begin(9600);
// put your setup code here, to run once:

}

void loop() {
va =analogRead(capt);
Serial.println(va);
delay(400);
va = analogRead(capt);
if(va>220)
{
monservo.write(180);
}
else
{
monservo.write(0);
}
delay(25);// put your main code here, to run repeatedly:

}

Bonjour,

Ca doit fonctionner, mais il y a deux problèmes potentiels

  • tu relis l’entrée après avoir affiché, ce qui fait que tu ne connais pas la valeur que tu affiches n’est forcémént la valeur que tu traites
  • si ton signal ‘gigote’ autours de 220, ton servo va bouger en permanance. Il faut introduire une hystérésis.
    exemple:
void loop() {
  va = analogRead(capt);
  Serial.println(va);
  if (va > 220)
  {
    monservo.write(180);
  }
  else if (va < 215)
  {
    monservo.write(0);
  }
  delay(400);
}

Merci pour cette réponse rapide!
Mais ça ne marche toujours pas :confused:
J'ai peut être une autre piste: j'alimente le servo direct avec la carte ça ne pouvait pas venir de la ?

Bon j'ai réessayer et je pense que c'est mon servo qu'a un coup dans le nez vu qu'avec des angle inférieur ça marche!

Autruche:
Merci pour cette réponse rapide!
Mais ça ne marche toujours pas :confused:
J'ai peut être une autre piste: j'alimente le servo direct avec la carte ça ne pouvait pas venir de la ?

Si, alimente ton servo extérieurement, la carte n'est pas faite pour ça!

Ok merci , je vais faire ça.
Sinon je viens de commander un hc-sr04, une bread board, un écran lcd et des fils, donc je pense faire un télémètre, je vous tient au courant de l'avancement!