- Milyen okostelefont vegyek?
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy A56 - megbízható középszerűség
- Apple iPhone 16 Pro - rutinvizsga
- Magisk
- Motorola Edge 50 Ultra - szépen kifaragták
- Amazfit Active 2 NFC - jó kör
- Milyen hagyományos (nem okos-) telefont vegyek?
- Samsung Galaxy S23 Ultra - non plus ultra
- Apple Watch Sport - ez is csak egy okosóra
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
zsolti_20
senior tag
Végül két dolog oldotta meg a hibát. A forráskód setup részéhez beszúrtam a RF24_PA_MIN parancsot és az elektrolit kondit amiből 16v 100uf-et használtam, állóként forrasztottam be és nem fekvő pozícióba. Ezen kívül nem tettem PCB-t az NRF24L01 alá, hanem a modult csak simán a burkoaltba ragasztottam.
Valami miatt nagyon érzékeny, nem is működik másik NRF24L01 antennával.
Valaki esetleg betud nekem ide linkelni egy command listet az NRF24L01-hez? Sehol nem találom sajnos.
-
Szép
Gyanta/Folyasztószer
?
Édesapámnak a 80as években volt ilyesmije, durva, hogy 30+évvel később ugyanott kezdem- Persze akkoriban még nem arduinókat forrasztgattak...
-
Alu
senior tag
-
Alu
senior tag
Megnéztem szkópon a problémás kimeneteket, a tapasztalatom:
- Csak usb-t csatlakoztatva csinálja a prellegést. Olyan, mint ha a gép kommunikálna az arduval, ráadásul folyamatosan rángatja a reset lábat. Ez tart néhány mp -ig aztán indul a program.
- Ha simán külső tápról indítom, akkor sokkal gyorsabban elindul a program és nincs prellegés.Bootloaderrel még nem foglalkoztam, de innentől kezdve nem biztos, hogy van értelme legyilkolni, vagy?
Enabledet újabban beterveztem a kapcsolásba. Alapból tiltva lesz és ardu fogja engedélyezni. Nekem jónak tűnik.Csatolok pár képet:
A kimeneten lévő prellegés egy impulzusa
A reset láb, amikor usb -re csatlakoztatom
(#10761) Gergosz2:
Ez/hasonló itthon is beszerezhető? Sajnos most nincs annyi időm, hogy megvárjam külföldről. -
-
Köszi
egyelőre csak előre aggódtam, a lapka tegnap indult útjára Kínából
. Ez lesz a nulladik ismerkedésem az Arduinóval, sőt, az egész mikrokontroller-programozással is, úgy, hogy Pythonból ovis kategória vagyok
. De nagyon érdekel a téma, elsőre a ház körül adódó automatizálási-távvezérlési feladatokat szeretném így megbütykölni, aztán ki tudja.
-
robohw
aktív tag
"A két arduino összehangolását nem lehet úgy megcsinálni, hogy egyiken pin out - optoizolálás - pin in. Ha in akkor megszakítás és más programrész fut?"
De, meg lehet, csak szerintem nincs sok értelme az optónak ebben a konstellációban (meg még jó drága is). Állapotot kell csak közölni, adott időben.
"Egyébként ezeket 1 aruduinon is meg tudod csinálni, vagy csak az összehangolás megismerése a cél?"
Én csak válaszadó voltam, nem kérdező, de természetesen meg lehet. Ennél sokkal többre is képes a 328-as, ami az UNO-ban van.
Aki továbbra is tart a klónoktól, annak azt tudom javasolni, hogy vegyen egy eredetit és vegye meg a kopasz kontrollert és foglalatot hozzá. A kontrollert felprogramozhatja az eredetivel, majd beteheti az áramkörébe és még olcsó is, igaz, az időalapot (kondi, kvarc) neki kell biztosítania.
Egy eredeti UNO board kb. 6000, egy ATmega328P kb. 700 HUF.
-
robohw
aktív tag
"A mikro ugyan az rajta, csak a körítés más. Én is megszívtam már vele. A regulátora pl annyira jó minőségű, hogyha 12 voltot ráengedsz megég."
A körítés nagyjából kimerül egy feszstabban és egy USB-serial illesztőben.A többi lényegében már csak a nyák + LM318.
Nekem eddig semmi bajon nem volt velük, pedig eredeti még soha a kezemben sem volt, mindig a kínai klónokat vásároljuk, ráadásul különböző forrásból. Tekintve, hogy az árkülönbség kb. 4-szeres a klónok javára, ez a jövőben is így marad.
A klónokon jellemzően ch340g van, ezekre én - egyelőre - nem panaszkodhatok. A feszstabbal sem volt még gond. Utóbbi természetesen feladatfüggően terhelődik, jellemzően 7.5 vagy 12 volttal vannak meghajtva.Itt egy részletekbe menő összehasonlító írás (klón vs eredeti (UNO)):
https://darkbluebit.com/arduino/real-vs-clone-2/
Itt pedig a klónok kompatibilitásáról néhány értékes megállapítás:
https://arduino.stackexchange.com/questions/71/compatibility-between-arduino-and-arduino-clones
-
rsanya87
tag
Ha goto-s rendszer van, akkor bármelyik planetáris programmal lehet vezérelni. Stellarium talán a leghíresebb. Csak kell egy ascom driver, ami megszünteti a mechanikák közti különbséget. A program koordinátákat küld a vezérlőnek, és az rááll.
Ez a rendszer amit én készitek jelenleg, annyit tud, hogy követi a beállított objektumot (óramű), illetve van egy phd2 nevű program, ami egy kamerát használva követ. Beállítasz egy vezetőcsillagot, és ahogy az kimozdul a területről (nagyon pici kocka) automatikusan jelet küld az ardunak a korrigációról.
A goto-s rendszer kivitelezése nehéz.. és mivel programozási tudásom 0, igy neki sem állok -
rsanya87
tag
12voltos a rendszer, rendes 220as tápegységről (ATX táp átalakítva), néha autóaksiról megy a rendszer.
Uno az alap, 2db DRV8825 vezérlő van. Egyedi shield azért kellett, hogy ne a csupasz vezetékek legyenek szanaszéjjel. Azon van a tápcsatlakozó, a 2 motorvezérlő, meg a kivezetések a motorhoz (2db nema17 2A motor), valamint 6 input a pc vezérléshez, 4 out a visszajelző ledeknek.Mivel cél a lassú preciz mozgás, nem a motoron kell lennie a kis tárcsának, a mechanikán a nagynak? Az én értelmezésem szerint ha a motoron van a kis tárcsa, annak többet kell forognia, ezáltal egyszerre kevesebb erőt kell kifejtenie ahhoz hogy megmozdítsa a cuccost.
És nekem is az a problémám, hogy nem tudom miként kell kiszámolni
Rakok fel képet, hogy értsd/értsétek
-
rsanya87
tag
Bordájszíhajtás van, és ahhoz a kerék.
Igen kicsit gyenge a nyomaték. Abban nyilvánul meg, ha nem tökéletes az egyensúly, hajlamos megállni. Nem minden esetben áll meg, de jobb a biztos ezért változtatnám meg az áttételt.Távcső mechanikáról van szó, és a jelenlegi rpm-el közel tökéletes a csillagkövetés.
Nagyobb áttétellel a motor sem erölködne annyit, de a sebességnek maradnia kell a jelenlegin. -
rsanya87
tag
Igen.
A jelenlegi (motor 18borda, mechanika30borda) áttétel rpm-e 6.38675, és növelni szeretném az áttételt, motor 10 vagy 12borda, mechanika 40 vagy 48borda, de a sebességnek pontosan maradnia kellene annyinak, amennyi most, mivel precíz vezetés kell, ami be lett lőve, de kissé gyenge ezzel az áttétellel.
itt egy kódrészlet:float rpm= 6.38675; // alapsebesség fordulat/perc
float spr= 200.00; // lépés / fordulat a motorodnak ez fix értékeNa az új áttételnek kellene kiszámolni az RPM számát. Itt akadtam meg.
4:1 lenne az új áttétel (ha jól írom, motoron a kisebb szijtárcsa), de lövésem nincs az áttételekről, hogy miként hogy számolom :/ -
zsolti_20
senior tag
Nema 11 motort szeretnek hasznalni a merete miatt. Nem igazan fer el nagyobb mint 3cm. Ehhez melyik shield ajanlott? Esetleg ebben a meretben van jobb lepteto motor? Ha nem is hasznalok shieldet, milyen leptetomotor vezerlo ajanlott? Preciz gyors mukodes lenne a lenyeg.
-
Teasüti
nagyúr
Szintillesztésre én mosfet-eket használok egy marék felhúzóval. De a szintillesztett áramkör is open-drain módban működik. Ha találsz vmi kézzel beültethető olcsó IC-t aminek kisebb a footprint-je mint egy sot-23 fet és mellé két 0805-ös ellenállás, akkor írd meg kérlek!
-
Teasüti
nagyúr
A felhúzót olvastam én is. Akkor a gyári 5v és a 3.3 output közé teszek egy 10K-t és utána a kimenő jelem 5V? Így kell érteni?
Igen. De azért méretezd max pár mA-re, hisz 6 mA-t ír a portokra!
Meg a biztonság kedvéért én open-drain módban használnám a portot: INPUT (külső pullup) és OUTPUT LOW módban. Nem tudom mi történne, ha egy OUTPUT HIGH-ra kapna visszirányú áramot. -
Teasüti
nagyúr
Nekem tetszik, nem nagyon van ilyen éles használatra előkészített megoldás a piacon gyári burkolattal.
Viszont nem látom rajta az USB portot, ezért azért nagy kár.
Meg kíváncsi lennék hogyan oldották meg az EMI és ESD védelmet. Aligha beszélhetünk ipari megoldásról ezek hiányában.Ebben a cuccban egyedül az 5v io hiánya bosszant. Mostanában errefelé megy a mikrokontroller világ? Előbb utóbb 3.3 voltra vált az egész?
32 biten már nincsenek 5V-os processzorok. Viszont 5V toleráns és felhúzóval megoldható az 5V-os kimenet, ahogy azt írják is.(#10011) Amarton
Akril: jó időjárásállóság, bírja az UV-t, a magas hőmérsékletet és ellenáll a legtöbb vegyszernek. Mechanikailag nem kiemelkedő, az ütőmunkája kisebb, viszont jellemzően vastagabbra készítik, emiatt nehezen törik.PVC: szintén jó UV állóság, jó kémiai stabilitás, emiatt lassan öregszik. Szívós és erős anyag, mérsékelten tűzálló és jó elektromos szigetelő.
-
Vladi
nagyúr
Uraim!
Jelentem működik a cucc, jön a stabil jel. 50 körüli jel/sec, ami megfelel az előzetes számításaimnak.
Annyira mondogattam, hogy a hardver jó, hogy kiderült, nemjó. 1uF debounce kondit használtam - ez a board nyomógomb jelstabilizálásra és izolálásra lett tervezve. De ide nem jó. A kondit kivágtam, így már stabil.Az enkóder gyárilag tartalmaz erre megoldást.
Köszi a bíztatást és segítséget: vargalex, _q, Gergosz2, weiss, aryes, Janos250
ecaddsell te meg vigyázzá, mer jössz te még fedora topikba.
Olyan nagyon ne örüljetek, mer már a hardver már össze van rakva a kövi projektemhez, ez egy CNC punching machine lesz - nemtomamagyar nevét - arduino vezérléssel.
Énse nagyon örüljek, mer hátha lesz topiktali, akkor az egész banda Vladi kontójára iszik.
-
"Ez a vágási ciklus. Az enkóder gyári értéke 100/fordulat, 200-ra lett gyorsítva áttéttel, 8 rpm-ről 16 rpm-re.
Egy lap kb 16 secundum, azaz 26-27 impulzus/sec. 1600 imp/min. 420-430 impulzus között lesz a szabvány 390 mm
0.91 mm/imp ezzel lehet számolni. 420 mm-es lap így kb: 460 imp."Ezt miért bonyolítottad ennyire el? Időből, sebességből saccolva számolod a távolságot. Miért nem a gép menetsűrűségét szorzod fel az encoder felbontásával? Akkor a "420-430 között lesz a szabvány" helyett tizedmm-re pontos adattal tudnál dolgozni.
-
Janos250
őstag
Ezért nehéz az élet enélkül:
https://www.ebay.com/itm/24MHz-8CH-USB-Logic-Analyzer-24MHz-8-Channel-Compatible-to-Saleae-ARM-FPGA-M100/272828061041?hash=item3f85d1d571:g:9rgAAOSwFjlZqCfv:rk:5:pf:0Egy ilyen 1800 forintos analizátort kötsz a kimenetre, és máris nagy felbontásban, nagy pontossággal, vissza tudod nézni PC-n hogy mit adott ki a szerkentyű. Én már többször javasoltam, hogy ne sajnáljátok rá azt az 1800 forintot. Nekem van ez is, meg a 100 megás is, de az esetek 99 százalékában elég ez a kisebb.
Persze még könnyebb lenne az élet egy jobb digitális tárolós szkóppal, de az százezer fölött kezdődik, aki nem mindennap használja, annak nem éri meg. Pedig pergés (prell) ügyben az az igazi. -
ecaddsell
aktív tag
Ja bocs, akkor amit írtam nem lesz jó (de mintha valami rotary encoder leírást linkeltél).
Ha valami pulzusos jeladó az sem nehezebb.Ugyanúgy minden élre kell interrupt és mérni kell a legutóbbi interrupt óta eltelt időt.
Két összegző kell (static volatile) ami minkét állapotban eltöltött időt összegi. Ha pulzus ideje meghaladja az elvárt időhossz mondjuk kétharmadát (vagy 3/4-ét ez jelalakból vagy próbával) akkor elfogadjuk, léptetjük a számlálót és mindkét idő összegző nullázva.Szóval amit lent írtál még így nem elég.
-
ecaddsell
aktív tag
Na akkor rotary encoder prell mentesítés még egyszer.
Az alapötlet innen:
https://www.best-microcontroller-projects.com/rotary-encoder.html
Én KY-040-el használom (sokat), hibázni még nem láttam. A logika megszakításban megy, a lekérdezés poll.
A speed control arról szól, hogy ha gyorsabban tekered akkor nagy ugrásokkal megy. Frekvencia beállításnál igen hasznos, máshol ahol fontos, hogy az elmozdulással legyen arányos az érték meg nem kell (ki kell kapcsolni).
Mivel ez is olyan téma, hogy jó megoldást még nem láttam (ezért voltam kénytelen egyet írni), hibásat annál többet, érdemes eltenni a linket.
Kommentelni akkor szoktam kódot, ha nagyon kell. Sorry./*
This code is free software; you can redistribute it and/or
modify it under the terms of the CC BY-NC-SA 3.0 license.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND...
*/
#define ROTE_CLK GPIO_NUM_xx
#define ROTE_DT GPIO_NUM_xx
#define ROTE_SPCTM 50000 // speed control time limit, not defined no speedctrl
volatile int32_t rotval = 0;
void IRAM_ATTR isrrot() {
volatile static uint8_t pinsta = 0x3, cwi = 0, ccwi = 0;
volatile static uint8_t cwexp[] = {0xD, 0x4, 0x2, 0xB};
volatile static uint8_t ccwexp[] = {0xE, 0x8, 0x1, 0x7};
int32_t rvchg;
#ifdef ROTE_SPCTM
volatile static uint32_t tc = 0, tm = 0;
uint32_t ctm, td;
#endif
pinsta = (pinsta << 2) & 0xf;
if (digitalRead(ROTE_DT)) pinsta |= 0x2;
if (digitalRead(ROTE_CLK)) pinsta |= 0x1;
if (pinsta == cwexp[cwi]) cwi++;
else if (pinsta == ccwexp[ccwi]) ccwi++;
if (cwi == 0x4 || ccwi == 0x4)
{
if (cwi == 4) rvchg = 1;
else rvchg = -1;
pinsta = 0x3; cwi = 0; ccwi = 0;
#ifdef ROTE_SPCTM
ctm = micros();
td = ctm - tm;
tm = ctm;
if (td < ROTE_SPCTM / 2) rvchg *= 7;
else if (td < (ROTE_SPCTM * 2) / 3) rvchg *= 4;
else if (td < ROTE_SPCTM) rvchg *= 2;
#endif
rotval += rvchg;
}
} // isrrot
int16_t getrotv() {
static int32_t lval = 0;
int32_t cval = rotval;
int16_t rotc = 0;
if (lval != cval) {
rotc = cval - lval;
lval = cval;
}
return (rotc);
} // getrotv
void inirotein(gpio_num_t clk, gpio_num_t dt) {
pinMode(clk, INPUT);
pinMode(dt, INPUT);
attachInterrupt(digitalPinToInterrupt(clk), isrrot, CHANGE);
attachInterrupt(digitalPinToInterrupt(dt), isrrot, CHANGE);
} // inirotein
...
inirotein(ROTE_CLK, ROTE_DT);
... -
Vladi
nagyúr
link. Hm... még viszonylag jókor szólnak.
Vagyis tutira iktassam ki az 1uF-es prellmentesítő kondit és álljak át szoftveres prell mentesítésre. 1 sec alatt számításaim szerint 50 change jel lesz, az 20 ms. Ez alá kell a delay. Vagy valami bütykölés interrupt alatt, de akkor már tényleg kihozom loopba a számolást.
-
Vladi
nagyúr
Nah csak nekiláttam a debugolásnak. Ott tartok, hogy az opto-izolátor kártyámon átjön a jel, megszakításból tudom növelni a számlálót, ezt ki is írja sorosra arduino.
Viszont nagyon sok a jel és nagyon hullámzik a mennyisége. Ilyen 150 és 1500 között ugrál a jelsűrűség másodpercenként.
Ez prell lenne?
-
ecaddsell
aktív tag
Ne viccelj ilyen könnyen feladod?
Pl. megnézted, hogy kompatibilis a jeladód szintje a kontrollerével? Az, hogy a jeladón villog a LED semmit sem mond arra vonatkozólag, hogy tényleg megtörténik-e az interrupt.
Pl. a loop-ból kiírathatnád a számlálót ha az változik. stb.Emlékszem rád a Fedorás topikból, olyan dolgokban tudtál segíteni nekem (meg kb. mindenki másnak) amit már rég feladtam(unk), itt meg hozzá sem kezdtél a debughoz... Ki kell íratni dolgokat a soros porton.
ESP32-vel még az interruptból is kiírattam, pedig elvileg azt nem szabad (lehet itt nem is menne) mert mi történhet alapon, max újra fel kell töltenem a módosított kódot.
Ha nincs soros portra lehetőség akkor rá teszel valamelyik pinre egy ellenálláson keresztül 1 LED-et amit ki be kapcsol az interrupt stb.Kevesebből mint az általad írt összeg tervezek 10digit/s-es frekvenciamérőt csinálni, Arduino környezetben ebből a pénzből már egy egész hobbi labort lehet építeni. Persze, ha eléggé motivált vagy...
-
vargalex
félisten
Szia!
Ha a piros gombot megnyomod, utána sem megy az enkóder alapú vágás? Amiért kérdezem:
- nincs inicializálva a currentpulse változó (és a voros sem egyébkén), így akár az is lehet, hogy annak értéke a kezdéskor (bár nem olvastam utána, hogy arduinoban van-e automatikus változó inicializálás, így csak a C-ből indulok ki) valami kicsi negatív szám, így jó későn fogja elérni a pulzus értékét.
- én a currentpulse változó értékét a loop if-jének legelején nulláznám, ugyanis így elvesztesz 300 ms-nyi interrupt-ot (ugye addig az interrupt tovább növelgeti az értéket, de utána nullázod - persze lehet, hogy az a cél, hogy a vágás vége és a következő vágás eleje közötti idő legyen állandó).Egyébként nézted a volatile leírásában az "int or long volatiles" bekezdést? Ugye a 8 bites olvasás pont okozhat gondokat.
-
Gergosz2
veterán
Nálam 10-20 rpm a tartomány nagyságrendileg.
Ezen a fordulaton üzemelsz? Milyen motort használsz?
Amúgy egy 1 uF kerámia kondenzátornak mennyi a feltöltődés és kisülés ideje nagyságrendileg?
Attól függ mekkor ellenállást lát. Ha ez megvan, legyen R, akkor az időállandó R*C-lesz. Nagyjából 5 időállandó alatt beáll a stacioner állapot, így ebben az esetben ez 5RC lesz.
-
Gergosz2
veterán
Nem tudom mi az applikáció de a négyszögjeles enkódert álatában így szokás feldolgozni:
Kis fordulaton a felfutó élek közötti időt szoktuk mérni, abból lehet megsaccolni a fordulatszámot. Gondolom egy Atmega328p-t használsz, ami ugyan nem cél hadrver, de megoldható vele a dolog. Ha nem fontos a forgásirány megállípátsa, akkor érdemes össze XOR-olni a két csatornát, így négyszeres freqis jelet kapsz.
Utána az interruptban a millis vagy micros aktuális értékét is lemented. Ha ez megvan akkor tudod két felfutó él között mennyi idő is telt el, amiből visszatudod számolni a szögsebességet.Nagyobb fordulaton meg a számolod a felfutó éleket és deltaT időkööznként megnézed a változást. Itt 1-2 ms-es kiolvasás, feldolgozás bőven jó lesz.
-
-
Vladi
nagyúr
Uraim! Ez így se működik.
Visszatettem a korábbi - idő alapú kódot. Arra ha ráengedem az encodert, semmit se csinál, csak a megszakításokat dobálja be - 25-öt másodpercenként - akkor azzal a kóddal is megbénul a rendszer, egyszerűen a sok megszakítástól nem fut le a loop többi része.
Délután nekiállok és leprogramozom úgy, hogy megszakításon kívül számláljon. Valami while számlál a megvan akkor do vágás, ilyen elven.
-
Vladi
nagyúr
Nokéremszépen, ez a javított:
/*
Ez a vágási ciklus. Az enkóder gyári értéke 100/fordulat, 200-ra lett gyorsítva áttéttel, 8 rpm-ről 16 rpm-re.
Egy lap kb 16 secundum, azaz 26-27 impulzus/sec. 1600 imp/min. 420-430 impulzus között lesz a szabvány 390 mm
0.91 mm/imp ezzel lehet számolni. 420 mm-es lap így kb: 460 imp.
*/
volatile const int enko = 3; //2-as pinbe van enkóder érzékelője, OPTÓN A JOBB OLDALI!!!, vezetékelésnél összekevertem, ezért a kódban cseréltem fel, ezért van itt keveredés!
volatile const int piros = 2; //3-es pinbe dugva az azonnali vágó kapcsoló
volatile const int rele = 5; // a kapcsoló relé.
volatile const int alapled = 13;
const int pulzus = 425; // EZ A LENYEG!
const int releido = 300; // a relé nyitás-zárás ideje, mechanikusnál adatlap írja le, minimum 400 milisec, de inkább jóval több, 0.8-1 vagy mégtöbb sec!
volatile int currentpulse;
volatile bool voros;
void setup() {
pinMode(piros, INPUT); // a 2-es a piros az bemenet lett
pinMode(enko, INPUT); // a kettes hurkázó is bemenet
pinMode(rele, OUTPUT); // relé a 6-on kimenet
pinMode(alapled, OUTPUT);
//Serial.begin(9600); //debug céllal került bele
attachInterrupt(1, szamlalo, CHANGE); //3-as az enkóder, megszakítást állítottam rá
attachInterrupt(0, nyissz, FALLING);//2-es a piros, azon is megszíktás van
//digitalWrite(alapled, LOW); // franc tudja miért, de HIGH-on tartja a ledet végig. Ártani nem árt, de inkább lekapcsolom.
}
void loop(){
if(currentpulse >= pulzus || voros) {
digitalWrite(rele, HIGH);
delay(releido);
digitalWrite(rele, LOW);
//Serial.println("Vágtam, kövi.");
voros = false;
currentpulse = 0;
}
}
void szamlalo(){
currentpulse++;
}
void nyissz(){
voros = true;
}Vázlat használ 1314 bájt (4%) -ot a program tárhelyből. A maximum 32256 bájt.
A globális változók 24 bájt (1%)-ot használnak a dinamikus memóriából, 2024 bájtot hagyva a helyi változóknak. A maximum 2048 bájt. -
-
Vladi
nagyúr
Ami a hiba:
A vörös/piros gombra vág a cucc. ez jó.
Az enkóderből jön a jel, van egy visszajelző led, az szépen vibrál. Sűrű a jel.Viszont sose kapcsol. Akármennyit várok. A beállításokkal 16 másodpercenként kéne. (Vagy 32, ha elszámoltam.
)
Amire gondolok:
1. a void loop végén kellene nullázni a számlálót. Ha kilép a loopból megszakításkor, akkor a loop elejére tér vissza?
2. volatile változónak kellene megadni a currentpulse-t, mert akkor az interrupt alatt nem ismeri?
Mondjuk ezt nem hiszem, a példaprogramokban se így adják meg.
3. olyan sűrű a megszakítás, hogy nem tudja lefuttatni a loopot végig. Ezt nem hiszem, mert akkor a vörössel se működne. Meg akkor ki kéne venni a megszakításból a számlálást és áttenni a loopba.
Nekem az 1. tűnik valószínűbbnek.
(#9893) weiss
Csak most látom a hozzászólásod. a 2. pontoban én is erre gondoltam. Jól gondolom, hogy megszakításkor csak így tudja kezelni? De akkor vörössel miért működik a funkció?
-
-
Janos250
őstag
Ízlések és pofonok.
Az én szótáramban ezt lenyúlásnak hívják. Kereskedelemnek meg azt, ha megveszel tízet nagyker áron, és árulod egyesével kisker áron.
Én inkább rádobom a nepper árrésének felét a szállításra a Gearbesten, vagy a Banggoodon (bár ennek a szállítása jelenleg döglődik), és pár napon belül a kezembe teszi a futár.Valóban az a baj, hogy nem tudni mi a jó. Én már dobtam el BD láncfűrészt is, mert annyira drágán javította volna meg a márkaszerviz, hogy nem érte volna meg. Hiltire 30 ezerért adtak volna árajánlatot a javításra. Csak árajánlatot!
Szerencsére az Arduino cuccokkal nem tapasztaltam, hogy tönkremennének.
Erről jut eszembe, és ez már itt nem off:
Ha valakinek az USB-soros átalakítón keresztüli használatban gondjai támadnak, az többnyire a driver miatt van. Pl. az FT232-re van olyan driver, ami a hamis chip esetén tönkreteszi az IC-t (átírja a PID-et nullára). Nagyon jól meg kell választani a drivert, azt jól elrakni, mert az újak már nem jók. Mind a négy általánosan használt chiphez van jó driver is. -
tvamos
nagyúr
Tinyban eleg keves a memoria, nem jo azt a frameworkben nyektetni. Jobb, ha elengeded!
Amugy nagyon klaasz, mert ha lemondasz az Arduino frameworkrol, akkor lehetsz beta tesztere az uj MPLAB X IDE-nek, amiben mar a regi Atmeles cuccokat is tamogatjak. WOW!
Amugy imeg letoltheto a regi Atmel Studio 7, ha minden igaz. (Gyorsan en is letoltom, hatha egyszer... retro erzes fog el. Sokat programoztam benne, nagyon regen mar. Pl. 90S1200-at.
)
-
Teasüti
nagyúr
Gondolom a hardver specifikus lib-ek nem fognak futni hardver nélkül.
A legszembetűnőbb különbség talán universal serial interface használata.
Ezekhez kifejezetten erre a procira való könyvtárakat kell használni.Amúgy minden egyéb platform független kód ami az Arduino framework-ből származik, az nyilván lefordul.
-
Janos250
őstag
"Amúgy arduinoról nem szívesen hajtok semmit, max opti izolátorokat."
Na, én erre használom az ESP8266-ot, azaz optocsatoló helyett.
Például az egyik dobozban akkuról hajtva a hőmérők konverterei, és az egyik ESP, ami küldi a jelet WiFin a másik dobozban lévő másik ESP-nek, ami kapcsolgatja az erősebb (48 V 3A) delejt. -
// Chaka //
tag
Ha strapabírót kell csinálni, az vagy nemkiciócó, vagy sok melóval jár. A sok melós változatban át kell rágni magadat a cuccosok adatlapjain, és olyan elemekből felépíteni, amiket azok javasolnak. Én a kettőt vegyítem. A 230V-os tápegységet nem merem megcsinálni, de minden mással rendben vagyok. A linkelt DIN sínes tápegységet többtízes gyártási sorozatnál nem ajánlanám, mert már hallottam egy kollégától a korai haláláról. Bár az ennél sokkal drágább cuccosok is megdöglendhetnek 10-15 év után. Na ezzel most jól ki lettél segítve
-
Teasüti
nagyúr
Nem. GND-t azt GND-re értem az áramkörön. Hálózati feszültséghez még annyira se értek, mint amit az alacsony feszültségű áramkörök kapcsán megtanultam, de nekem mintha úgy rémlene a védőföldnek nem az a szerepe, hogy te arra kösd rá az árnyékolást és a bypass diódákat. A védőföld az kizárólag érintésvédelemre szolgál tudtommal. De ne hallgass rám, majd vmelyik villanyos fórumtárs kiigazít.
-
Teasüti
nagyúr
ESD diódákat vagy chip-et ha az van, GND-re szokás kötni. Elhelyezni meg az interfész után közvetlenül kell.
Kapacitív érzékelők kapcsán olvashatsz sokat ESD-ről, ugyanakkor minden ember által fogdosott áramköri elemre tenni kell védelmet szabvány szerint.Árnyékolás is GND-re megy alapesetben, ha nem tévedek.
Én USB port beültetése kapcsán olvasgattam erről, ott nem egészen értettem a dolgot, mert megkülönböztetnek több GND-t is. Úgy tűnt az usb kábel árnyékolása GND2-re és GND3-ra kapcsolódik. Bármit is jelentsen ez. -
Teasüti
nagyúr
Fura. Annak a relé modulnak pedig teljes körűnek kellene lennie, minden szükséges ellenállás és dióda látszik rajta. Esetleg ha van szkópod akkor érdemes volna rámérni a bemenetre milyen jelet is kap.
Előbb biztos a hibát keresném meg, mielőtt alkatrészeket vásárolnék.
Éles használatban meg tervezéskor gondoskodni kell az ESD védelemről is!
Ez minden kezelőszerv esetén minimum egy védődiódát jelent. -
Vladi
nagyúr
Ezt a leírást nézem most: link.
Egy 10k-s lehúzót tesz be és kész. Ez így jó lenne?
Már csak azt kellene kitalálnom, hogy milyen ssr kell, mi az áramkör amit kapcsolgatok.
váltó, vagy egyenáram.Talajdonképpen egy omron időrelét kell elindítani a kapcsolással.
-
olli
tag
Nem a vezetékekben kialakuló áramlökésekre, a rádiófrekvenciás zavarra érzékeny, vagy sima program hibára, vagy ..... bármire lefagyhat.
Fűtés vezérlőt működtet egy nano lap, SSR relére cseréltem néhány power relét, csökkent a lefagyás, de:
jelenleg a vezérlés nem fut, csak hőfok mérés szenzorokkal, RTC, LCD, igaz van aktív nagyfeszültségű környezet és néha így is lefagy.
Más összeállításban az I2C LCD fagyogatott. -
Teasüti
nagyúr
Megszakításnál pedig ez az alapeljárás - sok helyen külön felhívják rá a figyelmet, hogy legyen minél rövidebb, lehetőleg egyetlen parancs csupán -, hogy csak egy változót állítasz be (más néven flag-et, ahogy Tankblock hivatkozott rá). Így a lehető legrövidebb ideig tart a megszakítás a loop különösebb hátráltatása nélkül.
A flag elnevezés meg onnan ered, hogy ez az eljárás egy jelzést ad a loop-nak, amiben már szabadon azt csinálunk vele, amit akarunk. Majd ha bevégeztetett a feladat, akkor utána nullázod a flag-et.
Bizonyos feladatokban, mint mondjuk az input capture, ez a flag lehet számláló is és így nézne ki a dolog:void nyissz() {
piros++;
} -
Tankblock
aktív tag
Hello,
Rajzold le a folyamat ábrát, mit és mikor csinálsz, hogy jutsz egyik állapotból másik állapotba milyen feltételekkel. Mi van ha konkurál a 2 gomb..
Majd ezt szépen állapotgépben implementálható.
Mivel emberi felhasználásra lesz tennék bele mindent tiltó gombot is( Nagy piros gomb)
-
Teasüti
nagyúr
Unatkoztam, remélem nem haragszol meg érte ha esetleg ez volna a megoldás!
Nem igazán emlékszem a kapcsolási rajzodra, de a bemenetek alapból Vcc-re vannak húzva és GND-re kapcsolsz, ugye? Meg hardveres prell mentesítést használsz, ugye? Mielőtt interrupt özön keletkezik egy gombnyomásra.
Hosszú idő után ez az első programom, így lehetnek benne hibák. Pár dolgot ki kellett keresnem, mert nem emlékeztem rá.
Arra figyelj, hogy szünet után azonnal nyissz lesz, ha lejárt a ciklusidő!#define vido 19890 // EZ A LENYEG! Ez a vágási idő ciklus. kb 51 az 1 mm-t jelent. millisecundum egyébként.
unsigned long currentMillis, previousMillis;
bool piros;
void nyissz() {
piros = true;
}
void setup() {
pinMode(3, INPUT); //piros
pinMode(2, INPUT); //mikro
pinMode(13, OUTPUT); //led
pinMode(6, OUTPUT); //relé
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), nyissz, LOW);
}
void loop() {
currentMillis = millis();
if (currentMillis - previousMillis >= vido || piros) {
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
Serial.println("Vágtam, kövi.");
previousMillis = currentMillis;
piros = false;
}
if (digitalRead(2) == LOW) {
while (digitalRead(2) == LOW);
}
} -
Tankblock
aktív tag
Hello,
Szerintem koncepcionálisan van elbökve a kód.
interruptba nem illik/ szabad kiíratást rakni.
Az interrupt kódjának illik minimálisnak lennie ha lehetne késedelm delay nélkül.....Ha az időt (previousMillis ha jól látom )kiteszed volatile unsigned longba, akkor millis fv segítségével aktualizálhatod.
Én a logikát a loopba raknám és a Interruptokba csak flageket állítanék és állapotgépeket pörgetnék a loopba, megfelelő feltételek melett, és a delay-t helyett for időkülönbséget néznék az állapogépben.....
De ez én vagyok, remélem más ad jobb tanácsokat. -
Vladi
nagyúr
Hurrá! Félig működik a kódom!
Oké egy kapcsos zárójelet rossz helyre tettem, de sikerül debugolni.
A nyissz részt még nem próbáltam. Oda egy megszakításon belüli időzítést a tavir tananyagban találtam:
for (long i=0;i<1250000;i++){
//Serial.print("6");
asm volatile ("nop"::);
}Már csak a számlálót kellene nullázni. Lécihelp!
Így fest a kód most:
const int piros = 3; //3-es pinbe dugva az azonnali vágó kapcsoló
volatile const int mikro = 2; //2-as pinbe van a hurka csináló gomb.é
volatile int alapled = 13;
volatile const int rele = 6; // a kapcsoló relé.
const long vido = 19890; // EZ A LENYEG! Ez a vágási idő ciklus. kb 51 az 1 mm-t jelent. millisecundum egyébként.
long previousMillis = 0;
void setup() {
pinMode(piros, INPUT); // a 10-es piros az bemenet lett
pinMode(mikro, INPUT); // a nyócas hurkázó is bemenet
pinMode(alapled, OUTPUT);
pinMode(rele, OUTPUT); // relé a 6-on kimenet
Serial.begin(9600);
attachInterrupt(0, fuggo, LOW);
attachInterrupt(1, nyissz, CHANGE);
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= vido) {
previousMillis = currentMillis;
// ??? e meg itt valahogy nem jó, át kell írni az időzítést és be kell gyűni az utána jövő kódot a blokkba.
digitalWrite(rele, HIGH);
delay(100);
digitalWrite(rele, LOW);
Serial.println("Vágtam, kövi.");
}
}
void fuggo(){
while (digitalRead(mikro) == LOW)
digitalWrite(alapled, HIGH);
}
void nyissz(){
digitalWrite(rele, HIGH);
for (long i=0;i<1000;i++){
Serial.print("6");
asm volatile ("nop"::);
}
digitalWrite(rele, LOW);
Serial.println("Vágtam, kövi.");
//??? itt még nullázni kellene
} -
csubuka
addikt
Sajnos ebben a részében a dolgoknak nem nagyon vagyok járatos. Mármint az elektronika részében, optoizolátorok, ilyesmik...
Van piaci drága megoldás (PI-szabályzó alapokon), amit holnap össze tudnék dugni, ehhez még külső cég sem kell szerencsére. A fix, szabványos CO2 szint egy kis tárgyalóba kellene, ahol sok ember van, de nem mindig. Ha vannak, akkor viszont hamar elfogy a levegő
Jelenleg simán fel van csavarva az EC venti és úgy megy egész nap. Pazarló és gáz, hogy egy EC venti ki van akasztva gyakorlatilag maxra, holott a speed controller benne van. Mondjuk sokakat ez nem zavar, csak engem. Ennek a fordulatszámát kellene normális módon függővé tenni attól, hogy mennyire lélegezték el az emberek bent a levegőt. Ez egy elterjedt megoldás amúgy.
Bejött egy kis időszak, hogy kifogyott a munka, ilyen másfél éve nem volt, megcsúszott a menedzsment
Ámde alkalmam lenne kb. egy hetet belerakni ebbe, mert érdekel és még mert ezzel valami hasznosat is tehetnék, ami fejleszt engem. Egy hét után válna katasztrófává kb. a dolog anyagi oldala, mert lenyomnánk a szellőzőrendszer többi elemét gyártó cég polcról leszedős - amiben ugyan nem lenne vicc, de menne legalább felteszem - rendszerének árát az elpazarolt bérköltséggel.
Ha csak megközelítjük azt az még okés, mert érdekel a téma.
(#6992) gyapo11: Köszönöm szépen! Sajnos gépészeti irányultsággal ebből nem nagyon jött le sok minden. Ámde igyekszem utána olvasgatni ezeknek akkor.
Vannak olyan ESC-k, amik az ilyen drónok rotorjait hajtó motorokat szabályozzák. Azokat simán lehet valahogyan csak bedugni az Arduino-félékbe és mennek szépen, változtatják a fordulatszámot. Ezek az EC ventik is hasonlóak, illetve teljesen azonos koncepció mellett mennek szerintem. Csak azért gondoltam, hogy valahogy megoldható a PWM-jel kiküldése a motor vezérlőhöz.
-
S.Milan
csendes tag
-
Most néztem meg a kódot, amit linkeltél, de szerintem nem ez az általánosan használt módszer a pergésmentesítésre, mert nagyon zavarérzékeny, plusz az a delay sem néz ki jól a kódban.
Sebesség szerint szerintem úgy tudnád összemérni a két módszert, ha ugyanazt a gombot két lábra is rákötnéd, egyikre direktben, a másikra meg kondival, és programból mérnéd a különbséget. Bár ezt nem tudom hogy lehetne megoldani, hogy egyik ne zavarja a másikat. -
Teasüti
nagyúr
Megfelelő szintillesztéssel igen. De érdemes inkább galvanikus leválasztást alkalmazni, vagy továbbra is izolált környezetet teremteni vagyis a gombokkal továbbra is a lap saját GND-jét és 5V-ját kapcsolnám a GPIO-ra. Egy csomó fejfájástól kíméled így meg magad.
Mi lenne az elképzelés egyébként?
-
Janos250
őstag
Hogy ne keseredj el, elmesélek egy arduinos történetet:
Valaki kérdezte, hogy nulla előismerettel érdemes-e elkezdenie arduinoval foglalkozni. Mondtam, igen, persze, segítek. Kinézett egy legegyszerűbb kapcsolást. Mondtam, ne a fehér dugdosós panelon rakja össze, mert az hol érintkezik, hol nem, hanem egy régi "sok lyukas" panelbe rakja, talál valamelyik fiókomban ősidőkből megmaradtat.
Belerakta. Beledugdosta, hozta megmutatni. Mondom cinezni is kéne a lábakat.
Jön újra, hogy nem működik, nézzem már meg.
Az átdugdosott alkatrész lábak végére tett egy-egy cin pöttyöt, nem a panel rezéhez forrasztotta.
Tulajdonképpen igaza volt, csak azt mondtam, hogy cinezni is kéne, azt nem mondtam, hogy a panelhoz.Szóval, idővel belejössz, ha nem dobod el a kalapácsot!
Új hozzászólás Aktív témák
Hirdetés
- Cooler Master MWE Bronze V2 750W 80 PLUS Bronze
- MSI MPG Z390 GAMING EDGE AC Alaplap + Intel Core i7-8700K
- ASRock Radeon Challenger Pro RX 6700 XT 12GB OC Videokártya
- MacBook Pro 16 A2141 EMC 3347 27%, 16.1" Retina LCD IPS, i7-9750H, Radeon PRO 5300M, 16, 500, gar
- ASUS GeForce GTX 1070 Ti 8GB GDDR5 256bit
- 121 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
- Eladó Apple iPhone Xr 64GB fekete / ÚJ KIJELZŐ / 100% AKKU / 12 hónap jótállással!
- Samsung Galaxy A23 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- VÉGKIÁRUSÍTÁS - REFURBISHED - Lenovo ThinkPad 40A9 docking station
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged