Arduino kod za servo motor

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Arduino kod za servo motor

Post by RumbaKing »

Nemam pojma sa kodiranjem, treba mi jednostavan kod koji ce da radi sledece:

Kada na neki pin arduina dodje +5V da se servo pomeri na 180 stepeni, a ako nema tih 5V da se vrati na nula stepeni i da tih nula stepeni bude pocetna pozicija. Znaci samo ako ima +5V da ide na 180, u svakom drugom slucaju da bude na 0 stepeni.
Inace na tom ulaznom pinu moze da bude ili +5v ili 0V.

Trazio sam po netu da li ima tako nesto, probao sam da preradim neke slicne ali se nisam uopste snasao.
Inace pravim ebike a servo treba da dize i spusta elektromotor od tocka tj. gume.
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Evo nesto sam izmursovao i RADI. Ako neko ima neku sugestiju neka kaze jer sam apsolutni pocetnik. Kako da malo usporim okretanje serva? Da ne ide maksimalnom brzinom tamo-vamo?

Code: Select all


//RumbaKing servo 

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    servo1.write(180);
  }
  else {
    servo1.write(10);
  }
}


User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

Moras mu postepeno menjati ugao. A ne naglo.
Znaci pri prelasku iz jednog u drugo stanje ides prvo 11, pa 12 i tako redom ili veci koraci... Sa pauzom nekom izmedju.
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Probao i ukapirao da mi ipak vise odgovara da ide brzo. Radi mi odlicno na Arduino UNO ali na Pro Mini se servo ponasa ludo, u jednu stranu ide nekako a u drugu zaglavi na pola puta i titra i ni ne stigne na zadatu poziciju. Imam posebno napajanje za servo tako da ima dovoljno struje i za motor i za arduino. Ne znam sta je, nemam drugi da probam. Verovatno cu UNO i da koristim, jedino mi zbog manjih gabarita vise odgovara Pro Mini. A i razlika u ceni je 2e :D
User avatar
Black
Odlično uznapredovao
Odlično uznapredovao
Posts: 981
Joined: 17-12-2008, 15:44

Re: Arduino kod za servo motor

Post by Black »

Ako si uzeo pro mini što radi na 5V, onda su procesori isti i u UNO i pro mini. Tako da su kodovi isti kao i sheme i nema razloga da na jednom radi a drugom ne.

Ako si uzeo pro mini što radi na 3.3V a napajaš ga sa 5V, onda ti se vjerovatnos procesor zablesira
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Ne znam, sad cu da probam sa 3,3V. Pogledao sam na Aliexpressu gde sam narucio, pise da je 5V, ko zna mozda je kinez spakovao pogresno :)
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Isto se ponasa i sa 3,3V. Probao sam da koristim i druge pinove kao ulaze i kontrolu za servo ali je isto. Nebitno, bitno da radi na UNO. Treba da mi stignu nekoliko plocica od kineza pa cu probati opet.
Hvala svima, kad zavrsim EBike okacicu projekat na forumu, sad imam sve delove samo treba masinski deo odraditi, varenje...
User avatar
Black
Odlično uznapredovao
Odlično uznapredovao
Posts: 981
Joined: 17-12-2008, 15:44

Re: Arduino kod za servo motor

Post by Black »

Procesori su isti, tako da ne vidim nijedan logičan razlog zašto bi na jednom radio a na drugom ne. Možda je pločica u banani
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Evo me opet, ne snalazim se. Crkao mi je servo i sada sam kupio servo motor koji navodno ima metalne zupcanike ali sam dobio sa plasticnim i sad mi treba da usporim brzinu serva ali nesto mi ne uspeva, ono sa delay ne funkcionise a ni ovo sto cu da postavim ovde takodje, negde gresim, pomagajte, to je za vas verovatno smesno :)
Prvi kod je prvobitni i sa njim je sve radilo godinu dana sa servom sa metalnim zupcanicima a drugi kod je nesto sto sam ja pokusavao i nisam uspeo. Inace kupio sam dva serva kod dva trgovca i oba su plasticni a u oglasu pise ALL METAL GEARS :)

Code: Select all

//RumbaKing servo 

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    servo1.write(180);
  }
  else {
    servo1.write(10);
  }
}

Code: Select all

//RumbaKing servo 

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;
int pos = 0;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    for (pos=0; pos<=180; pos+=1)
    servo1.write(180);
    delay(100);
  }
  else {
    for (pos=0; pos<=180; pos-=1)
    servo1.write(10);
    delay(100);
  }
}
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

Blizu si bio.
Probaj izmeniti ovo

Code: Select all

    servo1.write(10);
u ovo

Code: Select all

    servo1.write(Pos);
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Probao sam i isto se ponasa kao i sa onim prvim kodom. Ono delay koliko god da stavim on ide maximalnom brzinom, verovatno neka zagrada ima viska ili manjka, meni je ovo skoro kao da gledam u hieroglife :(
Molim te Pedja ako mozes ceo kod da pogledas, mozda vidis nesto nelogicno. Evo trenutnog koda:

Code: Select all

//RumbaKing servo

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;
int pos = 0;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    for (pos=0; pos<=180; pos+=1)
    servo1.write(180);
    delay(10);
  }
  else {
    for (pos=0; pos<=180; pos-=1)
    servo1.write(pos);
    delay(10);
  }
}
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

Ja ne koristim C, ali ajd da probam.

for (pos=0; pos<=180; pos-=1){
servo1.write(pos);
delay(10);
}
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Nece, ovako ne mrda uopste :) Nema veze, hvala ti, mozda se javi neko ko koristi C, igracu se ja jos u medjuvremenu. Ponovicu jos jednom sta mi treba da ne bi citali celu temu.

Nemam pojma sa kodiranjem, treba mi jednostavan kod koji ce da radi sledece:

Kada na neki pin (pin4) arduina dodje +5V da se servo pomeri na 180 stepeni, a ako nema tih 5V da se vrati na nula stepeni i da tih nula stepeni bude pocetna pozicija. Znaci samo ako ima +5V da ide na 180, u svakom drugom slucaju da bude na 0 stepeni.
Inace na tom ulaznom pinu moze da bude ili +5v ili 0V.
Potrebno je da servo ne ide maximalnom brzinom vec sporije.
Evo kod koji radi ali brzo:

Code: Select all

//RumbaKing servo 

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    servo1.write(180);
  }
  else {
    servo1.write(10);
  }
}

User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

for (pos=0; pos<=180; pos-=1)
Ta petlja nije dobra nikako.
Mislim da bi trebalo da ide

Code: Select all

for (pos=180; pos>1 ; pos-=1)
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Opet isto, radi ali brzo, ovo delay (1000) ili koliko god da stavim uopste ne igra ulogu, probao sam svasta da menjam i ili radi isto ili mi izbaci gresku u kodu ili ne mrda :)
Trenutni kod:

Code: Select all

//RumbaKing servo

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;
int pos = 0;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    for (pos=0; pos<=180; pos+=1);
    servo1.write(pos);
    delay(1000);
  }
  else {
    for (pos=180; pos>1 ; pos-=1);
    servo1.write(pos);
    delay(1000);
  }
}
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

Opet ti fale zagrade obelezene crvenim u prethodnom postu.
Ovako nekako

Code: Select all

else {
    for (pos=180; pos>1 ; pos-=1){
    servo1.write(pos);
    delay(1000);}
  }
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Novi momenat! Proradilo je delimicno, konacno reaguje na promene delay i kada je
PIN 4 na HIGH (+5V) pomeri se polako na 180 stepeni i stane. To radi.
Problem je kad je PIN 4 NA LOW (0V), i onda pocne stalno isto da radi: ide polako od 360 stepeni ka nuli, stigne polako do nule ali se odmah brzo vraca na 360 pa opet polako do nule pa brzo do 360 i sve tako :)
Cim mu dovedem pin 4 na HIGH polako ode na 360 kao sto treba i stoji tu.

Code: Select all

//RumbaKing servo

#include <Servo.h>
int button1 = 4; //button pin, connect to +5V to move servo
int press1 = 0;
Servo servo1;
int pos = 0;

void setup()
{
  pinMode(button1, INPUT);
  servo1.attach(7);
  digitalWrite(4, LOW); // make pin low
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == HIGH)
  {
    for (pos=0; pos<=180; pos+=1);
    servo1.write(pos);
    delay(50);
  }
  else {
    for (pos=180; pos>1 ; pos-=1){
    servo1.write(pos);
    delay(50);}
  }
}
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

To moras razraditi dalje u programu. Da se ne ponavlja stalno...
RumbaKing
Napredujem
Napredujem
Posts: 167
Joined: 22-02-2009, 05:02
Location: Srbija
Contact:

Re: Arduino kod za servo motor

Post by RumbaKing »

Ok, videcu malo da se igram sa kodom, ima svasta na youtube, moram malo da ucim pod stare dane :) Hvala Pedja.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Arduino kod za servo motor

Post by pedja089 »

Nema na cemu...
Da je pic u pitanju i pic basic mogao bi vise pomoci.
Post Reply