Kirjoittaja Aihe: Servon ohjaus arduinolla  (Luettu 14479 kertaa)

Juho_88

  • Vieras
Servon ohjaus arduinolla
« : 17 Lokakuu, 2010, 18:34:31 »
Opettelen tässä ohjelmoimaan arduinoa ja tuli tehtyä tämmöinen ohjelma jolla voi testailla servoja.
Toivottavasti tästä on hyötyä muillekin.

Koodia: [Valitse]
/*
Servon ohjaus Arduino Duemilanovella ja Arduinon serial monitorilla.
Testattu HEXTRONIK HXT900 servolla
Vaatii ulkoisen virtalähteen Arduinolle (USB:stä loppuu teho) esim. 7.4V LiPo
kytkentä:
GND-->servon -(ruskea)
5V-->servon +(punainen)
pinni9-->servon ohjaus(oranssi)
Ohjaus tehdään syöttämällä haluttu ohjauspulssin pituus mikrosekunteina serial monitoriin.
*/
  int sarja = 1500;                            //alustetaan pulssin pituus oletettuun keskikohtaan
 
void setup() {
  Serial.begin(9600);                          //avataan sarjaporttiyhteys
  pinMode(9,OUTPUT);                           //pinni 9 käyttöön
}

void loop() {
  if (Serial.available() > 0) {                //onko sarjaportista tulossa tietoa
    sarja = 0;                                 //alustetaan muuttuja nollaksi
    while(Serial.available() > 0)              //luetaan sarjaportista tuleva tieto
    {
      sarja *= 10;                             //muuttaa näppäimistöltä
      sarja += (Serial.read() - '0');          //tulleen syötteen desimaaliluvuksi (kopiotu netistä en tiedä kuinka toimii)
      delay(2);                                //odotetaan että kaikki tieto on vastaanotettu.
    }
      if (sarja < 550)                         //pulssin pituuden alarajan asetus. Aseta niin ettei servo junnaa laitaa vasten
        sarja = 550; 
      if (sarja > 2500)                        //pulssin pituuden ylärajan asetus
        sarja = 2500;
       
   Serial.print(sarja,DEC);                    //tulosta sarjaporttiin mitä syötettiin
  }
  digitalWrite(9, HIGH);                       //ohjauspulssi päälle
  delayMicroseconds(sarja);                    //pidä pulssi päällä asetetun ajan verran
  digitalWrite(9, LOW);                        //ohjauspulssi pois
  //delayMicroseconds(5000);                   //Viive ennen seuraavaa pulssia. Mitä pienempi sitä tehokkaammin ja tarkemmin servo toimii
  delay(20);                                   //oletusarvo 20ms--> n.50Hz HXT900 toimii nätisti myös 5000us(n.200Hz)pulssilla
}

Poissa Bonzer

  • Tavallinen torppari
  • ***
Vs: Servon ohjaus arduinolla
« Vastaus #1 : 17 Lokakuu, 2010, 18:40:32 »
Hyvältä näyttää ainakin omaan silmään. Mun mielestä oli helpompi tehdä picaxella, koska siellä on valmis servo toiminto eli pystyy yhdellä koodilla päättämään servon asennon. Siihen perään joku potikka jolla pystyy muutamaan servon asentoa. Ei sillä, että olis huono vaihtoehto toikaan, omalla kohdalla kun tuo koodi näyttää sekasotkulta, kun on kirjottanu picin koodia.
Autoja, kiinteäsiipisiä ja Quadi.

Poissa Jussi.

  • Jäsen 2024
  • *****
  • Sekakäyttäjä (FPV/CP). Vuoden torppari 2013
    • Torppari 2013
Vs: Servon ohjaus arduinolla
« Vastaus #2 : 17 Lokakuu, 2010, 18:55:06 »
Hienoa, 
tuo on opettavainen tapa tehdä,  toki siihen löytyy valmis kirjastokin:
http://quarkstream.wordpress.com/2010/03/16/arduino-9-servos/

Mun arduino on maannut hyllyllö odottamassa "aikaa".

Mulla on ollut mielessä tehdä oikeen kunnon servotesteri, joka mittaisi servon nopeuttaa, tarkkuutta ja virranottoa  erilaisissa kuormitustilanteissa.
Pikkusen tällä hetkellä jarruttaa että ei tule hyvää ideaa mekaanisesta laitteesta joka olisi helppo toteuttaa tai jo olemassa oleva jolla tuota rasitusta saisi aikaiseksi toistettavasti.

Poissa Jerkku

  • Modetorppari
  • *****
  • Rc-Kopterit Ry
Vs: Servon ohjaus arduinolla
« Vastaus #3 : 17 Lokakuu, 2010, 19:28:27 »
Lainaus
Pikkusen tällä hetkellä jarruttaa että ei tule hyvää ideaa mekaanisesta laitteesta joka olisi helppo toteuttaa tai jo olemassa oleva jolla tuota rasitusta saisi aikaiseksi toistettavasti.
Jos ymmärsin ajatuksesi oikein, niin toimisiko esim rc-auton iskari sopivan paksuisilla öljyillä ja ilman jousta.
Gaui X3 Vbar mini          Futaba 10C
Trex 500 ESP  3G

Juho_88

  • Vieras
Vs: Servon ohjaus arduinolla
« Vastaus #4 : 17 Lokakuu, 2010, 19:30:32 »
Tiesin kyllä servokirjastosta. Itse opin kuitenkin jonkin verran servonkin toiminnasta kun tein ohjelman ilman valmista kirjastoa. Arduinollehan löytyy servoista pari esimerkkiäkin:
potikkaohjaushttp://arduino.cc/en/Tutorial/Knob
edestakaisin pyyhkiminenhttp://arduino.cc/en/Tutorial/Sweep

Pystyykös tuota servokirjastoa käyttäessä muuttamaan servolle menevän signaalin taajuutta(taukojakson pituus). Mikähän tuo taajuus mahtaa olla servokirjastoa käytettäessä? Veikkaisin 50Hz

Poissa Jussi.

  • Jäsen 2024
  • *****
  • Sekakäyttäjä (FPV/CP). Vuoden torppari 2013
    • Torppari 2013
Vs: Servon ohjaus arduinolla
« Vastaus #5 : 17 Lokakuu, 2010, 19:50:37 »
Lainaus
Pystyykös tuota servokirjastoa käyttäessä muuttamaan servolle menevän signaalin taajuutta(taukojakson pituus). Mikähän tuo taajuus mahtaa olla servokirjastoa käytettäessä? Veikkaisin 50Hz
Eipä pysty,
Vakioksi asetettu 20000µs, eli juuri tuo 50Hz

Ote fileest' "Servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2"
Lainaus
#define MIN_PULSE_WIDTH       544     // the shortest pulse sent to a servo 
#define MAX_PULSE_WIDTH      2400     // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH  1500     // default pulse width when servo is attached
#define REFRESH_INTERVAL    20000     // minumim time to refresh servos in microseconds

Poissa Mikka

  • Seniori torppari
  • *****
  • Jäsen nro #99
Vs: Servon ohjaus arduinolla
« Vastaus #6 : 17 Lokakuu, 2010, 20:30:43 »
Eikös sen taajuuden pysty muuttamaan kirjastoa puukottamalla.

Siis sieltä SoftwareServo::refresh "lastRefresh + 20" vaikka 10:iin, niin on 100 Hz.

Muutama kopteri, lennokki ja pari rakettia

Juho_88

  • Vieras
Vs: Servon ohjaus arduinolla
« Vastaus #7 : 17 Lokakuu, 2010, 22:13:43 »
Sieltähän ne kaikki löytyykin  :) . Eipähän vaan oo tullu mieleenkään mennä ronkkiin noita kirjastoja. Kannattaa varmaan tallentaa muokatut kirjastot eri nimellä ettei myöhemmin tuu ongelmia, kun tarvii käyttää standardikirjastoa.

Poissa Jussi.

  • Jäsen 2024
  • *****
  • Sekakäyttäjä (FPV/CP). Vuoden torppari 2013
    • Torppari 2013
Vs: Servon ohjaus arduinolla
« Vastaus #8 : 17 Lokakuu, 2010, 22:35:52 »
Lainaus
Eipähän vaan oo tullu mieleenkään mennä ronkkiin noita kirjastoja. Kannattaa varmaan tallentaa muokatut kirjastot eri nimellä ettei myöhemmin tuu ongelmia, kun tarvii käyttää standardikirjastoa.
Juu, yllättävän pieniä noi kirjastot on. Todella opettavaista lukemista. Sieltähän voi sitten parhaimmillaan poimia vaan rusinat omaan koodiin niin säästyy vähän sitä vähäistä muistia.



Poissa sniiki

  • Tavallinen torppari
  • ***
  • Hei me lennettiin
Vs: Servon ohjaus arduinolla
« Vastaus #9 : 23 Toukokuu, 2011, 12:00:26 »
Arduinon sivuilta varmaan löytyisi tietoa mutta kysytään nyt mielipidemielessä että onko tämä lankku (tarkemmin siis esim. Arduino Uno) hyvä valinta ns. yleisräpellykseen, jossa tarkoitus on lähinnä käyttää lautaa I/O alustana ja varsinainen ohjaussovellus pyörii PC:llä? Olikos Arduinoon yleensäkään mitään valmista rajapintakirjastoa olemassa esim. VB.Net kielellä, vai pitääkö kääntyä atmel-sivustojen puoleen?

Törmäsin tähän lankkuun tehdessäni pientä tutkielmaa WSN nodeista ja tämän halpa hinta pisti houkuttelemaan. Ei maksa vaivaa alkaa itse piirilevyä rakenteleen jos valmiin paketin saa 20eurolla. (Oma atmel-kooderi ollu kasausta odottamas vuoden).
T-Rex 700G Helibug
Spektrum DX7
PhoenixRC

Poissa IsoHK

  • Aloitteleva torppari
  • *
Vs: Servon ohjaus arduinolla
« Vastaus #10 : 23 Toukokuu, 2011, 23:14:54 »
Olikos Arduinoon yleensäkään mitään valmista rajapintakirjastoa olemassa esim. VB.Net kielellä, vai pitääkö kääntyä atmel-sivustojen puoleen?
Tuolta löytyy useammallekin kielelle, VB.Netille 3. viimeisenä...ei varsinainen kaikenkattava rajapintakirjasto mutta kyllä sillä I/O-pinnejä ohjailee:
http://www.arduino.cc/playground/Main/InterfacingWithSoftware

Tuoltakin löytyy jotain arduino/.Net liittyvää:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290689533
« Viimeksi muokattu: 23 Toukokuu, 2011, 23:26:30 kirjoittanut IsoHK »
Kaikki on perseestä...tai sitten ei...

Poissa sniiki

  • Tavallinen torppari
  • ***
  • Hei me lennettiin
Vs: Servon ohjaus arduinolla
« Vastaus #11 : 24 Toukokuu, 2011, 20:45:53 »
No niinpä oli. Kiitosta. En ehtinyt tarkistaa pakettia viä mutta kuvassa ainakin näkyy PWM nii eiköhän tolla pärjää.
T-Rex 700G Helibug
Spektrum DX7
PhoenixRC

Poissa 1m4s0_

  • Seniori torppari
  • *****
  • Sami Ollonen ät Raahe
Vs: Servon ohjaus arduinolla
« Vastaus #12 : 03 Heinäkuu, 2011, 23:06:38 »
lainataanpa tätä, miten tuo homma tarkalleenottaen menee.. onko joku perehtynyt?

Olen käsittänyt että noparia ohjataan ihan samalla signaalilla kuin servojakin.
Servo testerillä saan pyörimään moottorin ihan oikein, samoin servo liikkuu laidasta laitaan ihan oikein.
arduinolla servo liikkuu ihan oikein laidasta laitaan mutta nopari ei kyllä resetoidu oikein,

"servo testeri" arduinon omalla servo kirjastolla spoilerin alla.
[spoiler]

#include <Servo.h>
 
Servo myservo;
  int val = 90;                           
 
void setup() {
  Serial.begin(9600);                       
  myservo.attach(24);                         
}

void loop() {
  if (Serial.available() > 0) {               
    val = 0;                             
    while(Serial.available() > 0)             
    {
      val *= 10;                             
      val += (Serial.read() - '0');         
      delay(2);                               
    }
      if (val < 1)                         
        val = 1; 
      if (val > 180)                       
        val = 180;
   Serial.print("Annettu aste-arvo:" );
   Serial.println(val,DEC);
   
   Serial.print("Servolle välitetty aste: ");
   Serial.println(val,DEC);
   Serial.print("Pulssinleveys: ");
   Serial.println(pulseIn(24, LOW
   ));   
  }
myservo.write(val);                                     
  delay(100);                                   
}[/spoiler]

Tuolla ohjelmalla saa ohjattua servoa asteluvulla haluttuun kohtaan ja sitten se näyttää pulssin leveyden myös.
asteella pulssin leveys on n.17470
180-astetta niin leveys on n.19300

Turnigyn servo testerillä samat lukemat
aste n.14400
180-astetta n.15400

Coronan 6ch syntikka PPM vastarilla
aste n.19900
180-astetta n. 20900

Eli kaikissa on noin 1000 väli, paitsi arduinon kirjastolla. Mitattu, ulostulo signaalin pinneistä..
Eli raa asti ylhäällä olo eli ohjaus pulssi olisi n.1000 mikrosekunttia.. arduinolla 2000.
Pulssit on selvitetty tällä softalla, löytyy taas spolerin alta
[spoiler]void setup()
{
Serial.begin(57600);
pinMode(22, INPUT);
}
void loop()
{
Serial.println(pulseIn(22, LOW));
}[/spoiler]

Tuolla vois hakea PPM signaalin vastarilta jos tarvitsee, löysin netin syövereistä tuon, tässä linkki
http://diydrones.com/profiles/blogs/705844:BlogPost:38393

En ole näihin signaaleihin nyt perehtnyt sen kummin vielä. Kanavakohtaista dataahan nuo mitatut tietenkin on ei varsinaista PPM signaalia jota nyt en tarvitsekkaan.. mikrosekuntteja on mitatut arvot. nyt ohjelma aloittaa laskemisen siitä kun pinni menee alas(0) ja laskee kunnes se nousee taas ylös(1). Jos muuttaa niin että laskee nousevasta nousevaan niin arvot ovat "järkevämpiä" eli 300-2500 mikrosekunttia.
Eli LOW asetuksella mitataan alhaalla olevaa tasoa ja HIGH asetuksella ylhäällä olevia tasoja.. kuva selventämään: (lainattu edellämainitulta sivulta)
http://api.ning.com/files/WmjViE3faLYy73Ry7eTzn4XMryr8qlAMeb*edCbrzW1BVUPtR1iXBIGgsS93iG1x5roVRkAWHqg7V3FAhK*o8NYsajr5nW7G/RC_Receiver_Timing_Diagram1.jpg

Kaikki tämä sen takia että olisin halukas ohjelmoimaan noparia arduinolla, jos joku osaa hjelppiä tai tietää jo valmiin softan niin vinkkaa. Samalla ois kiva tietää miksei tuo noparin ohjaus onnistu samalla tavalla kun servokin pelaa.. ja miten servo toimii tuolla esim servo testerillä ja arduinolla vaikka pulssin leveys on kaksinkertainen. Voi olla että teen itsestäni hölmön mutta ei vaan nyt ymmärrä tätä?  ;D
Oma "pöytäkäytössä" oleva leikkikalu on Arduino MEGA 2560..

450Pro
Futaba 12FG 35mhz

Poissa ChiKung

  • Pro torppari
  • ****
Vs: Servon ohjaus arduinolla
« Vastaus #13 : 04 Heinäkuu, 2011, 09:29:59 »
Lainaus
arduinolla servo liikkuu ihan oikein laidasta laitaan mutta nopari ei kyllä resetoidu oikein
Kaksi vaihtoehtoa mielestäni.
- Noparissa on suojaus, ettei lähde käyntiin jos virrat kytkettäessä ei ole signaali nollassa. Eli pitänee olla joku useamman sekunnin viive, jonka ajan tuo pitää signaalin nollassa. Servojen nolla taitaa olla se 1,5 ms, mutta noparille se -90 astetta (noin 1ms tai joissain jopa 0,7 ms)? Yleensä noparit ei starttaa, jos sattuu jäämään vähänkään trimmiä.
- Väärä taajuus. Servothan syö aika laajan taajuusalueen, mutta monet noparit eivät. Eli onko jakso tuo noin 20 ms?

Kokeile vaikka niin, että aluksi pitää muutamia sekunteja minimipulssilla. Onko muuten io:ssa ylösveto? Eli onko bootissa ylhäällä?
« Viimeksi muokattu: 04 Heinäkuu, 2011, 09:35:35 kirjoittanut ChiKung »
T-Rex 450 SE Superframe, CX450 V2 AE, DX7

 

Vastaavat aiheet

  Aihe / Aloittaja Vastauksia Uusin viesti
9 Vastauksia
4513 Lukukerrat
Uusin viesti 22 Maaliskuu, 2009, 21:57:08
kirjoittanut jackwho
2 Vastauksia
2469 Lukukerrat
Uusin viesti 14 Kesäkuu, 2011, 22:35:23
kirjoittanut mct76
12 Vastauksia
5535 Lukukerrat
Uusin viesti 21 Heinäkuu, 2012, 21:15:42
kirjoittanut kopterifriikki
20 Vastauksia
11241 Lukukerrat
Uusin viesti 31 Elokuu, 2018, 14:43:11
kirjoittanut Maranzi
10 Vastauksia
1892 Lukukerrat
Uusin viesti 05 Marraskuu, 2022, 12:28:21
kirjoittanut Wilikki