www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Sprememba programa

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Pon Apr 08, 2024 10:55 am    Naslov sporočila:  Sprememba programa Odgovori s citatom

Že dolgo časa je nazaj kar sem kar koli naredil z Arduinotom, tako da imam trenutno ogromne težave z razumevanjem tele kode.

Sepravi, to je obstoječ program za Arduino, kateri je bil spisan za rotirajočo mizo ki pa je mehansko malo drugačna od moje.

riginal miza je imela 100 zob na zunanjem obroču mize in 20 zob na pogonskem zobniku koračnega motorja. Moja izvedenka je večja, in ima 150 zob na zunanjem obroču, medtem ko na pogonskem zobniku je ostalo identično število zob (20).

Vprašanje je, kako popravit spodnjo kodo, da bo upoštevala to razliko v prestavnem razmerju zobnikov:

Sam sem sklepal, da je prestavno razmerje upotevano tule :

motor.step(-tempDeger * 5);

Ampak če popravim to vrstico *7,5, da upoštevam višje prestavno razmerje, motor naredi preveč korakov.

Original lokacija kode: koda


Koda:

#include<Stepper.h>
#include<stdlib.h>
int deger = 0;
char buffer1[8] = {0,0,0,0,0,0,0,0};
unsigned int zaman=0;
unsigned int donmeacisi=0;
int sayac = 0;
int tempDeger = 0;
int i = 0, j = 0;
boolean durdurBasla = false;
boolean durum;
int k = 0;
int [slovenščina je zame španska vas] = 0;
int kalanSayac = 0;
int pin1 = 8;
int pin2 = 10;
int pin3 = 9;
int pin4 = 11;
Stepper  motor = Stepper(2048, 8, 10, 9, 11);
void setup() {
  motor.setSpeed(10);
  Serial.begin(9600);
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
 

}
void stopMotor(){
   digitalWrite(pin1, LOW);
   digitalWrite(pin2, LOW);
   digitalWrite(pin3, LOW);
   digitalWrite(pin4, LOW);
}
void loop() {

  int [slovenščina je zame španska vas] = 0;
  if(deger < 253){
    [slovenščina je zame španska vas] = deger * 5.68;
  }
   
  tempDeger = deger * 5.68;
  sayac = 2048 / tempDeger;
  kalanSayac = sayac;
 
    if(durdurBasla == false){
      for(i = 0; i < sayac; i++, kalanSayac--){
       
       deger = Serial.read();
       
         if(durum == false){
            motor.step([slovenščina je zame španska vas]);
            durdurBasla = true;
           
            break;
    }
    else{
       
     
     if(deger == 254){
        durum = false;
     }
     else{
      if(deger == 253){
        motor.step(-[slovenščina je zame španska vas]);
     
         delay(zaman);
      }
      else{
        motor.step(-tempDeger * 5);
        stopMotor();
        delay(zaman);
       
      }
     
     }
     
    }
   
   
  }
    }
   
 
  else if(durdurBasla == true){
    for(j = 0; j < kalanSayac; j++){
       
       deger = Serial.read();
       
         if(durum == false){
            motor.step([slovenščina je zame španska vas]);
            durdurBasla = false;
           
            break;
    }
    else{
       
     durdurBasla = false;
     if(deger == 254){
        durum = false;
     }
     else{
      if(deger == 253){
        motor.step(-[slovenščina je zame španska vas]);
        stopMotor();
        delay(zaman);
       
      }
      else{
        motor.step(-tempDeger * 5);
        stopMotor();
        delay(zaman);
     
      }
     
     }
     
    }
   
   
  }
  }
  digitalWrite(pin1, LOW);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, LOW);
  digitalWrite(pin4, LOW);
}

void serialEvent(){
  while(Serial.available()){
     Serial.readBytes(buffer1, 8);
     Serial.println(buffer1[0], DEC);
     Serial.println(buffer1[1], DEC);
     Serial.println(buffer1[2], DEC);
     Serial.println(buffer1[3], DEC);
     Serial.println(buffer1[4], DEC);
     Serial.println(buffer1[5], DEC);
     Serial.println(buffer1[6], DEC);
     Serial.println(buffer1[7], DEC);
     zaman=((int(buffer1[0]-48)*10000)+(int(buffer1[1]-48)*1000)+(int(buffer1[2]-48)*100)+int(buffer1[3]-48)*10)+int(buffer1[4]-48);
     Serial.println(zaman, DEC);
     donmeacisi= (int(buffer1[5]-48)*100)+(int(buffer1[6]-48)*10)+int(buffer1[7]-48);
     Serial.println(donmeacisi, DEC);
     deger=donmeacisi;
     if(deger == 254){
        durum = false;
     }
     else if(deger == 253){
      durum = true;
     }
     else{
      durum = true;
     }
  }
 
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
prel1
Član
Član



Pridružen-a: Pon 29 Nov 2021 20:16
Prispevkov: 143
Aktiv.: 4.86
Kraj: Koper

PrispevekObjavljeno: Pon Apr 08, 2024 11:56 am    Naslov sporočila:   Odgovori s citatom

Sam na tem področju nimam nikakršnih izkušenj, tako da bolj ugibam.
Podal si samo razmerje oziroma število zob med motorjem in mizo.
Recimo da je lahko razlika v motorju oziroma koraku glede na število polov, če ta ni podatkovno identičen temu v originalnem projektu.
Se ti je pojavila kakšna razlika v številu vrtljajev med originalno kodo in spremenjeno?
Je na mizi še kakšna dodatna kontrola pozicije. Ali je originalni projekt objavljen na spletu...povezava

_________________
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
robert
Član
Član



Pridružen-a: Sob 29 Maj 2004 21:48
Prispevkov: 1872
Aktiv.: 8.39
Kraj: Tolmin

PrispevekObjavljeno: Pon Apr 08, 2024 1:32 pm    Naslov sporočila:   Odgovori s citatom

Koda:
Stepper  motor = Stepper(2048, 8, 10, 9, 11);

Stepper(steps, pin1, pin2, pin3, pin4)

Lahko pa tudi tu nastaviš drugačno število korakov motorja.

_________________
LP Robert
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Pon Apr 08, 2024 1:40 pm    Naslov sporočila:   Odgovori s citatom

Tule je cel projek link

Če uporabim original kodo, se miza obrne premalo. To testiram tako, da v windows programu nastaviš kot 180° in na mizi gledaš mehansko oznako. 180° obrat je dokaj enostanvo spremljat.

Da bi premenil število korakov sploh nisem pomislil... poskusim... sepravi namesto 2048 za 1 obrat, lahko nastavim na 3072 in bi moralo delat pravilno.

lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
prel1
Član
Član



Pridružen-a: Pon 29 Nov 2021 20:16
Prispevkov: 143
Aktiv.: 4.86
Kraj: Koper

PrispevekObjavljeno: Pon Apr 08, 2024 8:44 pm    Naslov sporočila:   Odgovori s citatom

Glede na povečano razmerje prenosa je res za pričakovat manjši kotni obrat mize z originalno kodo. Zgolj zanašanje na število korakov motorja lahko vseeno prihaja do zamika v primeru, da se miza med rotacijo zatakne. Torej ne doseže želenega kota ali ciljne točke brez povratne informacije o poziciji. Drugače pa odvisno od zahtevnosti uporabe.

Kar se tiče sedanje korekcije je bolj smiselno nastaviti pravilno število korakov na obrat mize oziroma 0/360.

_________________
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Tor Apr 09, 2024 9:10 am    Naslov sporočila:   Odgovori s citatom

Ja, ta miza nima nikakršne kontrole pozicije. Gre se za vrtljivo mizo, katera se uporablja za 3D skeniranje.

Ker sem v programiranju precej "bos" sem se poslužil obstoječega projekta. Sicer se strinjam da bi bilo bolje imet povratno informacijo kje je miza, ampak se v aplikaciji ubistvu ne more zataknit. Bom popoldan prilepil slike.

lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Čet Apr 11, 2024 7:13 pm    Naslov sporočila:   Odgovori s citatom

Žal sprememba korakov motorja ni obrodila sadov... vbistvu je razlika zelo mala ali vpišem 2048 ali 3072. še kakšna ideja?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 478
Aktiv.: 3.11
Kraj: Radovljica

PrispevekObjavljeno: Čet Apr 11, 2024 8:30 pm    Naslov sporočila:   Odgovori s citatom

Na hitro pogledano me motijo neke konstante npr. 5,68, ki bog ve kaj pomeni (ali je povezava mad kotom in koraki: 360*5,68 =2045 ??) in vmes imaš tudi izračun "sayac = 2048 / tempDeger;" ki pomeni število obratov če drži prva predpostavka ....
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Čet Apr 11, 2024 9:03 pm    Naslov sporočila:   Odgovori s citatom

Sayat v turščini pomeni števec (counter)

Sepravi če povzamem tole (v oklaepajih so slovenski prevodi)

Dagar (vrednost) je prebrana vrednost v stopinjah iz windoes programa - recimo 180
"t u t" so koraki katere mora motor naredit.

Ta konstanta me bega... ker recim da prebereš 360 ° v "dagar" to pomeni, da je "t u t" = "dager" * 5,68 -> 2045 korakov... v praksi to pomeni 1 obrat motorja in 1/5 obrata cele mize (ker je prestavno razmerje v originalu 1 -> 5 obratov motorja pomeni 1 obrat cele mize), kar si nekako ne znam razložit kako bi lahko delalo... za 180 ° obrat mora original motor naredit 2,5 obrata oziroma 5120 korakov.... ne gre mi skupaj...

lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 612
Aktiv.: 4.43
Kraj: Vrhnika

PrispevekObjavljeno: Čet Apr 11, 2024 10:45 pm    Naslov sporočila:   Odgovori s citatom

Probaj takole:
Koda:
Stepper(200, 8, 10, 9, 11);
ker motor iz povezave naredi 200 korakov na obrat oz 1,8 stopinje/korak.

Ce je "deger"=stopinje in "t u t"=koraki potem izracunas stevilo korakov
Koda:
t u t=(deger/1.8)*7.5
Mnozis s prestavnim razmerjem 7.5. Za poln obrat mize naj bi potem potreboval 1500 korakov.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Pet Apr 12, 2024 12:00 pm    Naslov sporočila:   Odgovori s citatom

mato1111 je napisal/a:
Probaj takole:
Koda:
Stepper(200, 8, 10, 9, 11);
ker motor iz povezave naredi 200 korakov na obrat oz 1,8 stopinje/korak.

Ce je "deger"=stopinje in "t u t"=koraki potem izracunas stevilo korakov
Koda:
t u t=(deger/1.8)*7.5
Mnozis s prestavnim razmerjem 7.5. Za poln obrat mize naj bi potem potreboval 1500 korakov.


Motor ima na sebi reduktor, tako da če želimo da naredi 1 kompleten obrat izhoda iz reduktorja mora motor naredit 2048 korakov (glej pripeto sliko).

Speravi prvi del kode je potemtakem pravilen :

Koda:
Stepper(2048, 8, 10, 9, 11);


Drugi del pa moram skladno z tem popravit, in ker na vsak korak naredi ~0,176 stopinje (360° delim z številom korakov za 1 obrat, torej 2048) je potem drugi del kode :

Koda:
t u t=(deger/0,1757)*7.5



Poskusim popoldan... hvala



reduktor.jpg
 Opis:
28BYJ-48 motor
 Velikost datoteke:  209.97 KB
 Pogledana:  1 krat

reduktor.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
prel1
Član
Član



Pridružen-a: Pon 29 Nov 2021 20:16
Prispevkov: 143
Aktiv.: 4.86
Kraj: Koper

PrispevekObjavljeno: Pet Apr 12, 2024 1:20 pm    Naslov sporočila:   Odgovori s citatom

V pripeti sliki ima izhodni zobnik 24 zob, tvoj kot si omenil na začetku ima 20 zob.
Osnova je koliko korakov ima motor za en obrat, prestavno razmerje reduktorja in prestavno razmerje med reduktorjem in mizo,da dobiš končno števio korakov motorja za 1 obrat mize.

_________________
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sebastjan.kamensek
Član
Član



Pridružen-a: Sob 26 Jul 2008 11:04
Prispevkov: 1021
Aktiv.: 5.32
Kraj: Škofja Loka

PrispevekObjavljeno: Pet Apr 12, 2024 2:35 pm    Naslov sporočila:   Odgovori s citatom

Se opravičujem za zmedo...

Da bolje opišem sistem. Gre se za vrtljivo mizo za 3D skeniranje.

Pogone te mize, je izveden preko zgoraj omenjenega motorja, kateri ima že notranji reduktor (1/64). Na Izhodno gred reduktorja se natakne še dodatni zobnik kateri ima 20 zob, ta zobnik pa potem poganja mizo preko zobnika, kateri ima 150 zob.

Sepravi za 1 cel obrat mize, mora izgodna gred reduktorja naredit 7,5 obratov. Motor pa mora za 1 obrat gredi reduktorja naredit 2048 korakov, kar potem pomeni, da je za 1 obrat cele mize, potrebnih 15.360 korakov motorja (2048 *7,5).

V prilogi slika 3D modela celega sistema. Na veliki zobnik je na vrhu privijača direktno miza, tako da je 1 obraz velikega zobnika tudi 1 obrat mize.



miza.jpg
 Opis:
 Velikost datoteke:  528.6 KB
 Pogledana:  5 krat

miza.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 80 dni


Powered by phpBB © 2001, 2005 phpBB Group