posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
2.6.2017 v 12:08 odpověď na: ARDUINO Mega2560 – přepínání analogReference() za chodu programu #11654
posjirka
Účastníktrochu bych se bál co udělá AI pro touche panel když se mu změní refernce na 1,1V….
Lepší varianta je asi buď použít externí převodník pro nižší napětí, nebo se smířit s hrubší LBA.posjirka
Účastníkjo je tam kompenzační odpor, ale já jsem radši opatrný. Jistota je kulomet a pár převodníků odpálených po cca 1-5 měsících už jsem viděl. Podobně je na tom ESP8266. Hodně lidem funguje komunikace UART na 5V … 🙂
posjirka
Účastníkpředpokládám, že to „ps:“ je asi na mě.
No možná by nebylo do věci si to opravdu nastudovat. Obávám se, že na mé straně asi chyba nebude.Já vím jak funguje I2C komuikace a pokud MCU funguje v napěťové hladině 3,3V a ty pojedeš po sběrnici 5V tak ti opravdu hrozí odpálení výstupu. Resp. jeho poloviny při spínání +3,3V. Tady totiž není výstup typu otevřený kolektor …. 🙂 Všechny piny jsou navíc chráněny přes diody na napájecí napětí tzn. pokud tam bude víc než je napájecí napětí, hrozí i odpálení samotného MCU. To ti ani stabilizátor nepobere, protože funguje jednosměrně …..No hlavně jsem rád, že máš vyřešeno, třeba to někomu může usnadnit zbytečné pátrání po chybě, kterou vlastně neudělal.
posjirka
Účastníkono je těch otazníků mnohem víc. Například jak dlouheé zvuky to mají být? V jaké kvalitě? Kdysi jsme řešili takový základní zvukový modul s eeprom pamětí a „zvukovkou“ covox. tedy bez procesoru ale nic moc kvalita….
jinak samozřejmě existuje spousta modulů jak psal už Vojtěch. Ty lze spínat řeba tranzitorem/tlačítkem nezávísle. Prostě co repo to 1 modul. Jsi tu ale omezený délkou záznamu. MP3 je super formát pro jakékoliv použití, jen je to jak s kladivem na komára.
možné řešení je třeba i 5x toto:
http://robotstore.cz/obchod/arduino/isd1820-zvukovy-modul-nahravani-arduino-atmel-20s/záleží co vlastně chceš ….
posjirka
Účastníkasi bude problém v kodu pro SLAVE. používáš tam
tlacitko1 = Wire.read(); tlacitko2 = Wire.read();
při čtení streamu. To ti nepůjde. Přečte 1 Byte a očekává další, ale ten nepřijde.
Musíš si přečíst pouze 1 a pak rozhodnout co je to zač.upravil bych to asi takto:
#include <Wire.h> const byte slaveId = 1; void setup() { Serial.begin(9600); Wire.begin(slaveId); Wire.onReceive(receiveEvent); pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); } void loop() { } void receiveEvent(int howMany) { char tlacitko1; // uprava char tlacitko2; while(Wire.available() > 0) { tlacitko1 = Wire.read(); // uprava tlacitko2 = Wire.read(); if (tlacitko1 == 'a') { Serial.println("=> Tlacitko1 = zapnuto"); digitalWrite(8, HIGH); delay(1000); } else if (tlacitko1 == 'b') // uprava { Serial.println("=> Tlacitko2 = zapnuto"); digitalWrite(9, HIGH); delay(1000); } else { digitalWrite(8, LOW); digitalWrite(9, LOW); delay(100); } } }
posjirka
Účastníkposjirka
Účastníkjelikož nemám OLED display tak jednu po paměti a tutoriálu.
Kdyby něco nešlo, napiš/popiš problém a opravíme. V každém případě si musíš upravit piny kam máš připojený OLED:// 16.5.2017 - by JP - iprava pro OLED display // připojení knihovny U8glib - http://navody.arduino-shop.cz/docs/texty/0/18/u8glib_oled.zip #include "U8glib.h" // nastavení propojovacích pinů #define D0 13 #define D1 11 #define DC 9 #define CS 8 #define RES 10 // inicializace OLED displeje z knihovny U8glib U8GLIB_SSD1306_128X64 mujOled(D0, D1, CS, DC, RES); const int buttonA = 2; //PIN NA INDIKACI CÍVKY A const int buttonB = 3; //PIN NA INDIKACI CÍVKY B const int civkaA = 4; //PIN NA CÍVKU A const int civkaB = 5; //PIN NA CÍVKU B int StateA = 0; //STAV INDIKACE CÍVKY A int StateB = 0; //STAV INDIKACE CÍVKY B int ax = 1; //POČET SEPNUTÍ CÍVKY A int ay = 1; //POČET NESEPNUTÍ CÍVKY A int bx = 1; //POČET SEPNUTÍ CÍVKY B int by = 1; //POČET NESEPNUTÍ CÍVKY B int t1 = 1200; //ČAS SEPNUTI 1,2 vteřiny int t2 = 800; //ČAS ROZEPNUTI 0,8 vteřiny int t3 = 10000; //ČAS ROZBĚHU PROGRAMU 10 vteřin int i1 = 0; //POČET CYKLŮ NA KONCI 0 int i2 = 30000; //POČET CYKLŮ NA KONCI 30.000 void setup() { Serial.begin(9600); //ZAHÁJENÍ KOMUNIKACE NA SERIOVÉ LINCE Serial.println("PROGAM EVM"); Serial.println("30.000 CYKLU"); Serial.println("CEKAM 10 VTERIN A ZACNU CYKLOVAT"); intro(); // UVODNI OBRAZOVKA delay(t3); pinMode(buttonA, INPUT_PULLUP); //indikace cívky A pinMode(buttonB, INPUT_PULLUP); //indikace cívky B pinMode(civkaA, OUTPUT); //sepnuté cívky A pinMode(civkaB, OUTPUT); //sepnuté cívky B for(int i1=1; i1 <= i2; i1++){ Serial.print("CYKLUS "); Serial.println(i1); //cívka A digitalWrite(civkaA, HIGH); StateA = digitalRead(buttonA); if (StateA == HIGH){ Serial.print("A – ON "); } else { Serial.print("A – OFF "); } if (StateA == HIGH){ Serial.println(ax++); } else { Serial.println(ay++); } menu(); // zobrazeni menu delay(t1); digitalWrite(civkaA, LOW); delay(t2); //cívka B digitalWrite(civkaB, HIGH); StateB = digitalRead(buttonB); if (StateB == HIGH){ Serial.print("B – ON "); } else { Serial.print("B – OFF "); } if (StateB == HIGH){ Serial.println(bx++); } else { Serial.println(by++); } menu(); // zobrazeni menu delay(t1); digitalWrite(civkaB, LOW); delay(t2); } Serial.println(""); Serial.print("POCET CYKLU "); Serial.println(i2); Serial.print("A – ON "); Serial.println(ax-1); Serial.print("A – OFF "); Serial.println(ay-1); Serial.print("B – ON "); Serial.println(bx-1); Serial.print("B – OFF "); Serial.println(by-1); menu(); // zobrazeni menu } void loop () { } void intro() { // uvodni obrazovka mujOled.setFont(u8g_font_unifont); mujOled.setPrintPos(0, 10); // výpis textu na zadanou souřadnici mujOled.print("PROGRAM EVM"); mujOled.setPrintPos(0, 25); mujOled.print("30.000 CYKLU"); mujOled.setPrintPos(0, 40); mujOled.print("CEKAM 10 VTERIN"); mujOled.setPrintPos(0, 55); mujOled.print("A ZACNU CYKLOVAT"); } void menu(){ // zobrazeni menu mujOled.setFont(u8g_font_unifont); mujOled.setPrintPos(0, 10); // výpis textu na zadanou souřadnici mujOled.print("CYKLUS "); mujOled.print(i1); mujOled.setPrintPos(16, 25); mujOled.print("ON"); mujOled.setPrintPos(72, 25); mujOled.print("OFF"); mujOled.setPrintPos(0, 40); mujOled.print("A"); mujOled.setPrintPos(16, 40); mujOled.print(ax); mujOled.setPrintPos(72, 40); mujOled.print(ay); mujOled.setPrintPos(0, 55); mujOled.print("B"); mujOled.setPrintPos(16, 55); mujOled.print(bx); mujOled.setPrintPos(72, 55); mujOled.print(by); }
posjirka
Účastníkjestli chceš jen přidat display navrhnul jsem toto rozložení :
http://www.imgup.cz/image/LXAC
je to to co chceš ?posjirka
Účastníktupec nejsi. Každý něják začínal. spíš ti dávám kladné body za odavhu a snahu pustit se do něčeho neznámého.
Podle toho co píšeš, tak ten program nebude fungovat. rozhodně se kotva cívky nepřitáhne na 1us (1 krok/příkaz). a tak ti asi nebude správně indikovat přitáhnutí kotvy.
Připadá mi to jako testování bipolárních/paměťových relé 🙂
Reakční čas relé je v řádech ms. takže asi nebude správně vyhodnocovat stav kontaktu.
právě proto se používá smyčkování loop() aby měl ten mechanický svět čas dojet a my ho mohli odchytat.
Neboj i smyčka loop() se dá zastavit 🙂
pauzu mezi sepnutím/rozepnutím chápu. co očekáváš?
a/ že bude kontakt zakmitávat (spínat/rozpínat)
b/ že se nesepneposjirka
Účastníkz pohledu přístupu není rozdíl mezi LCD a OLED, je to jen v technologii zobrazení, ale komunikační protokoly jsou podobné/stejné.
zkus si ještě jednou přečíst co jsem ti psal v předchozím příspěvku.
Musíš si představit jak by to na tom OLED display mohlo vypadat a podle toho napsat program. je vhodné si program rozdělit na základní funkční celky:
– nastavení ( setup() )
– měření
– vyhodnocení
– regulace
– zobrazenívšechny 4 poslední body musí být ve smčce loop() aby se průběžně aktualizovali
Když to dodržíš, tak budeš mít výstup pro zobrazení na 1 místě a nemusíš to vyzobávat z celého programu. Pak není problém zobrazovat ty údaje na serial monitoru a zároveň na LCD.Co má ten tvůj program vlastně dělat?
posjirka
Účastník1, nezakladej duplictní vlákna
2, dej sem kod co už máš včetně zapojení a můžeme se na to podívat.
není to nic složitýho …posjirka
Účastníka, jde to s tím co máš, jen to není tak úplně jednoduchý.
b, na googlu bys asi něco našel, ale smdrí to čertovinou.posjirka
Účastníkv čem je problém? nevíš jak spustit LCD nebo jak tam dostat požadované data?
Musíš si to představit jak by to mohlo fungovat a podle toho navrhnou tprogram.
Vem si excel, zažlu´t si sloupce/řádky podle toho kolk jich máš v LCD (já standardně 2×16) a vlož si tam náhled max. počtu znaků aby is předsatvil jak by to mohlo vypadat.
Podle toho si pak navrhneš programposjirka
Účastníkno jestli trochu znáš princip WIFI resp ethernetu tak ti musí být jasné že to přímo nejde.
Vše fungujena principu server-klient tzn. 1 musí být jako server a druhé jako klient.
To je pak i održeno v komunikaci. Klient pošle data na server a server odešle odpově´d,…
Tady bych spíš volil něco jako NRF24posjirka
Účastníkbez kodu nevim ale typnul bych si ze lcd obnovujes tak casto ze nestaci ani vypsat vsechny znaky. to byva bolest nwgativnich (modrych) lcd. bez kodu ale fakt nevim. jeste muze byt problem napetova uroven signalu. due je tusim na 3v3. bacha at si ho neodpalis …
posjirka
Účastníkjednoduche a funkcni reseni. dobra prace
posjirka
Účastníkkdyby jen to, navíc je oproti pozitivnímu LD ten negativní (modrý) výrazně pomalejší.
Někde jsem to tu řešil … . Při vyšší frekvenci obnovy dat pro LCD (200ms) nebylo na LCD nic vidět, nebo jen mlhavě. Při 1 vláknu („loop()“) nebylo reálné načítání tlačítek a zobrazování informací na LCD. Bez přerušení to v podstatě nešlo, nebo za použití funkce millis() a další „zbytečné“ proměnné. Ale neboj i s tím se dá žít.posjirka
Účastníkje to zvlaštní ale pokud máš správně zapojení tak je LCD opravdu v křemíkovém nebi.
naštěstí to není něják závratně drahá součástka co by nešla nahradit… v ebay 30kč.posjirka
Účastníkto že máš při max. kontrastu na prvním řádku černé obdelníky je uplně normální.
spíš bych očekával klasickou chybu, jako, že nemáš uzemněné nevyužité datové piny.
Některé LCD jsou na to citlivé a nejdou. není špatné dát sem zapojení jaké používáš a´t se tu nehodí duchové ….posjirka
Účastníktady je taky hezká stavebnice:
http://www.conrad.cz/teplotni-spinac-10-az-100-c-12-15-v-dc-8-a-stavebnice.k194883posjirka
Účastníkjinak deska s rele pro mikroprocesor je třeba tu:
https://www.tipa.eu/cz/stavebnice-tipa-pt066a-rele-deska-se-spinacim-tranzistorem-a-led/d-166591/posjirka
Účastníkjo ok v poho.
napadlo mě ještě toto řešení:
https://www.gme.cz/stavebnice-velleman-mk138-termostatje to analogový termostat,kde nastavuješ teplotu sepnutí a hystereze rozpenutí (rozdíl memzi spínací a rozpínací teplotou) se nastavuje fixně, pomocí změny hodoty rezistoru (tuším že jsem viděl v manuálu odpor R7). Je to jednoduché zařízení i na sestavení je to v pohodě i pro začátečníky a nemusíš nic nsatavovat. jen nevidíš aktální teplotu.
Takhle se to dělá posledních 20-30 let. Mikroprocesor řeší vše lépe a komfortněji jen je pak třeba i více času a znalostí. Já mám rád jednoduchost 🙂posjirka
Účastníkkdyž jsi takto na začátku, má cenu se do toho vlastně pouštět?
Spíš bych ti doporučil něco takového:
http://arduino-shop.cz/arduino/1238-digitalni-termostat-20-az-100-1458426591.html?gclid=Cj0KEQjwoqvIBRD6ls6og8qB77YBEiQAcqqHe8JphLULFxKeGgzYVm5Jui00vr55PfCujYs4q25b1BMaAoon8P8HAQOno naprogramovat se dá cokoliv, ale aby to spolehlivě fungovalo, tak je nutné znát možnosti a omezení. Pkud tam pojedeš jednou týdně, je nutné oštřit třeba zásek procesoru ať už pomocí WATCHDOG nebo nějáké nouzové automatiky.
To rozhodně není na 1 den.
Poku se tomu chceš věnovat, nastuduj si jak funguje elektrotechnika, prostuduj možnosti, rozvrhni funkce a jsi na správné cestě.Rozhodně tu nejsme pro zakázkové řešení pro veřejnost. Rádi ti tu pomůžeme, ale asi tu nenajdeš blázna co by to vyřešil všechno za tebe-…
posjirka
Účastníkbudes potrebovat arduino cidlo teploty a nejaky rele modul.
u tech cerpadel pozor na rozbehovy proud. aby to zvladl jak zdroj tak rele. ja takove cerpadlo mel a bral si 3A coz v DC neni malo.
programovani neni problem. dej tomu tyden casu a uvidis. v kazdem pripada je nutne mit konkretni predstavu co to ma delat a aspon v zacatku orezat vse na minimum. hodne komentovat, byt peclivy a hledat….posjirka
Účastníkobavam se že by to chtělo spíš raspbbery pi.
skener na čárový kod sice jde koupit i ve verzi pro arduino, ale levnější a standradní bude přes USB rozhraní, což Arduino moc nepodporuje. resp. podporuje sebe jako usb host nikoliv jako master. Na to jsou speciální shieldy, no ve výsledku tě to vyjde dráž než základní raspberry pi. Akorát to programování v pythonu 🙂
Do toho jsem ještě nepronikl.když se dívám na strýčka googla tak ej tam toho mraky. omlouvám se, nebudu to procházet, jen jsem si pustil první video a tam byla čtečka za pomocí webkamery.
mrkni na googla a uvidíš. Dej kdyžat vědět jak jsi dopadl:posjirka
Účastníkona je opravdu otázka jak to je zapojeno …. ať tady nehoníte duchy 🙂
ps. omezil bych ty 2 pole za 1 hodnotu BYTE se smyčkou FOR pro naplnění log.1/0posjirka
Účastníkpresne tak … z arduina se bere pouze maly proud pro sepnuti magnetu. podle popisu ma unest 1kg coz neni malo. jsi si jisty ze to co jsi chtel zvednout je zelezo a ne nejaka hlinikova slitina?
posjirka
Účastníkok to chápu, ale o jaké vzdálenosti se bavime?
posjirka
Účastníkmoc nechápu problém. přesnou vzdálenost od zdi. tím myslíš jako vzdálenost od startu nebo distance od překážky během jízdy? v jakém směru má být ta vzdálenost? o jaké hodnotě se baví me? jakou rychlostí se vlastně pohybuje to auto? ….
posjirka
Účastníktady je důležité nejen na jaké frekvenci chytáš signál, ale taky v ajké rychlosti a jakou knihovnou. já mám doma RC zásuvku a nepodařilo se mi to rochodit. nakonec by to měl zvládnout rc switch (https://github.com/sui77/rc-switch). Musíš i vyzkoušet správný protokol … bez kodu a dalších informací se velmi špatně radí ..
-
AutorPříspěvky