od pepi2000 » úte 21 bře, 2017 9:24 am
Jasně Ferdíku,
Udělal sem to tak, že vytočím trimr úplně doleva což nastaví serva na polohu 90 st. a naprogramuju všech šest serv na 90 st.
Potom připevním serva ze spodu k vyhýbkám, aby vyhýbka byla ve středu tedy lokomotiva by něměla kam jet.
Po připevnění serv znovu stisknu tlačítko a po dvousekundovém rozvícení LED jednou krátce blikne (tzn. první pozice u prvního serva)
nastavím trimrem posun a znovu stisknu tlačítko, LED se rozsvítí a zapíše se hodnota do paměti. Dále LED blikne krátce dvakrát (tzn. druhá pozice u prvního serva)
a tak dále. Na konci proklikne LED několikrát pro ukončení nastavení. Arduino je třeba restartovat pro načtení nových dat. (odpojit od napětí a připojit)
Po přesunu serva programem je servo odpojeno do změny na vstupu (dá se změnit a zjednodušit program)
Taky je možno do programu nastavit při nastavování poloh servomotorků pomocí tlačítka a trimru i rychlost posunu servomotorků a zapsat do paměti.
Ještě takový postřeh. Servo ES08MA II není nic extra má sice kovové převody, ale není moc spolehlivé jedno mi odpadlo a při dojezdu jede dál něž má a pak se o kousek vrátí. Je možné že je to kovovými převody, že mají určitou setvačnost. Nejlepší a bez problémů se mi osvědčily serva Tover pro modré plast. převody. Tak pa.
#include <EEPROM.h>;
#include <Servo.h>;
Servo pres_1;
Servo pres_2;
Servo pres_3;
Servo pres_4;
Servo pres_5;
Servo pres_6;
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;
int nn=2;
int eepr=0;
int e_1 = EEPROM.read(1);
int e_2 = EEPROM.read(2);
int e_3 = EEPROM.read(3);
int e_4 = EEPROM.read(4);
int e_5 = EEPROM.read(5);
int e_6 = EEPROM.read(6);
int e_7 = EEPROM.read(7);
int e_8 = EEPROM.read(8);
int e_9 = EEPROM.read(9);
int e_10 = EEPROM.read(10);
int e_11 = EEPROM.read(11);
int e_12 = EEPROM.read(12);
int del=8; // rychlost posunu serva - vyšší hodnota = pomalejší přesun
void pamet(){
int y=analogRead(A5);
int mapa=map(y,0,1023,0,75); //hodnota 75 nastaví rozmezí pro servo od 15 do 165 stupňů
switch(eepr){
case 1:
EEPROM.update(1,(90-mapa));
break;
case 2:
EEPROM.update(2,(90+mapa));
break;
case 3:
EEPROM.update(3,(90-mapa));
break;
case 4:
EEPROM.update(4,(90+mapa));
break;
case 5:
EEPROM.update(5,(90-mapa));
break;
case 6:
EEPROM.update(6,(90+mapa));
break;
case 7:
EEPROM.update(7,(90-mapa));
break;
case 8:
EEPROM.update(8,(90+mapa));
break;
case 9:
EEPROM.update(9,(90-mapa));
break;
case 10:
EEPROM.update(10,(90+mapa));
break;
case 11:
EEPROM.update(11,(90-mapa));
break;
case 12:
EEPROM.update(12,(90+mapa));
break;
}
return;
}
void setup() {
pinMode(9,INPUT);
pinMode(10,INPUT);
pinMode(11,INPUT);
pinMode(12,INPUT);
pinMode(13,INPUT);
pinMode(4,INPUT);
pinMode(A1,INPUT);
pinMode(A3,OUTPUT);
pres_1.attach(8);
pres_2.attach(7);
pres_3.attach(6);
pres_4.attach(5);
pres_5.attach(3);
pres_6.attach(2);
pres_1.write(e_1);
pres_2.write(e_3);
pres_3.write(e_5);
pres_4.write(e_7);
pres_5.write(e_9);
pres_6.write(e_11);
}
void loop() {
int y=analogRead(A5);
int mapa=map(y,0,1023,0,75);
if(eepr==1){
pres_1.write((90-mapa));
}
if(eepr==2){
pres_1.write((90+mapa));
}
if(eepr==3){
pres_2.write((90-mapa));
}
if(eepr==4){
pres_2.write((90+mapa));
}
if(eepr==5){
pres_3.write((90-mapa));
}
if(eepr==6){
pres_3.write((90+mapa));
}
if(eepr==7){
pres_4.write((90-mapa));
}
if(eepr==8){
pres_4.write((90+mapa));
}
if(eepr==9){
pres_5.write((90-mapa));
}
if(eepr==10){
pres_5.write((90+mapa));
}
if(eepr==11){
pres_6.write((90-mapa));
}
if(eepr==12){
pres_6.write((90+mapa));
}
//-------------------------------------------------
if((digitalRead(9)==0) && a==0){
for(int x=e_2;x>(e_1-1);x--){
pres_1.write(x);
delay(del);
}
a=1;
}
if((digitalRead(9)==1) && a==1){
for(int x=e_1;x<(e_2+1);x++){
pres_1.write(x);
delay(del);
}
a=0;
}
if((digitalRead(10)==0) && b==0){
for(int x=e_4;x>(e_3-1);x--){
pres_2.write(x);
delay(del);
}
b=1;
}
if((digitalRead(10)==1) && b==1){
for(int x=e_3;x<(e_4+1);x++){
pres_2.write(x);
delay(del);
}
b=0;
}
if((digitalRead(11)==0) && c==0){
for(int x=e_6;x>(e_5-1);x--){
pres_3.write(x);
delay(del);
}
c=1;
}
if((digitalRead(11)==1) && c==1){
for(int x=e_5;x<(e_6+1);x++){
pres_3.write(x);
delay(del);
}
c=0;
}
if((digitalRead(12)==0) && d==0){
for(int x=e_8;x>(e_7-1);x--){
pres_4.write(x);
delay(del);
}
d=1;
}
if((digitalRead(12)==1) && d==1){
for(int x=e_7;x<(e_8+1);x++){
pres_4.write(x);
delay(del);
}
d=0;
}
if((digitalRead(13)==0) && e==0){
for(int x=e_10;x>(e_9-1);x--){
pres_5.write(x);
delay(del);
}
e=1;
}
if((digitalRead(13)==1) && e==1){
for(int x=e_9;x<(e_10+1);x++){
pres_5.write(x);
delay(del);
}
e=0;
}
if((digitalRead(4)==0) && f==0){
for(int x=e_12;x>(e_11-1);x--){
pres_6.write(x);
delay(del);
}
f=1;
}
if((digitalRead(4)==1) && f==1){
for(int x=e_11;x<(e_12+1);x++){
pres_6.write(x);
delay(del);
}
f=0;
}
if(digitalRead(A1)==1){
digitalWrite(A3,HIGH);
pamet();
delay(2000);
digitalWrite(A3,LOW);
delay(200);
for(int i=1;i<nn;i++){
digitalWrite(A3,HIGH);
delay(150);
digitalWrite(A3,LOW);
delay(200);
}
eepr=eepr+1;
nn=nn+1;
a=2;
b=2;
c=2;
d=2;
e=2;
f=2;
}
if(eepr==13){
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
eepr=0;
nn=2;
}
}
Naposledy upravil
pepi2000 dne pát 24 bře, 2017 8:36 am, celkově upraveno 2