posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
hlavně že se an to přišlo … gratuluju
posjirkaÚčastníkviděl bych to na špatný řadič USb nebo zkrat na desce.
Ještě se podívej jeslti máš originál, nebo klon s Ch340g …posjirkaÚčastníkjen taková ukázka co se s tím dá dělat:
http://arduino.sk/viewtopic.php?f=3&t=158&sid=981171771b9260b43407becd96a2e9d7posjirkaÚčastníkno viděl bych 3 možné cesty:
1. vykašlat se na arduino a jít analogovou cestou:
je to jednodušší , bez programování a není tam co pokazit (kromě síly vstupního signálu)
2. jít cestou analýzy audio signálu (tady je lepší použít třeba Arduino Zero nebo něco s vyšším výpočetním výkonem, je třeba dost vzorků pro analýzu a následně to projít).
http://www.instructables.com/id/Arduino-Processing-Audio-Spectrum-Analyzer/
3. použij arduino jako doplněk k PC, ze kterého hudbu přehráváš. Použitý plugin v PC je schopen vše zanalyzovat a poslat data do Arduina, který by fungoval jako spínač pro konkrétní světla:
http://www.instructables.com/id/How-to-Make-LEDs-Flash-to-Music-with-an-Arduino/?ALLSTEPS
http://www.instructables.com/id/Arduino-RGB-LED-Music-Lights/?ALLSTEPSposjirkaÚčastníkpodle mě je problém ve 2 stupních:
1. proč znovu v každé smyčce LOOP inicializuješ LCD? – za mě vypustit stačí v SETUP
2. Na co potřebujeě refresh 100ms myslím si že 1 – 5s jsou úplně v pořádku, takže ten delay(100); změň na delay(2000);add.1. při inicializaci se ti smaže celý text na LCD zbytečný rušivý element
add.2. 100ms = 10 Hz obnovovací frekvence + doba měření teploty to oko ztěží zareagujeposjirkaÚčastníksorry za opožděnou reakci (dovolená). Já takto občas něco programuju a funguje mi to v pohodě.
Zkusím to popsat bod po bodu a projdi si to taky tak. Přes SEEEDUINO (klon Duemilanove) budu programovat klon Arduino MINI PRO.
1. přes USB kabel propojím SEEEDUINO s PC
2. vyberu FILE – EXAMPLES – ARDUINOISP
3. vyberu TOOLS – BOARD – Arduino Duemilanove w/ATMEGA328
4. vyberu FILE – UPLOAD
5. až dojede do konce odpojím od PC
6. v SEEEDUINO dám kondenzátor 10uF/16V mezi reset (+) a GND (-) – kvůli automatickému resetu
7. propojím drátky SEEEDUINO – MINI
+5V – +5V
GND – GND
D13 – D13
D12 – D12
D11 – D11
D10 – RESET
8. v programu Arduino IDE vyberu FILE – EXAMPLES – 01.BASIC – BLINK
9. vyberu TOOLS – BOARD – ARDUINO MINI W/ATMEGA328
10. přes USB připojím SEEEDUINO s PC
11. vyberu FILE – UPLOAD
12. hotovo ….posjirkaÚčastníkprostuduj si toto:
https://pihrt.com/elektronika/295-arduino-icsp-programatorposjirkaÚčastníkpředpokládám, že bylo myšlno spíš jiné řešení, než stávající. T5eba pomocí GSM modulu = prozvoněním tohoto telefoního čísla, nějákým jiným ze seznamu by se otevřela brání … chápu to správně?
posjirkaÚčastníkmáš jej zapojený obráceně.
Být tebou použiju NPN tranzistor, lépe se vysvětluje funkce.
Jde totiž o to, že NPN tranzistor spíná při připojení kladného napětí na bázi proti emitoru.
PNP funguje stejně jen reaguje na záporné napětí báze proti emitoru … .
Zapoj to u NPN tranzistoru takto:
+5V dej na motor (pozor dej tam i antiparalelní diodu ať si nezu… Arduino i tranzistor)
Druhý pin motoru dej na kolektor tranzistoru (BC337)
Emitor tranzistorudej na GND
Dej odpor mezi bázi tranzistoru a pin Arduina nebo +5V.To ti fungovat bude a nebudeš s tím mít problém. Pokud ti jde o ztráty v tranzistoru můžeš použít typ (MOS) FET.
posjirkaÚčastníka neměla by ta báze tranzistoru být na nějákém funkčním pinu Arduina 🙂
Ideálně s PWM výstupem …posjirkaÚčastníkto letakp:
dej sem kod cos napsal, třeba příjdeme na příčinu. Osobne si myslím, že je to jak psal vnouzirozbijsklo . pokud čas zobrazuješ jen na začátku smyčky loop() a začne se rozsvěcovat LED tak 255 kroků * 5s = cca 21 minut tj. doba kdy ti asi nereaguje ten LCD display. Zkus si ještě rozmyslet jak by vypadalo to zobrazení na LCD. klidně napiš jeden příklad a podíváme se na to.posjirkaÚčastníkřekl bych, že chyba je v toleranci použitých odporů.
Když jsem si zkusil vypočítat jak by to mělo vypadat při 100% přesných odporech tak jsou tam vcelku dostatečné odstupy. Při toleranci 1% by to neměl být problém i když tolerance adc převodníku je 1 lba. v těch nejnižších klávesach je odstup 4 kroky takže 3 +/-1. na to se da navázat. Jen jepotřeba krátký vodič, ideálně stíněný a stabilní napětí zdroje. Případně můžeš použít převodník pro I2c. Přepokládám, že tam máš zapoejný min. RTC modul …Attachments:
11.7.2016 v 23:26 odpověď na: Jak po stisku tlačítka zapsat a odentrovat hodnotu do serial boxu. #7689posjirkaÚčastníkdej sem prosím celý kod a hlavně ZAPOJENÍ. Připadá mi, že :
– buď používáš víc než 1 Arduino na 1 seriové lince (to by teoreticky ani nemělo jít)
– nebo se snažíš poslat si příkaz sám sobě uvnitř arduina.Předpokládejme, že je to ten druhý případ. V tu chvíli bych oddělil vykonání příkazu od čtení seriové linky. Vy tvoř funkci “ void provedAkci(int pocet) “ … a tu zavolej z funkce “ process_line() “ s počtem opakování.
Druhý přístup uděláš po stisku tlačítka = zavoláš tu samou funkcis tím samým počtem akci.
Pro to několikanásobné „stiknutí talčítka“ stačí použít podmínku aby po stisku reagoval na další stisk třeba až po 0,5s (pomocí funkce millis() si zjistíš aktuální strojový čas a po stisku s ho zapíšeš do proměnné. Tu pak porovnáš s aktuálním millis() a pokud bude rozdíl větší než třeba 500 tak reaguj znovu.Zkus si ten tvuj prvotní dotaz přečíst třeba po měsící. Myslím že ani ty sám sebe nepochopíš. Prostě člověk v 1 chvíli má myšlenku a zdá se mu, že na světě jen přeci jen ta jedna jediná varianta a nic jiného, tak proč se zdržovat nějákým složitým popisem. To nění kritika. každý z nás takto začínal a po čase pochopil, že je to prostě jinak a je třeba dávat ÚPLNÉ a CELISTVÉ informace. Jinak se mezi ssebou lidi zbytečně štěkají a k řešní to nepřispěje.
posjirkaÚčastníkPředpokládám, že se jedná o servopohony průmyslového charakteru a ty jdou ovládat i jinými způsobem. Např. 3 bod pohon vlatně jen spíná napájení na civky „+“ a „-„. má doraz takže se dá natvrdo překlopit na jednu stranu. Regulace je pak řešena tak, že přidáváš/ubíráš otevření/zavření ventilu. Polohu snímáš bu´d ponteicometrem na hřídeli pohonu, nebo se dá udělat, to, že např.1x za den/týden se nechá ventil úplně uzavřít (nechaš ho třeba 2 minuty jet na 1 stranu). Pak u každého pohonu máš jak dlouho mu trvá přejet z 0 na max. Stačí jen měřit čas jak dlouho spínáš tu a tu cívkua určíš si orientační polohu…
překlad 0-5V na 0-10V samozřejmě jde, je to jakš/takš lineární ale je to to co opravdu chceš?posjirkaÚčastníkněják tam nevidím to zpoždění 750ms mezi měřením …
ověřil sis hodnotu „hyst“-ereze jak se ti v daném čas mění,
Zkusil bych rozdělit program na měření, vyhodnocení s podmíněnou reakcí.
Abych to upřesnil:
měření máš vyřešené, ale v podstatě ti přímo ovlivňuje výsledek (sepnutí relé).
Já bych to vzal formou statusu. Použij proměnou stav a když bude měření vycházet na sepnutí dej mu honotu 1, jinak 0
Vyhodnocení – tady si teprve řekni zda ty statusy jsou v kombinaci vhodné pro pokračování sepnutí rele nebo ne. Navíc bych to řešil formou podmínky, že např, relé musí být sepnuté po min.3 cykly smyčky loop. Zave´d si proměnnou „pocitadlo“ a když je požadavek na sepnutí dej mu hodnotu např.“3″.
Když je požadavek na vypnutí sniž hodnotu o „-1“
Když je „pocitadlo = 0“ vypni rele jinak rele zapni.Mám správný směr myšlenek s tím co potřebuješ nebo jsem to špatně pochopil?
posjirkaÚčastníksouhlasím se Zbyškem. Asi jedinou variantou je udělat pole objektu (nikoliv proměnných …), které se nadefinuje jako rozěmr pole a poté se pro každý záznam/buňku pole vytvoří instance objektu. Vcelku hezká diskuze a vysvětlení je třeba tu:
https://forum.arduino.cc/index.php?topic=80913.0Zbyšek to napsal velmi správně jen je to v tom textu těžko čitelné.
v podstatě tě zajímá pouze tato část:int BUTTON[] = {2,3,4,5,6}; //button pins const int numButtons = 5; Bounce bouncer[5]; for( int i = 0; i < numButtons; i++){ Bounce bouncer[i] = (BUTTON[i], 5); }
Jinak doporučuju použít standardní řadu proměnných, už jen z důvodu omezené kapacity paměti RAM. Například v C# bych si toto dovolil a použil spíš kolekci než pole pro lepší manipulaci se záznamy. V poli musíš nadefinovat jak bude veliké a v případě zmany velikosti provést „přenesní hodnot“. s kolekcí můžeš dělat co chceš. Je však náročná na paměť a Arduino jinepodporuje. Chci tím říst, že stejně na začátku budeš muset nadefinovat kolik těch objektů budeš chtít vytvořt a ověřit si že máš dostatek volných prostředků. Navíc se budeš odkazovat na objekty jako na realtivní adresy, … Prostě mi to trochu v hlavě nabourává tu jednoduchost řešení případů, pro kterou bylo arduino navrženo…. tyto procesy bych spíš řešil na raspberry pi.
posjirkaÚčastníkotočení klíče do 2. polohy je nejjednodušší varianta a v podstatě je tam to arduino už zbytečné. jak jsem ti posílal odkaz tak to je analogová konstrukce za pár korun a bez programování. Jen pro pořádek dobrá rada: používej autorelé na 12V. Jsou veliké ale budou spolehlivé.
posjirkaÚčastníktady je spoustu faktoru, které to můžou ovlivňovat:
– rušení od řídících jednotek
– načnutý alternátor
– špatná zem
– ….
Máš 2 možnosti:
1, neuvádíš jaký je to auto. Postaru se to řešilo tak, že místo sledování baterie se sledovalo zde je napětí za ořechem (spínací skříňka), která zapíná třeba autorádio atd. Pak bys nemusel sledovat nic analogového jen je/není napětí. jednoduchá konstrukce je třeba tady:
http://paja-trb.cz/konstrukce/aut_svetla.html
2, musíš to napětí , které přivádíš nejdřív oddělit (diodou) a pak vyfiltrovat (kondenzátor 100n + 470u proti zemi).posjirkaÚčastníkvíš vubec na co se ptáš?
Na začátku řešíš nahrání bootloaderu … to jde jedině přes ICSP.
Když ti dám alternativní návod tak píšeš že je na jiný čip a ve výsledku zjistím, že řešíš komunikaci přes UART …posjirkaÚčastník1. nejspíš nemáš nainstalovaný ovladač pro FT232
2. zkontroluj si zda máš správný port COMxx
3. zkontroluj si typ programátoru
4. zkontroluj si výběr správné desky arduino
5. nevím jestli arduino podporuje FT232 jako ISP programator
6. pokud sis tam (do atmegy) zkoušel něco nahrávat mohl jsi nastavit špatné pojistky
7. zkus jiné arduino.
8. zkus jiný programátor – můžeš využit i jiné arduino s programem Aruino as ISP promammer a dáš kondenzátro 10uF mez reset a zem …Use Arduino as an ISP programmer to program non-Arduino AVR microcontrollers
posjirkaÚčastníkco takhle použít pole (array).
Můžeš si nadefinovat pole o 15 hodnotách a ve smyčce for do něj zapisovat hodnoty jednotlivých čidel.
Pole může mít i více než 1 rozměr, takže můžeš udělat i pole o např. 2 rozměrech pro zadání adresy jednotlivých čidel (takže pole 15×8 byte)
podívej se tady:
https://www.arduino.cc/en/Reference/Array
a nejlépe na kapitolu Arrays and FOR Loopsjenom pozor !!! indexace pole začíná číslem 0 nikoliv 1 !!!
posjirkaÚčastníkjá bych řekl, že ty „chyby“ k kodu asi způsobuje fakt, že nepoužíváte místní značky pro vkládání kodu. Tady jsou použity apostrofy nikoliv párovná značka CODE .
Ten můj program je jen rychlý návrh jak by to šlo udělat. Jak sjem psal nemám doma DS3231 jen DS1307 a to ve fromě IO = nemám volný hotový modul.
Chtěl jsem ti jen nastínit jonou možnost řešení …
Když používáš tu násobnou podmínku ve smyčce FOR doporučil bych spíš použít jednotlivé podmínky IF vnořené (kaskádově) v sobě. Lépe se pak chápe funkce a možnosti řešení z pohledu programátora „žáka“ .posjirkaÚčastníkještě máš chybu tady:
for (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness –) { displayTime(); // display the real-time clock data on the Serial Monitor, analogWrite(svetlo1, brightness); if(brightness == 0) sviti = 0; delay(5000);}
na konci definice smčky for patří 2x minus
for (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness –-)
jinak ti to nepujde odečítat …..posjirkaÚčastníknapsal jsem jednoduchý příklad.
Je to myslim dobře okomentovaný takže princip by měl být jasný:// priklad principu regulace osvetleni akvaria // v01 // by JP 2016 // // knihovny #include <Time.h> // promenne int jas = 0; // pomocna promenna pro vypocet jasu const int LED = 10; // pin s LED diodou // nasatveni casovace int casovac[24] = {0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // jednotlive polozky casovace predstavuji intenzitu jaku v celou hodinu // 1. cislice je intenzita osvetleni v 0:00 // 2. cislice je intenzita osvetleni v 1:00 // ... // 23. cislice je intenzita osvetelni v 23:00 // cislice jsou v rozsahu: // 0 = 0% // 255 = 100% void setup() { Serial.begin(9600); // nastaveni seriove komunikace pinMode(LED, OUTPUT); // nastaveni pinu jako vystup } void loop() { // vypis na seriovy port Serial.print(hour()); // hodiny Serial.print(":"); Serial.print(minute()); // minuty Serial.print(":"); Serial.print(second()); // sekundy Serial.print(" Jas:"); Serial.println(jas); // aktualni jas // kdyz je 23 hodin je treba porovnavat hodnoty cislice 23 a 0 if(hour() == 23) { // nastav jas podle aktualni minuty a hodiny jas = map(minute(), 0, 59, casovac[23], casovac[0]); // ochrana proti hazardnimu stavu prepoctu jas = constrain(jas, casovac[23], casovac[0]); } else { // jinak porovnej hodnoty cilice pole = aktualni hodina a vedlejsi cislice jas = map(minute(), 0, 59, casovac[hour()], casovac[hour()+1]); // ochrana proti hazardnimu stavu prepoctu jas = constrain(jas, casovac[hour()], casovac[hour()+1]); } jas = constrain(jas, 0, 255); // omezeni rozsahu regulace analogWrite(LED, jas); // nastav aktualni intenzitu delay(1000); // pauza 1s }
posjirkaÚčastníkpodle mých výpočtu by to mělo resetovat po 21 minutách 🙂
Když se na ten program podívaáš, tak ve smyčce ( loop() ) ti neustále :
– nastavuje vstup „svetlo1“ jako výstupní (pinmode)
– pak ti zobrazí aktuální čas (displayTime)
– počká 1 s
– přečte si aktuální čas (readDS3231time)
– zjistí jestli není náhodou den (if (h>=8 ….)
– spustí sekvenci rozsvícení (podmíněnou dalšími faktory) a ta trvá 255 kroku * 5s zpoždění = cca 21minut.
….po tu dobu rozsvěcení vlastně cykluje sám v sobě a tím pádem nezobrazuje na „serialmonitor“ žádné hodnoty. jestli to chceš vypisovat tak musíš příkaz „displayTime();“ dát i do symček „for“.
proč se ti resetuje / znovu načítá nevím, nekde je chybka v proměnných „den“, „sviti“, „brightness“. Když tak na to koukám, tak on ti vlastně nikdy nedojede v rozsvícení na „brightness = 255“, protože ve smyčce „for“ mu dáváš podmínku „brightness < 255“. Tzn. že ti skončí ve 254 kroku 🙂 .
Já bych celou tuto situaci řešil asi trochu jinak. Na počátku bych si nadefinoval pole o 24 pozicích (0-23 hodin) do nich bych si zapsal jakou intenzitu mají mít v nulté minutě a pomocí fuknce „map()“ bych plynule přecházel mezi jednotlivými hodnotami.
Ano trvalo by to 1 hodinu než by se rozsvítilo světlo naplno/zhasnulo ale bylo by to mnohem čistší řešení …nemám moc rád tyhle vnořené podmínky, člověk se v nich ztrácí.
posjirkaÚčastníktak ti nevím. V popsiu je Battery input takže bych to bral jako vstup.
Pak jsem našel v datasheetu toto:
The device is UL recognized to ensure against reverse charging when used with a primary lithium battery.no a na netu jsou i moduly s baterii cr2030:
vzheldem k tomu, že to má pouze 1 vstup a nikde nabijecí pin nevidím … chtělo by to sehnat schéma toho tvého modulu.
ještě mě napadlo: to že tam je baterie napevno (tzn. připájena na páskách, neznamená, že je nabijecí….
posjirkaÚčastníknechápu ???? Myslíš jako výměnu baterie nebo použití baterie jako primárního zdroje pro apliakci?
posjirkaÚčastníkzřejmě čínská pomsta zahnívajícímu západnímu kapitalusmu 🙂
Ne vážně, to se občas stane a je super že jsi na to přišel sám.
Chybami se člověk učí. Hlavně že to funguje.posjirkaÚčastníkzkus to na jiném PC a pak zkus jiný kus arduina. CH340 mohla odejít do věčných digitálních lovišť. Kdyby odešel tak Arduino nemusíš vyhazovat. Můžeš jej naprogramovat přes ICSP port a použit v nějáké aplikaci.
Napadá mě ještě chybný konektor (zapatlané piny na konektoru), vadný krystal pro Ch340g a pod.
Když to Arduino zapojíš do USB portu tak předpokládám, že LED POWER svítí a LED „L“ na 13 pinu bliká (defaultní program blik). Pokud jo tak Arduino funguje a je to chyba jen komunikace. My máme 3 klony s tímto čipem a všechny fungují ….posjirkaÚčastníka co když zkusíš tenhle exampl.
Tutoriál – užívání hodin reálného času DS1307 a DS3231 s Arduinem
Ten funguje? Ten projekt osvětlení akvaria v podstatě jen rozšiřuje tento tutorial.
Pak mě napadá jen pár věcí proč to nefunguje:
– špatné zapojení (např prohození SDA a SCK)
– špatný modul/čip DS3231
– chybná adresa modulu (na modulu se dá nastavit tak můžeš mít nastavenou jinou než defaultní)DS3231 bohužel doma nemám a nedostává se mi času s tím experimentovat ….
-
AutorPříspěvky