Hej, właśnie ukończyłem wskaźnik światła:
#include <Servo.h>
Servo motorek;
void setup() {
Serial.begin(9600);
motorek.attach(3);
motorek.write(180);
}
void loop() {
int fotorezystor= analogRead(A5);
int pozycja=map(fotorezystor,300,1000, 90, 170);
motorek.write(pozycja);
delay(30);
}
Po dłuższej kalibracji i zabawy z servem pare pytań:
1) Zauważyłem, że jeśli do serwomechanizmu puścimy pozycje mniejszą niż 20 zaczyna wariować (kręci się w kółko). Zakres jest niby 0-180. Czy to poprostu wina tego konkretnego egzemplarza?
2) Jeśli arduino zasilę baterią 9V (no, 8.25V) serwo ledwo działa (tylko buczy niechętnie). Jeśli podłącze arduino do zasilacza i ustawię na nim 12v - układ działa, ale zdażają mi się (serwomechanizmowi) dziwne odchyły i zwiechy. Gdy ustawię napięcie na 16v wszystko działa elegancko (niby arduino uciąga do 20v). Czy to też zależy od konretnego serwa?
[ Dodano: 25-12-2017, 10:10 ]
Wersja ulepszona z kalibracja strzalki (0%-100%) potencjometrem oraz kalibracja światla
#include <Servo.h>
Servo motorek;
int procent0=0;
int procent100=0;
int ciemno=0;
int jasno=0;
int sukces=0;
void kalibracja()
{
Serial.println("Trwa kalibracja strzalki, ustaw strzalke na 0% i wcisnij guzik");
int potencjometr=0;
sukces=0;
while (sukces==0)
{
potencjometr=analogRead(A4);
potencjometr=map(potencjometr,0,1023,30,180);
motorek.write(potencjometr);
delay(200);
procent0=potencjometr;
if (digitalRead(7)==LOW){sukces=1;}
}
Serial.print("Ustalono 0% na poziomie: "); Serial.println(procent0);
delay(2000);
Serial.println("Trwa kalibracja, ustaw strzalke na 100% i wcisnij guzik");
while (sukces==1)
{
potencjometr=analogRead(A4);
potencjometr=map(potencjometr,0,1023,30,180);
motorek.write(potencjometr);
delay(200);
procent100=potencjometr;
if (digitalRead(7)==LOW){sukces=2;}
}
Serial.print("Ustalono 100% na poziomie: "); Serial.println(procent100);
}
void kalibracja_swiatla()
{
delay(1000);
Serial.println("Trwa kalibracja swiatla, wylacz zupelnie swiatlo wcisnij guzik");
while (digitalRead(7)==HIGH){}
ciemno=analogRead(A5);
delay(1000);
Serial.print("Bez swiatla:");Serial.println(ciemno);
Serial.println("Trwa kalibracja swiatla, wlacz swiatlo wcisnij guzik");
while (digitalRead(7)==HIGH){}
jasno=analogRead(A5);
delay(1000);
Serial.print("Ze swiatlem:");Serial.println(jasno);
sukces=3;
}
void setup() {
Serial.begin(9600);
motorek.attach(3);
motorek.write(180);
pinMode(7, INPUT_PULLUP);
kalibracja();
kalibracja_swiatla();
}
void loop() {
while (sukces!=3){}
int fotorezystor= analogRead(A5);
int pozycja=map(fotorezystor,jasno,ciemno, procent100, procent0);
motorek.write(pozycja);
delay(300);
}
Pytania jednak z poprzedniego postu zostają, ktoś jest w stanie pomóc?