posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
dělič napští samozřejmě jde, U proudu je to horší.VEm základní teorii, kdy zdroj má 12 a max. proud 2A. Dáš mu zátěž 10 Ohm (motor)
Ten má při 12V odběr 12/10 = 1,2A.
Když použiješ měřící odpor 1Ohm tak celkový odpor spotřebičů (motor + měřící odpor má 11 Ohm). Tento komplet má ale odběr 12/11 = 1,09A takže sisi zavedl chybu měření o 0,11A z 1,2A. Navíc motor nedostává 12V. ztráto na odporu je 1,09 A * 1 Ohm = 1,09V.
Zdroj měl 12V na motor se dostane 12-1,09 = 10.9V … Ten asi nejde na 100 % 🙂posjirkaÚčastníkto rozhodně nepůjde. 10 Ohm je extrémně moc. takový úbytek napětí by ovlivnil celkový průběh, nebo ho spíš totálně zabil.
Při 5V je úbytek 0,5V 10 procent. To se ještě dá přežít, takže pro 2A použít 0,22Ohm je v pořádku, ik dyž na hraně….
Vem si že napájích 5V mobil a na mobilu je 4,5V … to asi není ideální stav 🙂posjirkaÚčastníkpřesně jak píšeš. INA219 by ti to mohlo vyřešit. Abych přiznal barvu : o tomto řešení jsem nevěděl. Díky za poučení 🙂
Jinak už to možná komplikuju ale použil bych Sd kartu a LCD display, nebo 2 LED diody
Po připojení by na SD kartě zavedl nový soubor (1.csv). Pokud by byl obsazen inkremntoval by nahoru a založil další (vhodné pro případné krátkodobé přerušení napájení třeba na zlomeném kabelu)
Rozsvítil by LED signalizující záznam.
po určitém, čase (třeba 10s, nebo 1 minuta) by si změřil proud a něpětí. Tyto údaje by zaznamenal do souboru.
Když by proud byl menší než dolní mez (třeba 20mA) což by signalizovalo ukončení nabijení, rozsvítil by LED signalizující ukončení nabijení. Zároveň by zhasnul LED isgnlizující záznam.posjirkaÚčastníkto musíš říct na začátku co chceš vlastně měřit. Bez toho to nejde.
1W kde jsem vzal? 0,1Ohm a proud 2A = ztráta 0,2V
Ztrátový výkon = 0,2V * 2A = 0,4W . 1W v pohodě.
Při 3A by to bylo 0,1Ohm * 3A = 0,3V => ztrátový výkon 0,3V * 3A = 0,9W to je tipťop bez rezerv.
Proto je třeba si říct co vlastně chceš a v jakých paramaterech.
Napětí bych asi vyřeišl tak, že bych arduino napájel 3,3V.
Proč? Stabilizátor 3,3V bez problému bude fungovat jak na 5V tak na 12V.
Navíc můžeš použít třeba SD kartu na ukládání dat (ta potřebuje 3,3V napájení i komunikaci). Když to uložíš do CSV formtu, tak to v excelu v pohodě otevřeš a můžeš tvořit grafy.posjirkaÚčastníktak já už chybu našel a není tvoje 🙂
Nevím proč, ale používají radio.read() jako funkci s návratovou hodnotou ( done = …).
Tato funkce ale žádnou návrtotvou hodnotu nepodporuje a tudíž nemůže ani fungovat while …Ve výsledku zkus tuto verzi:
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> int msg[1]; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int LED1 = 3; void setup(void){ Serial.begin(9600); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); pinMode(LED1, OUTPUT); } void loop(void){ if(radio.available()){ //bool done = false; //while (!done){ while (radio.available()){ radio.read(msg, 1); Serial.println(msg[0]); if (msg[0] == 111){ delay(10); digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } delay(10); } } else { Serial.println("No radio available"); } }
a pro vkládání kodu používej párové značky CODE (předposlední tlačítko při psaní odpovědi) jinka se ti to rozhází, přepíšou se ti dvojité úvozovky atd.
posjirkaÚčastníkpředpokládám chyhu v knihovnách. Stáhni si ty z instructables.com
http://www.instructables.com/id/Wireless-Remote-Using-24-Ghz-NRF24L01-Simple-Tutor/?ALLSTEPS
a nainstaluj si je.
Někdy je na vině i samotné Arduino IDE a je třeba jej přeinstalovat nebo alespoň pročistit instalované knihovny.Podle ohlasů na istructable je na vině knihovna RF24 …
posjirkaÚčastníkmyslím to takto.
Připojením pinu přímo na +5V je skvělá cesta do pekel. Nikdy se nepřipojuje napájení přímo bez ochranného odporu. Hrozí zničení vstupních obvodů.Attachments:
posjirkaÚčastníkpředpokládám, že potřebuješ pouze sledovat nabijení a nikoliv ho řídit. Pak satčí do cesty vložit přesný odpor (třeba 0,1 Ohm/ 1W) a měřit na něm úbytek napětí. Předpokládám, že se bavíme o proudech do 2A kdy bude ztráta na odporu 0,2. Při 5V napájení to bude mít citlivost cca 5mv = 20 mA. Při použití odporu 0,22Ohm bude citlivost ještě větší. Komunikace s excelm je třeba zde:
http://www.instructables.com/id/Sending-data-from-Arduino-to-Excel-and-plotting-it/
schéma nabiječky :
http://www.allaboutcircuits.com/projects/create-an-arduino-controlled-battery-charger/
a nebo pojdme do hotoveho řešeni:
http://www.gadgetmakersblog.com/phone-charger-current-comparison/posjirkaÚčastník1. nikdy nepřipojuj +5V přímo na piny. Proto se dělá toto zapojení přesně opačné:
+5V – odpor – pin – tlačítko (kontakt) – zem
Reaguje pak na úroveň LOW ( 0 )
2, není špatné použít LED 13 jako indikační (nic se nemusí zapojovat) a na ní svést oba 2 piny. když bude jeden z pinu == LOW roszvi´t LEd jinak zhasni LED.posjirkaÚčastníkpřesně jak píše Vojtěch.
1. použij smyčku for a do ni uzavři celý průběh bargrafu pro 1 směr.
2. v setup() má piny vypsané z pole, v loop() už vypsiuješ každý zvláš´t. i tady ti pomůže pole.
3. různě časy spoždění pro 2 směry můžeš nastavit zvlášť po dokončení smyčky
4. máš zmatek v počtu LED v poli (11 ks) a v setup() (12ks)Můžu tě trochu nakopnout správným směrem. Zapiš do programu tyto posloupné funkce:
setup()
smyčka for pro i = 0 až 10
– nastav pinmode pro LED[i]
– nastav LED[i] na LOW
konec smyčkyloop()
smyčka for pro i = 1 až 10
– nastav LED[i] na HIGH
– čekej
konec smyčky
smyčka for pro i = 1 až 10
– nastav LED[i] na LOW
– čekej
konec smyčky
smyčka for pro i = 10 až 1
– nastav LED[i] na HIGH
– čekej
konec smyčky
smyčka for pro i = 10 až 1
– nastav LED[i] na LOW
– čekej
konec smyčkysamozřejmě to jde ještě výrazně zjenodušit, ale je třeba si uvědomit možnosti a funkci jednotlivých příkazů. Pokud budeš chtít ještě o stupínek nahoru, tak můžes definovat proměnnou a která bdue mít hodnoty 1 až 4, ty pojednou v hlavní smyčce loop() a budou značit jednotlivé fáze změny svitu LED:
1 – rozsvi´t 1-10
2 – zhasni 1-10
3 – rozsviť 10-1
4 – zhasni 10-1
na to by byl vhodný select case ….ps. a´t tu nejsem ukamenován: vím, že to jde mnohem jednoušeji, ale když začíná je lepší aby to pochopil jak co funguje, než mu dát hotový kod.
posjirkaÚčastníktak jsem se konečně dostal no to tvoje řešení.
knihovny se netlučkou – vždyť to fungovalo v instructable.com , ale zaráží mě 2 věci:
1- spouštíš vysílač na urovńi HIGH. Ty opravdu připojuješ +5V přímo na pin? to je celkem sebevražda.
Vždy se dává odpor (1k0) mezi pin a +5V a pak se tlačítkem ten pin přizemní (takže úroveń LOW)
2 – proč máš pauzu 1000 ms (vysílač) ,po odelslání signálu, když v originále bylo 10ms. Takže mohl ten signál odeslat několikrát a pak byla větší pravdepodobnost, že se chytí.
JKeslti chceš omezit počet semoutí, tak to nech až u přijímače.posjirkaÚčastníka proč nepoužiješ funkci replace
https://www.arduino.cc/en/Tutorial/StringReplaceposjirkaÚčastníknapadá mě varianta … zda knihovna virtual Wire nepoužívá stejné časovače/přerušení jako knihovna pro IR/foták…. jak budu mít chvilku zkusím se na to podívat…
posjirkaÚčastníktak to zapoj jak to měl ten sebastian – z arduina přímo na ir led …
posjirkaÚčastníkuž an neumím česky 🙂 … samozřejmě tipnul …
posjirkaÚčastníkto se klidně může stát. IR LED má mimo jiné parametr jako vlnová délka. může být špatně nastavená i nosná frekvence a foťák ji pak nedetekuje. Jak píšeš, že jsi zkoušel ten „přímý“ program arduino- foťák a nefunguje , tak bych to na nesprávnou IR LED i typnul.
posjirkaÚčastníknech si vypsat co ti přijímá . viz exampl na stránkách tvůrce knihovny:
https://www.pjrc.com/teensy/td_libs_VirtualWire.htmlurčitě bych použil více než 1 znak. zrovna „1“ se vcelku blbě hledá v tom co ti bude chodit v návalu rušení.
posjirkaÚčastníkúplně na začátku. Tam kde máš
int tlacitko = 0;
jsem rád, že to funguje jak potřebuješ … jen při tom deklarování proměných nezapomeň že je už jednou máš, tak je nemůžeš deklarovat znovu ve funkcích.
Těm proměnným deklarovaným na začátku se pak říká globální proměnné. tzn. jsou společné pro všechny funkce/metody.posjirkaÚčastníkpo testu klidne zakomentovane casti smaz … bude to prehlednejsi
posjirkaÚčastníkomlouvat se vubec nemusis. nikdo z nas nezna vsechno a kazdy nejak zacinal.
Kdyz vkladas kod pouzivej parove znacky „code“ (tlacitko CODE) pred a za kodem. uchova si formatovani. trochu jsem ti to prekopal:
– zrusil duplicitni vypocty
– odstranil zobrazovani obrazovek jen pri stisku tlacitka (funkce zobraz() )
– presunul promennou tlacitko
– naformatoval podle se abych se v tom vyznal.
– …vsechny zmeny mam pod revizi “ #1 “ takze ji muzes v pohode dohledat
Vyzkousej to a uvidis. ja nema jak to vyzkouset a stavet se mi to vazne nechce 🙂 :// #1 - BY JP 11/2016 // uprava na prepinani obrazovky pomocí tlacitek IR ovladace // uprava na zobrazovani aktualnich dat (v puvodni verzi zustali hodnoty z doby prd sepnutim tlacitka) /*—–( Import needed libraries )—–*/ #include <LiquidCrystal.h> #include <SD.h> #include <Wire.h> #include „RTClib.h“ #include <interval.h> #include <IRremoteInt.h> #include „IRremote.h“ /*—–( Declare Constants )—–*/ int receiver = 2; // pin 1 of IR receiver to Arduino digital pin 11 int teplVenk = 1; //Cidlo Commet int vlhkVenk = 0; //Cidlo Commet int topTepl = 3; //Pt100 topení teplá int topStud = 2; //Pt100 topení studena int tlacitko = 0; // #1 - ID cislo tlacitka /*—–( Declare objects )—–*/ IRrecv irrecv(receiver); // create instance of ‚irrecv‘ decode_results results; // create instance of ‚decode_results‘ File logfile; Interval blink; LiquidCrystal lcd(3, 4, 5, 6, 7, 8); // initialize the library with the numbers of the interface pins RTC_DS1307 RTC; // define the Real Time Clock object /*—–( Declare Variables )—–*/ const int chipSelect = 10; const long blinkinterval = 100; // interval at which to blink (milliseconds) void setup(){ /*—-( SETUP: RUNS ONCE )—-*/ Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver lcd.begin(16,2); Wire.begin(); RTC.begin(); //—————————————- if (! RTC.isrunning()) { Serial.println(„RTC is NOT running!“); // following line sets the RTC to the date & time this sketch was compiled RTC.adjust(DateTime(__DATE__, __TIME__)); } //——————————- Serial.print(„Initializing SD card…“); pinMode(SS, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println(„Card failed, or not present“); // don’t do anything more: while (1) ; } Serial.println(„card initialized.“); // create a new file char filename[] = „METEO_00.CSV“; for (uint8_t i = 0; i < 100; i++) { filename[6] = i/10 + ‚0‘; filename[7] = i%10 + ‚0‘; if (! SD.exists(filename)) { // only open a new file if it doesn’t exist logfile = SD.open(filename, FILE_WRITE); break; // leave the loop! } } Serial.print(„Logging to: „); Serial.println(filename); logfile.println(„Datum, TeplotaVenku, VlhkostVenku, TopeniTepla, TopeniStudena“); tlacitko = 0; // #1 - nastaveni vychozi hodnoty }/*–(end setup )—*/ void loop(){ /*—-( LOOP: RUNS CONSTANTLY )—-*/ if (irrecv.decode(&results)) { // have we received an IR signal? // Serial.println(results.value, HEX); UN Comment to see raw values translateIR(); irrecv.resume(); // receive the next value } //——————————————————– int SCteplVenk = analogRead(teplVenk); SCteplVenk = map(SCteplVenk, 0, 1023, -20, 50); int SCvlhkVenk = analogRead(vlhkVenk); SCvlhkVenk = map(SCvlhkVenk, 0, 1023, 0, 100); int SCtopTepl = analogRead(topTepl); SCtopTepl = map(SCtopTepl, 0, 1023, 10, 120); int SCtopStud = analogRead(topStud); SCtopStud = map(SCtopStud, 0, 1023, 10, 120); String dataString = „“; DateTime now = RTC.now(); //———————————————————– if (blink.expired()) { blink.set(blinkinterval); // set new interval period logfile.print(now.year(), DEC); logfile.print(„/“); logfile.print(now.month(), DEC); logfile.print(„/“); logfile.print(now.day(), DEC); logfile.print(„,“); logfile.print(now.hour(), DEC); logfile.print(„:“); logfile.print(now.minute(), DEC); logfile.print(„,“); //———————————————————– logfile.print(SCteplVenk); logfile.print(„,“); logfile.print(SCvlhkVenk); logfile.print(„,“); logfile.print(SCtopTepl); logfile.print(„,“); logfile.print(SCtopStud); logfile.print(„,“); // delay(10000); //čekej 10minut //———————————————————— logfile.println(dataString); logfile.flush(); } //———————————————————– zobraz(); // #1 - vykresleni obrazovky }/* –(end main loop )– */ /*—–( Declare User-written Functions )—–*/ void translateIR(){ // takes action based on IR code received /* #1 duplicitni funkce int SCteplVenk = analogRead(teplVenk); SCteplVenk = map(SCteplVenk, 0, 1023, -20, 50); int SCvlhkVenk = analogRead(vlhkVenk); SCvlhkVenk = map(SCvlhkVenk, 0, 1023, 0, 100); int SCtopTepl = analogRead(topTepl); SCtopTepl = map(SCtopTepl, 0, 1023, 10, 120); int SCtopStud = analogRead(topStud); SCtopStud = map(SCtopStud, 0, 1023, 10, 120); // describing KEYES Remote IR codes */ // int tlacitko = 0; // #1 - zruseni switch(results.value){ case 0x141: tlacitko = 1; /* #1 - zruseni Serial.println(“ zmacknuto tlacitko 1 „); lcd.setCursor(0, 0); // set the cursor to (0,0): lcd.print(SCteplVenk); lcd.setCursor(0, 1); lcd.print(SCvlhkVenk); lcd.setCursor(3, 0); lcd.print(„C – Teplota“); lcd.setCursor(3, 1); lcd.print(„% – Vlhkost“); */ break; case 0x942: tlacitko = 2; /* #1 Serial.println(“ zmacknuto tlacitko 2 „); lcd.setCursor(0, 0); lcd.print(SCtopTepl); lcd.setCursor(0, 1); lcd.print(SCtopStud); lcd.setCursor(3, 0); lcd.print(„C – Kotel HOT“); lcd.setCursor(3, 1); lcd.print(„C – Kotel COLD“); */ break; case 0x143: tlacitko = 3; /* #1 Serial.println(“ zmacknuto tlacitko 3 „); */ break; case 0x944: tlacitko = 4; /* #1 Serial.println(“ zmacknuto tlacitko 4 „); */ break; case 0x145: tlacitko = 5; /* #1 Serial.println(“ zmacknuto tlacitko 5 „); */ break; case 0x946: tlacitko = 6; /* #1 Serial.println(“ zmacknuto tlacitko 6 „); */ break; case 0x147: tlacitko = 7; /* #1 Serial.println(“ zmacknuto tlacitko 7 „); */ break; case 0x948: tlacitko = 8; /* #1 Serial.println(“ zmacknuto tlacitko 8 „); */ break; case 0x149: tlacitko = 9; /* #1 Serial.println(“ zmacknuto tlacitko 9 „); */ break; case 0x940: tlacitko = 0; /* #1 Serial.println(“ zmacknuto tlacitko 0 „); */ break; default: /* #1 Serial.println(“ jine tlacitko „); */ }// End Case } //END translateIR void zobraz(){ // #1 - funkce vykresleni obrazovky switch(tlacitko){ case 1: Serial.println(“ zmacknuto tlacitko 1 „); lcd.setCursor(0, 0); // set the cursor to (0,0): lcd.print(SCteplVenk); lcd.setCursor(0, 1); lcd.print(SCvlhkVenk); lcd.setCursor(3, 0); lcd.print(„C – Teplota“); lcd.setCursor(3, 1); lcd.print(„% – Vlhkost“); break; case 2: Serial.println(“ zmacknuto tlacitko 2 „); lcd.setCursor(0, 0); lcd.print(SCtopTepl); lcd.setCursor(0, 1); lcd.print(SCtopStud); lcd.setCursor(3, 0); lcd.print(„C – Kotel HOT“); lcd.setCursor(3, 1); lcd.print(„C – Kotel COLD“); break; case 3: Serial.println(“ zmacknuto tlacitko 3 „); break; case 4: Serial.println(“ zmacknuto tlacitko 4 „); break; case 5: Serial.println(“ zmacknuto tlacitko 5 „); break; case 6: Serial.println(“ zmacknuto tlacitko 6 „); break; case 7: Serial.println(“ zmacknuto tlacitko 7 „); break; case 8: Serial.println(“ zmacknuto tlacitko 8 „); break; case 9: Serial.println(“ zmacknuto tlacitko 9 „); break; case 0: Serial.println(“ zmacknuto tlacitko 0 „); break; default: Serial.println(“ jine tlacitko „); } }
posjirkaÚčastníkale o tom to právě je…. myslím že jsem to popsal jasně.
Dej sem kod a můžeme ho upravit. Opravdu nebudu vymýšlet pseudo kod… na to vážně nemám čas….posjirkaÚčastníkzřejmě se troch nechápete.
Použil bych switch case.Představte si, že tlačítko 1 odešle bude mít kod 11 (co dostane od IR přijímače), talčítko 2 bude mít kod 12, tlačítko 3 kod 13.
obrazovky budou mít čísla 1, 2, 3Jen pro představu.
v setup() si nastavíš, že obrazovka = 1
ve smyčce loop() pak budeš neustále čekat na příjem kodu a podle toho co příjme změn
pomocí switch case na
kod 11 = obrazovka 1
kod 12 = obrazovka 2
kod 13 = obrazovka 3pak pokračuješ tím, že podle promenne „obrazovka“ zobrazíš co je třeba, tedy další switch case.
bez kodu se to blbě popisuje 🙂
posjirkaÚčastníktakže:
– máš rozdílné komunikační rychlosti (v setup() máš jednou vw_setup(4000); podruhé vw_setup(1200);)
– 433 Mhz je standardní řešení, jen je třeba dávat si pozor na napájení (aby to utáhlo vysílač). Pro vyšší výkon se dává vyšší napětí (tuším až okolo 9-12V) ale je to potřeba podívat se na datasheet tvého řešení.Nejsou všechyn stejné.
– nevím jak máš řešenou anténu. Její provedení výrazně ovlivňuje chování celého řešení hlavně pro dosah.
– když chceš něco odladit nech si vypsat na seriový port/monitor co ti vlastně přijímá.posjirkaÚčastníkfoto se nepřipojilo. Atmega328 je standardní čip pro adruino. Nám se tady jedná o druhý švíb blíž k USB portu …
posjirkaÚčastníkfotka nejde načíst… ovladače bys měl mít v adresáři arduino\driver
otázka co máš za opravdu za čip, jaké máš Windows (vím, že 10 ale máš výroční aktualizaci? bez ní mi třeba FT232 čipy nechtěl vůbec načíst), je dsta v pořádku? zkus na jiném PC. občas se stalo že tu někdo měl desku, která nefunogvala a tuším že to tylo špatně zapájenými piny….posjirkaÚčastník.. to byla spíš taková řečnická otázka … pro josef4 .. nezkoušel jsi jiný SW, Třeba Polargraf .
https://github.com/euphy
Ten by měl jít pod Mac jít taky spustit. Snažím se najít problém. Pokud ti ale Arduino IDE jde tak jak píše Vojtěch bude to chybka v SW. Ještě mě napadá taková divná varianta, nabootovat PC na jiném OS (nějáký linux live) a zkusit to.posjirkaÚčastníka může mi někdo vysvětlit, jaký je rozdíl mezi originálem a kopii ?
Když použiju stejný převodník a FW tak nemůže poznat rozdíl…posjirkaÚčastníkJASNĚ V POHO … 🙂
posjirkaÚčastníkOn kompilator obcas vypíše chybové hlášení, které není uplně přesně to co očekáváš. Prostš se dostane do slepé uličky a neví proč, tak zapíše poslední známé místo a chybu. Ve VBA je to ještě veselejší. Každá verze MS ACCESS má vlastní syntaxi a ty pak přemýšlíš, proč ti letitý kod najednounejde použít v této aplikaci … no to už je mimo téma.
LCD je super. Doporučuju 2 řády 16 znaků, protože je dostupný a realitvně levný.
Stačí si třeba v excelu udělat tabulku 2×16 a zkusti si vypsat jednotlivé možnosti a funkce. Resp. vymezit si prostor pro zobrazení a optimalizovat zprávy.
třeba místo „rozpenutí termostatu“ nechat na LCD zobrazit 1 nebo 0 pro jednotlivé funkce.
příklad
0123456789012345
0 DOHORENI 1 0 1 1
1 KVITANCE PORUCHYPrvních 8 znaků v prvním (0) řádku zálohovat pro aktuální proces.
Další 8 (2×4) nechat pro zobrazení stavu 4 hodnot (termostat kotle, prostorový, plamen, …)
Poslední řádek nechat na zprávy.Je to příklad nikoliv kuchařka. Promysli si co bys tam chtěl zobrazit a kouknem na to.
posjirkaÚčastníkto nemohlo fungovat … nech to být. Je opraveno a připraveno k testování 🙂
-
AutorPříspěvky