Pa neće samo ESP raditi posao... Njega ću spojiti na arduino nano (koliko vidim, može se) a nano će raditi sa senzorima, raditi AD konverziju....
Arduino - projekti, ideje, savjeti, problemi
- poruka: 1.365
- |
- čitano: 420.611
- |
- moderatori:
DrNasty, pirat, XXX-Man, Lazarus Long, vincimus
Pa neće samo ESP raditi posao... Njega ću spojiti na arduino nano (koliko vidim, može se) a nano će raditi sa senzorima, raditi AD konverziju....
U tom slucaju je ok, mozda bi ti bilo bolje da nabavis mini pro 3.3V posto je on full kompatibilan s ESP, da ne moras raditi 5V na 3.3V.
Naravno, ako se vise bavis s arduino projektima i imas di iskoristiti nano kasnije, ako se ne bavis time nema smisla trosit na jos 1 arduino, a da drugi skuplja prasinu.
Lako za 3.3V, ide malo napajanje (step down sa 12 na 5V, tako da tu ima dovoljno struje za nano, esp, jedan pir senzor i jedan smoke (mq-2). To je sve minijaturno tako da ću sve montirati na proto pločicu a nju sa dvostranom trakom na napajanje).... Možda i neki DHT11, ima dovoljno i mjesta i struje za sve. Moram samo dva LD33V naći...
Ako mislis to imati upaljeno 24/7 bilo bi dobro malo razmisliti i o potrosnj energije i uzeti neki step down converter za 3.3V. Istina da si sad mislis par W +-, ali sve je to osjetno.
Prvo mora to sve stići, napajanje ću zadnje riješiti, kad to sve to natjeram pojedinačno da radi. Ispravljač je 12V 3A, mislim da kad ga srušim na 5V ne gubim puno, tu su miliwati u igri. Ako napajanje postane problem, dodat ću još jedno, bar tih 12V ispravljača imam na izvoz.
Isprike na duplom postu ali...
Do sada sam imao arduino nano spojen na 9v ispravljač preko VIN. Danas sam probao preko 5v na 5v pin i više ne radi? Nije mi jasno koji k se dogodio ali na USBu normalno radi (može ga se programirati itd) ali više ne reagira na eksterno napajanje (5v ili ovih 9 na kojima je do sada normalno radio). Ništa ne izgleda niti spaljeno ni oštećeno.
Ja ti se u to baš i ne razumijem kad nisam elektroničar. Ali eto... Na shemi Nanoa ne vidim osigurač ili ga ne znam prepoznati (Uno ima polyfuse tamo na lijevoj strani odmah ispod USB-a).
Na shemi Nanoa vidim +5V AUTO SELECTOR - po nazivu bi bilo logički zaključiti da je to sklop koji bira napajanje - USB ako je spojen USB, a ako nije, onda +5V. Selektor je jednostavno jedna schottkey dioda - vjerojatno je ona "spaljena", odnosno kak to vele "dead-short" pa je stalno aktivan USB, čak i kad na njemu nema napona.
Uglavnom, ljudi su sami mijenjali te diode (ak ti se to uopće da raditi ili isplati raditi s obzirom na nisku cijenu Nanoa, a i u projektu Nano možda možeš imati spojen na punjač za mobitel preko USB-a):
http://hack.lenotta.com/arduino-nano-short-circuit-damn/
Mijenjali su ih zbog suprotnih problema - +2V na USB-u, a VIN radi kako treba. Međutim, vidi ovo: http://electronics.stackexchange.com/questions/77712/can-a-diode-fail-to-open-position
Tu lik objašnjava kako diode mogu propasti na dva načina - tako da su stalno otvorene (kao da nisu u strujnom krugu - kao kad osigurač pregori; to se događa zbog prejake struje) ili stalno zatvorene (kao da je tu direktni spoj; to se događa zbog previsokog napona).
poz svima,narucio sam ovu knjigu jos 29.12.2015. i nisam je jos dobio,poslao sam im mail prije 4 dana i nisam dobio odgovor,je li ovo normalno? malo mi je sve to smjesno s obzirom da mi je prije stigao mobitel iz kine nego knjiga iz zagreba. http://www.paolozenzerovic.info/hr/arduino-knjiga/
poz svima,narucio sam ovu knjigu jos 29.12.2015. i nisam je jos dobio,poslao sam im mail prije 4 dana i nisam dobio odgovor,je li ovo normalno? malo mi je sve to smjesno s obzirom da mi je prije stigao mobitel iz kine nego knjiga iz zagreba. http://www.paolozenzerovic.info/hr/arduino-knjiga/
Zovi telefonom, na taj nacin ces sve najprije rjesiti. Mozda nemaju kod sebe knjigu pa ce poslati tek kad stigne.
I 2. stvar, te arduino knjige i nemaju previse smisla, puno vise se nauci s interneta, kroz razne tutuoriale na instructables ili arduino stranicama, naravno na youtube postoje odlicni instruktori koji objasne nacin rada puno kvalitetnije nego je s knjigom uopce moguce, nema te knjige koja ce objasnit nesto prikazano videom iza cega postoji kvalitetno teoretsko objasnjenje uz prakticni primjer.
poz svima,narucio sam ovu knjigu jos 29.12.2015. i nisam je jos dobio,poslao sam im mail prije 4 dana i nisam dobio odgovor,je li ovo normalno? malo mi je sve to smjesno s obzirom da mi je prije stigao mobitel iz kine nego knjiga iz zagreba. http://www.paolozenzerovic.info/hr/arduino-knjiga/
Zovi telefonom, na taj nacin ces sve najprije rjesiti. Mozda nemaju kod sebe knjigu pa ce poslati tek kad stigne.
I 2. stvar, te arduino knjige i nemaju previse smisla, puno vise se nauci s interneta, kroz razne tutuoriale na instructables ili arduino stranicama, naravno na youtube postoje odlicni instruktori koji objasne nacin rada puno kvalitetnije nego je s knjigom uopce moguce, nema te knjige koja ce objasnit nesto prikazano videom iza cega postoji kvalitetno teoretsko objasnjenje uz prakticni primjer.
bas sada gledam ove tutoriale
jer ne mogu docekati tu knjigu,a i polako gubim strpljenje.jel se ovaj ardumoto shield spaja na arduino uno ? i jel ima možda nešto bolje od tog kita za takve stvari ,mislim povezati s uno-m i infrared senzorom pa napraviti vozilo koje ce izbjegavati objekte
jel se ovaj ardumoto shield spaja na arduino uno ? i jel ima možda nešto bolje od tog kita za takve stvari ,mislim povezati s uno-m i infrared senzorom pa napraviti vozilo koje ce izbjegavati objekte
Što znači "bolje"? Isti kontroler možeš kupiti za mnogo manje novca, npr. Pa si onda još kupiš motore i kotače koje želiš, npr.
Pozdrav. Kratko pitanje, mogu li spojiti Arduino Megu sa kablom od printera na računalo i jeli to u redu s obzirom da nije original Arduino kabel? Koliko znam, Arduino ima port USB B tip. Zahvaljujem, lp
![poslano s mobilnog telefona](/forum/slike/frommobile.png)
Ako netko koristi obične Arduinoe (znači ne breadboard module poput Nanoa ili Pro Microa), možda bi mu bio zgodan ovaj shield, s Nokia 5110 LCD ekranom, malim digitalnim joystickom, gumbom za reset i izloženim pinovima. Sam modul košta tri dolara, a ako se gleda pojedinačna cijena komponenti: ekran košta malo preko dva dolara, a digitalni joystick 2,39 dolara. Prava šteta je što, izgleda, dolazi sa zalemljenim headerima, jer da ne dolazi tako, bio bi super za svakakve projektiće koji bi se jednostavno zatvorili u kutiju u kojoj bi bio otvor za ekran, joystick i eventualno gumb. Al opet, za otvorene projekte za tri je dolara ovo odlična investicija.
Ovdje imate primjenu shielda u praksi.
Trebam pomoc, dva dana vec trazim nacin kako da napravim sljedece:
Imam jednostavan projket, senzor vlage i temperature, senzor vibracija i senzor tlaka samo povezni na arduino, te takoder spojena IR resiver i LCD 16x2.
Moja ideja je da kada na daljinskom stisnem tipku 1 da mi se pokazu podaci sa senzora 1 i da se stalno refreshaju, do sad sam uspio napravit da kad stisnem npr tipku 1 on ocita podatke na senzoru i ispise vrijednosti i ostane tu ako se vrijednost promjeni on nece mijenjat tj ocita samo jednom i stane, a ja bi htio da bude u stvarno vremenu nesto kao da to ocitavanje bude i while petlji dok se ne stisne druga tipka. Ali posto ne razumije 100% kako funkcionira ovo s primanjem podataka na daljinskom nemogu nikako da smislim rijesenje za taj problem
Evo kod, neuredan je i ima stvari koje su nebitne al nadam se da cete shvatit di je problem. Vidit cete sad svasta jer ovo su vec ocajne ideje sa while(1) i if petljom unutar while al jednostavno nemam ne znam nac nacin kako da provjerim dal se ulaz na ir senzoru promjenio.
#include <DHT.h> //unosenje baze naredbi za lakse programiranje senzora DHT11
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // podaci vezani uz modul na LCD-u
#define DHTPIN 2 // broj pina na koji je spojen dht11 senzor
#define DHTTYPE DHT11 // DHT 11 ????? OBJASNIIIIIIIIIIIIIII
DHT dht(DHTPIN, DHTTYPE);
float vlaznost;
float t;
float f;
float hic;
int vibracije = 4; // broj pina na koji je spojen senzor vibracija SW-420
int stanjevibracija;
int IRsenzor = 3; //broj pina na koji je spojen IR resiver
IRrecv irrecv(IRsenzor);
decode_results results; // create instance of 'decode_results'
void setup() {
dht.begin(); // ????? OBJASNIIIIIII
pinMode(vibracije, INPUT); // govorimo kontroleru da nam senzor "dostavlja" podatke
lcd.begin(16, 2);
lcd.backlight();
/*lcd.setCursor(0,0); // Stavi pokazivac na poziciju (0,0) - prvi red, prvi znak
lcd.print("Jebo te kru");
lcd.setCursor(0,1);
lcd.print("koliko kablova?!");
delay(1000); */
lcd.setCursor(0, 0);
lcd.print("MPU Seminar!");
irrecv.enableIRIn(); // Start the receiver
delay(2500); /* Pricekati 2.5 sekunde da senzor sam napravi prvo mjerenje tako da se citanje podataka odvija bez greske.
Reading temperature or humidity takes about 250 milliseconds! Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)*/
}
void loop() {
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------DHT11
vlaznost = dht.readHumidity(); //spremanje postotka vlaznosti u varijablu "vlaznost"
t = dht.readTemperature(); // Citanje podatke za temperaturu, po bazi podataka dobivamo podatke vec pretvorene unaprijed u stupnjeve celzijeve
f = dht.readTemperature(true); // Podatke takoder mozemo citati u farenhajtima (isFahrenheit = true)
hic = dht.computeHeatIndex(t, vlaznost, false);
/* Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false); */
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------DHT11
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------SW-420
stanjevibracija = digitalRead(vibracije);
// delay(1) //mozda treba dodati delay radi stabilnosti
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------SW-420
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------LCD
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------LCD
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
}
void translateIR() // takes action based on IR code received
// describing Remote IR codes
{
switch (results.value)
{ case 0xFF30CF:
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Senzor 1");
delay(2000);
while(1){
if (irrecv.decode(&results)!=0xFF30CF){break;}
else{
hic = dht.computeHeatIndex(t, vlaznost, false);
vlaznost = dht.readHumidity();
lcd.clear(); lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(hic); lcd.setCursor(0, 1); lcd.print("Vlaga: "); lcd.print(vlaznost);
delay(500);}}
break;
case 0xFF18E7:
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Senzor 2");
delay(2000);
stanjevibracija = digitalRead(vibracije); lcd.clear(); lcd.setCursor(0, 0); lcd.print(stanjevibracija); delay(500); break;
}
}
Probaj ovako:
void loop() {
detektirajUnos(); //funkcija za dekodiranje IRsenzora
ispisNaLcd(); //funkcija za ispis podataka na lcd
}
void detektirajUnos() {
if (irrecv.decode(&results)) { //zaustavi IRsenzor i dekodiraj
irrecv.resume(); //ponovo pokreni IRsenzor
}
delay(20);
switch (results.value) {
case 0xFF30CF:
ispisNaLcd = 1;
results.value = 0x000; //postavi atribut value na neku default vrijednost
break; //na vrijednost koja se ne koristi
case 0xFF18E7:
ispisNaLcd = 2;
results.value = 0x000;
break;
}
}
void ispisNaLcd() {
if (ispisNaLcd == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Stanje senzora 1:"); //ispisi stanja senzora
} if (ispisNaLcd == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Stanje senzora 2:"); //ispisi stanja senzora
}
}
Sva funkcionalnost tvoga koda bi trebala biti u dodatnim funkcijama koje bi se pozivale u loop()-u. Em će biti preglednije i urednije te će biti lakše naći greške(možeš testirati metodu po metodu i brže naći grešku).
CTRL+T ---------------- Auto formatiranje koda!
int vibracije = 4; // broj pina na koji je spojen senzor vibracija SW-420
int IRsenzor = 3; //broj pina na koji je spojen IR resiver
Na arduinu sa 8 bitnim ATmega čipovima integer je veličine 16 bita (raspon od -32,768 do 32,767), i onda ti unutra pospremiš 4, tj. 3?
float t;
Zašto temperatura mora biti float? Teško da je DHT11 precizan na tu jednu decimalu. Stoga da je float veličine 32 bita.
U kodu imaš dosta stvari koje su zakomentirane i nekoristiš ih. Komentari su malo na engleskom malo na hrvatskom te su neuredni i nepregledni.
Ne kuzim ovo sto si reko kao komentar za spajanje senzora, npr senzor za vibracije mi je spojen na digitalni izlaz 4 zasto to nije najbolji izbor tj di je tu problem? Početnik sam jos pa nemoj zamjerit ak je pitanje glupo.
Kad sam gledao tutoriale kako se programi senzor za temperaturu oni su uvijek koristili float i iz tog razloga sam i ja tako radio..
Rekao sam da je kod neuran skroz i da mi to slusi samo meni za testiranja, naravno da ce pola tih komentara se obrisati , to je meni sad osobno samo da se snadem za prvu ruku, doradit ce to po tom pitanju cim dobijem malo vremena za to.
Pozdrav svima koji rate temu
Evoi mog problema:
Narucio sam sa ebaya tft lcd
I nikako da ga upogonim na arduino mega
Pregledavajuci examples koji sam dobio u knjiznici sa njim vidim da je define na pinove a0 do a4 dok se vidi da na arduino ti pinovi nisu spojeni
Proizvođac lcda je mcyfriend i tamo ima shema.
Poslije dam linkove
OK ništa nije krivo, ali: ATmega 328p koji je na tvojem arduinu ima ograničenu količinu memorije - 32K flasha i 2K rama. Pin na koji je spojen senzor si moga pospremiti bez problema u tip pdataka tipa "byte" koji je veličine 8 bita. Pospremanje u integer je rasipanje. Prouči malo tipove podataka.
Jedan primjer(maksimalno maksimalno pojednostavljen):
Ako imaš očitanje senzora koji na izlazu daje temperaturu od 0 do 100°C to možeš spremiti u varijablu tipa integer ali možeš i komotno spremiti u varijablu tipa byte (raspon od 0 do 255). Da bi dohvatio integer(16b) treba mu dva ciklusa takta (8b mikrokontroler), dok mu za byte treba jedan ciklus(dvostuko kraće).
Problem nastaje kod množenja dva broja. Množenje ne traje jedan ciklus, traje više(ovisno o kompajleru). 8b mikrokontroleru je daleko jednostavnije pomnožiti dvije varijable veličine 8b nego 16b(integer) ili još gore 32b(float). Naravno postoji arduino i sa 32b bitnim mikrokontrolerima koji 32b varijablu dohvate u jednm ciklusu takta: Due, zero.....
Ovo je važno zato jer u kodu koristiš <IRremote.h> library koja stalno provjerava na IRsenzoru dali ima nešto za očitati. Što ti više radiš nešto drugo(očitavaš senzore, računaš), manje vremena gledaš IRsenzor, tako da možeš izgubiti neko očitanje ili ga krivo očitati(dekodirati).
void setup() {
dht.begin(); // ????? OBJASNIIIIIII
...
delay(1000); */
...
delay(2500); /* Pricekati 2.5 sekunde da senzor sam napravi prvo mjerenje tako da se citanje podataka odvija bez greske.
Reading temperature or humidity takes about 250 milliseconds! Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)*/
}
Tri i pol sekunde ukupno daješ senzoru.
void translateIR() // takes action based on IR code received
// describing Remote IR codes
{
switch (results.value)
{ case 0xFF30CF:
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Senzor 1");
delay(2000);
while(1){
if (irrecv.decode(&results)!=0xFF30CF){break;}
else{
hic = dht.computeHeatIndex(t, vlaznost, false);
vlaznost = dht.readHumidity();
lcd.clear(); lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(hic); lcd.setCursor(0, 1); lcd.print("Vlaga: "); lcd.print(vlaznost);
delay(500);}}
break;
case 0xFF18E7:
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Senzor 2");
delay(2000);
stanjevibracija = digitalRead(vibracije); lcd.clear(); lcd.setCursor(0, 0); lcd.print(stanjevibracija); delay(500); break;
}
}
Uz ovakve delayeve uopće nije čudno da ti stvar ne radi. Delay ne radi ništa, nego samo vrti praznu petlju, da se čovjek tako izrazi - znači bezveze se troši procesorsko vrijeme. Dakle, tu izbaci delayeve! Kako? Tako da bilježiš vrijeme zadnjeg očitanja daljinskog upravljača i gledaš je li trenutno vrijeme za period osvježavanja veće od zadnjeg vremena očitanja.
Na primjer, imaš globalne varijable:
unsigned long lastIRTime, currentTime;
I definiraš si konstantu za to koliko često ćeš provjeravati IR senzor, recimo svakih 50 milisekundi:
#define IR_REFRESH_TIME 50
lastIRTime bit će trenutak zadnjeg očitanja IR senzora, a currentTime trenutno vrijeme (zato da ne pozivaš funkciju millis() nepotrebno deset puta; ako ćeš na drugim mjestima nepotrebno imati delayeve, onda ćeš negdje umjesto currentTime ipak morati koristiti millis, ali samo zato jer si krivo koncipirao program).
U setupu currentTime i lstIRTime postaviš na millis:
currentTime = millis();
lastIRTime = currentTime;
Na početku loopa postavljaš currentTime:
currentTime = millis();
I onda u funkciji u kojoj iščitavaš vrijednost s IR senzora gledaš:
if (currentTime >= lastIRTime + IR_REFRESH_TIME) {
lastIRTime = currentTime();
// tu provjeravaš je li stisnuta koja tipka
}
Uglavnom, na temelju ovog si razradi program, a nikakve vražje beskonačne petlje! Jedina beskonačna petlja koju smiješ imati u programu je funkcija loop (osim ako zbilja, ali zbilja nemaš jako opravdan razlog).
Dakle, nemoj si delayevima (i beskonačnim petljama) zablokirati program.
Pozdrav neki dan sam poceo raditi s arduinom i imam problem
koristim arduino nano, rfid-rc522 i catalex micro sd card adapter
htio bih ocitavati podatke s rfid kartice i spremati ih na micro sd karticu
arduino i rfid citac rade ok, ali kad spojim sd adapter, rfid citac vise ne cita kartice
ovako sam spojio citac sa arduinom nano
RST --- D9
SDA ---D10
MOSI --- D11
MISO --- D12
SCK --- D13
a ovako sd citac
CS --- D4
SCK --- D13
MOSI --- D11
MISO --- D12
sd citac iz
videa
Kako si ih inicijalizirao u setupu?
Ako sam te dobro shvatio, ti znači koristiš samo defaultni program za čitač RFID kartica, a kad si na Arduino priključio i čitač SD kartica (a da ga nisi inicijalizirao u softveru), onda više ne radi? Pa onda onesposobi čitač SD kartica! Spoji mu CS na VCC. Ako ni tada RFID ne radi, onda CS čitača SD kartica spoji na GND (jer bi to onda značilo da je active high).
Pa onda kod koji ti treba za spremanje na SD karticu iskopiraš u program za čitanje RFID kartice. A ako bi i dalje imao problema, onda čitač RFID kartica možeš prebaciti na I2C sabirnicu, pa da on bude na I2C sabirnici, a da čitač memorijskih kartica ostane na SPI sabirnici. S tim da je moguće da biblioteka ne podržava I2C za taj RFID čitač, pa ga treba "ručno" koristiti, kao što ti je to u ovom primjeru. Bojim se da si se uhvatio nečeg što je izvan domašaja tvojeg znanja...
Nisam siguran da sam shvatio što pitaš. Adafruitov LCD ima taj pin: https://learn.adafruit.com/adafruit-2-dot-8-color-tft-touchscreen-breakout-v2
Pa ga probaj onda naći po tom ekranu, barem ako imaju isti kontroler.
nisam ni ja siguran kaj hoču,naime kupim lcd sa linka http://www.ebay.com/itm/2-8-TFT-LCD-Shield-SD-Socket-Touch-Panel-Module-Display-for-Arduino-mega2560-/371478499043?hash=item567dd80ee3:g:JXMAAOSwwbdWN0IK na istoj je stranici link na library sa kojim "radi", i sad stavim lcd na megu , otvorim examples, vidim definirani pinovi aA0 do A4 ,pogledam lcd uopče nema pinova za analogne portove.
ok idem definirati za druge , trazim po gore navedenoj shemi fali mi pin LCD_CD i tu zacvikam.
na lcd-u je i oznaka 8347i to je valjda kontroler ali i o njemu tesko nalazim podatke