pardalos
Vytvořené odpovědi
- 
		AutorPříspěvky
- 
		
			
				
Zbyšek Voda ÚčastníkPopravdě moc nevím, co tím „bez ISP“ myslíte. Pokud by to bylo bez ICSP, tak by se jednalo o to, že na desce není připájená programovací hlavice, ale takhle nevím. Myslím, že se jako začátečník nemusíte ničeho obávat 🙂 Zbyšek Voda ÚčastníkNejsem si jistý, jestli to vůbec jde. 
 Každopádně to určitě půjde udělat přes pole.Zbyšek Voda ÚčastníkCo mě tak narychlo napadá… Na Arduinu bude program, který se při překročení dané teploty na čidle pokusí připojit na adresu ve tvaru např.: www.server.cz/mail.php?cidlo=cislo_cidla&teplota=namerena_teplotaNa dané adrese pak musí být soubor mail.php, který bude číst data z URL pomocí GET (to jsou ty údaje za otazníkem). Ty pak jen vezme a například pomocí funkce mail() je odešle. Aleš ÚčastníkDíval jsem se na nějaké příklady odesílání emailu z Arduina, a všude používají nešifrované odesílání přes port 25, bez přihlašovacího jména a hesla. A takový SMTP server asi nenajdeš 🙁 Jedině že by sis ho vytvořil sám na nějaké lokální síti, do které bude připojeno i to Arduino, a nebude do ní přístup zvenku. 
 Veškeré SMTP servery přístupné z internetu používají minimálně autorizaci pomocí jména a hesla, a potom ještě šífrování (TLS, SSL, atd.) a to zase asi nezvládne Arduino (nebo jsem to nikde nenašel).Aleš ÚčastníkPC potřebuješ jenom k naprogramování (a ani to ne, program jde do Arduina nahrát i z mobilu nebo tabletu). Potom už může jet Arduino jenom samo, s připojeným napájením. Atrey ÚčastníkZdravim vsechny, dneska zrejme panbuh nebyl doma a vsechni elementalove byly nakloneni – funguje to. Sice absolutne netusim v cem byl problem, ale to nevadi. Mam jen maly dotaz jeste – lze slozit Arduino tak, aby se dalo pouzivat bez podpory PC? Diky Atrey ÚčastníkTo all, tak mi to nedalo. Od posledniho prispevku sedim u kompu a nejradsi bych to rozslapal. Ted uz teda vidime CH340, no a to je prosim vsechno. O nejakem rozsviceni oranzove LED … si muzu akorat nechat zdat. Vic pruchozi asi bude vyndat v dilne oranzovou LEDku za 1Kc a poradne se opit nad vlastni blbosti. Atrey ÚčastníkZdravim , tak jsem vse udelal dle Vaseho navodu – chvilku to fungovalo, asi tak 5 minut. Sice jsem pocitacova mastenka, ale takhle problematickej kram, jsem v zivote nevidel. Sice na vsech webovejch strankach pisou jak uzasny a jednoduchy to je, Hmmmm realita je zel bohu uplne jina. Skoda penez a toho casu. zabzoun@seznam.cz ÚčastníkZdravím, 
 dneska se celý den potýkám s obdobným problémem. Po aktualizaci ovladače mi to hlásilo chybu kód 10. Chvilku jsem hledal a tady https://forum.arduino.cc/index.php?topic=90409.0 jsem našel řešení. Stáhl jsem si ovladač CH340 USB-to-serial. Soubor byl zazipovaný. Rozbalil jsem jej. Poté jsem spustil správce zařízení a na zařízení COMxx Arduino Uno, u kterého byl vykřičník, jsem klikl pravým tlačítkem, dal jsem aktualizovat ovladač, vyhledat ovladač v počítači, vybrat ovladač ze seznamu, z disku, proklikal jsem si cestu do rozzipovaného souboru s ovladačem a ovladač nainstaloval. Vykřičník zmizel a vše komunikuje jak má.Jen v sekci COM a LPT porty není COMxx Arduino Uno,ale USB-SERIAL CH340 (COMxx)Používám Win7 64bit 
 MartinZbyšek Voda ÚčastníkFB buď Zbyšek Voda, nebo stačí napsat na stránku Arduino.cz na FB tom.vitek ÚčastníkProsím tě das mi na tebe tel kontakt nebo facebook ? funguje to přesně naopak než řikas Zbyšek Voda ÚčastníkProblém bude v tom, že tak, jak máte program napsaný je opravdu správně chování, že při zmáčknutí tlačítka se relé vypne! if(buttonState == HIGH) { //!! tato funkce relé vypíná! digitalWrite(relePin1, LOW); } else{ digitalWrite(relePin1, HIGH); }Pokud chcete, aby stejný stav jako má relé mělo i tlačítko, musíte prohodit LOW a HIGH: if(buttonState == HIGH) { digitalWrite(relePin1, HIGH); } else{ digitalWrite(relePin1, LOW); }Dva IFy na stejné úrovni se rozhodně nedají brát jako „hlavní“ a „podřadný“. „Podřadnosti“ dosáhnete až jejich zanořováním 🙂 yenda.net Účastník tom.vitek ÚčastníkZdravím, mám tu prosím další problém se kterým si nevím rady: 
 V tomto programu je ovládání výstupního relé pomocí teploty – funguje samo automaticky
 a dále je tu, že když sepnu tlačítko tak by se mělo sepnout i relé. A tady je ten kamen urazu po nahraní teplota automaticky řidí relé, ale když manualně zmačknu tlačítko abych seplo relé,když není seplé tak tato funkce nefunguje. Myslím že chyba bude třeba v rozmístění dané části programu nebo takoveho něco.Je možné že když jsou 2 IF v programu tak jedno program bere jako to hlavní a druhé podřadné? #include <DHT.h> 
 #define DHT1PIN 7 //teplota
 #define DHT2PIN 6 // teplota 2
 #define DHT1TYPE DHT22 //definuje typ senzoru
 #define DHT2TYPE DHT22 //definuje typ senzoru
 DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
 DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
 const int buttonPin1 = 50; // kam je připojeno tlačítko
 const int relePin1 = 30; // kam je připojeno rele
 int buttonState = 0;void setup() { 
 Serial.begin(9600);
 pinMode(relePin1, OUTPUT);
 pinMode(buttonPin1,INPUT);
 dht1.begin();
 dht2.begin();
 }void loop() { 
 buttonState = digitalRead(buttonPin1);
 if (buttonState == HIGH) { // zapneme relé:
 digitalWrite(relePin1, LOW);
 }
 else {
 digitalWrite(relePin1, HIGH);
 } // vypneme relé:
 //automatické ovladani pomoci teploty
 if (dht1.readTemperature() >= 30) {
 digitalWrite(relePin1, LOW);
 }else{
 if (dht1.readTemperature() <= 28)
 digitalWrite(relePin1, HIGH);
 }
 //snímani teploty
 void teplotavlhkost();
 delay(4000);
 float h1 = dht1.readHumidity();
 float t1 = dht1.readTemperature();
 float h2 = dht2.readHumidity();
 float t2 = dht2.readTemperature();
 if (isnan(t1) || isnan(h1)) {
 Serial.println(„Failed to read from DHT #1“);
 }
 if (isnan(t2) || isnan(h2)) {
 Serial.println(„Failed to read from DHT #2“);
 }
 Serial.print(„T1:“);
 Serial.print(dht1.readTemperature(),1);
 Serial.print((char)223); // vypíše znak ° na displej
 Serial.print(„C „);
 }tom.vitek Účastníkje to tak! díky moc , takhle to vypadá a funguje to 🙂 ještě jednou díky if (dht1.readTemperature() >= 25.0) 
 {
 digitalWrite(relePin1, LOW);
 if (dht1.readTemperature() <= 20.0)
 {
 digitalWrite(relePin1, HIGH);
 }
 }Zbyšek Voda ÚčastníkTo asi bude tim, ze readTemperature je funkce volana na objektu dht1. A funkce potrebuji mit za sebou zavorky (i kdyz treba prazdne). Spravny zapis by tedy byl dht1.readTemperature(). tom.vitek Účastníkaha, díky na radu ale i když jsem se smazal tak program píše tuhle chybu : 
 celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ tokena pokud to napisu takhle : 
 if (dht1.readTemperature > 25.0)
 {
 digitalWrite(relePin1, LOW);
 if (dht1.readTemperature < 20.0)
 {
 digitalWrite(relePin1, HIGH);
 }
 }tak chybu to píše : 
 error: invalid use of member function (did you forget the ‚()‘ ?)Zbyšek Voda ÚčastníkNebude chyba v tom, ze cisla zabalujete do uvozovek? On je pak program bere jako String a ne jako cislo 😉 tom.vitek ÚčastníkAhoj, ještě bych tu měl jeden problém : chci pomocí teploty ovládávat relé na který je napojen větrák když je teplota => 25°C tak sepni větrák (relé) 
 když je teplota =< 20°C tak vypni větrák (relé)program: 
 if (dht1.readTemperature => „25.0“)
 {
 digitalWrite(relePin1, LOW);
 if (dht1.readTemperature =< „20.0“)
 {
 digitalWrite(relePin1, HIGH);
 }
 }napsal sem to nějak takhle, ale program mi nebere ty hodnoty 
 chyba říka:
 celek_pokus_vetrak.ino: In function ‚void loop()‘:
 celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ token
 celek_pokus_vetrak.ino:56:30: error: expected primary-expression before ‚<‚ token
 Chyba kompilace.program je vytržen z celého programu zde: 
 //Projekt Inteligentní skleník Vítek Tomáš
 #include <DHT.h> // knihovna dht teploty
 #define DHT1PIN 7 //teplota
 #define DHT2PIN 6 // teplota 2
 #define DHT1TYPE DHT22 //definuje typ senzoru
 #define DHT2TYPE DHT22 //definuje typ senzoru
 DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
 DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
 int temt6000Pin = A0; // senzor svetla
 int dirpin = 8; // motorek dir
 int steppin = 9; // motorek stepbyte sensorInterrupt = 0; // 0 = digital pin 2 //zacatek prutokomer 
 byte sensorPin = 2;
 float calibrationFactor = 4.5;
 volatile byte pulseCount;
 float flowRate;
 unsigned int flowMilliLitres;
 unsigned long totalMilliLitres;
 unsigned long oldTime; // konec prutokomer
 //———————-POKUS ovladani vetraku —————————–
 const int buttonPin1 = 50; // kam je připojeno tlačítko
 const int relePin1 = 30; // kam je připojeno rele
 int buttonState = 0;
 //————————————————————–
 void setup() {
 Serial.begin(9600);
 pinMode(relePin1, OUTPUT); // POKUS rele jako vystup na pin
 pinMode(buttonPin1,INPUT); //POKUS tlačítka jako vstup:
 pinMode(dirpin, OUTPUT); // motorek
 pinMode(steppin, OUTPUT); // motorek
 pinMode(sensorPin, INPUT); //zacatek prutokomer
 digitalWrite(sensorPin, HIGH);pulseCount = 0; 
 flowRate = 0.0;
 flowMilliLitres = 0;
 totalMilliLitres = 0;
 oldTime = 0;
 attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // konec prutokomer
 dht1.begin(); // zacni merit teplotu 1
 dht2.begin(); // zacni merit teplotu 2
 }void loop() { 
 //ovládání relé 1 pomocí tlačítka —————–
 void vetrak1();
 buttonState = digitalRead(buttonPin1);
 if (buttonState == HIGH) { // zapneme relé:
 digitalWrite(relePin1, LOW);
 }else {
 digitalWrite(relePin1, HIGH); } // vypneme rele
 //ovládání větráku pomocí teploty POKUS ————–
 if (dht1.readTemperature => „25.0“)
 {
 digitalWrite(relePin1, LOW);
 if (dht1.readTemperature =< „20.0“)
 {
 digitalWrite(relePin1, HIGH);
 }
 }
 //——————–prutokomer——————————————–
 if((millis() – oldTime) > 1000) // Only process counters once per second
 {
 detachInterrupt(sensorInterrupt);
 flowRate = ((1000.0 / (millis() – oldTime)) * pulseCount) / calibrationFactor;
 oldTime = millis();
 flowMilliLitres = (flowRate / 60) * 1000;
 totalMilliLitres += flowMilliLitres;
 unsigned int frac;
 pulseCount = 0;
 attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
 }
 //———————-lcd——————————-
 clearLCD();
 backlightOn();
 unsigned int frac; // deklarace promere frac pro prutokomer
 //————————————————
 selectLineOne();
 delay(100);
 Serial.print(„T1:“);
 Serial.print(dht1.readTemperature(),1);
 Serial.print((char)223); // vypíše znak ° na displej
 Serial.print(„C „);
 Serial.print(„T2:“);
 Serial.print(dht2.readTemperature(),1);
 Serial.print((char)223); // vypíše znak ° na displej
 Serial.print(„C“);
 delay(500);
 //————————————————
 selectLineTwo();
 delay(100);
 Serial.print(„Vl:“);
 Serial.print(dht1.readHumidity(),1);
 Serial.print(„% „);
 Serial.print(„V2:“);
 Serial.print(dht2.readHumidity(),1);
 Serial.print(„%“);
 delay(500);
 //————————————————
 selectLineThree();
 delay(100);
 Serial.print(„VP:“);
 Serial.print(analogRead(A1)/11,1);
 Serial.print(„% „);
 Serial.print(„S:“);
 Serial.print(analogRead(temt6000Pin)/11,1);
 Serial.print(„%“);
 delay(500);
 //———————————————
 selectLineFour();
 delay(100);
 Serial.print(„P:“);
 Serial.print(int(flowRate)); // Print the integer part of the variable
 Serial.print(„.“); // Print the decimal point
 frac = (flowRate – int(flowRate)) * 10;
 Serial.print(frac, DEC) ; // Print the fractional part of the variable
 Serial.print(„L/min“);
 Serial.print(„Pc“); // Output separator
 Serial.print(totalMilliLitres);
 Serial.println(„mL“);
 delay(5000);
 //——————————————–
 }
 //SerialLCD Functions
 void selectLineOne(){ //puts the cursor at line 0 char 0.
 Serial.write(0xFE); //command flag
 Serial.write(128); //position
 }
 void selectLineTwo(){ //puts the cursor at line 2 char 0.
 Serial.write(0xFE); //command flag
 Serial.write(192); //position
 }
 void selectLineThree(){ //puts the cursor at line 3 char 0.
 Serial.write(0xFE); //command flag
 Serial.write(148); //position
 }
 void selectLineFour(){ //puts the cursor at line 4 char 0.
 Serial.write(0xFE); //command flag
 Serial.write(212); //position
 }
 void goTo(int position) { //position = line 1: 0-19, line 2: 20-39, etc, 79+ defaults back to 0
 if (position<20){ Serial.write(0xFE); //command flag
 Serial.write((position+128)); //position
 }else if (position<40){Serial.write(0xFE); //command flag
 Serial.write((position+128+64-20)); //position
 }else if (position<60){Serial.write(0xFE); //command flag
 Serial.write((position+128+20-40)); //position
 }else if (position<80){Serial.write(0xFE); //command flag
 Serial.write((position+128+84-60)); //position
 } else { goTo(0); }
 }
 void clearLCD(){
 Serial.write(0xFE); //command flag
 Serial.write(0x01); //clear command.
 }
 void backlightOn(){ //turns on the backlight
 Serial.write(0x7C); //command flag for backlight stuff
 Serial.write(157); //light level.
 }
 void backlightOff(){ //turns off the backlight
 Serial.write(0x7C); //command flag for backlight stuff
 Serial.write(128); //light level for off.
 }
 void backlight50(){ //sets the backlight at 50% brightness
 Serial.write(0x7C); //command flag for backlight stuff
 Serial.write(143); //light level for off.
 }
 void serCommand(){ //a general function to call the command flag for issuing all other commands
 Serial.write(0xFE);
 }
 //————–motorek1————————–
 void motor1(){
 int i;
 digitalWrite(dirpin, LOW); // Nastaveni smeru
 delay(100);
 for (i = 0; i<4000; i++) // otočení o 4000 kroků
 {
 digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
 digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
 delayMicroseconds(500); // rychlost otáček
 }
 digitalWrite(dirpin, HIGH); // Nastaveni smeru
 delay(10000);
 for (i = 0; i<4000; i++) // otočení o 4000 kroků
 {
 digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
 digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
 delayMicroseconds(500); // This delay time is close to top speed for this
 }
 }
 // particular motor. Any faster the motor stalls.
 //————motorek2——————————–
 //————motorek3———————————
 //————vetrak1——————————-
 //————-vetrak2——————————-
 //———————topeni———————-
 //——————–LED-paska——————–
 // —————-senzor-světla——————-
 void svetlo(){
 int value = analogRead(temt6000Pin);
 }
 //—————vlhkost-půdy————————–
 void vlhkostpudy(){
 int sensorValue = analogRead(A1);
 }
 //———teplota 1,2 — vlhkost 1,2 —————–
 void teplotavlhkost(){
 delay(4000);
 float h1 = dht1.readHumidity();
 float t1 = dht1.readTemperature();
 float h2 = dht2.readHumidity();
 float t2 = dht2.readTemperature();
 if (isnan(t1) || isnan(h1)) {
 Serial.println(„Failed to read from DHT #1“);
 }
 if (isnan(t2) || isnan(h2)) {
 Serial.println(„Failed to read from DHT #2“);
 }
 }
 //————-prutokomer——————–
 void pulseCounter()
 {
 pulseCount++;
 }Díky Aleš ÚčastníkBohužel bydlím v paneláku, takže anemometr ani srážkoměr nemám kam dát. Ale kolega má podobnou meteostanici s Arduinem, a má tam jak anemometr, tak srážkoměr, a chodí mu to celkem bez problému. Anemometr tam má tento: http://www.hadex.cz/t114-anemometr-k-meteostanicim-wh1080-a-wh1090/ a odkaz na jeho měření je zde: http://meteof.wz.cz/uvod.php Co vím, tak dokonce s tím anemometrem jezdil v autě, aby zjistil, jestli to ukazuje správnou rychlost 🙂 Kubusz ÚčastníkAhoj, taky jsem se chystal na meteostanici, ale ztroskotal jsem na anemometru, který je pro mně nejdůležitější. Pořád ještě bych do toho rád šel, neuvažuješ taky nad rozšíření? Aleš ÚčastníkTo jsem nevěděl, že je nula posunutá. Kdysi jsem ho chtěl k něčemu použít, ale zjistil jsem, že to nízké proudy ukazuje špatně. Je to celkem logické, když je v tom hallova sonda. Malý proud, slabé elektrické pole, nízká přesnost. Jarda_1 ÚčastníkJo, dík už jsem našel a objednal senzor s ACS712 do 20A. Rozlišení asi nebude potřeba dle popisu by měla být nula posunuta a výstup při 0 A be měl být 2,5V, při záporných proudech se bude snižovat o 100mV na A a při kladných zvyšovat takže měření by mělo být bez problému. 
 Nevím pro proč se schema nezobrazuje, odkaz byl OK.Aleš ÚčastníkSchéma se nezobrazuje, ale pro měření proudu hledejte „ACS712 Current Sensor Module“. Je to Hall sensor, kterému je docela jedno, jestli skrz něj teče proud tam, nebo zpátky. Ale asi bude problém rozlišit, kterým směrem zrovna teče 🙂 Asi by se k tomu muselo dobastlit ještě něco s diodou, na které by se měřil ten směr. Kolik ampér má v obvodu téct? Aleš ÚčastníkAsi takhle. Když budete „uzatvárať obvod bez napätia“, tak se nebude dít vůbec nic. Aby zařízení poznalo, že „někdo zapnul vypínač“, tak musí do jednoho vývodu vypínače pouštět nějaké napětí, a na druhém vývodu vypínače kontrolovat, jestli napětí prochází (sepnuto), nebo neprochází (rozepnuto). Takže máte 2 možnosti. Buď použít relé, to bude univerzální a bez problému, protože jeho kontakty mechanicky uzavřou obvod. Druhá možnost je změřit si napětí na kontaktech, a podle toho použít příslušný tranzistor, nebo tyristor/triak. Vy s tím ale chcete spínat blesk fotoaparátu, takže tam by asi relé použít nešlo, protože má dost velké časové zpoždění. A řekl bych, že to zpoždění nikdy nebude naprosto stejné. Takže pro Vás bude asi varianta č.2, nějaký polovodičový spínací prvek. Zbyšek Voda ÚčastníkTomu se věnují třeba tady: http://diy-scib.org/blog/multiple-dht-humidity-sensors-arduino 
 Sám jsem to ale ještě nezkoušel.tom.vitek Účastníkještě dotaz: co kdybych tyto čidla měl 2 a chtěl bych jejich hodnoty průměrovat… máte s tím zkušenosti ? tom.vitek Účastníkjo, měl jste pravdu bylo to knihovnou. Díky moc už to měří jak má 🙂 Zbyšek Voda ÚčastníkDobrý den, myslím, že to bude tím že nemáte staženou, nebo správně přidanou knihovnu. V návodu máte odkaz přímo v prvním odstavci. Kdyžtak návod, jak přidat knihovnu najdete zde: https://bastlirna.hwkitchen.cz/jak-importovat-knihovnu-do-arduino-ide/:) 
- 
		AutorPříspěvky
