posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
o tomto mini arduinu vím a už jsem o něm několikrát uvažoval.
Na internetu je docela dost návodů na vlastní stavbu a tak předpokldám, že funguje.
Jestli se na to v nejbližší době nkdy dostanu zkusím si jej naprogramovat a vyzkoušet.
Mám te´d spíš problém s výrobou PCB ….posjirkaÚčastníkchybami se člověk učí … 🙂
posjirkaÚčastníknejde mi otevřít příloha ….
posjirkaÚčastníkjaký je rozdíl mezi byte a char ? 🙂
obojí je 8-bitová proměnná, jen se jinak zobrazuje, resp. je to jiný pohled na stejnou kombinaci 8 bitů.
Nevím na co to chceš, ale 433MHz je opravdu jen pro přenos jednoduchého kodu. Těch rušení v okolí je spousta (meteostanice, centrální ovl. auta, bezdrátové zvonky ,…).
Navíc je to jednosměrná komunikace.
Nepíšeš ovšem k čemu to chceš, tak je těžké poradit……posjirkaÚčastníknemáš zač. Tu hrubou stupnici jsem tam navrhoval od začátku proto, že nikdy neudržíš ruku ve stejné vzdálenosti od čidla. To čidlo taky nikdy nedá 2x po sobě stejný výsledek už jen proto, že se musí počítat z dozvukem předcházejícího signálu , nerovnosti plochy, atd atd.
Ani průměr několika hodnot ti nepomůže a budeš mít nejen velký rozptyl, ale navíc tě to bude stát spoustu času.
Zkoušel jsem zkrátit čas smyčky na 500ms a nefunguje to špatně, navíc je to celkem rychlý.Rád jsem pomohl,…
posjirkaÚčastníkhotovo, odzkoušeno, vyřešeno. Až to vyzkoušíš v realitě zjitíš pro je zbytečné a krajně nevhodné hrát si s lineární stupnicí. Po odzkoušení pak celou serivou komunikaci zakomentuj ať ti zbytečně nezkouší odesílat data. zdržuje to procesor a může se i resetnout.
// LED ovládaná rukou v.2 // by JP 2016 // přiblížením ruky se reguluje intzenzita jasu LED od 0 do 100% jasu. // zatím ve 12 krocích 0 - 240 PWM // jemnější nastavení už téměř nejde dosáhnout. // nová intenzita se nastavuje přiblížením ruky na dobu 2s // V.2 - použito funkce map() pro nastavení citlivosti // knihovna EEPROM #include <EEPROM.h> int echoPin = 2; // přijímač int trigPin = 3; // vysílač long distance = 0; // čas odezvy / vzdálenost int LED = 10; // pin s LED diodou s PWM řízením long lastDistance = 0; // hodnota posledního měření int pwm = 0; // hodnota PWM long max_dist = 1500; // maximalni vzdalenost v ms long min_dist = 100; // minimalni vzdalenost v ms long kroku = 6; // pocet stupnu intenzit, kdy 0 = vypni, max = nereaguj takze pocet stupnu je koku-1 byte adresa = 1022; // adresa záznamu v EEPROM void setup() { Serial.begin(9600); pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); pinMode(LED, OUTPUT); pwm = EEPROM.read(adresa); // načtení poslední hodnoty z EEPROM analogWrite(LED, pwm); // zápis PWM } void loop() { // vysílám impulz digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // měřím délku odezvy distance = pulseIn(echoPin, HIGH); Serial.print(distance); distance = map(distance, min_dist, max_dist, 0, kroku); // prepocet na stupne intenzity svitu LED distance = constrain(distance, 0, kroku); // omezení přepočtu na nastevný rozsah Serial.print("/"); Serial.print(distance); Serial.print("/"); Serial.println(kroku); if (lastDistance == distance){ if (distance < kroku){ pwm = distance * (255/(kroku-1)); // přepočet na PWM analogWrite(LED, pwm); // zápis PWM // změna oproti záznamu v EEPROM if (pwm != int(EEPROM.read(adresa))) { EEPROM.write(adresa, pwm); // záznam do EEPROM Serial.print("Zapis do EEPROM ..."); } } } Serial.print("Aktualni PWM ..."); Serial.println(pwm); lastDistance = distance; // předání záznamu posledního měření delay(1000); }
posjirkaÚčastník…nechám to tu chvilku odležet, nemám moc dobrý den a vznikla by zbytečná hádka bez řešení….. nech to být, hol jsem starý morous….
posjirkaÚčastníknapíšu to hodně mírně : jaké máš zkušenosti s touto oblastí ???
Mám na mysli aplikace senzorů v reálném světě.posjirkaÚčastníktribal tam má chybku.
Buď použiješ :
1, NPN pro spínání země : logická 1 přes odpor otevře tranzistor a ten sepne zátěž a moc ti nezáleží na tom jestli je napájeci napětí 5V nebo 12V. Stačí správně určit protékajíc proud, podel toho vypočítat předřadný odpor a vybrat tranzistor, který tu zátěž vydrží.
2, PNP spínáš napájecí napětí : logická 0 přivede „záporné“ napětí na bázi tranzistoru. Ve výsledku ale nepustí vyšší napětí než je napětí mikroprocesoru (tedy 5V), nebo nepůjde uzavřít tranzistor. je vhodné pro spínání zátěže stejného napští jako má mikroprocesor o větším proudu.Někdy se používá kombinace pro spínání segmentu a číslaovky.
Ve zkratce použij zapojení s NPN tranzistorem.
Attachments:
posjirkaÚčastníkod pohonu se bude odvijet typ ovládání (pWM, Hmustek, krokáč)
Jinak samozřejmě Ardunio (v podstatě je jedno jakýkoliv) a gryoskop.Možná se podívej na diy projekty BB8.
posjirkaÚčastníkspíš se bude vše obvijet od typu pohonu. Nepíše třeba jaká je třeba reakční rychlost, jaké předpokládáš mezní parametry, napájecí napětí, síla atd.
Na něco stačí stolice + deska spojená šroubovnicí, někde potřebuješ řemenici Tady všude je určitá mez + koncové dorazy/spínače.
Na něco potřebuješ kluzné plochy spojené koly se základnou podoběn jako BB8 🙂posjirkaÚčastník5m je v pohodě, většina těch modulů nemá problém ani s 10 m.
Jen si mi pořád neřekl jaká data tam potečou, jak jsou důležitá, jak často se budou opakovat, jaké je potřeba zabezpečení těch dat …
na 433 MHz pracuje kde co, třeba i meteostanice, nebo dálkové ovládání centrálu u auta. pro důležitá jednorázová data není moc vhodný, spíš pro přenost dat ze senzoru, s opakovatelnosti třeba 1x 5s.
Bluetooth je vcelku v pohodě jen si musíš udržet vazbu obou zařízení ať se ti nechytne na kdejaký mobil
2,4GHz pracuje taky vcelku dost věcí (právě bluetooth, dálkové ovládání pro modely, …)
WIFI je taky na 2,4GHz nebo na 5GHz podle typu sítě a potřebuješ mít aktuální název SSID a správné heslo. Provést aktualizaci zanmená nahrát nový program do mikroproces.
Je potřeba opravdu správně vybírat, podle toho na co to chceš, z toho, že to bude panel na ruku moc nezjitím. Může to být 1x denně data o objemu 2kB (potřebuješ větčí zabezpečení a kontorlu popslaných dat) , nebo každých 5s data o 5MB (v tu chvíli taky můžeše zarušit vlastní WIFI signál pro jiná zařízení)….Jak vidíš nejlepší je starý dobrý drát, nebo mě ještě napadá IR jak pro dálkové ovládání …. Pro jednoměrnou komunikaci to může být vhodné řešení.
posjirkaÚčastníkwooow kaviárové tousty … BC556 je PNP tranzistor, ten se otevírá při záporném napětí na bázi.
Použij BC337 …posjirkaÚčastníkeepromka ti moc nepomůže, spíš ji ničíš neustálím přepisem. Má max 100 000 přepísů což vypadá nekonečně ale při zápisu 1 x 1s = 100 000 s = 1666 min = 27h takže za 1 den zničíš 1 buňku eeprom….
Když se nad tím zamyslím, tak by to mohlo jít např. touto cestou:
1, udělat to formou hrubé stupnice např:
<10cm = 0 (pwm)
15-20cm = 85
25-30cm = 170
35-40cm = 255
>40cm = zapiš ale ignoruj
žádné mezi stavy, prostě tyto hodnoty.
2, Každou 1s si změříš vzdálenost.
3, Tu zapíšeš do pole o 5-ti hodnotách, které budeš neustále posouvat.
4, Když 3 z 5 hodnot budou stejné a přitom menší než 40cm nastav PWM a zapiš do eeprom (pokud je změna proti původní hodnotě v eeprom)Takže dáš ruku na víc než 3s na vzdálenost/intenzitu jakou chceš a podle toho se ti nastaví LED.
Co ty na to? Je to co si představuješ?
posjirkaÚčastníknemusíš to nulovat, stačí když budeš dál odpočítávát millis od old-millis. Stejně to nepustí v rámci proměnné více než je její rozsah a bude ti počítat od nuly. když dáš byte a jeho max hodnotu 255 a příčteš 1 tak máš zase 1 a né 256.
posjirkaÚčastníkco to je panel na ruku?
Nepíše do jaké vzdálenosti a jak složitou potřebuješ komunikaci.
Pro jednoduché řešení se používají moduly 433MHz
http://arduino8.webnode.cz/news/lekce-20-arduino-a-vyuziti-433-92-mhz/pro složitější bluetooth nebo Xbee ten je ještě v provedení silver a gold
http://arduino8.webnode.cz/news/lekce-20-arduino-a-vyuziti-433-92-mhz/případně moduly na 2,4GHz tuším že s čipem NRF24L01 např:
https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTokončit můžeš u wifi řešení. Využít vlastní wifi síť, z 1 arduina udělat miniserver, který bude generovat obsah HTML stránky a ostatní jej pak jen dekodují.
posjirkaÚčastníkok hlavní je spokojenost .)
posjirkaÚčastníkintegrovaný obvod nebli šváb je jen shluk zsiučástek v 1 pouzdru a převládá tam saoučástka zvanaá tranzistor. Když nepochopíš tranzitor tak tě šváb nevytrhně….
Navíc bylo určutě myšleno tranzistor jako spínač. Žádné v/a charakteristiky, žádný pracovní bod, jen zapni vynpi.posjirkaÚčastníkještě si vyzkoušej jestli ti dovolí pracovat dál s jiným pinem.
myslím tím, když aktivuješ 1 pin na zpoždění, můžeš aktivovat hned i druhý?
Myslím, že minimálně budeš muset udělat druhou instanci timer aby se ti nemíchali proměnné z knihovny….
originální řešení je uděláno jako aktivace časovače a ve smyčce loop si aktualizuje strojní čas do rozhodovacího procesu.posjirkaÚčastníkjo to uvodní 10s přepnutí může mít 2 příčiny:
1, start Arduina kdy bootloader čeká na rest pro nahrání programu nebo pokračuje dál v aktuálním programu
2, knihovna timer má na začátku reset proměnných a registru. To chvilku trvá …posjirkaÚčastníkPožíváš knihovny, které nevíš jak fungují a proto se pak divíš.
Navíc je to jak jít s bazukou na komára. Jde to mnohem elegantnějí:// zpozdeni tlacitka // v1 // by JP 2016 // program po stisku tlačítka rozsvítí LED diodu a nechá jí 5s rozsvícenou, pak ji zhasne a opět čeká na stisk tlačítka const int LED = 13; // led dioda const int TLACITKO = 10; // tlacitko proti zemi boolean CEKAM = false; // kdyz je true tak ceka na zhasnuti. unsigned long OLDTIME = 0; // strojní čas posledního stitku tlačítka unsigned long ZPOZDENI = 5000; // čas zpoždění zahsnutí LED diody v ms. unsigned long MYTIME = 0; // aktuální čas -zpoždění void setup() { pinMode(LED, OUTPUT); // nastaveni jako vystup pinMode(TLACITKO, INPUT_PULLUP); // nastaveni jako vystup OLDTIME = millis();// zapamatuj si aktuální strojní čas } void loop() { digitalWrite(LED, CEKAM); // zapis stav na LED if (digitalRead(TLACITKO) == 0) { // při stisku tlačitka if (CEKAM == false) { // a zhasnuté LED diodě CEKAM = true; // změn stav OLDTIME = millis(); // zapamatuj aktuální strojový čas } } if (CEKAM == true) { MYTIME = millis()-ZPOZDENI; // výpočet času zpoždění if (MYTIME > OLDTIME){ // porovnání aktuálního čas a OLDTIME se zpožděním CEKAM = false; // když překročím zpoždění zhasni LED diodu } } }
posjirkaÚčastníkdej sem jednoduchý kod s funkcionalitou co potřebuješ a já ti řeknu jak to upravit.
Chápeš, že se ptáš ze svého pohledu na věc …..? Nevidím ti do hlavy, tak ti nemůžu odpovědět. Navíc arduino nemá thead. Je jednoprocesorový 1 vláknový. Tudíž nemůže řešit 2 paralelní procesy. umí pouze mezi procesy přepínat a to ještě na základě interních časovaču resp. na principu přerušení. Jsme tu v „c++“ deplhi je trochu jinde.posjirkaÚčastníkarduino to má trochu zvláště udělané. Vin můžeš použít jak pro napájení tak jako přemostění napájecího napětí.
Stejně tak můžeš obejít stabilizátor 5V a připojit 5V přímo na pin 5V a obejdeš stabilizátor. Jen bacha jakou verzi Arduina používáš, né všechny mají správně zapojené stabilizátory s ochranou diodou(zvlášt made in china)posjirkaÚčastníkno podle tvého přísvěku z vedlejšího vlákna z toho taháš 0,7A.
Když si vezmeš do uvahy, že uvnitř arduina je to lineární stabilizátor na 5V tak máš výkonovou ztrátu 0,7Ax7V = 4,9W.
Podívej se jakou to má chladící plochu a vysvětlení je na světě.
Neoporučuje se zatěžovat více než 0,5A a to ještě krátkodobě.
Ten interní (v arduinu) stabilizátor je jen pomocný pro vlastní chod.
Pokud chceš něco víc, musíš jít externím stabilizátorem.
Já jsem na Dinduinu používal 2 stabilizátory na 5V 150mA.
Jeden pro chod atmegy a druhý pro externí aplikace.
Relé jsem spínal přímo napíjecí napětím, resp. vybíral jsem relé na 9V a spouštěl je 7V.
Ty cestičky na desce arduina taky můžou sublimovat 🙂posjirkaÚčastníkSamozřejmě že to jde a jak na to?
No doplnit do kodu funkci cyklovače.
Co ti jiného mám napsat bez kodu ….posjirkaÚčastníkještě není špatný tento :
https://123d.circuits.io/lab
je sice online ale pobral mi i to co ten první ne. Stačí se jen zaregistrovat …posjirkaÚčastníkjá jsem spíš na HW ale v poslední době jsem nějákej línej to pořád předělaávat, tak pro jednoduché věci používám toto:
https://www.sites.google.com/site/unoardusim/homeHlavně si zbytečně neničním paměť přepisováním nových programu.
Kdyby to ještě mělo LCD display tak se vykašlu na cokoliv jiného 🙂posjirkaÚčastníkhod sem zapojení nebo aspon fotku. Jinak se bavíme o ničem.
Mě to v simulátoru fungolo takže bych hledal asi chybu u tebe.posjirkaÚčastníkzkontroluj si zapojení. Už z videa vidím, že máš drát (co má jít na tlačítko -) ve vzduchu. Druhou stranu nevidím, ale asi jí máš stejně. Navíc pull up odpory nepotřebuješ, protože jsem v kodu aktivoval interní, takže stačí jen uzemnit příslušné piny.
Jinak chválím admina za možnost nahrát soubor … děkujme
posjirkaÚčastníkjá chápu k čemu je to zpoždění, chtěl jsem jen říct, že když budeš mít porouchovou hlášku o přetopení kotle tak nemůžeš čekat až ti doběhen nějáký čas amusíš hned odstavit kotel.
Začátek bych viděl tak, že zkusíš blikání LED diody a postupně si vyzkoušíš jednotlivé funkce jako reakce na tlačítko, přes měření teploty.
Pak si vem cokoliv na tvorbu diagramů a nakresli si co má jak fungovat a jaé to bude mít funkční a poruchové stavy + co s tím při poruše.
Mít víc času tak ti pomůžu ale už jsem toho nasliboval dost a nestíhám to všechno plnit. -
AutorPříspěvky