posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirka
Účastníktak jsem se na ten modul díval a je tam použit IRF520. Ten má při Ugs =4V proud cca 0,2A až od Ugs = 5V má skoro 3A. viz datasheet
https://arduino-info.wikispaces.com/file/view/irf520.pdf
list č.4 vpravo nahoře. Proto to nefunguje jak má.
Vidím 2 cesty:
Buď použít jiný modul např. ten 4. na tomto odkazu:
https://arduino-info.wikispaces.com/Brick-4ChannelPowerFetSwitch
má vstupy řešeny přes optočlen a tím spíná vyšší napětí než toje 3,3V.
Druhá varinata je udělat vlastní modul. ćetl jsem že si nevěříš v dělání tiš´táků, ale věř mi že pomocí univerzálního PCB ( třeba http://www.santy.cz/vyvojove-desky-c3/pcb-otvory-1mm-oboustranna-deska-30x70mm-i161/ ) by jsi to zvládnul v pohodě. koupit pár součástek za cca 30kč, k tomu tu univ. desku 2x dvojsvorky do tiš´táku a za chvilku máš hotovo. Kliděn udělaj 1 část té 4 desky. jestli se na to necítíš, tak určitě najdeš v okolí nějákého bastlíře, nebo střední školu, kde se s nějákým mistrem určitě domluvíš…posjirka
Účastníkmyslim ze je na miste otazka na co to potrebujes. jestli pro pwm regulacu jak z textu dedukuji tak je treba uvest i o jakych vykonech se bavime. ve vetsine pripadu staci obycejny bipolarni tranzistor a lidi tam cpou fety ktere se stejne naplno neotevrou.
posjirka
Účastníktady máš několik možností:
– buď jej vzít někde jako MP3 nahrávku a tu pak arduinem spouštět a výsledek měřit
– vygenerovat nějákým jednoduchým zapojením (te´d nevím jestli se šum na diodě projevuje jako růžový nebo bílý)
– vygenerovat jej z arduina pomocí nějákého algoritmu změny frekvence (nastavení čítače)
pár rychlých nálezů na netu:
http://www.instructables.com/id/White-noise-sound-machine-for-under-20/step3/Create-custom-white-noise/
http://arduino.stackexchange.com/questions/6715/audio-frequency-white-noise-generation-using-arduino-mini-pro
http://fritzing.org/projects/sleepduinojen poznámka: pokud použije arduino na generovaní šumu asi mu nezbude moc prostoru pro analýzu. Stejně bych radši použil Raspberry PI
posjirka
Účastníkzátěž byl 1k takže cca 1mA ale nepředpokládám zhoršení když je jako oddělovač použitý OZ ze zpětnou vazbou
posjirka
Účastníktady je fotka pro 150/255 zvlnění tu velké, ale jak říkám stavěl jsem to z toho co bylo po ruce.
Attachments:
posjirka
Účastníktak jsem to dnes odzkoušel :
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgzapojení jsem výrazně zjednodušil pro rychlou zkoušku (nebyl tam trimr, kapacity co přišli pod ruku, OZ by TL072, …) Trochu jsem měl strach z toho abych neodpáli Arduino, když PWM signál je spojný přes odpor z výstupem až 10V.
No výsledek je, že se mi to jevý jako funkční řešení, jen oddělit vstup arduinu od zbytku zapojení pomocí optočlenu.
dosáhl jsem rozsahu 0-9V (12V nájení) což při podmínkách testu je zcela vyhovující.
Linearitu jsem netestoval ale šlo mi o výslednou křivku. Testoval jsem nastavení 80/255, 150/255, 250/255 .
Zvlnění tam je Při 3 V to bylo cca 0,5V zvlnění ale používal jsem vstup s 500Hz PWM signálem. Se zvyšujícím se napětím zvlnění mizelo až při 9V mělo cca 0,1V.Attachments:
posjirka
Účastníkřekl bych, že ten kondenzátor dělal impulz na zavření tranzistoru méně strmý/šikmý a tím pádem to mělo takový pozvolnější průběh. Je třeba to vyzkoušet, ale když jsem se díval na ten převodník na ebay tak mi připadjí ty součástky velmi podobné tomu c jsem zkoušel simulovat. Ono se to totiž prodává i u nás v ČR. :
http://www.c-n-c.cz/viewtopic.php?f=56&t=8650
http://www.cncshop.cz/prevodnik-pwm-na-0-10vv podstatě podle součástek podobné zapojení jako toto:
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgjen to má navíc optočlenem oddělené .
posjirka
Účastníkvšechno jde. Jen když se dívám na to řešení je docela „not friendly“ pro tuto funkci.
Kdyby spoužil celý krok pro otáčení a né půl kroky mohls to vše dělat ve smyčce Loop, jen posunem bitu a reagovalo by ti to kdy budeš potřebovat. Takto musíš použít před definicí proměnné příkaz „volatile“ ( https://www.arduino.cc/en/Reference/Volatile ) aby ti reagoval i v případě přerušení hlavní smyčky a nastavit přerušení na pin tlačítka ( https://www.arduino.cc/en/Reference/AttachInterrupt ). Toto přerušení přeruší hlavní program a vykoná funkci, na kterou se v definici přerušení odkazuješ. Až skončí tato funkce, smyčka hlavního programu se opět rozjede tam, kde skončila a v klidu pokračuje. Jen musíš hlídat aby se ti nezacyklila. To nastane, kdy funkce volaná přerušení trvá déle než interval mezi přerušeními. Můžeš dokonce ragovat zvlášť na na změnu stavu, na přechod na log. 0 a na přechod na log.1.posjirka
Účastníkto bude asi něco podobného. jen mám trochu obavy z té nominální frekvence. Tady uvádí 1-3kHz, arduino má defaultně cca 450Hz.
posjirka
Účastníkrád jsem pomohl 🙂
posjirka
Účastníkto bohužel není muj boj. Tuto část jsem převzal z tveho kodu.
NAUČTE SE POUŽÍVAT PÁROVÉ ZNAČKY „CODE“posjirka
Účastníkprosím používejte párové značky CODE, jinak je kod špatně formátovaný a zároveń není použitelný.
zkus tento upravený kod:// Krokový motor a driver #define tlacitko 2 // cislo pinu s talcitkem #define rychlost1 1 // prvni -standratni rychlost #define rychlost2 2 // rychlost pri stisku tlacitka // čísla pinů pro digitální výstupy const int in1 = 8; const int in2 = 9; const int in3 = 10; const int in4 = 11; // proměnná pro nastavení rychlosti, // se zvětšujícím se číslem se rychlost zmenšuje int rychlost =1; // int uhel = 90; void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(tlacitko, INPUT); } void loop() { if(digitalRead(tlacitko) == 0){ // kdyz je stisknuto tlacitko rychlost = rychlost2; // sniz rychlost } else { // jinak rychlost = rychlost1; // pouzij normalni rychlost } // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000); } // zde následují funkce pro volání jednotlivých // kroků pro otočení po či proti směru hodinových // ručiček void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1(); } // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); }
posjirka
Účastníkto je vcelku jasné. bavíme se o proměnné typu byte která nabývá hodnot 0-255.
Když dělíš -5 st. c tak ti vyjde 255-5 = 250 což je v hex. kodovani rovno „FA“.
zkus toto:#include <OneWire.h> #include <DallasTemperature.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 2 #define DIO 3 TM1637Display displej(CLK,DIO); const int pinCidlaDS = 4; // nastavení čísla vstupního pinu OneWire oneWireDS(pinCidlaDS); DallasTemperature senzoryDS(&oneWireDS); byte teplota=0; int rele=8; void setup() { pinMode(rele,OUTPUT); Serial.begin(9600); senzoryDS.begin(); displej.setBrightness(8);//jas displeje 8-15 } void loop() { senzoryDS.requestTemperatures(); teplota=senzoryDS.getTempCByIndex(0); Serial.print("Teplota cidla DS18B20: "); Serial.print(senzoryDS.getTempCByIndex(0)); Serial.println(" stupnu Celsia"); // pauza pro přehlednější výpis delay(1000); if(teplota>25){ digitalWrite(rele,LOW);//sepne rele } else { digitalWrite(rele,HIGH);//rozepne rele } uint8_t vypis[] = { 0, 0, 0, 0 };//nastavení displeje na zobrazení teploty if(teplota<1){ vypis[0]=(SEG_G); } teplota = abs(teplota); // prepocet na absolutni hodnotu vypis[1]=displej.encodeDigit((teplota/10)/10);//teplota stovky vypis[2]=displej.encodeDigit((teplota/10)%10);//teplota desítky vypis[3]=displej.encodeDigit((teplota%10)%10);//teplota jednotky displej.setSegments(vypis); }
jinak pro vkladani kodu používej párové značky CODE. Je to to tlačítko v horni části odpovědi s nápisem CODE. jinak se ti špatně vloží text a není pak čitelný
posjirka
Účastníkpredpokladam ze mas spravne propoje mezi arduinem a prevodnikem.
posjirka
Účastníka co zkusit nechat zapnout a vynout podsviceni lcd? to taky jede na prevodnik a pokud ani to nepojede je spatne knihovna nebo prevodnik. udelej proste jednoduchy blik program. kdyby toto fungovalo tak nektere lcd jsou citlive kdyz nemaji volne piny uzemnene. je otazkou jak je to reseno na prevodniku….
posjirka
Účastníkprotoze display ukazuje pouze cisla jako jednotky tudiz neumi zobrazit desetina mista. dokonce ani nema jak protoze destinna tecka tam tusim neni pouze dvojtecka. je tu varianta zobrazit 10 nasobek teploty a tim bude videt i jedno des. misto. zobrazovat ale des. mista u cidla s presnost 1 st.c je holy nesmysl ktery delaji i zkusenejsi programstori (bez urazky). minus tam tusim jde zobrazit jako znak. ja to resil tak ze zprava mam „C“ pa jednotky desitkya posledni stovky nebo minus. stejne cidla ds18xxx umi min -55st.
posjirka
Účastníkbez kodu ti asi nikdo neporadi. predpokladam ze tam mas nejakou promennou ktera urcuje delku mezery mezi kroky. co tak podminka jestli je stsknute tlacitko tak nasv promennou na x jinak nastav na y?
posjirka
Účastníkpárkrát jsem něco takového zvažoval a vždy se objevilo něco závažnějšího. jinak klasické časomíry fungují, takže to není neřešitelné. Proč je tam ten bezdrátový přenos?
posjirka
Účastníkjá byhc zkusil toto:
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpg
zkoušel jsem to simulovat a strašně dlouho se to přepočítává = nemám na to čas.
Uvidíme jak budu stíhat v pátek a kdyžtak bych to vyzkoušel naživo …posjirka
Účastníknavíc simulace je pouze orientační. Jde to poznat třeba při simulaci multivybrátoru se 2 tranzisotry. Po sepnutí napětí se nerozjede, protože mají oba dva absolutně stejné zesílení, takže se žádný nespustí dřív.
RC čeln jako převodník PWM na analogovou honotu samozřejmě funguje. Jen když si představíte charakteristiku trnazistoru, který při cca 0,7V začne otevýrat a při cca 1,2V je naplno otevřeny, tak tam není moc prostoru pro regulaci v pásmu 0-5V, kterí by se na RC členu nastřádali.
posjirka
Účastníkchlapci nechci vám do toho kecat, ale to co tu ted řešíte nemá nic společného s převodem PWM na analogové napětí. Dejte si do toho zapojení osiloskop a uvidíte co tím myslím. Ten tranzistor je zapojený jako spínač. To znamená, že podle vstupního signálu přizemńuje zátěž. Kondenzátor nemá v podstatě žádný vliv, protože v tomto zapojení není jeho charekteristika lineární a přechází ze stavu rozpojeno do saturace.
Voltmetr měří střední napětí, proto se vám zdá, že to hezky reguluje.
Kdyby zátěž byla v emitoru tranzistoru tak by to možná šlo. V tu chvíli by totiž tranzistor fungoval jako proudový zesilovač a oddělil by RC člen od zátěže … můžete se podívat tu:https://circuits.io/circuits/2285260-pwm-to-analog-nefunkcni
posjirka
Účastníkto vojtech:
v pohode, nekritzuju, nenapomínám a i já občas ujedu. jsem jen lidi 🙂posjirka
Účastníkogledne mereni teploty: je treba dat cidla do urovne 80-120cm na stenu kam nesviti moc slunce a ani neni topeni. voli se vetsinou nejstudenejsi stena.
jako zaklad pro zkousku souhlasim s volbou arduino mega , dotykovy lcd, cidla releovy modul. cidla dallas jsou takovy zvlastni a v pripade nevhodneho naprogramovani mohou zbytecne zdrzovat funkci celeho programu.je treba postupovat v klidu a logicky. pro start je to moc dobry projekt a volba dotykoveho lcd ti pomuze z omezeneho reseni pres 2×16 lcd a tim padem i horsi nastaveni. mem doma taky dotykovy lcd a ma nekde spatny spoj a 5 radku mi vynechava. …posjirka
Účastníkvojtechu ty zkratky nejsou moc dobre. 1w a uC bych taky lustil ? prosim zkuste se drzet zazite terminologie 1-wire pripadne one-wire a uprocesor. spis to pisu pro cady budouci kdy pak lidi toto forum budou potrebovat pro svoje reseni a budou se blbe orientovat.
jinak k prohektu. zvolil bych spis reseni komunikace pres rs485 nebo pres wifi. souhlasim s dislokovanou jednotkou pro kazdou mistnost.
kszdopadne bude treba silove napajeni pocitam ze tak 5v/1 A minimalne. lepsi by bylo 12V a kazda stanice by mela vlastni spinany zdroj. urcite bude nekdy treba vyssi napeti. ohledne attiny: zjistil jsem ze nez pouzivat omezene attiny tak za podobne penize se da koupit v arduino mini. ted jsem pouzil c twplomeru taky attiby jen kvuli mistu v krabici.
1-wire: i arduino muze byt jako 1-wire slave zarizeni. jsou na to knihovny. pri delsich vzdalenostech bude klesat pull up odpor az na 1k a nejsem si jisty spolehlivostiposjirka
Účastníkto musíš vědět ty. jestli tam ten signál je nebo neni …
posjirka
Účastníkadd post https://bastlirna.hwkitchen.cz/forum/tema/ovladani-klapky-privodu-vzduchu/page/2/#post-10204
ty vstupy DI slouží pro připojeník arduinu, prostě 1 vystup připojíš na „0V“, 1 výstup na „2,4V“,… tím že je sepneš tak vlastně zkratuješ zenerovu diodu a tím pádem ovlivíš výsledné napětí proti zemi.add post https://bastlirna.hwkitchen.cz/forum/tema/ovladani-klapky-privodu-vzduchu/page/2/#post-10206
obávám se, že ti vstup 6 jde do zkratu.posjirka
Účastníkmisto ir bych pouzil laserove ukazovatko. ma vetsi intenzitu a pujde lepe odstinit na slunci. na druhou stranu musi byt presne zamereno. wifi modul je fajn ale asi bych spis pouzil neco na 2.4ghz. moduly existuji a diky pridavne antene maji i dobry dosah.predpokladam ze logika bude takova ze start/cil je pouze vysilac informace a vse ostatni jsou autonomni prijimace. stejne bych to dal do 2 krabicek… start cil jedna …. display s pc druha.
posjirka
Účastníkne ze by to neslo. muzes udelat to same co napr. cidla dallas ds18xxx . udelej treba 5 mereni a z toho prumer. trochu lepe programatorsky: vytvor pro mennou teplota. vynuluj ji a 5x pripocitec merenou teplotu. vysledek vydel 5 a je to.
posjirka
ÚčastníkBlindP byl rychlejší 🙂
posjirka
ÚčastníkDiavolino je jen další derivát Arduino UNO Pro.
klidně použij klasicé uno. verze PRO jsou bez převodníku USB ale ve výsledku zjistíš že dáš radši 25 kč navíc a můžeš to kdykoliv přeprogramovat přes USB než shanět ICSP programator.použij klasice uno nebo jeho klon.
-
AutorPříspěvky