Arduino - projekti, ideje, savjeti, problemi izdvojena tema

poruka: 1.365
|
čitano: 393.372
|
moderatori: DrNasty, pirat, XXX-Man, Lazarus Long, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
paradajz kaže...
mbaksa kaže...
paradajz kaže...
Ni jedan od RTC-a koje si naveo ne pune bateriju sami po sebi - to ovisi o tome kako je modul isprojektiran.

Ako pod RTC-om misliš samo na specifični čip - da. No, kad sam govorio o RTC-ovima u svojim porukama, govorio sam o RTC modulima. DS1307 moduli za koje sam dao linkove jesu projektirani tako da pune bateriju - ovdje ima i objašnjenje kako ih modificirati za jednokratne baterije.

 

Onda OK, dobio sam dojam da o govoriš o samim čipovima. ;)

RTC čip bez pratećih komponenti je beskoristan. 

8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav i ja sam zakoracio u ovaj svijet pa vidim da tu dosta ljudi ima znanje koje ce meni kao pocetniku bit potrebno.

 

Ideja je napravit jedan sklop za pračenje prametara centralnog grijanja na drva,pošto tu nema neke pretjerane automatike nego sve manje više ide na žgance i sistem je jednostavan zbog radoznalosti sam se upustio u ovo.Cilj je napravit sklop s 2 senzora temperature i senzorom pritiska i jednostavnim 16x2 LCD-om za prikaz podataka te jednim releyem koji ce okidat sirenu :D

 

Nešto slicno sam vidio na yt da je covjek radio ali nisam još ništa probao dok mi ne dođu sve komponente,cilj je napravit sustav da kad temperatura u centralnom pređe zadanu vrijednost od cca 80c na polazu da aktivira sirenu ili da kad pritisak pređe 2.2 bara da se isto sirena aktivira.

 

Mislim da to nije ništa komlicirano jer zbilja nikakvo povezivanje na wifi ili nešto slično nije potrebno nego samo da me upozori na kuršlus koji se sprema,2 puta sam dosad imao takvu situaciju,jednom zbog zraka jednom zbog nestanka struje.Sad sam nestanak struje eliminirao sa UPS-om ostalo su mi još ove vanredne situacije zrak ili slučajno zatajenje pumpe ili nešto.U ovom slučaju sa pravovremenim alarmiranjem bi mi možda dalo vremena da uspijem reagirat,netrebam napominjat da je uba slučaja sigurnosni ventil zatajio i da sam imao poplavu u kući pošto je to kamin na cg koji je u dnevnom boravku.

 

Nadam se da će mi komponente uskoro doc,za senzore temperature sam narucio DS18B20 ,senzor pritiska još nisam, mislim da bi se moglo dat kombinirat sa senzorom pritiska ulja iz auta a to moram doma potražit jer vjerojatno imam,reley sam uzeo neki koji radi na 5v jer je ideja da se na acu 12V 7Ah spoji pretvarać sa 12V na 5V koji ima izlaz za usb jer koliko sam skužio ovi senzori temperature nesmiju bit spojeni na više od 5v.

 

Išao sam na acu od 12V iz razloga što je sirena 12V-24V a htio bi da to radi neovisno o napajanju,jer sad kad nestane struje tuli UPS ali s ovom siren bi se osigurao ako do kuršlusa dođe zbog nećeg drugog.

 

Da li sam ja to sve dobro pokopčao?Jedino što mislim da sam možda trebao uzet LCD 20x4 jer na ovome će trebat ispisivat 3 vrijednosti valjda će uspit ispisat sve.

 

Usput koja je razlika između TMP36 i ovog DS18B20?

Poruka je uređivana zadnji put čet 10.3.2016 16:27 (gogo2409).
 
0 0 hvala 0
14 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

 

To ti je ukupno 20ak linija koda:

 

1. definiranje ulaza/izlaza

2. skupljanje podataka sa senzora

3. prosljedivanje podataka na LCD

4. if petlja koja u odredenim uvjetima pali alarm

 

Nije lose zamisljeno, ali bi mogao ubaciti i jedno 12V napajanje koje bi djelovalo ko alternator(punilo akumulator kad ima struje) da ne bi u kriznaj situaciji ostao i bez akumulatora.

Druga stvar mozes ti napraviti upgrade s 18x2 na 20x4 LCD s promjenom jednog parametra u definiranju LCD-a(broj 18 zamjenis s 20, a 2 s 4) i dodavanju 4 dodatne naredbe(pozicija ispisa na 3. red i print i istu stvar za 4 red, uglavnom 5 minuta posla ako ne i manje)

Razlika je da je TMP36 analogni senzor(ja od analognih koristim LM35), a DS18B20 digirtalni.

U praksi TMP je osjetljiviji na smetnje ako imas dugi kabel od senzora do arduina.

 

EDIT: Fixed

:D
Poruka je uređivana zadnji put čet 10.3.2016 21:40 (CroNk3r).
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

Nadam se da će mi komponente uskoro doc,za senzore temperature sam narucio DS18B20 ,senzor pritiska još nisam, mislim da bi se moglo dat kombinirat sa senzorom pritiska ulja iz auta a to moram doma potražit jer vjerojatno imam,reley sam uzeo neki koji radi na 5v jer je ideja da se na acu 12V 7Ah spoji pretvarać sa 12V na 5V koji ima izlaz za usb jer koliko sam skužio ovi senzori temperature nesmiju bit spojeni na više od 5v.

Senzore ćeš napajati preko Arduina, tako da te ne bi trebao opterećivati napon - dokle god imaš dobar napon za Arduino, imat ćeš i za senzore, pod uvjetom da ih napajaš preko Arduinovih 5V ili 3.3V pinova.

 

gogo2409 kaže...

Usput koja je razlika između TMP36 i ovog DS18B20?

Kako je kolega rekao, prvi je analogni, i slijedom toga zapravo lakši za koristiti, a za ovaj drugi treba odabrati dobru biblioteku i dobro je podesiti, jer u suprotnom imaš nisku preciznost (pola stupnja) ili ti koči izvođenje programa. Prednost DS18B20 je što ih na iste tri žice (+V, gnd, signal) možeš nametati koliko hoćeš. Ja ih dva komada koristim u akvariju - jedan goli čip, koji mi je u poklopcu (nekad ću ga možda staviti izvan poklopca da mjeri temperaturu prostorije), a drugi u obliku vodootpornog senzora koji mjeri temperaturu vode.

 

gogo2409 kaže...

Da li sam ja to sve dobro pokopčao?Jedino što mislim da sam možda trebao uzet LCD 20x4 jer na ovome će trebat ispisivat 3 vrijednosti valjda će uspit ispisat sve.

Možeš ispisivati kratice. Ali da - možeš kupiti i veći ekran. Izbor je dovoljno velik (ali ipak ne prevelik). Možeš kupiti i matrični ako ti veličina nije bitna - onaj od Nokije 5110, na kojeg možeš nagurati hrpu informacija.

 

###

 

CroNk3r Daj brate kad netko napiše kilometarsku poruku nemoj nepotrebno citirati cijelu poruku (u komadu) - time samo tjeraš druge da nepotrebno skrolaju.

14 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Bok.

Neko vrijeme programiram PIC-ove i mislim se prebaciti na Arduino (programiranje mi nije problem). Zanima me što mislite o ovome paketu, dal se isplati to uzet?
LINK

I
li da uzmem ovaj drugi set?

Poruka je uređivana zadnji put pon 14.3.2016 20:28 (mac92).
 
0 0 hvala 0
12 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Jeftiniji posto su jedno te isti.Uz to uzmi jos par Atmega328p u slucaju da ovaj sprzis a i ponekad je dobro napraviti standalone projekat.

Poruka je uređivana zadnji put pon 14.3.2016 22:56 (ivanzu).
 
0 0 hvala 0
8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Eto stigli senzori temperature i jos par sitnica,ekran cekam jos uvjek tako da sam se krenuo sa igranjem.Po ovom tu turialu. Sve spojio i sljaka ali sad nailazim na problem,sta dodat u kod da spojim jos jedan senzor i koju naredbu dodat da mi okida reley,nekih slicnih tutoriala sam nasao ali nitko ne koristi senzor koji ja koristim,zasad bi zanemario LCD koji cekam cisto da vjezbam programirat i princip naredbi.

 

Kod koji sam koristio je ovaj,s time da bi htio izbacit da mi mjerei Fahrenheit.

 

Evo koda pa ako neko može pomoć di se mora ubacit kod za reley nebitno koji izlaz ali neka bude recimo na 4 a 3 neka bude za drugi senzor.

 

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(2); // on pin 2 (a 4.7K resistor is necessary)

void setup(void){
  Serial.begin(9600);
}

void loop(void){
  byte i;
  byte present =0;
  byte type_s;
  byte data[12];
  byte addr[8];
 float celsius, fahrenheit;

 if(!ds.search(addr)){
   Serial.println("No more addresses.");
   Serial.println();
   ds.reset_search();
   delay(250);
  return;
 }

  Serial.print("ROM =");
 for( i =0; i <8; i++){
   Serial.write(' ');
   Serial.print(addr[i], HEX);
 }

 if(OneWire::crc8(addr, 7)!= addr[7]){
    Serial.println("CRC is not valid!");
   return;
 }
  Serial.println();

 // the first ROM byte indicates which chip
 switch(addr[0]){
  case0x10:
    Serial.println("  Chip = DS18S20"); // or old DS1820
    type_s =1;
   break;
  case0x28:
    Serial.println("  Chip = DS18B20");
    type_s =0;
   break;
  case0x22:
    Serial.println("  Chip = DS1822");
    type_s =0;
   break;
  default:
    Serial.println("Device is not a DS18x20 family device.");
   return;
 }

  ds.reset();
  ds.select(addr);
  ds.write(0x44);    // start conversion, use ds.write(0x44,1) with parasite power on at the end

  delay(1000);  // maybe 750ms is enough, maybe not
 // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();
  ds.select(addr);  
  ds.write(0xBE);    // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
 for( i =0; i <9; i++){     // we need 9 bytes
   data[i]= ds.read();
   Serial.print(data[i], HEX);
   Serial.print(" ");
 }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

 // Convert the data to actual temperature
 // because the result is a 16 bit signed integer, it should
 // be stored to an "int16_t" type, which is always 16 bits
 // even when compiled on a 32 bit processor.
 int16_t raw =(data[1]<<8)| data[0];
 if(type_s){
   raw = raw <<3;// 9 bit resolution default
  if(data[7]==0x10){
   // "count remain" gives full 12 bit resolution
    raw =(raw &0xFFF0)+12- data[6];
  }
 }else{
   byte cfg =(data[4]&0x60);
  // at lower res, the low bits are undefined, so let's zero them
  if(cfg ==0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
  elseif(cfg ==0x20) raw = raw & ~3;// 10 bit res, 187.5 ms
  elseif(cfg ==0x40) raw = raw & ~1;// 11 bit res, 375 ms
  //// default is 12 bit resolution, 750 ms conversion time
 }
  celsius =(float)raw /16.0;
  fahrenheit = celsius *1.8+32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

Poruka je uređivana zadnji put pet 25.3.2016 21:35 (gogo2409).
 
0 0 hvala 0
8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Eto uspio sam zasad napravit nesto,evo kod pa mozda nekome pomogne.Uglazbio sam jedan DS18B20 senzor temperature i jedan relej,sad cu se poigrat da spojim jos jedan DS18B20 i LCD 16x2 koji cekam ko ozebo sunce mislim da cu morat refund trazit a onda mozda uzmem 20x4.


Evo kod ako ce kome trebat.

 

 

#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
int relay =7;
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

void setup(void) {
Serial.begin(9600);
pinMode(relay,OUTPUT);
}

void loop(void) {
float temperature = getTemp();
float tempF = (temperature);
Serial.println(tempF);
if (tempF <30) {
digitalWrite(7,HIGH);
} else {
digitalWrite(7,LOW);
}

delay(1000); //just here to slow down the output so it is easier to read

}


float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad


for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

Poruka je uređivana zadnji put pet 25.3.2016 21:36 (gogo2409).
 
0 0 hvala 1
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Za tako dugačke programe radije koristi servis poput https://codeshare.io umjesto da copy/pasteaš u samu poruku, jer onda ispada jako nepregledno.

 

 

Ja za temperaturu koristim ovu biblioteku: https://github.com/milesburton/Arduino-Temperature-Control-Library


Pa onda na početku programa imam:

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10 // temperature sensors bus - pin na koji spajaš senzore za temperaturu (svi senzori idu na isti pin)
OneWire oneWire(ONE_WIRE_BUS);
#define TEMPERATURE_PRECISION 12
#define TEMPERATURE_REFRESH_TIME 5000
DallasTemperature sensors(&oneWire);

unsigned long lastTemperatureTime = 0;

#define THERMOMETER_COUNT 2

DeviceAddress addrThermometers[THERMOMETER_COUNT] = {
{28, 0xA5, 0xE4, 0xF1, 0x05, 0x00, 0x00, 0xA7},
{28, 0xBA, 0x7A, 0xB5, 0x06, 0x00, 0x00, 0xC7}
};


int tempVoda = 0, tempPodPoklopcem = 0; // vrijednost temperature je 10*temperatura, znaci preciznost na jednu decimalu, pri čemu se koriste cijeli brojevi
bool temperatureRequested = false;


Do adresa konkretnih termometara dođeš preko programa File > Examples > DallasTemperature > OneWireSearch.


U setupu imam:

sensors.begin();
oneWire.search(addrThermometers[0]);
oneWire.search(addrThermometers[1]);

sensors.setResolution(addrThermometers[0], TEMPERATURE_PRECISION);
sensors.setResolution(addrThermometers[1], TEMPERATURE_PRECISION);


Pa onda imam funkciju za očitanje temperature, koja ne blokira tijek izvođenja programa u stilu:

void checkTemps() {
unsigned long referenceTime = millis();

if (referenceTime > lastTemperatureTime + TEMPERATURE_REFRESH_TIME + 750) {
tempVoda = 10.*sensors.getTempC(addrThermometers[0]);
tempPodPoklopcem = 10.*sensors.getTempC(addrThermometers[1]);

lastTemperatureTime = referenceTime;
temperatureRequested = false;
} else if ((referenceTime > lastTemperatureTime + TEMPERATURE_REFRESH_TIME) && (!temperatureRequested)) {
temperatureRequested = true;
sensors.requestTemperatures();
}
}


I znači onda o loopu pozivaš checkTemps(), a temperature ispisuješ tipa Serial.println(float(tempVoda) / 10).

Ovaj princip, s ovom bibliotekom, ima tu prednost da ne štopa izvođenje programa. Temperatura se mjeri svakih 5 sekundi (5000 milisekundi), a ako hoćeš kraće periode, smanjiš konstantu TEMPERATURE_REFRESH_TIME.

 

 

###

 

Što se tiče relejeva, njih je jako jednostavno koristiti. U pravilu pin staviš na LOW kad hoćeš uključiti relej i vratiš na HIGH kad ga hoćeš isključiti.

 

Poruka je uređivana zadnji put pet 25.3.2016 23:54 (mbaksa).
8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Hvala ti puno na objašnjenu,probao sam kod stavit u code ko kako si ti ali je ispresjecalo code ko i tebi s ovim vertikalnim crtama neznam zasto a npr u prvoj poruci nije,btw ovo mi je prvi susret u zivotu s nekim micro contolerom i programiranjem opcenito nesto pocetnickog znanja imam iz html-a tako da mi svaki savjet dobro dođe.Poigrat cu se malo i s tvojim codom,btw pa 5 sec delay mi inije previse i skuzio sam odmah cemu sluzi.

 

Daj mi jos pojasni par ovih linija ako ti nije teško.

 

 

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10 // temperature sensors bus - pin na koji spajaš senzore za temperaturu (svi senzori idu na isti pin)
OneWire oneWire(ONE_WIRE_BUS);
#define TEMPERATURE_PRECISION 12 ///Cemu sluzi ovo?
#define TEMPERATURE_REFRESH_TIME 5000
DallasTemperature sensors(&oneWire);

unsigned long lastTemperatureTime = 0;

#define THERMOMETER_COUNT 2

DeviceAddress addrThermometers[THERMOMETER_COUNT] = {//Ova dva reda su adrese od dva senzora?
{28, 0xA5, 0xE4, 0xF1, 0x05, 0x00, 0x00, 0xA7},
{28, 0xBA, 0x7A, 0xB5, 0x06, 0x00, 0x00, 0xC7}
};


int tempVoda = 0, tempPodPoklopcem = 0; // vrijednost temperature je 10*temperatura, znaci preciznost na jednu decimalu, pri čemu se koriste cijeli brojevi
bool temperatureRequested = false;

Poruka je uređivana zadnji put sub 26.3.2016 10:02 (gogo2409).
 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

Hvala ti puno na objašnjenu,probao sam kod stavit u code ko kako si ti ali je ispresjecalo code ko i tebi s ovim vertikalnim crtama neznam zasto a npr u prvoj poruci nije

Vertikalne horizontalne crte dodaje forumski editor kad stisneš Enter. Ako ih ne želiš vidjeti, onda stisneš Shift+Enter.

 

gogo2409 kaže...

btw ovo mi je prvi susret u zivotu s nekim micro contolerom i programiranjem opcenito nesto pocetnickog znanja imam iz html-a tako da mi svaki savjet dobro dođe.

Svi smo mi jednom imali prvi susret s mikrokontrolerom (ja tek pred nekih dvije godine ako se dobro sjećam), a vid' me sad. 

 

gogo2409 kaže...

Poigrat cu se malo i s tvojim codom,btw pa 5 sec delay mi inije previse i skuzio sam odmah cemu sluzi.

Ovisi o primjeni. Ja taj kod koristim za kontroler u akvariju i meni bi u osnovi mogao "delay" biti i puno dulji, jer se temperatura vode ne može značajno promijeniti u sekundi, pa ni u minuti, osim ako ne naliješ frišku vodu dosta različite razlike u temperaturi od postojeće.

 

BTW kad već pričam o akvariju, evo nešto slika: https://www.dropbox.com/sh/a4ah8juvmtqryai/AACsIsuJGLPrKD2MXmFF8F9ga?dl=0

 

Pokretan je Arduinom Pro Micro, ima RTC (sat), kojem je pridružen dvostruki relej (jedan za dnevnu rasvjetu, jedan za noćnu i jutarnju plavu rasvjetu), dva senzora temperature (jedan vodootporni u vodi, spojen preko 3,5 mm TRRS kabela/konektora, jedan u poklopcu pored Arduina), te kontroler s OLED ekrančićem i 5 gumbiju (spojen preko običnog stereo 3,5 mm kabela/konektora).

 

gogo2409 kaže...

Daj mi jos pojasni par ovih linija ako ti nije teško.

Koje konkretno linije ne kužiš? #include bi trebalo biti jasno. #defineovi bi trebali biti jasni - definiraju konstante (gdje god misliš neku vrijednost upotrijebiti više puta, moraš ju koristiti preko konstante, jer si u suprotnom kasnije zadaješ problema). OneWire - inicijalizira se biblioteka za Dallasov termometar, na pinu 10. Preko varijable lastTemperatureTime znaš koliko je vremena prošlo od zadnjeg očitanja temperature. Adrese termometara bi trebale biti jasne - svaki uređaj na OneWire sabirnici ima svoju adresu (isto kao što računala imaju IP adrese). tempVoda i tempPodPoklopcem su samo globalne varijable koje drže te temperature.

 

temperatureRequested je "zastavica" koja služi tome da se ne traži očitanje temperature prije nego li su senzori vratili temperaturu (a za vraćanje na raspolaganju imaju 750 milisekundi), jer ti Dallasovi digitalni termometri rade tako da im pošalješ zahtjev za očitajnem i onda čekaš određeni broj ms (ovisno o preciznosti) i nakon toga tražiš da ti vrate vrijednosti temperaturi. Ako ne čekaš određeni broj ms, onda vjerojatno neće ništa vratiti ili će vraćanje biti nepouzdano.

8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Konkretno šta ovaj kod definira?

 

#define TEMPERATURE_PRECISION 12 ///Cemu sluzi ovo?

 

 

Ova dva reda su adrese od dva senzora?Svaki red jedan senzor?Da li će zatraživanje adrese upalit na senzorima koje ja imam DS18... jer nek koriste LM35

 

DeviceAddress addrThermometers[THERMOMETER_COUNT] = {
{28, 0xA5, 0xE4, 0xF1, 0x05, 0x00, 0x00, 0xA7},
{28, 0xBA, 0x7A, 0xB5, 0x06, 0x00, 0x00, 0xC7}
};

 

I ja isto imam akvarij ali sam ja automatika za paljenje svijetla :D i hranjenje,jedino što mi možda fali je hranilica s ebaya da kad odem na godišnji dobivaju hranu jer dosad sam im kupovao topljivu hranu,tipa jedan štapić je 3 dana ovisno koliko ribica imaš.Malo oftopic,koliko je štetno da im ostavim ili ugasim svijetlo dok sam na Go i nema me doma?

 

 

Hvala još jednom na brzom odgovoru :)

Poruka je uređivana zadnji put sub 26.3.2016 14:06 (gogo2409).
 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

Konkretno šta ovaj kod definira?

 

#define TEMPERATURE_PRECISION 12 ///Cemu sluzi ovo?

Kao što ti sam naziv govori - preciznosti mjerenja. Može biti precizan na recimo 0,1 stupanj (možda i više?), a ako je preciznost mislim 9, onda je precizan na pola stupnja - znači, onda bi imao temperature tipa 20, 20.5, 21, 21.5...

 

gogo2409 kaže...

Ova dva reda su adrese od dva senzora?Svaki red jedan senzor?Da li će zatraživanje adrese upalit na senzorima koje ja imam DS18... jer nek koriste LM35

 

DeviceAddress addrThermometers[THERMOMETER_COUNT] = {
{28, 0xA5, 0xE4, 0xF1, 0x05, 0x00, 0x00, 0xA7},
{28, 0xBA, 0x7A, 0xB5, 0x06, 0x00, 0x00, 0xC7}
};

Tako je, od dva moja senzora u akvariju (jedan u vodi, drugi u poklopcu). Svaki Dallasov DS senzor ima jedinstvenu adresu.

 

gogo2409 kaže...

I ja isto imam akvarij ali sam ja automatika za paljenje svijetla :D i hranjenje,jedino što mi možda fali je hranilica s ebaya da kad odem na godišnji dobivaju hranu jer dosad sam im kupovao topljivu hranu,tipa jedan štapić je 3 dana ovisno koliko ribica imaš.Malo oftopic,koliko je štetno da im ostavim ili ugasim svijetlo dok sam na Go i nema me doma?

Ugašeno bi i smio ostaviti, samo što će ribe biti malo zbunjene (ne znam koliko se njima kroz to vrijeme može poremetiti bioritam), ali upaljeno nikako, jer bi ti mogle buknuti alge.

15 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

Konkretno šta ovaj kod definira?

 

#define TEMPERATURE_PRECISION 12 ///Cemu sluzi ovo?

 

 

Ova dva reda su adrese od dva senzora?Svaki red jedan senzor?Da li će zatraživanje adrese upalit na senzorima koje ja imam DS18... jer nek koriste LM35

 

DeviceAddress addrThermometers[THERMOMETER_COUNT] = {
{28, 0xA5, 0xE4, 0xF1, 0x05, 0x00, 0x00, 0xA7},
{28, 0xBA, 0x7A, 0xB5, 0x06, 0x00, 0x00, 0xC7}
};

 

I ja isto imam akvarij ali sam ja automatika za paljenje svijetla :D i hranjenje,jedino što mi možda fali je hranilica s ebaya da kad odem na godišnji dobivaju hranu jer dosad sam im kupovao topljivu hranu,tipa jedan štapić je 3 dana ovisno koliko ribica imaš.Malo oftopic,koliko je štetno da im ostavim ili ugasim svijetlo dok sam na Go i nema me doma?

 

 

Hvala još jednom na brzom odgovoru :)

Sory off topic  

Svjetlo tj. mrak ribicama neće na štetiti ali ako imaš biljke sve ćeš ih uništiti jer biljke su jako osjetljive na svijetlo. 

Kao i isključivanje pumpe preko noći šteti kvaliteti vode u akvariju.

8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav svima!

Imam problem oko završnog rada pa ako je netko voljan izdvojiti svoje vrijeme i pokušati mi pomoći, tema mog završnog rada je pametni semafor.

Semafor je namijenjen za skretanje ulijevo.

"Pametni" dio semafora je senzor HC-SR04 koji bi trebao aktivirati semafor ukoliko se ispred njega nalazi automobil. No, dok se ispred semafora za skretanje ulijevo ne nalazi automobil, aktiviran je drugi semafor za prolazak ravno.

Za izradu koristim sljedeće elemente: -Arduino Uno

                             -6x LED 3mm (2 crvene, 2 žute, 2 zelene)
                             -6x otpornik 330 Ω
                             -senzor za mjerenje udaljenosti HC-SR04

Komponente su sve testirane u zasebnim programima i sve ispravno rade. No, problem se dešava kada sve spojim u jedan program.

 

Kod sam napisao i on bi trebao raditi sljedeće:
1. aktivirati semafor 1(za kretanje ravno)
2. kada senzor detektira prisutnost automobila držati upaljen semafor 1 još neko vrijeme te potom aktivirati semafor 2(za skretanje ulijevo)

3. nakon određenog vremena ugasiti semafor 2 te ponovno aktivirati semafor 1 i čekati sljedeći ciklus.

No program ima "bug". Naime, kada se pali semafor 1 sve radi dok se ne upali zeleno. Zeleno bi trebalo samo svjetliti no iz nekog razloga žuta nastavi treperiti dok je zeleno upaljeno. 
Kada se aktivira drugi semafor, normalno se gasi taj isti semafor. Znači, "bug" je prisutan samo dok se semafor 1 pali.

 

Ako netko ima vremena i volje pomoći mi bio bih jako zahvalan. Dolje je priložen napisani kod za semafor te shema spoja.

 

Hvala, lp.

 

 

[code]
const int trigger=3;
const int echo=2;

 

long trajanje, udaljenost; //trajanje impulsa od senzora prema objektu i natrag prema kojem se mjeri udaljenost objekta

 

//varijable semafora 1

int crveno=12;

int zuto=11;
int zeleno=10;

 

//varijable semafora koji se aktivira u ovisnosti o zapažanju senzora
int crvenol=7;
int zutol=6;
int zelenol=5;

 

int maindelay=1000;

 

void setup() {
Serial.begin(9600); //serijska komunikacija

pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);


pinMode(crveno, OUTPUT);
pinMode(zuto, OUTPUT);
pinMode(zeleno, OUTPUT);


pinMode(crvenol, OUTPUT);
pinMode(zutol, OUTPUT);
pinMode(zelenol,OUTPUT);

digitalWrite(crveno, HIGH);

digitalWrite(crvenol, HIGH);

}

void loop() {

digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);

 

trajanje=pulseIn(echo,HIGH);

 

udaljenost=trajanje/58; //formula za udaljenost objekta u centimetrima

 

Serial.print(udaljenost);
Serial.println("cm");

 

upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1

//uvjet po kojemu se aktivira semafor 2 ukoliko je automobil na traci za skretanje
if(udaljenost<15){
delay(maindelay);
ugasisemafor1();      //deaktiviranje semafora 1
delay(maindelay);
upalisemafor2();      //aktiviranje semafora 2
delay(maindelay*8);
ugasisemafor2();     //deaktiviranje semafora 2
delay(maindelay);}

}
//funkcija za aktiviranje semafora 1

void upalisemafor1(){
delay(maindelay);
digitalWrite(zuto, HIGH);
delay(maindelay);
digitalWrite(crveno, LOW);
digitalWrite(zuto, LOW);
digitalWrite(zeleno, HIGH);

}
//funkcija za aktiviranje semafora 2

void upalisemafor2(){
delay(maindelay);
digitalWrite(zutol, HIGH);
delay(maindelay);
digitalWrite(crvenol, LOW);
digitalWrite(zutol, LOW);
digitalWrite(zelenol, HIGH);

}
//funkcija za gašenje semafora 1

void ugasisemafor1(){
digitalWrite(zeleno, LOW);
digitalWrite(zuto, HIGH);
delay(maindelay);
digitalWrite(crveno, HIGH);
digitalWrite(zuto, LOW);

}
//funkcija za gašenje semafora 2

void ugasisemafor2(){
digitalWrite(zelenol, LOW);
digitalWrite(zutol, HIGH);
delay(maindelay);
digitalWrite(crvenol, HIGH);
digitalWrite(zutol, LOW);}

 
                           

 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
rinma79 kaže...

No program ima "bug". Naime, kada se pali semafor 1 sve radi dok se ne upali zeleno. Zeleno bi trebalo samo svjetliti no iz nekog razloga žuta nastavi treperiti dok je zeleno upaljeno. 

Kada se aktivira drugi semafor, normalno se gasi taj isti semafor. Znači, "bug" je prisutan samo dok se semafor 1 pali.               

Ništ čudnoga kad u loopu semafor 1 pališ u svakoj iteraciji!

 

void loop() {

digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);

 

trajanje=pulseIn(echo,HIGH);

 

udaljenost=trajanje/58; //formula za udaljenost objekta u centimetrima

 

Serial.print(udaljenost);
Serial.println("cm");

 

upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1

//uvjet po kojemu se aktivira semafor 2 ukoliko je automobil na traci za skretanje
if(udaljenost<15){
delay(maindelay);
ugasisemafor1();      //deaktiviranje semafora 1
delay(maindelay);
upalisemafor2();      //aktiviranje semafora 2
delay(maindelay*8);
ugasisemafor2();     //deaktiviranje semafora 2
delay(maindelay);}

}

 

Znači, nema nikakve veze kakva je situacija sa semaforima, kakva je situacija na cesti - ti taj semafor pališsvaki put kad se vrti loop.

 

BTW ubuduće za dijeljenje tako velikog komada koda koristi servis poput https://codeshare.io/

8 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Kako da onda to napišem? Ideja neka?

16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

U biti, mislim da te nisam prvi put dobro shvatio. Znači, semafor2 se pali samo kad udaljenost < 15 cm, i odmah nakon toga (nakon određenog delaya) vraća se semafor1, zar ne? Onda upalisemafor1() moraš premjestiti na kraj uvjeta kad je udaljenost < 15. A da bi ti se semafor uopće prvi put uključio nakon pokretanja programa, upalisemafor1() moraš staviti i na kraj funkcije setup().

 

Znači, ovako nekako:

 

void setup() {
  ...
 upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1
}

void loop() {

digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);

trajanje=pulseIn(echo,HIGH);

udaljenost=trajanje/58; //formula za udaljenost objekta u centimetrima

Serial.print(udaljenost);
Serial.println("cm");

//uvjet po kojemu se aktivira semafor 2 ukoliko je automobil na traci za skretanje
  if(udaljenost<15) {
   delay(maindelay);
   ugasisemafor1(); //deaktiviranje semafora 1
   delay(maindelay);
   upalisemafor2(); //aktiviranje semafora 2
   delay(maindelay*8);
   ugasisemafor2(); //deaktiviranje semafora 2
   delay(maindelay);
  upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1
  }
}

8 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

U biti, mislim da te nisam prvi put dobro shvatio. Znači, semafor2 se pali samo kad udaljenost < 15 cm, i odmah nakon toga (nakon određenog delaya) vraća se semafor1, zar ne? Onda upalisemafor1() moraš premjestiti na kraj uvjeta kad je udaljenost < 15. A da bi ti se semafor uopće prvi put uključio nakon pokretanja programa, upalisemafor1() moraš staviti i na kraj funkcije setup().

 

Znači, ovako nekako:

 

void setup() {
  ...
 upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1
}

void loop() {

digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);

trajanje=pulseIn(echo,HIGH);

udaljenost=trajanje/58; //formula za udaljenost objekta u centimetrima

Serial.print(udaljenost);
Serial.println("cm");

//uvjet po kojemu se aktivira semafor 2 ukoliko je automobil na traci za skretanje
  if(udaljenost<15) {
   delay(maindelay);
   ugasisemafor1(); //deaktiviranje semafora 1
   delay(maindelay);
   upalisemafor2(); //aktiviranje semafora 2
   delay(maindelay*8);
   ugasisemafor2(); //deaktiviranje semafora 2
   delay(maindelay);
  upalisemafor1();//pozivanje funkcije za aktiviranje semafora 1
  }
}

Tako je da... aktivira se samo kada je <15. 
Ne blinka više... hvala ti puno.


Postoji li možda mogućnost da kada se semafor2 ugasi i ponovno aktivira semafor1 da neko vrijeme senzor ne mjeri udaljenost ili da se ne pali semafor 2?

Semafor 2 će se deaktivirati nakon nekog vremena, ali to ne znači da će proći svi automobili te ako ostane automobil iznad senzora semafor1 će se aktivirati te odmah deaktivirati i upaliti semafor 2.
Htio bih nekako napraviti da ukoliko ostane automobil na crvenom da mu se ne pali semafor 2 neko vrijeme dok se ne propuste ponovno auti koji su na semaforu 1.

16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
rinma79 kaže...
Postoji li možda mogućnost da kada se semafor2 ugasi i ponovno aktivira semafor1 da neko vrijeme senzor ne mjeri udaljenost ili da se ne pali semafor 2?

Staviš željeni delay iza upalisemafor1(); 

8 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Hvala ti do neba. Osjećam se malo glupo, ali bitno je da sad radi.. hahaha

Pozdrav kralju

9 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Pozdrav. Imam psa u kući i znači svaki puta kad ona traži van netko se mora ustat i otvorit joj vrata, i sad to izgleda kao lijenost, nije nego onda ona traži i po noći pa je to problem.
Htio bi napraviti vrata sa stražnje strane kuće i to sakriti sa kucicom za pse(npr pas ulazi u kucicu a ne direktno u kucu da bude ocito).
E sad me zanima moze li se pomocu nekog senzora ocitati cip na psu da mu otkljuca vrata preko arduina na udaljenosti od cca 75cm,
Koliko sam citao cip je RFID pa nisam sad bas siguran.
Hardwell - Young Again
Moj PC  
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
leon98 kaže...
E sad me zanima moze li se pomocu nekog senzora ocitati cip na psu da mu otkljuca vrata preko arduina na udaljenosti od cca 75cm,
Koliko sam citao cip je RFID pa nisam sad bas siguran.

RFID tagovi na 13,56 MHz trebali bi biti čitljivi na udaljenosti od jednog metra.

9 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
No može li koristiti već postoječi čip tj. onaj za ljubimce?
Hardwell - Young Again
16 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...
leon98 kaže...
E sad me zanima moze li se pomocu nekog senzora ocitati cip na psu da mu otkljuca vrata preko arduina na udaljenosti od cca 75cm,
Koliko sam citao cip je RFID pa nisam sad bas siguran.

RFID tagovi na 13,56 MHz trebali bi biti čitljivi na udaljenosti od jednog metra.

 mozda i mogu ukoliko se na citacu koristi neka zasebna antena... inace, u praksi, znatno manje, bar kad su tipicni ebay citaci u pitanju... 

16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
leon98 kaže...
No može li koristiti već postoječi čip tj. onaj za ljubimce?

Trebalo bi još kod veterinara tražiti potvrdu o kakvim točno čipovima je riječ. Prema ovoj stranici, odnosno prema ISO standardu, koriste se čipovi 125-134 kHz, a oni se mogu iščitati na udaljenosti do 10-30 cm (može i više, ali bi tad čip trebao biti veći). Drugim riječima, taj čip ti vrlo vjerojatno ne bi koristio. Mislim, možeš probati, ali...

9 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Ok. Hvala, javim vam kako projekt napreduje.
Hardwell - Young Again
Moj PC  
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
leon98 kaže...
Ok. Hvala, javim vam kako projekt napreduje.

Vidi i ovo: https://www.sureflap.com/en-gb/pet-doors/microchip-pet-door

8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Eto napok stigao ekran na kraju sam uzeo 20x4 jer mi onaj 16x2 nije došao,što se u zadnje vrijeme cesto događa da mi stvari s ebaya ne dođu.Uglazbio sam ga po ovoj shemi. S time da je na ovoj shemi nesto krivo jer je pin 15 na LCD-u trebalo piknut u 5V kako bi svijetlilo i contrast sam stavio 150 da mi se vide slova i brojke koristio sam cod koji je u totorialu naveden,sad to trebam uglazbit s svoja 2 senzora i relay-om da bi igralo.

 

Doša sam opet po savjet planiram napajat arduino s 6v akumulatora i našao sam pretvac za 2 $ ali ja sam botina i nevidim di bi trebao nalemit žice koje od pretvarača idu na akumulator.Evo i slike kako izgleda. Koliko se ja kužim žice bi trebalo nalemit na ove dvije rupice na kraju ali koja je + a koja - ?

 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
gogo2409 kaže...

Doša sam opet po savjet planiram napajat arduino s 6v akumulatora i našao sam pretvac za 2 $ ali ja sam botina i nevidim di bi trebao nalemit žice koje od pretvarača idu na akumulator.Evo i slike kako izgleda. Koliko se ja kužim žice bi trebalo nalemit na ove dvije rupice na kraju ali koja je + a koja - ?

Daj link na proizvod. To inače možeš odrediti pomoću multimetra, preko kontakata u USB portu - pogledaš koji kontakt je plus, koji minus i testiraš kontinuitet ("kratki spoj") s rupicama.

Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice