From 1f18251d7103a4576a46c36b8503cd6e02b1ee1c Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Wed, 5 Apr 2017 12:07:32 +0200 Subject: [PATCH] Servo progressive, lib --- libraries/rover/rover.cpp | 16 ++++ libraries/rover/rover.h | 3 + .../servo/rotation_lib/rotation_lib.ino | 92 ++++++++----------- .../rotation_progressive.ino | 84 +++++++++++++++++ 4 files changed, 141 insertions(+), 54 deletions(-) create mode 100644 prototypes/servo/rotation_progressive/rotation_progressive.ino diff --git a/libraries/rover/rover.cpp b/libraries/rover/rover.cpp index 1b6c88e..f284162 100644 --- a/libraries/rover/rover.cpp +++ b/libraries/rover/rover.cpp @@ -104,3 +104,19 @@ void stopB() { // Stop digitalWrite(enB,LOW); } + +// Servo +void turnDX() { + // TurnDX + myservo.write(170); +} + +void turnSX() { + // TurnSX + myservo.write(10); +} + +void turnMiddle() { + // TurnDX + myservo.write(middle); +} diff --git a/libraries/rover/rover.h b/libraries/rover/rover.h index 7d5da82..a4ad42b 100644 --- a/libraries/rover/rover.h +++ b/libraries/rover/rover.h @@ -30,4 +30,7 @@ void backwardB() ; void backwardB(byte speedB) ; void stopB() ; +void turnDX() ; +void turnSX() ; +void turnMiddle() ; #endif diff --git a/prototypes/servo/rotation_lib/rotation_lib.ino b/prototypes/servo/rotation_lib/rotation_lib.ino index ac463ea..130d38d 100644 --- a/prototypes/servo/rotation_lib/rotation_lib.ino +++ b/prototypes/servo/rotation_lib/rotation_lib.ino @@ -1,77 +1,61 @@ /* Rotazione + + Rotazione di un servomotore tramite la librerio Servo.h . + + L'utilizzo della libreria Servo rende inutilizzabile analogWrite() + sui pin 9 e 10 dato che utilizza i timer associati a questi PIN. + + Power: un servo da 9g puo' arrivare ad impegnare 750mA sotto carico + (se viene opposta resistenza al movimento del servo), un SG90 prende + ~52mA se il movimento e' libero. Quindi in fase di test il servo puo' + essere alimentato direttamente da una scheda Arduino (200ma dal PIN 5v) + ma per l'uso finale dovra' essere alimentato autonomamente. + + + Rotazione a SX di 90' + Rotazione a DC di 90' + + Schema: https://www.arduino.cc/en/uploads/Tutorial/sweep_bb.png + http://microbotlabs.com/images/mearm-uno-servo-1.jpg + */ - Rotazione di un servomotore tramite la librerio Servo.h . - -L'utilizzo della libreria Servo rende inutilizzabile analogWrite() -sui pin 9 e 10 dato che utilizza i timer associati a questi PIN. - -Power: un servo da 9g puo' arrivare ad impegnare 750mA sotto carico -(se viene opposta resistenza al movimento del servo), un SG90 prende -~52mA se il movimento e' libero. Quindi in fase di test il servo puo' -essere alimentato direttamente da una scheda Arduino (200ma dal PIN 5v) -ma per l'uso finale dovra' essere alimentato autonomamente. - - -Rotazione a SX di 90' -Rotazione a DC di 90' - -Schema: https://www.arduino.cc/en/uploads/Tutorial/sweep_bb.png - http://microbotlabs.com/images/mearm-uno-servo-1.jpg - */ +#include #include - + Servo myservo; // create servo object to control a servo - // a maximum of eight servo objects can be created - +// a maximum of eight servo objects can be created + // Servo vars int pos = 0; // variable to store the servo position const byte servo =9 ; const byte middle = 90; // Centratura servo const int spausa = 30; // Pausa movimenti servo - + void setup() { - myservo.attach(servo); // attaches the servo on pin 9 to the servo object - myservo.write(middle); // tell servo to go to position in variable 'pos' - delay(2000); + abilita(); + } - - + + void loop() { -// Turn DX - turnDX(); - delay(1000); + // Turn DX + turnDX(); + delay(1000); - turnMiddle(); - delay(1000); + turnMiddle(); + delay(1000); -// Turn SX - turnSX(); - delay(1000); + // Turn SX + turnSX(); + delay(1000); - turnMiddle(); - delay(1000); + turnMiddle(); + delay(1000); } -// Functions - -void turnDX() { - // TurnDX - myservo.write(170); - delay(spausa); -} -void turnSX() { - // TurnSX - myservo.write(10); - delay(spausa); -} -void turnMiddle() { - // TurnDX - myservo.write(middle); - delay(spausa); -} diff --git a/prototypes/servo/rotation_progressive/rotation_progressive.ino b/prototypes/servo/rotation_progressive/rotation_progressive.ino new file mode 100644 index 0000000..2761bb3 --- /dev/null +++ b/prototypes/servo/rotation_progressive/rotation_progressive.ino @@ -0,0 +1,84 @@ +/* Rotazione + + Rotazione di un servomotore tramite la librerio Servo.h . + +L'utilizzo della libreria Servo rende inutilizzabile analogWrite() +sui pin 9 e 10 dato che utilizza i timer associati a questi PIN. + +Power: un servo da 9g puo' arrivare ad impegnare 750mA sotto carico +(se viene opposta resistenza al movimento del servo), un SG90 prende +~52mA se il movimento e' libero. Quindi in fase di test il servo puo' +essere alimentato direttamente da una scheda Arduino (200ma dal PIN 5v) +ma per l'uso finale dovra' essere alimentato autonomamente. + + +Rotazione a SX di 90' +Rotazione a DC di 90' +Ritorno al centro + +Schema: https://www.arduino.cc/en/uploads/Tutorial/sweep_bb.png + http://microbotlabs.com/images/mearm-uno-servo-1.jpg + */ + +#include + +Servo myservo; // create servo object to control a servo + // a maximum of eight servo objects can be created + +// Servo vars +int pos = 0; // variable to store the servo position +const byte servo =9 ; // Servo PIN +const byte middle = 90; // Centratura servo +const int pausa = 10; // Smooth movimento +const byte sx = 10; // Min SX +const byte dx = 170; // Maz DX + +void setup() +{ + myservo.attach(servo); // attaches the servo on pin 9 to the servo object + myservo.write(middle); + delay(4000); // Nel caso ci sia da posizionare il sensore sul servo +} + + +void loop() +{ + pos = 90 ; +// Turn DX +while (pos < dx) { + myservo.write(pos++); + delay(pausa); +} + +delay(1000); + +// Middle +while (pos > middle) { + myservo.write(pos--); + delay(pausa); +} +while (pos < middle) { + myservo.write(pos++); + delay(pausa); +} + delay(1000); + +// Turn SX +while (pos > sx) { + myservo.write(pos--); + delay(pausa); +} + +delay(1000); + +// Middle +while (pos > middle) { + myservo.write(pos--); + delay(pausa); +} +while (pos < middle) { + myservo.write(pos++); + delay(pausa); +} + delay(1000); +} -- 2.39.2