Výroba programu na Arduino

arduino, teensy, atmega, pic a jine (software, hardware)
tarvisio
Příspěvky: 283
Registrován: 25. 10. 2013, 3:11

26. 2. 2016, 2:36

Zdravím,

hledám jestli se někdo najde kdo mi udělá program pro arduino. (Uno nebo Mega)
Momentálně nemám čas vysedávat a učit se programovat.

Na obrázku je krokový motor napojen na řemen, který hýbe jezdcem. (krokáč bude s driverem - Leadshine)
Jezdec začíná z výchozí polohy koncového spínače SK1.
T1 - tlačítko na aktivování automatického režimu (nemusí být použito)
T2 - ruční pohyb vpřed (doprava)
T3 - ruční pohyb doleva
Cental stop v případě nouze
SK 2 - koncový spínač, kde když najede jezdec, tak už nepůjde ruční pohyb vpřed ani automatický cyklus.
SK 3 - impus kdy se má zapnou 1x automatický cyklus

Na displeji bych chtěl nastavovat délku pojezdu v automatickém cyklu vpřed a vzad.
Nastavovaní displeje pomocí potenciometru, nebo jinak...
Displey třeba tento nebo navrhněte
Display 16x2 znaků I2C
nebo tento display s nastavováním pokud by někdo věděl jak to rozhýbat
Display s otočným přepínačem

Automatický cyklus: po stisku SK3 ujede cyklus vpřed určitou délku, počká 2s a pojede určitou délku vzad.

Zde nákres :
Nákres

Pokud by se někomu do toho chtělo, napiště mi vaši představu o ceně za práci.
Také jiný návrh na řešení nebo úpravu uvítám.

Potřebuji funkční program, a informace jak vše zapojit.

Předem děkuji :wink:
Luboš
tarvisio
Příspěvky: 283
Registrován: 25. 10. 2013, 3:11

27. 2. 2016, 8:54

Nikomu se do toho nechce :D
atlan
Příspěvky: 3341
Registrován: 7. 2. 2011, 9:12

27. 2. 2016, 12:04

Ked zlavis z tej blbosti arduina tak mozno hej.
4rest
Příspěvky: 599
Registrován: 7. 10. 2014, 5:13
Bydliště: Praha

27. 2. 2016, 12:15

Něco podobného jsem zrovna předminulý týden dělal (upgrade metalografické brusky) jen tam nebyl ten display a nějak nevím jak zadávat délku dráhy pomocí poťáku. Asi to nějak pujde ( Mex určitě ví jak na to), ale pro mne je to zatím vyšší dívčí.
Tu naší verzi ti klidně pošlu zadara, je to psané pro UNO, jen je to napsané pro konstantní délku dráhy, rychlost a není tam potřeba centralstop.
Elektrochemik holdující strojařině :-)
Doma: HOLZMANN 1222P, Holzstar DB 450, RP2300FCXJ, KITin1900HF
Práce: Gravos - GV30 s vřetenem Isel 750W, M3K 260, GV21 2A; StepFour - Precise 760; Comagrav - Zonda; CNC Singular - Airbrush; Felixprinters - Felix 3.1
tarvisio
Příspěvky: 283
Registrován: 25. 10. 2013, 3:11

27. 2. 2016, 12:20

4rest píše:Něco podobného jsem zrovna předminulý týden dělal (upgrade metalografické brusky) jen tam nebyl ten display a nějak nevím jak zadávat délku dráhy pomocí poťáku. Asi to nějak pujde ( Mex určitě ví jak na to), ale pro mne je to zatím vyšší dívčí.
Tu naší verzi ti klidně pošlu zadara, je to psané pro UNO, jen je to napsané pro konstantní délku dráhy, rychlost a není tam potřeba centralstop.
Tak jestli to budeš chtít poslat tak pošli, záleži na tobě, ale budu moc rád a předem moc díky :wink:
tarvisio
Příspěvky: 283
Registrován: 25. 10. 2013, 3:11

27. 2. 2016, 12:26

atlan píše:Ked zlavis z tej blbosti arduina tak mozno hej.
Jak to myslíš ?
atlan
Příspěvky: 3341
Registrován: 7. 2. 2011, 9:12

27. 2. 2016, 3:24

Normalne v C a napalis to programatorom. (ten stoji 2E). Tak ze ti to napisem na dosku UNO alebo NANO.
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

27. 2. 2016, 11:20

Teď jsem si všiml, že jsem byl osloven, tak se sluší odpovědět.

To vlastní řízení bude brnkačka, největší opruz bude (jako obvykle) a nějakými menu na displeji.
Pokud ta délka pojezdu není nějak kritická na setiny, tak by možná nebylo špatné to udělat celé bezdisplejově.
Potencimetrem by se nastavila délka dráhy (normálně čtením A/D převodníku). Případně 2 potencimetry hrubě-jemně. Nebo rovnou tři, ten 3. pak na nastavení rychlosti jízky.
Sice to vypadá "archaicky" dávat nějakam potenciometry místo "moderního" displeje.
Ale ergonomie používání bývá často lepší a pro obsluhu pochopitelnější takovým jednoduchým analogovým způsobem.
Taky mám nejraději třeba mikrovlnky, kde jsou jenom 2 krouťáky - čas a výkon. A naopak docela nenávidím různé "moderní", kde všecko musím nastavovat v několikaúrovňovém menu.
Ale samozřejmě netuším, k čemu to má být a jaké jsou teda na to požadavky.

Ještě k atlanovu příspěvku: a kdo ti brání programovat i na Arduinu (a klidně i v Arduino prostředí) v běžném C? Jediný rozdíl je, že místo main() napíšeš loop() a setup(). K používání nějakých Arduino-specialit tě to nijak nenutí.
A proč by měl kupovat programátor, když to tam může nasypat přímo v tom integrovaném prostředí po USB kabelu.
tarvisio
Příspěvky: 283
Registrován: 25. 10. 2013, 3:11

27. 2. 2016, 11:37

Dobrý nápad s těmi potenciometry, to mě nenapadlo a displej bych tedy zavrhnul a nahradil:

1 potenciometr - délka pojezdu vpřed při automatickém cyklu
2 potenciometr - délka pojezdu vzad při automatickém cyklu
3 potenciometr - rychlost pojezdu vpřed a vzad při automatickém cyklu

Díky Luboš
bronek999
Příspěvky: 521
Registrován: 6. 3. 2014, 6:50

28. 2. 2016, 6:20

Ja by som displej nezavrhoval. K jednemu projektu som si navrhol dps do lacnej krabicky s 2x16 znakovym displejom. K tomu 5 tlacitok a foliovy stitok nalepeny cez to. Obsahuje to atmega8-atmega328. Dps mi zvysili a pouzivam ich vsade kde potrebujem nejaku jednoucelovu nenarocnu hlupost. Len by som to v tvojom pripade boplnil o jeden potenciometer na nastavenie rychlosti. Akurat to neriesi tvoj problem, lebo tiez to potrebujes naprogramovat.
Uživatelský avatar
jova
Příspěvky: 2509
Registrován: 2. 11. 2007, 1:40
Bydliště: Chýnov to je kousek od Tábora
Kontaktovat uživatele:

28. 2. 2016, 7:56

A jaká je vlastně požadovaná přesnost toho polohování při automatickém režimu a jaká je ta celková ujetá dráha? Přeci jenom ten potenciometr má jistá omezení co se té přesnosti a rozsahu týká. Při zpětné kontrole na LCD se dá nastavit ta hodnota docela přesně i v rozsahu např. 0 – 255. Osobně bych, ale nad 100 nešel, spíše i méně, je to už moc jemné na přesné a rychlé nastavení. A bez té zpětné kontroly to bude muset být spíše do 50ti a to ještě s hodně dlouhou šipkou na ukazatel hodnot.
Možná by to šlo obejít tak, že by ten potenciometr nenastavoval určitou hodnotu, ale rovnou vytvářel pulsy pro ten motor a pohyboval jím podle natočení jeho hřídelky. Fyzicky by bylo vidět kam ten motor dojel a ta hodnota by se pak stisknutím tlačítka zapsala do paměti jako hodnota kterou by opakoval.
Místo potenciometru by se tam na to nastavování dal použít i otočný inkrementální snímač s tlačítkem, nebo jen ta dvě tlačítka. Přepneš na automat, tím snímačem nebo tlačítky si odkrokuješ motorem na požadovanou polohu, stiskneš na něm tlačítko, ten počet kroků se zapíše do paměti a už to bude jen opakovat tu zadanou polohu. Fungovalo by to i bez toho LCD.
Těch možnosti je mnoho, jen uživatel sám musí zvážit co u toho nastavování preferuje. Zda přesnost, rychlost, opakovatelnost …
gnat
Příspěvky: 1003
Registrován: 24. 2. 2009, 9:14
Bydliště: doma
Kontaktovat uživatele:

28. 2. 2016, 4:08

Nastavování polohy potenciometry není IMHO dobrý nápad. A/D převodník v Arduinu není žádný zázrak, dobrá stabilní reference tam také chybí a tak ta nastavená poloha bude dost cestovat s teplotou a časem a vzhledem k mech. kvalitě běžných potenciometrů i při každém otřesu.
SABLE-2015
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

28. 2. 2016, 6:00

gnat píše:Nastavování polohy potenciometry není IMHO dobrý nápad. A/D převodník v Arduinu není žádný zázrak, dobrá stabilní reference tam také chybí a tak ta nastavená poloha bude dost cestovat s teplotou a časem a vzhledem k mech. kvalitě běžných potenciometrů i při každém otřesu.
O referenci nejde.
Tady měříš relativní informaci, nikoli absolutní. Když měříš potenciometr zapojený jako dělič, tak jako referenci použiješ napájecí napětí, takže je spolu svázána reference a měřená hodnota.

Tu konfiguraci asi nemá smysl rozebírat, když vůbec netušíme, jaký je záměr a k čemu to teda má být. Jiné požadavky budou když to má být CNC mávátko do prvomájového průvodu, a jiné když to bude obrábět lopatky leteckých motorů.

Já jsem třeba v jedné konstrukci pro ruční pojíždění připojil potenciometr s pružinou, která držela střední polohu. Ovládání pak bylo jako u bagru, tj. rychlost pojezdu byla přímo úměrná výchylce od středu.

Pokud mají být koncové polohy skutečně přesné, tak se to musí řešit nějakým referenčním spínačem (třeba jedním z dorazů, když bude přesný) a zapamatováním polohy. Ale to všechno jsou jen spekulace. Pro CNC mávátko zase bude spíš než přesnost důležitá možnost pohodlného a rychlého nastavování koncových poloh.
4rest
Příspěvky: 599
Registrován: 7. 10. 2014, 5:13
Bydliště: Praha

29. 2. 2016, 7:48

Tady je ten slíbený nástřel prográmku pro Arduino, sorry že až teď, ale Flešku s ním jsem nechal v práci.
#define LEDP 5 // zadefinovani pinu 5 pro signal DIR
#define LEDL 6 // zadefinovani pinu 6 pro signal STEP
#define ENABLE 7 // zadefinovani pinu 7 pro signal ENABLE
#define DIR 8 // zadefinovani pinu 8 pro signal LEDL (levaLED)
#define STEP 9 // zadefinovani pinu 9 pro signal LEDP (prava LED)
#define AUTOMATIKA 12 // zadefinovani pinu 10 pro vypinac AUTOMATIKY
#define LEVA 11 // zadefinovani pinu 11 pro tlacitko LEVA
#define PRAVA 10 // zadefinovani pinu 12 pro tlacitko PRAVA
#define ZARAZKA 13 // zadefinovani pinu 13 pro tlacitko ZARAZKA
#define PERIODA 10 // zadefinovani promenne periody jedna se o generalni cesovani


void setup() {
pinMode(STEP, OUTPUT); // inicializace pin 9 jako vystup STEP
pinMode(DIR, OUTPUT); // inicializace pin 8 jako vystup DIRECTION
pinMode(ENABLE, OUTPUT); // inicializace pin 7 jako vystup ENABLE
pinMode(AUTOMATIKA, INPUT_PULLUP); // inicializace vstupu spinace AUTOMATIKY pro PULL-UP
pinMode(LEVA, INPUT_PULLUP); // inicializace vstupu spinace LEVA pro PULL-UP
pinMode(PRAVA, INPUT_PULLUP); // inicializace vstupu spinace PRAVA pro PULL-UP
pinMode(ZARAZKA, INPUT_PULLUP); // inicializace vstupu spinace ZARAZKA pro PULL-UP
pinMode(LEDP, OUTPUT); // inicializace pin 5 jako vystup LEDL
pinMode(LEDL, OUTPUT); // inicializace pin 6 jako vystup LEDP
}


void loop() { // loop smycka pobezi dokola a dokola opakovane
if (digitalRead(AUTOMATIKA) == LOW){ // pokud je vypinac AUTOMATIKA zapnut, tak se generuji signaly
digitalWrite(ENABLE,HIGH); // signal ENABLE vynulovani prevodniku
delay(PERIODA);
digitalWrite(ENABLE,LOW);
for (int i=0; i<=100; i++){ // cyklus kde se zadává počet pulzů signálu STEP
if (digitalRead(ZARAZKA) == HIGH) { // pokud dojde k sepnuti spinace yarayka, tak se smycka predcasne ukonci
digitalWrite(STEP,HIGH); // zapnuti signalu STEP
digitalWrite(DIR,HIGH); // zapnuti signalu DIR
digitalWrite(LEDP,HIGH); // rozsviceni LEDP
delay(PERIODA); // casovani by pak melo byt v intervalu 5-10
digitalWrite(STEP,LOW);
digitalWrite(DIR,LOW);
digitalWrite(LEDP,LOW); // zhasnuti LEDP
delay(PERIODA); // casovani by pak melo byt v intervalu 5-10
} else { }
}
digitalWrite(ENABLE,HIGH); // signal ENABLE vynulovani prevodniku
delay(PERIODA);
digitalWrite(ENABLE,LOW);
for (int i=0; i<=100; i++){ // cyklus kde se zadává počet pulzů signálu STEP
digitalWrite(LEDL,HIGH); // rozsviceni LEDL
digitalWrite(STEP,HIGH); // zapnuti signalu STEP
digitalWrite(DIR,LOW); // zapnuti signalu DIR
delay(PERIODA); // casovani by pak melo byt v intervalu 5-10
digitalWrite(LEDL,LOW); // zhasnuti LEDL
digitalWrite(STEP,LOW);
digitalWrite(DIR,LOW);
delay(PERIODA); // casovani by pak melo byt v intervalu 5-10
}
} else { // pokud je vypinac AUTOMATIKA vypnut nastava manualni rizeni
if (digitalRead(LEVA) == LOW){ // pokud je spinac LEVA zapnut
digitalWrite(ENABLE, HIGH); // vynulovani driveru pomoci signalu ENABLE
delay(PERIODA);
digitalWrite(ENABLE,LOW);
digitalWrite(STEP,HIGH); // sled signalu STEP a DIR funkcni pokud je zmacknuto tlacitko leva
digitalWrite(DIR,HIGH);
digitalWrite(LEDL,HIGH); // rozsviceni LEDL
delay(PERIODA);
digitalWrite(STEP,LOW);
digitalWrite(DIR,LOW);
digitalWrite(LEDL,LOW); // zhasnuti LEDL
delay(PERIODA);
} else {
}
if (digitalRead(PRAVA) == LOW){ // pokud je spinac PRAVA zapnut
digitalWrite(ENABLE, HIGH); // vynulovani driveru pomoci signalu ENABLE
delay(PERIODA);
digitalWrite(ENABLE,LOW);
digitalWrite(STEP,HIGH); // sled signalu STEP a DIR funkcni pokud je zmacknuto tlacitko leva
digitalWrite(DIR,LOW);
digitalWrite(LEDP,HIGH); // rozsviceni LEDP
delay(PERIODA);
digitalWrite(STEP,LOW);
digitalWrite(DIR,LOW);
digitalWrite(LEDP,LOW); // zhasnuti LEDP
delay(PERIODA);
} else {
}
}
} // konec programu


máš tam jen jeden doraz, takže musíš dopsat druhý a předělat to tak, aby se ti celý systém zastavil. Popsané to máš, tak se na to zkus podívat. Jak s nastavováním potenciometrů délky vážně nevím, ale snad ti poradí zkušenější, tedy pokud je netrefí z té mé prasárny, která sice funguje jak má, ale asi by snesla značné vylepšení, na to však teď nějak nemám čas :(
Elektrochemik holdující strojařině :-)
Doma: HOLZMANN 1222P, Holzstar DB 450, RP2300FCXJ, KITin1900HF
Práce: Gravos - GV30 s vřetenem Isel 750W, M3K 260, GV21 2A; StepFour - Precise 760; Comagrav - Zonda; CNC Singular - Airbrush; Felixprinters - Felix 3.1
Uživatelský avatar
jova
Příspěvky: 2509
Registrován: 2. 11. 2007, 1:40
Bydliště: Chýnov to je kousek od Tábora
Kontaktovat uživatele:

29. 2. 2016, 8:36

4rest píše: #define AUTOMATIKA 12 // zadefinovani pinu 10 pro vypinac AUTOMATIKY
#define PRAVA 10 // zadefinovani pinu 12 pro tlacitko PRAVA
Není tam chyba?
Odpovědět

Zpět na „MCU“