HobbyCNC fórum
FTP tárhely: http://cnctar.hobbycnc.hu v0.9.6 Régi HobbyCNC oldal: http://archiv.hobbycnc.hu

Új regisztráció / Átregisztráció a régi fórumról
    
   


Arduino



 

Időrend:
Oldal 2 / 41 Ugrás ide:
Sorok:
|◄ Első  ◄ Előző   1  2  3  4  5  6   Következő ►  Utolsó ►|

  Fórum főoldal  |  A lap aljára

morvfer7 | 2467    2023-03-26 21:22:01 [1986]

Csak úgy unatkoztam, a héten kevés a meccs.



ebalint | 1768    2023-03-08 08:34:04 [1985]

szia!
A múlt héten nézegettem a netet rexasztal ügyben.

Publikus a megépített asztalod?

Előzmény: Törölt felhasználó, 2023-03-07 18:38:11 [1976]


Sásdi Zoltán | 712    2023-03-08 08:18:45 [1984]

Én ilyen kicsikkel csináltam egy "gravírozót, ceruzával a kezében, A5-ös területtel. Sosem bízok a G kódokban amit én írok, megrajzolja a műszer előlapot, látom hol a hiba, olcsón javitható.

Előzmény: vad3mb3r, 2022-09-01 23:53:12 [1973]


TBS-TEAM | 2637    2023-03-07 20:15:40 [1983]

Magyar angol szabályok

Előzmény: Törölt felhasználó, 2023-03-07 20:01:48 [1980]


TBS-TEAM | 2637    2023-03-07 20:13:48 [1982]

Amennyiben a piros golyó lyukba kerül, akkor csak azzal végezhetjük a következő lökést.

Előzmény: Törölt felhasználó, 2023-03-07 20:01:48 [1980]

TBS-TEAM | 2637    2023-03-07 20:07:47 [1981]

Még egy pár érdekesség aminek a megoldása
fejtörést okozhat.
A golyóknak ütküzni kell csak akkor érvényes
a lyukba kerülő golyó értéke.
A pályát elhagyó golyó, és főleg ami az alapvonali bőrre
kigorul annak az érzékelése kezelése.

Előzmény: Törölt felhasználó, 2023-03-07 19:51:37 [1978]


Törölt felhasználó    2023-03-07 20:01:48 [1980]

Ezt most lehet, hogy nem teljesen értem...
Amúgy van még egy buktató amire eddig nem gondoltam... A piros golyó duplát ér ugye... na itt a követkeező kihívás..

Előzmény: TBS-TEAM, 2023-03-07 19:56:40 [1979]


TBS-TEAM | 2637    2023-03-07 19:56:40 [1979]

Angol játékot nem akarsz játszani?

Előzmény: Törölt felhasználó, 2023-03-07 19:51:37 [1978]


Törölt felhasználó    2023-03-07 19:51:37 [1978]

igazad van! lehe, hogy a gomba esetében a nullázás is egy külön nyomógombbal történne.. Erre nem is gondoltam. bár van itthon mindenféle szenzorom (lézer, induktív, kapacitív, színérzékelő, stb....) Valamelyikkel csak sikerül megoldanom... ha meg nem hát marad a jó öreg nyomógomb..

Előzmény: TBS-TEAM, 2023-03-07 19:11:20 [1977]


TBS-TEAM | 2637    2023-03-07 19:11:20 [1977]

Egy érdekes kihivás van benne a gomba.
Ha a gomba felborul nullázódak az addigi potok, viszont
Ha:
Ha a gombát csupán arrébb tolja egy golyó, de az nem borul fel, ez az eset nem számít hibának.

Na itt kell agyalni a megoldáson.

Előzmény: Törölt felhasználó, 2023-03-07 18:38:11 [1976]


Törölt felhasználó    2023-03-07 18:38:11 [1976]

Sziasztok!
Építettem egy REX asztalt és szeretném a pontokat digitálisan számoltatni illetve kijeleztetni. Olyan hozzáértő személyt keresek aki megírna egy programot arduinora ami számolja a pontokat, figyeli a gombát és nulláz, ha kell. illetve egy váltó gomb is helyet kapna a több játékos miatt. Az elektronikát én elkészítem csak a program kellene. Természetesen több információval, konkrétumokkal is tudok szolgálni, ha megtaláltam a megfelelő személyt!
Mondanom sem kell, hogy anyagi juttatás fejében várom mindezt, nem ingyen!
Köszönöm!


Kisamotors | 704    2022-09-02 06:01:56 [1975]

Keress rá, hogy mi is a különbség a bipoláris és az Unipoláris léptetők között.
Legegyszerűbb, ha az A és a B fázistekercs középső megcsapolását nem kötöd be, így máris 4 vezetéked van. (Igaz, elég rossz működési tulajdonságokkal, de mozgatható.)

A YT-on milliónyi videó van arról, hogy lehet különféle megoldásokkal léptecseket vezérelni. Elég, ha csak beírod az Arduino és stepper motor keresőszavakat.
Az alapokat ismerd meg, aztán építhetsz ezekből a motorokból mondjuk egy CNC rajzgépet (plottert), vagy vehetsz új gombokat a kabáthoz, de ez már a következő lépcső.

Előzmény: vad3mb3r, 2022-09-02 00:00:29 [1974]


vad3mb3r | 9    2022-09-02 00:00:29 [1974]

...ez előbb elment bocsi...
Szóval azzal tisztában vagyok, hogy ezzel nem fogok marogatni, acélt forgácsolni, a célom nem is ez lenne! A lényeg egy részről az építés öröme, másrészről a CNCk felépítésének megértése, a vezérlés tanulása. Szóval tudom, hogy ezek nem erős motorok!
A kérdésem az lenne, hogy hogy a viharba kell bekötni ennek a 6 pinjét???
Ami arduinoshildeket láttam, azok 4 pinesek. Hogy mozgathatnék meg egy ilyen motort? ...ha egyáltalán arduinoval lehet...

Előzmény: vad3mb3r, 2022-09-01 23:53:12 [1973]


vad3mb3r | 9    2022-09-01 23:53:12 [1973]

Üdvözleheletem!

Sok más projektem mellett, gondolkodom egy icipici CNC építésén. ...amit arduinoval terveznék vezérelni!
Namármost van kb 8 léptető motorom, amit egyszet egy diszkó lámpából szedtem ki.

  


csatlos.laszlo | 145    2022-07-15 07:10:48 [1972]

XTisztelt: forumosok! Valakinek nincs veletlenul telefon bluetoot arduino relle eszkozre irt hexben kapcsolo programja?

Törölt felhasználó    2022-03-03 11:13:06 [1971]

Nekem sem sok programozási tudásom de ezek még mennek kénytelen cél érdekében!
Ami ardu programozási szinten fontos (minta példa elinduláshoz) modbus eszköz tudjad milyen eszköz cimen indul ez 001-255 közöt választható...eszköz baund értéke 4800..9600 tetszés szerint! Az rs485 sorosport átalakítót amit mutattam az könnyü elindítani össze drótozni érdemes hadveres szeriált használni az megbízhatóbb .....sajnos softserial nálam töbször is elakadt ami alapban arduino ide használ de van több softserial könyvtár fejlesztés amik jobbak megbizhatobak!
notepad meg átírod a te fogyasztásmerőd regiszter cimeit "lent linkeltem " Szintén ebben a könyvtárban SDM.h sdm120..220 eszközre van meg irva!
SDM_Energy_Meter-master sdm_simple.ino mintapélda meni fog szépen ha amit mutattam port átalakítóval csinálod meg! Sajnos vannak más átalakítok ami szinte csak vesződni lehet a rossz port fesz szintek miat és nem indul el a kommunikáció rajta azok felejtősek

Előzmény: szf, 2022-03-03 09:22:27 [1970]


szf | 4375    2022-03-03 09:22:27 [1970]

Számítottam a sok jelentkezőre

Hasonló modullal próbálkoztam. Van is kapcsolat, legalábbis a fogyasztásmérőn a felirat jelzi. Csak nincs elegendő tudásom a továbblépéshez.

Előzmény: Törölt felhasználó, 2022-03-03 02:07:24 [1969]


Törölt felhasználó    2022-03-03 02:07:24 [1969]

sok a jelenkezö!:)

rs485 modul ami jóó... már 3.3v is elindul!
https://www.google.hu/aclk?sa=l&ai=DChcSEwjslc3P3Kj2AhVEAYsKHTyEBDoYABAFGgJlZg&sig=AOD64_2P-gucU7p-nyWm48sKnkdJpKKaDA&adurl&ctype=5&ved=2ahUKEwiOyMLP3Kj2AhXX7rsIHbYZASsQvhd6BAgBEFU
protocol
https://www.socomec.com/files/live/sites/systemsite/files/SCP/6_gestion_energie/diris/diris_a10/DIRIS-A-10_COMMUNICATION-TABLE_2018-01_DCG01013_MULTI.html

sdm220 könyvtárba átt irod DIRIS-A-10 protokol regisztereire "read" szekcióban

https://github.com/peninquen/Modbus-Energy-Monitor-Arduino

egy régi hasonló projekt (esp8266)


Előzmény: szf, 2022-03-02 15:48:09 [1968]


szf | 4375    2022-03-02 15:48:09 [1968]

Van egy DIRIS A10 villamos fogyasztásmérőm , szeretném az adatokat arduino-val modbus-on kiolvasni.
Van valakinek valami kiforrott progija erre. Nem pont erre a típusra, hanem valami általános dolog amivel el lehetne indulni.


PSoft | 18469    2022-02-10 18:37:36 [1967]

Előzmény: szf, 2022-02-10 18:14:59 [1966]


szf | 4375    2022-02-10 18:14:59 [1966]

Türelmetlen vagyok. Inkább megcsináltam magam.

Előzmény: szf, 2022-02-10 17:35:40 [1965]


szf | 4375    2022-02-10 17:35:40 [1965]

Van egy nyomógomb kezelési problémám.
Keresek valakit aki privátba segítene. Köszönöm!


Jozs | 837    2021-11-19 20:59:24 [1964]

Nézd a végéről.
Ha a "raketa == HIGH" nem teljesül, az utána következő ELSE ágban lefut az "elozo = mostani" utasítás. Vagyis "raketa == LOW" esetén mindenképp egyenlő a 'mostani' és az 'elozo', függetlenül az előzményektől. És így tovább, visszafelé haladva.

Ráadásul gyanús, hogy a "mostani" -ba nem is az kerül amit szeretnél, hanem amit abban az "IF" -ben kapott, amelyikben a végéről visszafelé haladva először volt HIGH a bemenet.

Persze azt sem ártana tudni mi volt az elképzelés.

Előzmény: Erdo Norbert, 2021-11-19 12:22:34 [1962]


Jozs | 837    2021-11-19 20:17:50 [1963]

Csak akkor nem fut le egyik ELSE ág sem, ha egyszerre az összes bemenet HIGH.

Előzmény: Erdo Norbert, 2021-11-19 12:22:34 [1962]


Erdo Norbert | 51    2021-11-19 12:22:34 [1962]

Sziasztok!
Még kezdő vagyok a programozásban, és szeretnék segítséget kérni. úgy kellene működnie, hogy az előző követi a mostani változót, de sajnos a kettő mindig egyenlő, és nem tudom hogy miért.
Program:

const int s1 = 0;
const int s2 = 1;
const int s3 = 2;
const int s4 = 3;
const int s5 = 4;
const int s6 = 5;
const int r1 = 6;

const int fel = 7;
const int le = 8;

const int led1 = 9;
const int led2 = 10;
const int led3 = 11;
const int led4 = 12;
const int led5 = 13;
const int led6 = A0;
const int ledr = A1;
const int ledfel = A2;
const int ledle= A3;


//valtozók
int elozo = 0;
int mostani =0;
int difi = 0;

int egy = 0;
int ketto = 0;
int harom = 0;
int negy = 0;
int ot = 0;
int hat = 0;
int raketa = 0;
int vido = 100;
int natural = 1000;



void setup() {

Serial. begin(9600);

pinMode(fel, OUTPUT);
pinMode(le, OUTPUT);

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(ledr, OUTPUT);
pinMode(ledfel, OUTPUT);
pinMode(ledle, OUTPUT);

pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(s3, INPUT);
pinMode(s4, INPUT);
pinMode(s5, INPUT);
pinMode(s6, INPUT);
pinMode(r1, INPUT);

}

void loop() {

egy = digitalRead(s1);
ketto = digitalRead(s2);
harom = digitalRead(s3);
negy = digitalRead(s4);
ot = digitalRead(s5);
hat = digitalRead(s6);
raketa = digitalRead(r1);

if (egy == HIGH) {

mostani = 1;
digitalWrite(led1, HIGH);
}
else {

elozo = mostani;
digitalWrite(led1, LOW);
}
if (ketto == HIGH) {
mostani = 2;
digitalWrite(led2, HIGH);
}
else {
elozo = mostani;
digitalWrite(led2, LOW);
}
if (harom == HIGH) {
digitalWrite(led3, HIGH);
mostani = 3;
}
else {
digitalWrite(led3, LOW);
elozo = mostani;
}
if (negy == HIGH) {
digitalWrite(led4, HIGH);
mostani = 4;
}
else {
digitalWrite(led4, LOW);
elozo = mostani;
}
if (ot == HIGH) {
digitalWrite(led5, HIGH);
mostani = 5;
}
else {
digitalWrite(led5, LOW);
elozo = mostani;
}
if (hat == HIGH) {
digitalWrite(led6, HIGH);
mostani = 6;
}
else {
elozo = mostani;
digitalWrite(led6, LOW);
}
if (raketa == HIGH) {
digitalWrite(ledr, HIGH);
mostani = 7;
}
else {
digitalWrite(ledr, LOW);
elozo = mostani;
}

//Serial.println(mostani);
Serial.println(elozo);

}

nyiszi | 2332    2021-10-09 12:02:04 [1961]

Köszönöm szépen a tanácsokat.


Csuhás | 6650    2021-10-09 08:55:58 [1960]

Szerintem érdemes venni egy programozót. Magam régebben avrisp mk2 manapság pedig atmel ice eszközt használok. Ezekkel beégethető a prociba egy bootloader amivel már programozó nélkül lehet frissíteni a proci tartalmát.

Előzmény: nyiszi, 2021-10-08 20:47:11 [1957]


ebalint | 1768    2021-10-09 08:19:09 [1959]

Igaz, hogy csak atmega -val...

Előzmény: ebalint, 2021-10-09 08:14:45 [1958]


ebalint | 1768    2021-10-09 08:14:45 [1958]

Szia!

Én - néha - az avrdudess nevű programot használom erre a célra.

Próbáld ki. Fel- és letöltés is megy vele.

Előzmény: nyiszi, 2021-10-08 20:47:11 [1957]


nyiszi | 2332    2021-10-08 20:47:11 [1957]

Egy ATXMEGA-ba hogyan kell betölteni a hex fájlt?

-c ft232r -p m328p -P COM5 -e -U flash:w:".hex":a

Ezt a sort hogyan kell módositani ha a hex fajl itt van?

C:\Users\nyisz\Desktop\NANDLite

A port COM4
Ilyen ic-k vannak a panelen: ft245rl atxmega128a4u

Gondolom az elejet meg erre kell: ft245rl -p m128a4u

Ha sok butaságot írtam akkor azt kérem bocsássátok meg.
Még nem csináltam ilyet.


GG | 324    2021-09-22 22:31:59 [1956]

ha mutatnád a kódrészletet, és tudnánk, hogy a limiter poti hová van dugva, ééés a constrain() is megvan, akkor el lehetne gondolkozni a kérdésen

Előzmény: Sys_m, 2021-09-22 18:03:46 [1955]


Sys_m | 380    2021-09-22 18:03:46 [1955]

Sziasztok, Arduino map() függvény kódban és rc szervo vezérléssel kapcsoltban kérnék segítséget privátban. A példaprogram működik, a feladat matematikai részével vagyok számszakilag bajban.
Egy potméter jelére mozog az rc szervő, de ha egy másik potméterrel úgymond limitet állítok be, akkor a szervó kitérés a limit plafon elérése után visszafelé indul, úgymond visszaszabályoz. A map függvény utolsó tagjához (a servo max) kell berakni egy változót, ami limit beállító potméter adataiból táplálkozik, ha jól kalkulálok.

Üdv.: Sys_m


Törölt felhasználó    2021-08-17 20:08:38 [1954]

Visual Studio Code stm32 projekt alat hibakod jön valaki tudja e mi okoza mindegyik beálitásnál hhasonlit a hiba!
funkcio beállitások:
;default_envs = VARIANT_ADC ; Variant for control via ADC input
default_envs = VARIANT_USART ; Variant for Serial control via USART3 input
;default_envs = VARIANT_NUNCHUK ; Variant for Nunchuk controlled vehicle build
;default_envs = VARIANT_PPM ; Variant for RC-Remotes with PPM-Sum signal
;default_envs = VARIANT_PWM ; Variant for RC-Remotes with PWM signal
;default_envs = VARIANT_IBUS ; Variant for RC-Remotes with FLYSKY IBUS
;default_envs = VARIANT_HOVERCAR ; Variant for HOVERCAR build
;default_envs = VARIANT_HOVERBOARD ; Variant for HOVERBOARD
;default_envs = VARIANT_TRANSPOTTER ; Variant for TRANSPOTTER build https://github.com/NiklasFauth/hoverboard-firmware-hack/wiki/Build-Instruction:-TranspOtter https://hackaday.io/project/161891-transpotter-ng
;default_envs = VARIANT_SKATEBOARD ; Variant for SKATEBOARD build controlled via RC-Remotes with PWM signal

forrás

  


ebalint | 1768    2021-08-16 11:34:45 [1953]

Ez történt :

Mega 2560 3r -re szerettem volna valamelyik MARLIN programot feltölteni.
Az Arduino IDE vel lefordítottam hibaüzenet nélkül, fel is töltöttem.
Nem működött megfelelően, pontosabban sehogy.

Ezért egy korábban jól működő .HEX filet kerestem, mind a flash-, mind az eprom -ra.
Ezeket az AVRDUDES -el töltöttem le.

Kijelöltem a filekat írásra, elindítottam a folyamatot.

Először a flash -t töltöttem föl, ami a dudes szerint rendben fel is ment.

Ezután folytatta volna az eprom töltését, de ez már nem ment, time out hibával megszakadt a folyamat.

Ezután a 2560 -hoz nem tudtam hozzáférni....

Ma USBASP programozóval próbálkoztam. Programot nem tudtam feltölteni,
de megpróbáltam a bootloader beégetést.

Ez sikerült. Ezt követően rendesen hozzáfértem a panelhez a szokott módon.


Mi lehet a probléma?
A dudes használata eddig nem okozott gondot.


Törölt felhasználó    2021-08-11 13:10:11 [1952]

servo példa müködik vele ha ez csak a kérdés RC ESC vezérlő ugyan az csak nincs hall viszacsatolás....
Most futatok egy hasonló projektet hc12 uart távirányitos alapon irányváltás, sebbeség szabályzás ...
De a uart paracs mindegy mind küldesz el eredmény ugyanaz bluetools,wifi,lora,hc12(433,896),stb...

Előzmény: csatlos.laszlo, 2021-08-11 12:37:29 [1951]

csatlos.laszlo | 145    2021-08-11 12:37:29 [1951]

Tisztlet fórumosok!
Kérdésem: Valaki nem irt még arduinora elektromos kerékpár motorvezérlő programot 3f BLDC motor. Bluetooth telefon kapcsolattal?


PSoft | 18469    2021-07-12 19:15:12 [1950]

Egy -úgy gondolom- hasznos kis eszköz Arduino-val.
Arduino Cable Tracer


Törölt felhasználó    2021-07-11 23:44:43 [1949]

eredeti...


Előzmény: Törölt felhasználó, 2021-07-11 23:34:52 [1948]


Törölt felhasználó    2021-07-11 23:34:52 [1948]

Gyüjteményböl turtam...

van egy másik is...

TakeOneClient

TakeOneServer

link

Előzmény: Devecz Miklós, 2021-07-11 21:35:14 [1947]


Devecz Miklós | 2652    2021-07-11 21:35:14 [1947]

Nem jött össze, ennél a sornál kiakad:

http.begin("192.168.4.1", 80, "/led/"+stateVal);

Előzmény: Törölt felhasználó, 2021-07-11 18:39:44 [1946]


Törölt felhasználó    2021-07-11 18:39:44 [1946]

2 esp egymás közöt csak cliens/server nyomogomb/led példa!

cliens:
-------
/*
*
* https://www.14core.com/wiring-programming-esp8266-1212e-nodemcu-wifi-remote-clientserver-mode/
14CORE | ESP8266 to ESP8266 Remote Client & Server Test
/------------------------ CLIENT ---------------------/
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "SERVER"; //AP Name (Server Name)
const char* password = "1234567890"; //Set wifi password
//const char* password = "" //Open no password
const char* host = "http://192.168.4.1"; //Default IP of ESP8266
String stateVal="0";

int val1;
const int inVal1 = 14; // Pin Push Button

HTTPClient http;
void setup() {
Serial.begin(115200);
// pinMode(inVal1, INPUT_PULLUP);
pinMode(inVal1, INPUT);
delay(10);
Serial.print("CONNECTED TO AP: ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".......");
delay(500);
}
Serial.println("CONNECTED...");
}
void loop(){

//Serial.println(val1);

val1=digitalRead(inVal1);
if (val1 == 1){ //Turn val1 to HIGH state
stateVal="1";}
else{
stateVal="0";
}

if(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, password);
delay(500);
}else{
http.begin("192.168.4.1", 80, "/led/"+stateVal);
int httpCode1 = http.GET(); //get value
delay(100);
}
}


-------

server
------
/*
*
* https://www.14core.com/wiring-programming-esp8266-1212e-nodemcu-wifi-remote-clientserver-mode/
14CORE | ESP8266 to ESP8266 Remote Client & Server Test
/------------------------ SERVER ---------------------/
*/

#include <ESP8266WiFi.h>
const char* ssid = "SERVER";
const char* password = "1234567890";

const int led = 2;
int val;
WiFiServer server(80);

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
server.begin();
}

void loop() {
WiFiClient client = server.available(); // If client is connected
if (!client) { return;}
//Read client request
String req = client.readStringUntil('\r');
if (req.indexOf("/led/0") != -1) val=0;
if (req.indexOf("/led/1") != -1) val=1;


digitalWrite(led, val);

// Serial.println(val);


client.flush();

}


------

Előzmény: Devecz Miklós, 2021-07-11 16:42:14 [1945]


Devecz Miklós | 2652    2021-07-11 16:42:14 [1945]

Sajnos ez nem jó.
Nekem olyan kellene, ami független a Wifi hálózattól.

Előzmény: Törölt felhasználó, 2021-07-11 16:20:26 [1944]


Törölt felhasználó    2021-07-11 16:20:26 [1944]

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

„The size of data from ESP8266 is too big for arduino sometimes, so the library can't receive the whole buffer because the size of the hardware serial buffer which is defined in HardwareSerial.h is too small.

Open the file from \arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h.

See the follow line in the HardwareSerial.h file.

#define SERIAL_BUFFER_SIZE 64

The default size of the buffer is 64. Change it into a bigger number, like 256 or more.”


Nem tudom ez segít, de ellenörizni kell.

Előzmény: Devecz Miklós, 2021-07-11 16:12:06 [1943]


Devecz Miklós | 2652    2021-07-11 16:12:06 [1943]

Sziasztok!

Valaki készített már olyan kapcsolást, Ahol Esp-now segítségével vitt át adatokat ESP8266-tal?

A konkrét probléma:

Master: nyomógomb és/vagy Max9814 mikrofon
Slave: villogó led

Sehol nem találok példát rá, az én képességeimet meg meghaladja a programozása.


PSoft | 18469    2021-05-18 20:27:11 [1942]

Mikor Svejk kérdezte, emlékeztem, rögtön írni akartam hogy Te már igen...
De azért...mégis csak jobb, elegánsabb lett így.

Előzmény: Devecz Miklós, 2021-05-18 20:14:38 [1941]

Devecz Miklós | 2652    2021-05-18 20:14:38 [1941]

Igen, arduino alapú, léptetőmotoros hajtással.
Sajnos a héten kénytelen voltam a próbaüzemet befejezni, mert ez a hét az unokáé.
A hátsó rész oda-vissza mozgatható manuálisan, vagy végállásra futással.
Az első rész egy fokos lépésekkel pozicionálható előre-hátra.
Be lehet állítani a menetszámot, tekercs hosszat, huzal átmérőt. Ez utóbbinál be lehet írni a huzal átmérőt, vagy az AWG szám alapján.
Van még egy pár programozási ötletem, de ez majd közben kialakul.

Előzmény: svejk, 2021-05-18 19:55:18 [1940]


svejk | 32800    2021-05-18 19:55:18 [1940]

Nocsak! Saját fejlesztés?

Előzmény: Devecz Miklós, 2021-05-18 19:49:10 [1939]


Devecz Miklós | 2652    2021-05-18 19:49:10 [1939]

Most csinálok éppen egyet.

  

Előzmény: svejk, 2021-05-18 19:34:34 [1938]


svejk | 32800    2021-05-18 19:34:34 [1938]

Egy barátom vett valahol a neten egy ArdunoMegás, Ramps v1.4-es tekercselőgép szerűséget.
A működése borzalom, tele hibákkal.
(szerintem valaki kezdő írhatta az Arduino programját)

Megkért engem valamit találjak ki.

Sajnos én nem értek a programozáshoz, de ha valaki ismer nyílt forráskódú cuccot azt azért meg tudnám neki építeni.

Semmi extra, a szál vastagság függvényében kellene vezetni a szálat és egy beállított tekercshossz méret szerint irányt váltogatni.
A szálvezetést léptetőmotorral, golyósorsóval gondolnánk működtetni.

Ha tud valaki ilyesmit kérem jelezze!


Törölt felhasználó    2021-05-17 14:29:42 [1937]

Nem tudom ez itt valakit érdekelné, de csináltam egy Arduino Uno kontroll dobozt a CNC-mre ami egy léptető motort örökké forgatja. Ide berakom az Arduino kódot mert itt gondolom több a programozással foglalkozó mint más téma alatt.



//------------------------------------------------------------------------------------------------------------
//
// Version information to display at start:
//
#define Ver_nr 10
#define Ver_date 20210516
//
// This software is created by Adapting Camera. You are free to use it in a non-commercial basis.
//
// YouTube: https://www.youtube.com/c/AdaptingCamera/videos
// Blogger: https://adapting-camera.blogspot.com/
//
// This is a program to run a stepper motor an infinite number of steps in CW or CCW direction
// to allow constant rotation. The idea is to use a 4th axis of a CNC as a lathe.
// This will result in a sort of "poor man's lathe", with limited useability, but enough for my needs for now.
//
// Functionality is simple, three buttons, one for each direction and one for stoping the stepper rotation.
// Maximum speed is 380 rpm in this implementation, which in my case is equal to 2280 RPM for the stepper
// motor, due to the 1/6 reduction gear I have. The chuck RPM can be set via a rotational encoder
// between 0 - Chuck_rpm_max, which is set to 380 below.
// If used with faster motors or a different gear ratio then Gear_Ratio and Chuck_rpm_max must be changed.
//
// Stepper motor acceleration and deceleration is implemented, which can be set in seven steps.
// Fastest is Max_Acceleration (7000) steps/s² and that value is divided by the value of the BCD wheel value.
// The push button of the rotary encoder is connected to the Arduino reset and acts as an emergency stop.
//
// Uses interrupt for the stepper pulse generation and also for the rotary encoder handling.
// The rotary encoder is using a simple acceleration parameter, rotating the kob very fast results in jumps
// of ten units per detent, less fast results in jumps of 5 units per detent, and slow rotation results in
// one unit per detent. The drawback of using interrupt on the rotarional encoder is that if the knob is
// rotated very fast it may interfere with the timing of stepper pulses, which may stop the stepper, or
// result in step loss and loud bang when the stepper jumps into roattion again. This can only be avoided
// if the RPM is left alone during stepper rotation, or if the rotary encoder would be handled outside
// the interrupt handling routines, but in that case reading the encoder would present a problem.
// The three buttons are outside the interrupt chain and are read in the normal program loop. This has the
// Disadvantage of a bit slower reaction, so an very short push may not result in any reaction.
// I may change this later to handle it as state change IRQ on the inputs, but I think this is good enough.
//
// The last used RPM is saved in the EEPROM every time one of the two rotation direction button is pressed.
// This saved value is read back after each reset or after powering up the unit.
//
// This code is tested only with Arduino Uno, but it will probably work also with other Arduino devices.
//
// Good luck.
//
#include "FastAccelStepper.h"
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <RotaryEncoder.h>

#define Step_Pin 10
#define Dir_Pin 11
#define Enable_Pin 12

#define pinA 2 // Our first hardware interrupt pin is digital pin 2
#define pinB 3 // Our second hardware interrupt pin is digital pin 3

#define RightButton A0
#define LeftButton A2
#define DownButton A1

#define BCD_0 A3
#define BCD_2 A4
#define BCD_4 A5
volatile byte Read_BCD = 0;
volatile byte Old_BCD = 0;

int Gear_Ratio = 6.0; // 6:1 gear in rotary axis
float Chuck_rpm_k = (1/0.15) * Gear_Ratio; // This is a constant which is used for chuck RPM for frequency conversion
int Chuck_rpm_max = 380; // Maximum rpm for the chuck
int Running_rpm; // This is the speed now

int SpeedInHz;
int Acceleration; // Set after the read of BCD wheel
#define Max_Acceleration 7000 // Set as default acceleration 7000 steps/s²

volatile boolean START_STOP = false;
volatile boolean Running_CW = true;
volatile boolean Enable_ON = false;

volatile byte A_Flag = 0; // Rising edge on pinA to signal that the encoder has arrived at a detent
volatile byte B_Flag = 0; // Rising edge on pinB to signal that the encoder has arrived at a detent
volatile int Encoder_Pos = 0; // Current value of encoder position.
volatile byte EEPROM_Enc_pos = 0; // EEPROM adress of the saved encoder position. This adress read at start.
volatile int Old_Enc_Pos = 0; // Last encoder position value.
volatile byte Reading = 0; // Direct values read from our interrupt pins before checking to see if moved a whole detent
volatile int ms = 0; // Time between roraty encoder pulses

FastAccelStepperEngine Engine = FastAccelStepperEngine();
FastAccelStepper *A_stepper = NULL;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Use these IO pins for LCD RS,E,D4,D5,D6,D7
RotaryEncoder Rotary(pinA, pinB, RotaryEncoder::LatchMode::FOUR3);

void setup() {
Serial.begin(115200);
lcd.begin(16, 2); // Initialize the 16 x 2 LCD

byte hiByte = EEPROM.read(EEPROM_Enc_pos); // Read the last saved speed before reset
byte loByte = EEPROM.read(EEPROM_Enc_pos + 1);
Encoder_Pos = word(hiByte, loByte); // Need to split the integer into two bytes for the EEPROM

Engine.init();
A_stepper = Engine.stepperConnectToPin(Step_Pin);
A_stepper->setDirectionPin(Dir_Pin);
A_stepper->setEnablePin(Enable_Pin);
A_stepper->setAutoEnable(true);

A_stepper->setSpeedInHz(SpeedInHz);
A_stepper->setAcceleration(Acceleration);
DisplayOnLCD();
pinMode (RightButton, INPUT_PULLUP);
pinMode (DownButton, INPUT_PULLUP);
pinMode (LeftButton, INPUT_PULLUP);

pinMode (BCD_0, INPUT_PULLUP);
pinMode (BCD_2, INPUT_PULLUP);
pinMode (BCD_4, INPUT_PULLUP);

digitalWrite(RightButton, HIGH); //use the internal pullup resistor
digitalWrite(DownButton, HIGH); //use the internal pullup resistor
digitalWrite(LeftButton, HIGH); //use the internal pullup resistor

digitalWrite(BCD_0, HIGH); //use the internal pullup resistor
digitalWrite(BCD_2, HIGH); //use the internal pullup resistor
digitalWrite(BCD_4, HIGH); //use the internal pullup resistor

pinMode(pinA, INPUT_PULLUP); // Set pinA as an input, pulled HIGH
pinMode(pinB, INPUT_PULLUP); // Set pinB as an input, pulled HIGH
attachInterrupt(0,PinA,RISING); // Set an interrupt on PinA for a rising edge and execute PinA ISR
attachInterrupt(1,PinB,RISING); // Set an interrupt on PinB for a rising edge and execute PinB ISR

lcd.setCursor(0,0); // Erase the display
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,0); // Display the values
lcd.print("Version: ");
lcd.print(Ver_nr);
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(Ver_date);
delay (2000);
}

//------------------------------------------------------------------------------------------------------------
//
// Start the main loop
//
// Read the BCD wheel, the rotary encoder and three buttons in the loop.
//
void loop() {

//------------------------------------------------------------------------------------------------------------
//
// Read the BCD encoder and set acceleration accordingly.
// The acceleration is set by dividing Max_Acceleration with the value of the encoder.
//
Read_BCD = PINC & B00111000; // Read port C and mask the BNC encoder bits
Read_BCD = Read_BCD >> 3; // Right shift 3 times
if(Old_BCD != Read_BCD) {
Acceleration = Max_Acceleration / Read_BCD; // Calculate the divisor
A_stepper->setAcceleration(Acceleration); // Set the new acceleration value
Old_BCD = Read_BCD;
DisplayOnLCD();
}

//------------------------------------------------------------------------------------------------------------
//
// Read the rotary encoder and set chuck rpm accordingly.
// The rpm is set through converting the encoder value to pulse time in microseconds.
// This value is used as speed value for the stepper.
//
if(Old_Enc_Pos != Encoder_Pos) {
// ms = Rotary.getMillisBetweenRotations();
if ( Encoder_Pos <= 0 ) {
Encoder_Pos = 0;
SpeedInHz = 0;
} else {
if ( Encoder_Pos >= Chuck_rpm_max ) {
Encoder_Pos = Chuck_rpm_max;
}
}
Old_Enc_Pos = Encoder_Pos;
if ( Encoder_Pos << 0 ) {
SpeedInHz = (Encoder_Pos * Chuck_rpm_k);
}
DisplayOnLCD();
attachInterrupt(0,PinA,RISING); // Set an interrupt on PinA, looking for a rising edge signal and executing the "PinA" Interrupt Service Routine (below)
attachInterrupt(1,PinB,RISING); // Set an interrupt on PinB, looking for a rising edge signal and executing the "PinB" Interrupt Service Routine (below)
}

//------------------------------------------------------------------------------------------------------------
//
// Read buttons to set rotation direction or to stop the rotation
//
if ( digitalRead(DownButton) == false) { // Stop with decelerating to zero RPM
A_stepper->stopMove();
Running_rpm = 0;
DisplayOnLCD();
delay (2000);
}

if (digitalRead(LeftButton) == false) { // Set CCW rotation...
if (Running_CW == true) { // ...but only if not rotating to CCW now.
A_stepper->stopMove();
delay (2000);
Running_CW = false;
}
if ( Encoder_Pos >> 0 ) {
A_stepper->setAcceleration(Acceleration);
A_stepper->setSpeedInHz(SpeedInHz);
A_stepper->runBackward();
} else {
A_stepper->stopMove();
}
Running_rpm = Encoder_Pos;
DisplayOnLCD();
EEPROM.write(EEPROM_Enc_pos, highByte(Encoder_Pos)); // Save in EEPROM the current speed as last speed
EEPROM.write(EEPROM_Enc_pos + 1, lowByte(Encoder_Pos));
}

if ( digitalRead(RightButton) == false) { // Set CW rotation...
if (Running_CW == false) { // ...but only if not rotating to CW now.
A_stepper->stopMove();
delay (2000);
Running_CW = true;
}
if ( Encoder_Pos >> 0 ) {
A_stepper->setAcceleration(Acceleration);
A_stepper->setSpeedInHz(SpeedInHz);
A_stepper->runForward();
} else {
A_stepper->stopMove();
}
Running_rpm = Encoder_Pos;
DisplayOnLCD();
EEPROM.write(EEPROM_Enc_pos, highByte(Encoder_Pos)); // Save in EEPROM the current speed as last speed
EEPROM.write(EEPROM_Enc_pos + 1, lowByte(Encoder_Pos));
}
delay(100);
}

void DisplayOnLCD() {
lcd.setCursor(0,0); // Erase the display
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,0); // Display the values
lcd.print("Set RPM: ");
lcd.print(Encoder_Pos);
lcd.setCursor(0,1);
lcd.print("Run RPM: ");
lcd.print(Running_rpm);
if (Running_rpm == 0) {
lcd.setCursor(12,1);
lcd.print("STOP");
} else {
if (Running_CW == false) {
lcd.setCursor(13,1);
lcd.print("CCW");
} else {
lcd.setCursor(13,1);
lcd.print("CW");
}
}
}
//------------------------------------------------------------------------------------------------------------
//
// Interrupt handling routines for the rotation encoder to interpret left or right rotation.
// The rotation will increment or decrement the value of Encoder_Pos.
// Time between pulses is beasured and acceleration is applied if it is faster than 150ms between pulses.
//
void PinA(){
Rotary.tick();
ms = Rotary.getMillisBetweenRotations();

detachInterrupt(PinA); // Disable interrupts to stop happening before we read pin values
Reading = PIND & 0xC; // Read all eight pin values then strip away all but pinA and pinB's values
if(Reading == B00001100 && A_Flag) { // Check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
Encoder_Pos --; // Decrement the encoder's position count
if ( ms <= 150) { // Accelerate the counting if time between pulses is shorter than 150ms
if ( ms <= 25){
Encoder_Pos = Encoder_Pos - 9; // Decrement 9 each time if time between pulses is shorter than 25ms
} else {
Encoder_Pos = Encoder_Pos - 5; // Else decrement 4
}
}
if (Encoder_Pos <= 0) {
Encoder_Pos = 0;
}
B_Flag = 0; // Reset flags for the next turn
A_Flag = 0;
}
else if (Reading == B00000100) B_Flag = 1; // Signal that we're expecting pinB to signal the transition to detent from free rotation
// Enable interrupts again in the main loop
}

void PinB(){
Rotary.tick();
ms = Rotary.getMillisBetweenRotations();
detachInterrupt(PinB); // Disable interrupts to stop happening before we read pin values
Reading = PIND & 0xC; // Read all eight pin values then strip away all but pinA and pinB's values
if (Reading == B00001100 && B_Flag) { // Check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
Encoder_Pos ++; // Increment the encoder's position count
if ( ms <= 150) { // Accelerate the counting if time between pulses is shorter than 150ms
if ( ms <= 25){
Encoder_Pos = Encoder_Pos + 9; // Add 9 each time if time between pulses is shorter than 25ms
} else {
Encoder_Pos = Encoder_Pos + 4; // Else add 4
}
}
if (Encoder_Pos >= Chuck_rpm_max) {
Encoder_Pos = Chuck_rpm_max;
}
B_Flag = 0; // Reset flags for the next turn
A_Flag = 0;
}
else if (Reading == B00001000) A_Flag = 1; // Signal that we're expecting pinA to signal the transition to detent from free rotation
// Enable interrupts again in the main loop
}



Ha használhatónat találod, használd szerencsével.


  Fórum főoldal  |  A lap tetejére

Időrend:
Oldal 2 / 41 Ugrás ide:
Sorok:
|◄ Első  ◄ Előző   1  2  3  4  5  6   Következő ►  Utolsó ►|


 ◊