Zbyšek Voda
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek VodaÚčastník
Rozčilujete se zbytečně. To, že se zobrazil jiný obrázek, než jste chtěl… za to může váš blog. Co zkusit třeba Google Drive, Dropbox…?
Zbyšek VodaÚčastníkKdyž se na to teď dívám s odstupem, vidím v tom zásadní problém… v momentu, kdy je zmáčknuté tlačítko a na výstupu je nastaveno HIGH je připojeno + přímo na GND a to se Arduinu líbit nebude.
Toto tedy nebude správná cesta.
Omlouvám se, že jsem si toho nevšiml dřív.Asi bych šel cestou nějakého toho multiplexingu.
Zbyšek VodaÚčastníkDobrý den,
když nad tím tak přemýšlím, možná by šlo použít něco jako toto:
Je potřeba to ale vyzkoušet. Nemám u sebe teď Arduino.Potom by ovládání probíhalo tak, že byste přepínal mezi
pinMode(pin, OUTPUT);
a
pinMode(pin, INPUT_PULLUP);
společně s rozsvěcením LED, čtení stavu…
Použití 2×5 pinů by bylo rozhodně nejjednodušší.
Pokud ale chcete ušetřit piny, najdou se i další způsoby, které piny ušetří ještě o trochu více.
Použitím nějakého multiplexingu se dá ovládat mnohonásobně více LED, než je pinů (počet roste i exponenciálně). Například při použití Charlieplexingu je možné pomocí tří pinů ovládat až šest LED (obecně je počet LED dán vztahem n^2-n, kde n je počet použitých pinů). Více o Charlieplexingu zde.
Druhou kategorií je ovládání tlačítek. Těch je možné na jeden pin připojit teoreticky až 1023 (respektive rozsah analogového převodníku – 1). V praxi je počet menší, ale vašich potřebných pět tlačítek je OK. Všechny tlačítka jsou připojena paralelně k jednomu pinu v sérii s resistory různých hodnot. Stisknutím dvou tlačítek tak vznikne paralelní kombinace více resistorů. Pokud vyberete správné hodnoty odporů, budete schopný vyčíst všechny možné kombinace stisků tlačítek. Více tlačítek připojených k jednomu Arduino pinu je popsán zde.
S využitím těchto dvou způsobů tedy použijete pouze čtyři piny! 🙂
Zbyšek VodaÚčastníkDobrý den,
bavíme-li se o tomto modulu: http://www.ebay.com/itm/4CH-AC-LED-Light-Dimmer-Module-Controller-Board-ARDUINO-RASPBERRY-Compatible/121752461158?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20131003132420%26meid%3D24efa532ac8b4d51b2ccc92ea32c4c1d%26pid%3D100005%26rk%3D3%26rkt%3D5%26sd%3D111764492631Z jeho popisu mi vyplývá, že by měl stmívání umět. Když se ale dívám na videa s ukázkami, vypadá to spíše na opak. Je to zmatečné.
Každopádně… pokud máte na blízku někoho, kdo se elektronikou živí, rozhodně bych dal spíše na jeho radu 🙂 Já jsem taky jenom amatér!
Přes tyristory to také určitě půjde!
Zbyšek VodaÚčastníkNení zač, držím palce 🙂
Zbyšek VodaÚčastníkDobrý den,
ten poslední modul (http://www.ebay.com/itm/5V-4-Channel-LED-Indicator-Light-PLC-Relay-Module-Circuit-Board-Blue-for-Arduino-/321493316614?hash=item4ada7eb406:g:-RoAAOSwLVZVlcaA) má na sobě již zmiňovaná mechanická relé – takže u nich byste mohl ovládat maximálně vypnuto-zapnuto.Ten předchozí modul by měl jít použít (http://www.ebay.com/itm/4CH-AC-LED-Light-Dimmer-Module-Controller-Board-ARDUINO-RASPBERRY-Compatible/121752461158?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20131003132420%26meid%3D24efa532ac8b4d51b2ccc92ea32c4c1d%26pid%3D100005%26rk%3D3%26rkt%3D5%26sd%3D111764492631).
Budete potřebovat ArdUino, RTC modul, modul s relé, teploměr a displej
Dále také potenciometr k displeji (k nastavení kontrastu – ne u všech je ale potřeba). Potom možná pár rezistorů – třeba u 1-Wire sběrnice, kterou se připojuje teploměr DS18B20 potřebujete 4.7 kohm rezistor. Komponenty kolem ale hodně závisí na použitém typu modulu/displeje/teploměru…Zbyšek VodaÚčastníkNa to by mělo stačit i UNO.
Chcete-li mít ale jistotu, sáhněte po Mega a neuděláte chybu.
Obzvlášť pokud použijete LCD s více piny (a ne například s I2C řadičem, kterému stačí tři piny).Zbyšek VodaÚčastníkJe celá řada různých relé: http://www.gme.cz/products/search?term=ssr
Zapojení je popsáno v dokumentaci každého.Nakonec asi nejjednodušší by ale bylo koupit nějaký již hodový modul – například tento: http://www.sainsmart.com/sainsmart-4-channel-5v-solid-state-relay-module-board-omron-ssr-avr-dsp-arduino.html
Zbyšek VodaÚčastníkDobrý den, to by mělo jít.
Budete potřebovat ke každé žárovce SSR relé (elektromechanické by rozhodně nezvládlo plynulou regulaci jasu) a nějaký zdroj času (ať už například RTC, nebo modul pro připojení ke zdroji času přes internet – ESP8266/Ethernet shield…).Zbyšek VodaÚčastníkDobrý den, zkuste se podívat třeba na Redbot, nebo mBot a inspirovat se jejich motory 🙂
Zbyšek VodaÚčastníkDobrý den,
to do čeho se pouštíte už je trochu obtížnější. Nějak by to ale jít mělo.
Zkuste použít postup pomocí ukazatelů na funkce: http://physics.ujep.cz/~mmaly/vyuka/oporaPrgB/032.html. Tyto ukazatele si pak nastrkejte do pole menu.Problém použití funkce jako argumentu jiné funkce řeší třeba zde: http://stackoverflow.com/questions/1789807/function-pointer-as-an-argument
Snad by šlo použít něco jako:
void scr1(){ digitalWrite((LEDzl), !digitalRead(LEDzl)); delay(30); } ... void **menu = {&scr1, ...}; void showMenu(void (*a)()){ a(); } showMenu(menu[0]);
Zkuste a uvidíme 🙂
Zbyšek VodaÚčastníkDobrý den.
Předpokládám, že otázka zní „Jak programovat pro sensor shield v5.0?“. Je to tak?
Pomohlo by, kdybyste poslal odkaz na sensor shield. Pak se možná posuneme dál 🙂Zbyšek VodaÚčastníkDobrý den,
to asi záleží spíše na účelu.Když koukám na ten kit, naleznete tam ledky, rezistory a tlačítka. Na začáteční hraní to stačí, ale myslím, že po chvilce (v řádu hodin) už moc nemáte s tímto kitem co dělat.
Asi bych raději sáhnul po nějakém obsáhlejším kitu – například tomto: http://www.hwkitchen.com/products/kit-workshop-base-level/
Podle mě asi úplně nejlepší kit je oficiální Arduino Starter Kit. V něm už je opravdu spousta komponent (Servo motor, DC motor, LCD displej…).
Zbyšek VodaÚčastníkDobrý den,
to by mohl být i problém načasování. V tomto fóru: https://forum.arduino.cc/index.php?topic=20574.0 řeší podobný problém, který vyřešila právě změna časování v knihovně OneWire.cpp (je to příspěvek označený #5).Zbyšek VodaÚčastníkDobrý den,
odkud jste ovladače instaloval?
Pokud jste instaloval ty, které jsou součástí Arduino IDE, tak Vám to pravděpodobně fungovat nebude. Bude potřeba nainstalovat přímo ty pro vaši desku.Zbyšek VodaÚčastníkTyto problémy se vyskytují snad jen ve verzi 1.6.6. Verze 1.6.5 jede OK.
Zbyšek VodaÚčastníkDobrý den.
Rozdíl je takový, že při použití
#define A
Se všechny výskyty A nahradí JIŽ PŘI PŘEKLADU (respektive těsně před ním) v počítači, takže deska Arduino neví, že existovala nějaká konstanta definovaná pomocí #define A.
Preprocesor překladače dostane text programu a když narazí na výskyt A, nahradí jej, ale ještě jako textovou informaci. Až poté je program přeložen do strojového kódu.Narozdíl
const int B
znamená, že v paměti procesoru Arduina skutečně existuje proměnná B, jenom je označena jako konstantní, tedy neměnitelná.Zbyšek VodaÚčastníkDobrý den,
zatím je vložení na externí server a následné nalinkování obrázku standardní postup.Zbyšek VodaÚčastníkDobrý den,
to zapojení bude stejné, jako když zapojujete normální potenciometr.Zkuste poslat fotku vašeho posuvného potenciometru.
Zbyšek VodaÚčastníkDobrý den, každý jsme měl pravdu v něčem.
Váš převod jednotek je zapsán chybně, můj je dobře, jen jsem si výsledek špatně interpretoval (bral jsem jednotky v posledním vzorci úpravy jako proměnné, což nelze). Vaše převodní funkce je správná, moje byla špatná.Tedy přiznávám svoji chybu. Řešení:
float mWcm2toWm2(float vstup){ float vystup = vstup * 10; return vystup; }
Shodneme se?
Zbyšek VodaÚčastníkZbyšek VodaÚčastníkNesouhlasím s vámi. Vaše úvaha je chybná.
Zbyšek VodaÚčastníkDobrý den,
přijímáte-li data v mW/cm^2 a chcete je převést na na W/m^2, je přepočet následující:
W = 1000 mW m^2 = 10 000 cm^2 W/m^2 = (1000 mW) / (10 000 cm^2) W/m^2 = mW / (10 cm^2)
Dá přepočet se dá tedy vyjádřit funkcí
float mWcm2toWm2(float mWcm2){ //uznávám, že název funkce je opravdu ošklivý :) float Wm2 = mWcm2 / 10; return Wm2; }
Snad jsem se nikde nesekl 🙂
Zbyšek VodaÚčastníkDobrý den,
nevím, jestli problém správně chápu…
Máte 4 písty a chcete mít možnost je ovládat nezávisle na sobě, že?Navrhuji tedy něco jako:
int pist1 = 2; int pist1Zasunut = 6; int pist1Vysunut = 7; boolean pozadovanyStavPist1 = false; //false - zasunuto, true - vysunuto int stavPist1 = 0; //0 - zasunuto, 1 - někde mezi, 2 - vysunuto void setup() { pinMode(pist1, OUTPUT); pinMode(pist1Zasunut, INPUT); pinMode(pist1Vysunut, INPUT); } void loop() { //prvně nastavíme hodnotu stavPist1 if(digitalRead(pist1Zasunuto) && !digitalRead(pist1Vysunuto){ stavPist1 = 0; } else if(!digitalRead(pist1Zasunuto) && !digitalRead(pist1Vysunuto){ stavPist1 = 1; } else if(!digitalRead(pist1Zasunuto) && digitalRead(pist1Vysunuto){ stavPist1 = 2; } else{ //k situaci, kdy by byly oba spínače sepnuté, nedojde } if(stavPist1 == 0){ if(pozadovanyStavPist1 == false){ //je zasunuto, nic nedělej } else{ digitalWrite(pist1, LOW); //vysunout píst } } else if(stavPist1 == 1){ if(pozadovanyStavPist1 == false){ digitalWrite(pist1, HIGH); //pokračuj v zasouvání pístu } else{ digitalWrite(pist1, LOW); //pokračuj ve vysouvání pístu } } else if(stavPist == 2){ if(pozadovanyStavPist1 == false){ digitalWrite(pist1, HIGH); //zasunout píst } else{ //nic nedělej, je vysunuto a to je dobře } } }
Dá se to zapsat i kratším způsobem, ale takto to snad bude pochopitelné 🙂
Zbyšek VodaÚčastníkAno, controllino je vlastně Arduino obalené relátky apod.
Zbyšek VodaÚčastníkPokud jsou to výpadky například jednou do hodiny, tak by alespoň chvilku mělo Arduino vždy zapisovat.
Ještě mě napadlo, jestli nebude problém v připojení. Máte Yun připojeny k síti pomocí Ethernet kabelu?
Zbyšek VodaÚčastníkDobrý den,
možná by šlo použít Controllino (psali jsme o něm zde), nebo Industruino. Obě jsou to PLC kompatibilní s Arduinem.Zbyšek VodaÚčastníkDobrý den,
podle toho co popisujete není chyba v Arduinech.
Není třeba možné, že na místě B je nějaká chyba v napájení, nebo tak něco?Zbyšek VodaÚčastníkNa stripboard se dá rozmístit součástky i ve Fritzingu, ale nevím, jak je na tom s autoroutováním.
Zbyšek VodaÚčastníkDobrý den.
Můžete si představit, že bluetooth spojení se (většinou) u Arduina chová tak, jako by tam žádný bluetooth modul nebyl a Arduino přijímalo data přes sériovou linku.Každá mobilní aplikace bude mít asi ovládání trochu specifické, veskrze se ale bude jednat o odesílání nějaké sekvence čísel, popřípadě znaků.
Konstra, kterou posíláte vlastně jenom říká, že se do incomingByte uloží byte přijatý přes sériovou linku.
Mějme nějakou modelovou aplikaci – například jednoduchý joystick. Při směru nahoru pošle byte s hodnotou ‚u‘, při směru dolů ‚d‘, při směru doleva ‚l‘ a doprava ‚r‘. Vy pak v Arduinu budete na přijetí těchto znaků čekat. Například:
if(incommingByte == 'u'){ jedNahoru(); }
Takto si například můžete udělat jednoduché autíčko.
Asi nejjednodušší na začátek bude, když si do mobilu stáhnete nějaký Bluetooth Terminál – myslím, že mi dobře fungoval třeba tento: Bluetooth Terminal. Ten jenom odešle znaky, které mu zadáte.
V terminálu se připojíte k vašemu bluetooth modulu a pošlete například znak ‚a‘. V tu chvíli by se měl tento znak uložit do proměnné incommingByte.
Různé aplikace pro bluetooth komunikaci budou fungovat podobným způsobem. Jakou konkrétní sekvenci posílají najdete většinou v jejich dokumentaci.
Podrobněji se bluetooth věnuji ve článku Propojujeme Arduino s jinými zařízeními. Tam také popisuji hodně zajímavou aplikaci SensoDuino, která umí posílat data z mobilních senzorů přes BT do Arduina.
-
AutorPříspěvky