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);
}
}