Intr-un articol mai vechi am folosi un servomotor impreuna cu Arduino. Acum vom incerca sa folosim 2 servomotoare.
Conectarea celor 2 motoare este simpla, alimentarea se face cu +5V iar comanda fiecarui motor o vom da de pe iesirile digitale 2 si 3 ale Arduino.
Servomotoarele folosite sunt SG90. Cele 3 terminale ale fiecarui servomotor se vor conecta in acest mod:
Servo --- Arduino
Rosu - +5V
Maro - GND
Galben - D2 sau D3
Sketchul folosit este urmatorul:
#include <Servo.h>
Servo servo1;
Servo servo2;
int motor1 = 2;
int motor2 = 3;
int x, y;
void setup() {
servo1.attach(motor1);
servo2.attach(motor2);
servo1.write(0);
servo2.write(0);
}
void loop() {
for (x = 0; x < 180; x++) {
servo1.write(x);
delay(10);
}
delay(1000);
for (x = 180; x > 0; x--) {
servo1.write(x);
delay(10);
}
delay(2000);
for (y = 0; y < 180; y++) {
servo2.write(y);
delay(10);
}
delay(1000);
for (y = 180; y > 0; y--) {
servo2.write(y);
delay(10);
}
delay(2000);
}
Mai departe vom afisa starea celor 2 servomotoare pe un display LCD. Acesta se conecteaza pe interfata I2C exact ca in acest articol.
Sketchul folosit in acest montaj este cel de mai jos:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3E, 20, 4);
#include <Servo.h>
Servo servo1;
Servo servo2;
int motor1 = 2;
int motor2 = 3;
int x, y;
byte celsius[] = {
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000
};
void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("2 servomotoare");
lcd.setCursor(0, 1);
lcd.print("si Arduino Mega");
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
servo1.attach(motor1);
servo2.attach(motor2);
servo1.write(0);
servo2.write(0);
lcd.createChar(0, celsius);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
delay(500);
lcd.setCursor(0, 0);
lcd.print("Servo 1: ");
for (x = 0; x <= 180; x++) {
servo1.write(x);
lcd.setCursor(9, 0);
lcd.print(x);
lcd.write(byte(0));
delay(50);
}
delay(1000);
for (x = 180; x >= 0; x--) {
servo1.write(x);
lcd.setCursor(9, 0);
lcd.print(" ");
lcd.setCursor(9, 0);
lcd.print(x);
lcd.write(byte(0));
delay(50);
}
delay(2000);
lcd.setCursor(0, 2);
lcd.print("Servo 2: ");
for (y = 0; y <= 180; y++) {
servo2.write(y);
lcd.setCursor(9, 2);
lcd.print(y);
lcd.write(byte(0));
delay(50);
}
delay(1000);
for (y = 180; y >= 0; y--) {
servo2.write(y);
lcd.setCursor(9, 2);
lcd.print(" ");
lcd.setCursor(9, 2);
lcd.print(y);
lcd.write(byte(0));
delay(50);
}
delay(2000);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Setare servomotor 1");
lcd.setCursor(0, 1);
lcd.print(" la 45");
lcd.write(byte(0));
servo1.write(45);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 90");
lcd.write(byte(0));
servo1.write(90);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 135");
lcd.write(byte(0));
servo1.write(135);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 180");
lcd.write(byte(0));
servo1.write(180);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 90");
lcd.write(byte(0));
servo1.write(90);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 0");
lcd.write(byte(0));
servo1.write(0);
delay(2000);
lcd.setCursor(0, 0);
lcd.print("Setare servomotor 2");
lcd.setCursor(0, 1);
lcd.print(" la 45");
lcd.write(byte(0));
servo2.write(45);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 90");
lcd.write(byte(0));
servo2.write(90);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 135");
lcd.write(byte(0));
servo2.write(135);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 180");
lcd.write(byte(0));
servo2.write(180);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 90");
lcd.write(byte(0));
servo2.write(90);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" la 0");
lcd.write(byte(0));
servo2.write(0);
delay(2000);
}
Un filmulet cu montajele functionale este mai jos: