Problema con Arduino

Buonasera a tutti. Ho riscontrato delle difficoltà strane. Il mio sketch è composto da 2 servomotori che ruotano in direzioni opposte allo stesso tempo quando azionati da un pulsante, 2 led che si arrivano e disattivano in base al movimento dei servomotori, un potenziometro che ne comanda la velocità. (nello sketch non è visibile, ma vi era anche un sensore lm393 che ho rimosso, perchè causa del mio problema). Ieri sera mi è arrivato il sensore lm393 da Amazon e appena arrivato l'ho installato sul circuito Arduino perfettamente funzionante. Dopo averlo installato sul pin giusto e averlo testato 2 volte, durante la calibrazione di quest'ultimo, i servomotori iniziano a tremare senza un motivo specifico e poi a muoversi senza il comando del pulsante, ignorando addirittura il potenziometro che ne regola la velocità. Vorrei sapere cosa sia successo. Ho escluso dallo sketch il sensore di suono lm393, ma il problema persiste. Nulla risponde a nulla. Ho cambiato i servomotori, stesso risultato. Ho cambiato pulsante e rifatto le saldature, ho cambiato 2 volte la scheda Arduino, passando da arduino nano ad un altro arduino nano, ad un arduino uno, ma nulla, NESSUN RISULTATO. Mi sono informato su internet per vedere le principali fonti di questo problema e ho visto che l'alimentazione poteva essere uno di questi. Sono passato da alimentazione USB a quella di due batterie IC17500 con un voltaggio di 7.4v, ma nessun cambiamento. Vi lascio il codice (senza il sensore di suono lm393)

#include <Servo.h>

const byte button1 = 2;
const byte potPin = A0;
const byte led1 = 5;
const byte led2 = 6;


Servo servo1;
Servo servo2;

int press1 = 0;
int potValue = 0;
boolean buttonWasPressed = false;
int ledBrightness = 0; // initial brightness 100%
int servoSpeed = 25; // initial speed

void setup() {
  pinMode(button1, INPUT_PULLUP);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  servo1.attach(11);
  servo2.attach(12);
  servo1.write(150);
  servo2.write(0);
  analogWrite(led1, ledBrightness);
  analogWrite(led2, ledBrightness);
}

void loop() {
  

  if (press1 == LOW) {
    if (!buttonWasPressed) {
      moveServos(servo1, servo2, 0, 145);
      delay(1000);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      blinkLEDs(2);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      buttonWasPressed = true;
    } 
    else {
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      moveServos(servo1, servo2, 145, 0);
      buttonWasPressed = false;
    }
  }
}

void moveServos(Servo &servoA, Servo &servoB, int targetPos1, int targetPos2) {
  while (servoA.read() != targetPos1 || servoB.read() != targetPos2) {
    potValue = analogRead(potPin);
    int speed = map(potValue, 0, 1023, 1, 100);
    delay(1000/(speed*4.6));
    if (servoA.read() < targetPos1) servoA.write(servoA.read()+1);
    if (servoA.read() > targetPos1) servoA.write(servoA.read()-1);
    if (servoB.read() < targetPos2) servoB.write(servoB.read()+1);
    if (servoB.read() > targetPos2) servoB.write(servoB.read()-1);
  }
}

void blinkLEDs(int times) {
  for(int i = 0; i < times; i++) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    delay(500 * (i+1));
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    delay(500 * (i+1));
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
  }
}

bhe...se questo programma non ti da problemi cosa dovremmo dire/trovare?...posta quello che non ti funziona.

ad ogni modo, così a naso, direi che il problema deriva dai delay().

Non leggi con digitalRead(button1).
Cosa che invece fai qui in un tuo topic:

Ti consiglio di usare la libreria JC_Button, qui un esempio:

Mentre qui c'è un esempio di applicazione completa che non usa delay e fa muovere un servo a velocità minore. Dove trovi pure un blink a due led non bloccante.

Ciao.

Come alimenti i 2 servo?

USB non da abbastanza Corrente per i servo.
La batteria hai collegato in negativo al GND di Arduino?

Il LM393 È un doppio comparatore (simile ad un Amplificatore operationale) Non é un sensore. Forse sulla schedina ne é montato uno.
Manda il link al prodotto.

Ciao Uwe

Ringrazio tutti per i suggerimenti e i consigli. La libreria JC Botton mi è servita. Il problema si è risolto completamente. Purtroppo dovrò abbandonare il progetto a tempi indeterminati perché devo ricominciare a prendere in mano ai libri per la scuola e fare i compiti delle vacanze. Ringrazio ancora per la vostra disponibilità e per esservi presi in carico questa mia difficoltà nel trovare l'errore. Alimentando I servomotori con alimentazione diversa da quella USB il tutto si è reso più meccanico. Prima quando usavo l'alimentazione usb i motori continuavano a fare rumori strani e a scuotersi.

A UWE, se ti interessasse il link del lm393 te lo do ora, anche se il problema è risolto

https://www.amazon.it/gp/aw/d/B07Q1BYDS7?psc=1&ref=ppx_pop_mob_b_asin_image

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.