nicolasoto
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek Voda
ÚčastníkTak to nevím, co by to mohlo být. Kde to psali?
Scherby
ÚčastníkKonkrétně tam bylo bez ISP download funkce. Nikde jsem nenašel, o co se jedná. Vím, že to má něco společného s programováním chipu, ale to je vše
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_teplota
Na 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íktom.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á 🙂
-
AutorPříspěvky