Close

posjirka

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 361. až 390. (celkem z 481)
  • Autor
    Příspěvky
  • odpověď na: Zaseknutí arduina #6641
    posjirka
    Účastník

    co takhle nějákou fotku (a´t víme jak to funguje), schéma zapojení a kod ????

    odpověď na: Klon? ano ne #6640
    posjirka
    Účastník

    určitě je namístě zmínit HWKITCHEN kde sjem koupil svoj první Arduino Seeeduino v2
    https://www.hwkitchen.cz/
    Klasické obhcody jako např. GME mají originál ARDUINO UNO za 650Kč, klon 360Kč
    http://www.gme.cz/klon-arduino-uno-p772-163

    Já mám velmi dobré zkušenosti s MCU STORE (je i na aukru) kde pravidelně nakupujeme i pro kroužek elektra . Klon Funduino za 330 Kč s tím, že čip je v provedení DIP, takže jej mužeš vyměnit:

    k tomu bych si být tebou koupil desku na prototypy

    a desku LCD s klávesnicí

    odpověď na: Klon? ano ne #6634
    posjirka
    Účastník

    asi přesnější vysvětlení najdeš tady:

    Mám funkční Arduino, nebo zmetek?

    Jinak u CH340G je potřeba najít na netu ovladač pro tyto čipy ale ani to není neřešitelný problém:

    CH340G converter Windows 7 driver download


    jen to není řešení plug n play. Prostě musíš si s tím vyhrát.

    Pokud vybíráš arduino pro začátečníka podívej se aby nemělo čip CH340g a nebyl to „noname“. Zkus řadu freeduino, seeeduino, freaduino, red board, …
    Jinak ztratíš tím zbytečně času pátráním jak nahrát „hello world“. Jako druhé si už kup co uznáš za vhodné.

    je otázka co s tím chceš dělat. Pro uplný začátek je super řada UNO, pro další řešení bych šel spíš do NANO nebo Micro případně samotný čip bez převodníku USB/UART

    odpověď na: Klon? ano ne #6620
    posjirka
    Účastník

    záleží jaký klon máš na mysli.
    Obecně jsou na originální desky použité „testované“ proesory, na klony dají co jim přijde pod ruku. navíc některé klony využívají jako převodník USB-UART čip CH340G místo původních FT232, nebo Atmega8 (s programem převodníku).

    Co se týká samotných procesorů, občas narazíš na téme stability klonů, šumy na analogových vstupech, ….
    Já třeba používám klon SEEEDUINO V2 a jsem nadmíru spokojen. Krom toho mám jetě noname klon Arduino mini pro a pro ostatní aplikac epoužívám samotné čipy + krystal programované přes ICSP port (Arduino dělá programátor). …
    Snad jsem pomohl

    odpověď na: Watt meter pomocí TA12-100 #6619
    posjirka
    Účastník

    tady jsi ve střídavé soustavě. Jaký máš kosinus fi ?
    Ten se i mění podle typu zátěže (kapaciní, indukční, …)

    odpověď na: Bezdrátová komunikace #6600
    posjirka
    Účastník

    to je přesně ono …
    a na druhé straně čekáš na přijem znaku „start“, pak budeš číst všechno ve smyčce dokud nepřijmeš znak „stop“

    odpověď na: Bezdrátová komunikace #6592
    posjirka
    Účastník

    Navrhni si komunikační portokol.
    asi bych šel cestou netisknutených znaků.
    Postě jeden znak bude označovat začátek komunikace, druhý konec komunikace.
    Třeba Char(1) bude začátek, char(2) bude konec. Vše mezi tím je string.

    posjirka
    Účastník

    máš 5 variant:
    1, použij jiný připojovací bod napíjení. Na Arduinu máš vstup Vin a to je to samé jako napájecí konektor.
    2, jdi cestou vlastního zdroje : stabilizátor 7805 + pořádné kondenzátory na vstupu.
    Pak to přivedeš na +5V a je hotov.
    3, Použij napájení přes USB. Prost2 nabije4ku na mobil p5es redukci na velke USB.
    4, Bateriové napájení
    5, na vstup připájej superkondenzátor o kapacitě třeba 1 až 10F. Ten je malý a je schopný ti překlenout tuto kolizní dobu. Pozor na velikost napětí ! Nejspíš budeš muset dát 2 do serie.

    odpověď na: Napájení Arduina #6560
    posjirka
    Účastník

    jojo zdroje. Já používám Arduino jako vývojový kit a pro reálný výrobek používám samotný čip AT Mega 328 + krystal a stadardní zdroj ze 7805 a kondenzátory 1m0.
    Originální Arduino má stabilizátory pro max. 150mA a kondenzátory 47u. To není nic moc.
    čip programuju přes icsp rozhraní.

    odpověď na: Propojeni nastenneho vypinace s Arduinem #6543
    posjirka
    Účastník

    trochu nechápu požadavek = dotaz.
    Potřebuješ mít vypínač/tlačítko na stěně (klasické na 230V) a porpojené s arduinem.
    Když stisknu tlačítko/vypínač tak arduino něco udělá.
    Resp. bude reagovat na změnu stavu tlačítka, takže ať nastane zapnutí ne bu vypnutí arduino musí udělat příslušnou akci.

    Zjednodušeně řečený příklad : na arduinu je LED dioda na pinu č.13.
    Na pinu 2 a 3 bude po jednom vypínači.
    1, Přepnu jeden vypínač = LED se rozsvítí
    2, přepnu libovolný vypínač = LED zhasne.
    3, přepnu libovolný vypínač = LED se rozsvítí.

    Chápu to správně?

    Pokud ano je třeba si uvědomit, že přepnutí vypínače neznamená pevné a trvalé spojení kontaktů. Realitou je, že přepnutí doprovází spoustu hazardních impuzů, které po chvilce utichnou. Takže rychlost arduina/atmegy je spíš na škodu. Budeš muset udělat to, že uděláš tzv. „switch boucing“.
    Já to třeba řeším časovou prodlevou.
    Zjistím si stav tlačítek a když se změní, tak určitou dobu (cca 250ms) na další změnu nereaguji.

    odpověď na: 1-wire teplomer a bluetooth #6537
    posjirka
    Účastník

    po hrubé kontrole to vypadá funkčně.
    Máš tam 2x delay podle mě zbytečně.
    Jen výsledný proces podmínky „if“ bych dal do složených závorek.
    Napadá mě, že jestli se neresetuje sám procesor.
    Bluetooth modul má celkem velkou spotřebu a po čase může zahřát a přetížit stabilizátor na desce. TO by pak znamenalo reset.
    Dej si na začátek něco jako text „start“.
    Když se ti objeví před změnou hodnot „start“ tak se ti resetoval čip.

    i tak neni nic ztraceno. můžeš si ti hodnoty zaznamenat do EEPROM a při startu si je znovu načíst. Vlastně by pokračoval tam, kde posledně skončil.
    Po stisku tlačítka (nový tlačítko) + reset by si ty udaje mohl resetovat.
    TO udělal tjde. jen pozor EEPRm má max.100 000 zápisu do každé buńky. Pak ta bunka není stabilní.

    odpověď na: Řídící jednotka pro peletový kotel #6493
    posjirka
    Účastník

    asi bych tě odkázal na EXOSITE.
    SPEKO2 to používá a nejspíš by ti dokázal poradit.
    http://arduino.sk/viewtopic.php?f=6&t=250&sid=1a2a735f040bc590a27d3aba42cb4ba0

    odpověď na: Řídící jednotka pro peletový kotel #6487
    posjirka
    Účastník

    super.
    Jestli chceš mít na seriovem portu zprávy o počítadlech tak jen doplnň další řádky Serial.printlm();
    a do závorek dej názvy proměnných.
    já bych šel spíš cestou LCD displaye.
    Stojí pár korun a potřebuješ na ně 6 volných pinu.
    Ideální je 16×2 (16 znaku x 2 řádky).
    Připojení je velmi jednoduché a pak ty zprávy co se kde děje můžeš vidět přímo na něm.
    Idealni je třeba tento:
    http://aukro.cz/modul-klavesice-1602-lcd-keypad-shield-arduino-i6089165384.html
    Nevim jsetli se ti nebude bít s modulem RELE, protože nevím jeho zapojení.
    Navic už tam máš tlačítka , takže je mužeš rovnou využít ….

    odpověď na: Řídící jednotka pro peletový kotel #6475
    posjirka
    Účastník

    Tak jsem ti zrušil reakci na prostorovy termostat pri procesu zapalovani.
    Navic je tam watchdog – resetuje sam procesor kdyz se zakousne (8s)
    to tedy vyvolalo zmenu dlouhych delayu na smycku kratkych dealyu.
    Pritom tam je navic na kazdem rohu reset casovace watchdogu – zabranuje autoresetu.
    Zkus to prosím otestovat. novy kod:

    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 27_3_2016
    
    // changelog
    // v 27_3_2016
    //   uprava procesu zapalovani - nebude reagovat na prostorovy termostat
    //   uprava dlouhych delayu na smycky,  pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s
    //   nastaveni definice poruch pro pozdejsi vyuziti
    // v22_3_2016
    //   uprava ladicich textu pro termostaty
    // v21_3_2016
    //   presunuti testuPlamene pouze do smycky udrzuj horeni
    //   doplneni textu do testu horeni
    //   oprava textu zprav
    //   zruseni diakritiky
    //   zapnuti alarmu pri vyskytu poruchy
    // v20_3_2016
    //   slouceni podminenych funkci  
    //   vypnuti zhaveni pri rozepnuti termostat� (kotlovy nebo prostorovy)
    //   rozdeleni funkci do vlastnich funkcnich bloku
    //   zapojeni seriove komunikace pro odladeni funkci 
    // v16_3_2016
    //   uprava podminky smycek (zruseno =)
    //   posun zpozdeni 5s z procesu zapaleni na jeho konec
    //   doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni
    //   upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle
    //   nastaveni poruchy a jeji kvitance tlacitkem na pinu 9
    
    // definice poruch
    // bit  funkce
    // 0    prehrati kotle pri zapalovani
    // 1    ztrata plamene pri horeni
    // 2    volne
    // 3    volne
    // 4    volne
    // 5    volne
    // 6    volne
    // 7    volne
    
    // knihovna watchdogu
    #include <avr/wdt.h>
    
    #define davkovaniPelet 6 //davkovani pelet � snek
    #define spirala 5 //zapalovaci spirala
    #define ventilator 3 //ventilator
    #define alarm 10 //signalizace poruchy
    #define prostorovyTermostat 12 //prostorovy termostat
    #define kotlovyTermostat 2 //kotlovy termostat
    #define fotobunka 8 //fotobu�ka pro kontrolu plamene
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy
    
    long cas=13000;
    int smycka1 = 0; // pomocna smycka - zapaleni
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s
    int smycka2 = 0; // pomocna smycka - udrzeni horeni
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni
    int smycka3max = 2; // max.pomocne smycky
    int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet
    int smycka4max = 12; // max.pomocne smycky
    int smycka5 = 0; // pomocna smycka - rozhoreni
    int smycka5max = 5; // max.pomocne smycky
    int smycka6 = 0; // pomocna smycka - dohoreni
    int smycka6max = 84; // max.pomocne smycky
    byte porucha = 0; // promenna pro zaznam poruchy
    
    void setup() {
    	// nastav seriovou komunikaci na rychlost 9600 bd 
    	Serial.begin(9600);
    	Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
    	pinMode(davkovaniPelet, OUTPUT);
    	pinMode(spirala, OUTPUT);
    	pinMode(ventilator, OUTPUT);
    	pinMode(alarm, OUTPUT);
            pinMode(prostorovyTermostat, INPUT);
    	pinMode(kotlovyTermostat, INPUT);
    	pinMode(fotobunka, INPUT);
    	pinMode(trimr1, INPUT);
    	pinMode(tlacitkoKvitance, INPUT);
    	// vsechno vypni
    	vypniVse();
            // nastav watchdog na 8s
            wdt_enable(WDTO_8S);
    }
    
    void loop() {
            wdt_reset(); // resetuj watchdog
    	Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
    	smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0
    	if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
          	    Serial.println("Prostorovy termostat zapnut"); // ladici seriova komunikace
    		if(digitalRead(kotlovyTermostat) == HIGH){	// kotlovy termostat je zapnuty
            	Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace
    			// startovaci davka pelet
    			//------------------------
    			zapalovaciDavkaPelet();
    			
    			// proces zapaleni
    			//----------------
    			zapaleni();
    			
    			// test poruchy
    			// -----------------
    			//testPlamene(); 
    			
    			// udrzeni horeni
    			//--------------
    			udrzujHoreni();
    			
    			// dohoreni
    			//---------
    			dohoreni();
    		}
        } else {
        	Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace
        }
    	// kvitence pripadne poruchy
    	//-------------------------------
    	kvitancePoruchy();
    }
    
    void vypniVse() {
    	// funkce vypni vse
    	Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, LOW); //vypni davkovani
    	digitalWrite(spirala, LOW); //vypni zhaveni
    	digitalWrite(ventilator, LOW); //potom vypni ventilator
    }
    
    void zapalovaciDavkaPelet() {
    	// prvotni davkovani pelet pro zapaleni
    	Serial.println("Davkuji pelety pro zapaleni ... 12s"); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, HIGH); //davkuj pelety
            for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
    	  delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
            //delay(12000); //po dobu 12s
    	digitalWrite(davkovaniPelet, LOW); //potom vypni davkovani
    	digitalWrite(ventilator, HIGH); //zapni ventilator
    	digitalWrite(spirala, HIGH); //zapni zhaveni
    }
    
    void zapaleni() {
    	// funkce zapaleni pelet
    	// 3 pokusy o zapaleni
    	Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
    	for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
    		// smycka "1-10" minut zapalovani
    		for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
                            wdt_reset(); // resetuj watchdog
    			Serial.print("Pokus "); // ladici seriova komunikace
    			Serial.print(smycka3); // ladici seriova komunikace
    			Serial.print("/"); // ladici seriova komunikace
    			Serial.print(smycka3max); // ladici seriova komunikace
    			Serial.print(" stav: "); // ladici seriova komunikace
    			Serial.print(smycka1); // ladici seriova komunikace
    			Serial.print("s/"); // ladici seriova komunikace
    			Serial.print(smycka1max); // ladici seriova komunikace
    			Serial.println("s "); // ladici seriova komunikace
                            //if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){	// prostorovy  nebo  kotlovy termostat vypne
    			if(digitalRead(kotlovyTermostat) == LOW){	// prostorovy  nebo  kotlovy termostat vypne
    				digitalWrite(spirala, LOW); //vypni zhaveni
    				smycka1 = smycka1max; // ukonci smycku1
    				smycka3 = smycka3max; // ukonci smycku3
    				Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace
                                    bitSet(porucha,0); // nastav poruchu bit c.0 na "1"
    			}
    			if(digitalRead(fotobunka) == HIGH){	//pokud fotobunka vidi plamen
    				digitalWrite(spirala, LOW); //vypni zhaveni
    				smycka1 = smycka1max; // ukonci smycku1
    				smycka3 = smycka3max; // ukonci smycku3	
    				Serial.println(" hori ...");	 // ladici seriova komunikace				
    			} else {
    				Serial.println(" nehori ...");	 // ladici seriova komunikace	
    			}
    			delay(1000);
    		}
                    for (smycka5 = 0;  smycka5 < smycka5max; smycka5 ++){
    	          delay(1000); 
                      wdt_reset(); // resetuj watchdog
                    }
    		//delay(5000); //cekej 5s
    	}
    }
    
    void udrzujHoreni() {
    	// funkce udrzeni horeni
    	Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
    	for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
                    wdt_reset(); // resetuj watchdog
    		smycka2 = 0; // vynuluj smycku
    		if(digitalRead(prostorovyTermostat) == HIGH  && digitalRead(kotlovyTermostat) == HIGH){	// prostorovy + kotlovy termostat je zapnuty
    			if(digitalRead(fotobunka) == HIGH){	//pokud fotobunka vidi plamen
                    	Serial.println("Test plamene ... hori"); // ladici seriova komunikace
    				digitalWrite(davkovaniPelet, HIGH); //davkuj pelety
    				delay(1000); //pockej 1s
    				digitalWrite(davkovaniPelet, LOW); //vypni davkovani
    				delay(1000); //pockej 1s
    			} else {
    				delay(1000); // pocekej jeste 1s a zkus to znovu
    				if(digitalRead(fotobunka) == LOW){	//pokud fotobunka nevidi plamen
                                    Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
                                    smycka2 = smycka2max; // ukonci smycku
    		                //porucha = 1; // nastav poruchu
                                    bitSet(porucha,1); // nastav poruchu bit c.1 na "1"
                                    digitalWrite(alarm, HIGH); // zapni alarm
    				}
    			}
    		} else {
    			smycka2 = smycka2max; // ukonci smycku
    		}  
    	}
    }
    
    void dohoreni() {
    	// funkce dohoreni
    	Serial.println("Dohoreni ..."); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, LOW); //vypni davkovani pelet
    	digitalWrite(spirala, LOW); //vypni zhaveni - pro jistotu
            for (smycka6 = 0;  smycka6 < smycka6max; smycka6 ++){
    	  delay(1000); 
              wdt_reset(); // resetuj watchdog
            }
    	//delay(84000); //pockej 84s
    	digitalWrite(ventilator, LOW); //potom vypni ventilator
    }
    
    void kvitancePoruchy() {
    	// funkce kvitance poruchy
    	
    	if(porucha > 0 ){	// kdyz je porucha aktivni
          	Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace
    		// vypni vse
    		vypniVse();
    		while (digitalRead(tlacitkoKvitance) == HIGH) {	// zapni alarm a cekej na stisk tlacitka
    			digitalWrite(alarm, HIGH); // zapni alarm
    			Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
                            wdt_reset(); // resetuj watchdog
    		}
    		Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
    		digitalWrite(alarm, LOW); // vypni alarm
    		porucha = 0; // vynuluj poruchu
    	} else {	// jinak 
    		Serial.println("Zadna porucha  ..."); // ladici seriova komunikace
    		digitalWrite(alarm, LOW); // vypni alarm
    	}
    }
    odpověď na: Podmínka IF s D3231 #6474
    posjirka
    Účastník

    ve výsledku, napiš nám co přesně má tvůj program dělat a podíváme se na to, nebo tě aspon nasměrujeme. někdy je vhodné použít podmínku „if“ pro přesný čas, nekdy pro časový usek …
    možná ti trochu pomůžu příspěvkem z trochu jiného tématu, ale výsledk je podobný.
    http://arduino.sk/viewtopic.php?f=4&t=152&sid=48998740df66b243127485c0f35cd739

    případně tady máš příklad budíku:
    http://arduino.sk/viewtopic.php?f=3&t=209&sid=48998740df66b243127485c0f35cd739

    odpověď na: propojení 2 mikrokontrolérů #6473
    posjirka
    Účastník

    nrf24l01 mám doma si rok a půl a leží celou dobu v šuplíku 🙂
    nechal jsem se nachytat a na ebayi byl veden jako wifi adapter.
    Tak jsem jej objednal bez ověření si informací 🙂 . důvěřuj ale prověřuj.
    50 m je vcelku dost a moc bych na tu spolehlivost nedal ani v jednom případě.
    Nemáš tam třeba ethernet? i tak by to šlo řešit.
    Bezdrát budeš ladit dlouho a zbytečně…
    Toto budou vcelku choulostivé data a udržet je v pořádku bude znamenat poslat min.2x-3x a porovnat si výsledky. přípaně výběr 2 ze 3 …

    použij Rs485 a budeš mít klid.

    odpověď na: I2C #6472
    posjirka
    Účastník

    a po 2 hodinách se ti zhroutí komunikace nebo resetuje arduno?
    Pokud linka videl bych to na zahlcený buffer, pokud reset arduna tak chyba v čipu.
    zkoušel jsi i jiný arduino?
    Stačil by čip s ledkou…

    odpověď na: Pomoc s kódem – přidání serva #6471
    posjirka
    Účastník

    odkud máš knihovnu na ovládání serva?
    Ano vidím že je pro časovač timer2, ale i tak se na servo zapisuje uhel natočení serva v rozsahu 0-180 st.
    Ty máš zapsané
    a.write(2000);
    tedy 2000 st.
    dej tam

    a.write(0);
      delay(2000);
      a.write(180);
      delay(2000);

    to by mělo otočit servem zleva doprava.
    Navíc
    a.attach(9);
    by se měl definovat pouze 1x a to ve funkci Setup()

    odpověď na: Řídící jednotka pro peletový kotel #6444
    posjirka
    Účastník

    to oplocky:
    nechci sem dávat svuj soukromý mail, tak mi napiš na
    posjirka-arduino@seznam.cz
    je to dočasný mail a nebudu tam pořád, nicméně tě pak přesměruju na soukromý mail…

    odpověď na: Řídící jednotka pro peletový kotel #6443
    posjirka
    Účastník

    nedělal jsem s tím nic (tlačítko potvrzení poruchy).
    K tomu bodu 3.
    3) test vypnutí termostatu během zapalování
    na jaký termostat má reagovat a najaký nemá.
    Předpokládám, že kotlový termostat může vypnout i při žhavení a v tu chvíli bych měl se vším skončit a nechat dohořet.
    Prostorový termostat bude jak při žhavení?
    Na začátku aby vubec začal proces žhavení je třeba mít oba dva termostaty sepnuté.
    Po startu muže prostorový termostat vypnout.
    Jestli to chápu správně chceš aby zapálení už po startu nebylo na prostorovém termostatu závislé a na jeho vypnutí by reagoval až v procesu udržení hoření?

    odpověď na: Řídící jednotka pro peletový kotel #6429
    posjirka
    Účastník

    zkus jestli se dostaneš sem:

    https://123d.circuits.io/circuits/1638547-regulace-pro-peletkovy-kotel

    Je tam celé zapojení + simulator včetně kodu.
    Autor jsem já, takže jen já mám právo změn, ale můžeš si to vyzkoušet a podívat se jak je co zapojený. Ať zbytečně zasaviníme toto forum …
    Když klikneš na součástku tak se ti ukáže co je to zač/co simuluje …

    odpověď na: Řídící jednotka pro peletový kotel #6422
    posjirka
    Účastník

    to je fakt zvláštní. Jak budu mít trochu času a prostředků, tak to zkusím na normálním arduinu. Teď jedu přes simulátor. v příloze je hrubý diagram funkce …

    odpověď na: Řídící jednotka pro peletový kotel #6420
    posjirka
    Účastník
    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 20_3_2016
    
    // changelog
    // v20_3_2016
    // sloučení podmíněných funkcí  
    // vypnuti zhaveni pri rozepnutí termostatů (kotlový nebo prostorový)
    // rozdeleni funkci do vlastnich funkcnich bloku
    // zapojeni seriove komunikace pro odladeni funkci 
    // v16_3_2016
    // uprava podmínky smyček (zrušeno =)
    // posun zpoždění 5s z procesu zapálení na jeho konec
    // doplněna podmínka reakce na termostaty (kotlový/prostorový) v procesu zapálení
    // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle
    // nastavení poruchy a její kvitance tlačítkem na pinu 9
    
    #define davkovaniPelet 6 //dávkování pelet – šnek
    #define spirala 5 //zapalovací spirála
    #define ventilator 3 //ventilátor
    #define alarm 10 //signalizace poruchy
    #define prostorovyTermostat 12 //prostorový termostat
    #define kotlovyTermostat 2 //kotlový termostat
    #define fotobunka 8 //fotobuňka pro kontrolu plamene
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlačítka kvitance poruchy
    
    long cas=13000;
    int smycka1 = 0; // pomocna smycka - zapálení
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s
    int smycka2 = 0; // pomocna smycka - udržení hoření
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - počet pokusu o zapalení
    int smycka3max = 2; // max.pomocne smycky
    int porucha = 0; // proměnná pro záznam poruchy (zatím v režimu 0-1)
    
    void setup() {
    	// nastav seriovou komunikaci na rychlost 9600 bd 
    	Serial.begin(9600);
    	Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace
    	pinMode(davkovaniPelet, OUTPUT);
    	pinMode(spirala, OUTPUT);
    	pinMode(ventilator, OUTPUT);
    	pinMode(alarm, OUTPUT);
    	pinMode(prostorovyTermostat, INPUT);
    	pinMode(kotlovyTermostat, INPUT);
    	pinMode(fotobunka, INPUT);
    	pinMode(trimr1, INPUT);
    	pinMode(tlacitkoKvitance, INPUT);
    	// vsechno vypni
    	vypniVse();
    }
    
    void loop() {
    	Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace
    	smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni dobz zapaleni trimrem na A0
    	if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    		if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    			// startovaci davka pelet
    			//------------------------
    			zapalovaciDavkaPelet();
    			
    			// proces zapálení
    			//----------------
    			zapaleni();
    			
    			// test poruchy
    			// -----------------
    			testPlamene(); 
    			
    			// udržení hoření
    			//--------------
    			udrzujHoreni();
    			
    			// dohoření
    			//---------
    			dohoreni();
    		}
    	}
    	// kvitence pripadne poruchy
    	//-------------------------------
    	kvitancePoruchy();
    }
    
    void vypniVse() {
    	// funkce vypni vše
    	Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, LOW); //vypni dávkování
    	digitalWrite(spirala, LOW); //vypni žhavení
    	digitalWrite(ventilator, LOW); //potom vypni ventilátor
    }
    
    void zapalovaciDavkaPelet() {
    	// prvotni davkovani pelet pro zapaleni
    	Serial.println("Davkuji pelety pro zapaleni ..."); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
    	delay(12000); //po dobu 12s
    	digitalWrite(davkovaniPelet, LOW); //potom vypni dávkování
    	digitalWrite(ventilator, HIGH); //zapni ventilátor
    	digitalWrite(spirala, HIGH); //zapni žhavení
    }
    
    void zapaleni() {
    	// funkce zapaleni pelet
    	// 3 pokusy o zapálení
    	Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace
    	for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
    		// smyčka "1-10" minut zapalování
    		for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
    			Serial.print("Pokus "); // ladici seriova komunikace
    			Serial.print(smycka3); // ladici seriova komunikace
    			Serial.print("/"); // ladici seriova komunikace
    			Serial.print(smycka3max); // ladici seriova komunikace
    			Serial.print(" stav: "); // ladici seriova komunikace
    			Serial.print(smycka1); // ladici seriova komunikace
    			Serial.print("s/"); // ladici seriova komunikace
    			Serial.print(smycka1max); // ladici seriova komunikace
    			Serial.println("s "); // ladici seriova komunikace
    			if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){	// prostorovy  nebo  kotlovy termostat vypne
    				digitalWrite(spirala, LOW); //vypni žhavení
    				smycka1 = smycka1max; // ukonči smyčku1
    				smycka3 = smycka3max; // ukonči smyčku3
    				Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace
    			}
    			if(digitalRead(fotobunka) == HIGH){	//pokud fotobuňka vidí plamen
    				digitalWrite(spirala, LOW); //vypni žhavení
    				smycka1 = smycka1max; // ukonči smyčku1
    				smycka3 = smycka3max; // ukonči smyčku3	
    				Serial.println(" hori ...");	 // ladici seriova komunikace				
    			} else {
    				Serial.println(" nehori ...");	 // ladici seriova komunikace	
    			}
    			delay(1000);
    		}
    		delay(5000); //čekej 5s
    	}
    }
    
    void testPlamene() {
    	// test plamene
    	Serial.println("Test plamene ...");	 // ladici seriova komunikace
    	if(digitalRead(fotobunka) == LOW){	//pokud fotobuňka nevidí plamen
    		delay(1000); // pocekej jeste 1s a zkus to znovu
    		if(digitalRead(fotobunka) == LOW){	//pokud fotobuňka nevidí plamen
    			if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    				if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    					// tzn. termostaty chteji topit, ale plamen se nezapalil
    					porucha = 1; // nastav poruchu	
    				}	
    			}
    		}
    	}
    	if(porucha == 1){
    		Serial.println("Test plamene ... porucha"); // ladici seriova komunikace
    	} else {
    		Serial.println("Test plamene ... ok"); // ladici seriova komunikace
    	}
    }
    
    void udrzujHoreni() {
    	// funkce udržení hoření
    	Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace
    	for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
    		smycka2 = 0; // vynuluj smyčku
    		if(digitalRead(prostorovyTermostat) == HIGH  && digitalRead(kotlovyTermostat) == HIGH){	// prostorovy + kotlovy termostat je zapnuty
    			if(digitalRead(fotobunka) == HIGH){	//pokud fotobuňka vidí plamen
    				digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
    				delay(1000); //počkej 1s
    				digitalWrite(davkovaniPelet, LOW); //vypni dávkování
    				delay(1000); //počkej 1s
    			} else {
    				delay(1000); // pocekej jeste 1s a zkus to znovu
    				if(digitalRead(fotobunka) == LOW){	//pokud fotobuňka nevidí plamen
    					smycka2 = smycka2max; // ukonči smyčku
    					porucha = 1; // nastav poruchu
    				}
    			}
    		} else {
    			smycka2 = smycka2max; // ukonči smyčku
    		}  
    	}
    }
    
    void dohoreni() {
    	// funkce dohoreni
    	Serial.println("Dohoreni ..."); // ladici seriova komunikace
    	digitalWrite(davkovaniPelet, LOW); //vypni dávkování pelet
    	digitalWrite(spirala, LOW); //vypni žhavení - pro jistotu
    	delay(84000); //počkej 84s
    	digitalWrite(ventilator, LOW); //potom vypni ventilátor
    }
    
    void kvitancePoruchy() {
    	// funkce kvitance poruchy
    	Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace
    	if(porucha > 0 ){	// když je porucha aktivní
    		// vypni vse
    		vypniVse();
    		while (digitalRead(tlacitkoKvitance) == HIGH) {	// zapni alarm a cekej na stisk tlačítka
    			digitalWrite(alarm, HIGH); // zapni alarm
    			Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace
    		}
    		Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace
    		digitalWrite(alarm, LOW); // vypni alarm
    		porucha = 0; // vynuluj poruchu
    	} else {	// jinak 
    		Serial.println("Zadan porucha  ..."); // ladici seriova komunikace
    		digitalWrite(alarm, LOW); // vypni alarm
    	}
    }

    Je tam pro odladění nastavena komunikace po seriove lince.
    Po odladění jí můžeš smazat/zakomentovat. je dobře označena

    odpověď na: Řídící jednotka pro peletový kotel #6418
    posjirka
    Účastník

    1) Proces zapalování je zdá se v pořádku, včetně nastavení max. zapalovací doby trimrem (mimochodem super nápad, není to sice moc elegantní – musel jsem si s tím trochu pohrát abych tam dostal těch 10min., ale účel to splní)
    Právě že to máš vcelku jednoduché, buď ten pin dáš přímo na zem (1 minuta) nebo na +5V (10 minut)
    2) Zkoušel jsem simulovat během zapalování vypnutí prostoráku a tady to ještě bude chtít odladit -> po vypnutí to pořád žhaví a točí se ventilátor, ten se po 84s vypne, ale spirála žhaví dál. Hlavně to vůbec nereaguje na fotobuňku.
    Opraveno …
    3) Zkoušel jsem taky simulovat ztrátu plamene během hoření a tady je to celkem v pořádku – přestane to podávat pelety, počká to 84s, pak vypne ventilátor a začne proces zapalování -> tady by to možná chtělo řešit poruchou, protože plamen by pokud se nezasekne peleta v dopravníku, nebo nedojdou pelety neměl zhasnout nikdy.
    opraveno + doplněna porucha při ztrátě plamene při hoření.
    Zkusil jsem udělat takovou fintu: kontroluje že tam je plamen a pokud ne počká 1s a zkusí to znovu. Pak vyhlási chybu.

    Podívej se na to a vyzkoušej. Kod dám do dalšího příspěvku:

    odpověď na: I2C #6417
    posjirka
    Účastník

    co spíš použít formu dotaz/odopvěď.
    Můžeš si říct, že char(2) je dotaz na minutu, char(3) dotaz na hodinu, …
    tím pádem nebudeš posílat 18 bytů (bitu?) v základu je I2C (TWI) navržena pro komunikaci po 8 bitech + adresa + start/stop bity.
    Zkus si poslat jednoduché informace : … posílej si stále dokola číslo po každém přijmuti jej zvyš o 1.je to super pro monitorování stability komunikace. Při každé přijmuté odpovědi si můžeš ověřit, že jsi dostal správné data, případně si nechat rozsvítit LED diodu jako chybu .

    odpověď na: Dotaz – spinani led – bezdratove #6416
    posjirka
    Účastník

    existuje, třeba bezdrátově ovládané zásuvky na 433MHz:
    http://www.conrad.cz/bezdratove-spinaci-systemy-433-mhz.c0806012
    tím můžeš spínat spotřebiče na dálku pomocí ovladače. Ovladač se spáruje se zásuvkami, takže vlastně může 1 ovladač teoreticky ovládat na 1 tlačítko více zásuvek zároveň.
    Samotné arduino nemusí využívat vždy SPI rozhraní. Navíc analogové vstupy jdou také přepnout na digitální vstupy/výstupy.
    Pro komunikaci můžeš použít boduly jako Bluetooth nebo WIFI. Ty jsou připojené přes UART, takže zabírají pouze 2 piny.

    Jde spíš o to jaké potřebuješ finální řešení = co to vlastně bude dělat….

    odpověď na: Podmínka IF s D3231 #6411
    posjirka
    Účastník

    Koukám, že jsi použil tutorial odtud :

    Tutoriál – užívání hodin reálného času DS1307 a DS3231 s Arduinem


    Je to v pořádku, člověk se musí učit na něčem vyzkoušeném. Na mě je to zbytečně komplikované. Doporučoval bych použít tuto knihovnu + exampl:
    https://github.com/JChristensen/DS3232RTC/blob/master/examples/TimeRTC/TimeRTC.ino
    Ten kod se ti zpřehlední a bude pro tebe možná srozumitelnější. k jednotlivým informacím se dostáváš pomocí předdefinovaných funkcím. Např pro aktuální minutu použiješ :
    int AktualniMinuta = minute();
    Knihovna používá kombinaci sznchronizovaného času z RTC +knihovnu arduina Time pro přístup k aktuálnímu času.

    To s odopjením modulu od arduina: možná bych zkusil odpojit baterii a dát tam jinou.

    Pro nastavení zapnutí/vypnutí bych tě odkázal na forum, kde jsem něco podobného už řešil:
    http://duinozone.cz/index.php?topic=611.0

    odpověď na: I2C #6410
    posjirka
    Účastník

    ještě jak to máš od sebe vzdálené, Někdy to blbne když je to daleko. Pak se snižuje odpor PULL UP třeba na 2k2 nebo 1k0 … Kdyžtak to zkus a jak budu mít chvilku tak se na to já nebo někdo jiný podívá …

    odpověď na: Řídící jednotka pro peletový kotel #6396
    posjirka
    Účastník

    Je taková obecná poučka pro logické obvody.
    Rozděl si napětí zdroje na třetiny = 0 – 8 – 16 – 24V
    Takže 0-8V je logická nula
    16-24V je logická jednička
    8-16V je zakázáné/necitlivé pásmo = hazardní stav

    odpověď na: I2C #6391
    posjirka
    Účastník

    hod se kod a zapojení … ale to jak to máš opravduzapojené, né stažené z netu 🙂

Aktuálně je na stránce zobrazeno 30 příspěvků - 361. až 390. (celkem z 481)