A mai nap is ékesen bizonyította, mennyivel egyszerűbb a fejlesztés néhány fázisa oszcilloszkóppal. Időzítés mikroszekundum alatti tartományban megoldva 5 perc alatt.
USB-ről nem illik relét hajtani, pláne úgy, hogy az Arduino is arról megy. Mérj rá a lábra, amit a relé optocsatolóját hajtja, hogy van-e rajta változás, amikor a gombot nyomogatod. Ha van, akkor vagy az optocsatoló, vagy a relé rossz és/vagy nem jó a táp neki. Ha a relé kapcsolásakor esik a tápfeszültség, akkor a táp gyenge (ez elég valószerű, azok a relé breakout boardok, amik nálam jártak, rendre bőven 50 mA feletti áramot szedtek behúzott állapotban.
Ha hosszútávra tervezel, mindenképpen külön táp kell neki, mert nagyon érzékeny rá. Eleinte én is boardról fejlesztgettem jobb híján, de nem ajánlatos.
A reléket meg mindenképpen optocsatolva külön tápra, tapasztalat, rengeteget szenvedtem...
Egy relé kapcsolásának egyszerűnek kellene lennie. Ha minden jól van deklarálva, és ha jó lib-et használsz, akkor mennie kell.
String message = myNextion.listen(); //check for message
if (message == "65 0 d 1 ffff ffff ffff"){ digitalWrite(rele5, LOW); // Relé5 (Elszívó) On/Off }
if (message == "65 0 c 1 ffff ffff ffff"){ digitalWrite(rele5, HIGH); }
Emlkszem, hogy a Serial2-höz valamit át kellett írni a library-ben, és én is sokat szenvedtem vele.
Az általam használt programban, én nem string ként használom a változót, amit állítani akarok, mivel felvetődött bennem, hogy ha valami oknál fogva nem menne át az adat, a kijelzőn már növelt értéket látnék, de a programban hibás adattal számolna. Ezért a Nextion-on egy helyi változót deklaráltam va0-néven, ami a + gomb érintésére hozzáad egyet, - ra kivon belőle. Aztán csak kiíratom a visszaérkezett adatot, tehát biztos, hogy az van a kijelzőn amivel számolok.
Mondjuk elméletileg működnie kellene text-el is.
int value = myNextion.getComponentValue("va0"); cel = value * 50; cel_old=cel;
Én azzal kezdeném, hogy teleraknám a programot Serial.print-el és a message-t is kiíratnám. Ha nem jön semmi gombnyomásra akkor a kommunikációban van a hiba. Ha megnyomod a gombot villan az Rx led?
if((second()==0) or (second()==10) or (second()==20) or (second()==30) or (second()==40) or (second()==50)) { krp(); //relay(); paratart(); //páratartalom blokk } // delay(4000);
String message = myNextion.listen(); //check for message
Azért szerettem volna nagyobb tápot, mert azzal akartam meghajtani a 4-es relé panelt és egy esp8266-ot is a MEGA2560 mellett. De valószínű, hogy a MEGA és a wifi megkapja a az általad linkelt tápot vagy annak egy erősebb 1,5-2A -es verzióját, a relének pedig veszek egy 5V 6A 30W os tápot http://www.ebay.com/itm/371514993202
A relék meghajtásához elvileg jónak kell lennie...
Az erősítő fokozatot ki lehet szedni a végéről, a helyett egy erősebb MOS-FET, ami 200 kHz-ig megy (ez nem biztos, hogy egyszerű feladat lesz), a frekvencia kijelzésére meg egy valamilyen egyszerű frekvenciaszámoló kijelzős breakout.
Itt az Arduino irreleváns, csak mint egy oszcilloszkóp működik (ha jól sejtem). Az NE555 egy timer, a filmben a potméterrel csak az időzítést állítja az ember.Mit szeretnél csinálni?
Attól függ... Ez tisztán időzítés kérdése. Ha nem akarsz mellette semmi mást csinálni, akkor megoldható, hogy az egyik poti a kitöltési arány, a másik a frekvencia. Ha nem időérzékeny a rendszer (vagyis jó nagy tűrést elbír), akkor delayMicroseconds() utasításokkal meg lehet oldani. Két dolgot ne várj tőle: teljesen pöpec jelformát és finom lépésközt. 1 Hz ugye delay(500); 100 Hz delay(5); 1 kHz pedig delayMicroseconds(500). A gyakorlatban azonban a kristály és a lapka precizitása sokat ronthat a dolgon. Ez pl. delayMicroseconds(5) beállítás screenshotja, ahol a le és a felmenő ág között egy osztásnak kellene lennie (nem pedig 2,5-nek), ráadásul néha-néha (gyakorlatilag folyamatosan) vannak kb. 18 mikroszekundumos ugrások (ide van állítva a trigger). És ez "csak" 40 kHz környéke.
De vannak témába vágó könyvek elég szép számmal, talán még az Arduino.cc-n is. Jobbára (oké, inkább szinte kizárólag) angol nyelven. Van legós könyv is (lego + Arduino).