Arduino - projekti, ideje, savjeti, problemi izdvojena tema

poruka: 1.365
|
čitano: 384.052
|
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)
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ma MPU9250 koristim trenutno samo za lean angle(nagib lijevo-desno) te možda u budućnosti za kompas.

Ovo za nadmorsku visinu mi je palo na pamet, pa reko ako se može napraviti da iz tog modula dobijem nadmorsku visinu, zašto ne?

12 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

Može mala pomoć?

Naime, imam problem s funkcijom koja postavlja vrijednost postavke.

 

void SettingsClass::setSetting8(int8_t value, uint8_t index, uint8_t minValue, uint8_t maxValue, bool zero)
{
 if (settings8[index] + (value) > maxValue) settings8[index] = !zero * minValue;
 else if (settings8[index] + (value) < minValue) settings8[index] = !zero * maxValue;
 else settings8[index] += (value);
}

 

 

Što ona radi:

- ako je zbroj trenutne vrijednosti postavke i nove vrijednosti veći od maksimalne dopuštene vrijednosti, tada okreni parametar "zero" i pomnoži s minimalnom dupuštenom vrijednosti

- ako je zbroj trenutne vrijednosti postavke i nove vrijednosti manji od minimalne dopuštene vrijednosti, tada okreni parametar "zero" i pomnoži s maksimalnom dupuštenom vrijednosti

- ako nije ništa od gore navedenog onda samo zboji trenutnu vrijednost postavke i novu.

 

Parametri:

int8_t value - Korak nove vrijednosti postavke. Ako želim povećati postavku koristim 1, ako ju želim smanjiti onda koristim -1. Dakle mogu ići naprijed i nazad s vrijednosti postavke.

uint8_t index - Index postavke koju želim modificirati.

uint8_t minValue - Minimalna vrijednost postavke.

uint8_t maxValue - Maksimalna vrijednost postavke.

bool zero - Eh sad, postoje određene postavke koje imaju rang od X -> Y ali kao dodatnu vrijednost imaju nulu(koja označava da je određena opcija ugašena). Evo primjer: Ima postavka za vrijeme koje je potrebno proći da bi se ekran ugasio. Minimalna vrijednost te postavke je 10000(10 sekundi), a maksimalna 65000(65 sekundi). No ako dovedem postavku na 10000 i želim ju još smanjiti(dakle da bude 9000), tada bi ta funkcija trebala otići na nulu(što bi značilo da je "screen saver" ugašen), ako još otiđem unazad(tada bi bilo -1000) onda bi funkcija trebala prebaciti na 65000(znači "screen saver" je opet upaljen). Ista takva logika vrijedi i s druge strane.

 

Problem je što funkcija i ne radi što treba.

Kada dođem na 10000, i smanjim još jednom, postavka otiđe na 0(OFF). To valja.

Međutim više se ne mogu izvaditi iz OFF postavke. Pritisnem tipku za povećanje postavke, opet bude OFF, pritisnem za smanjenje, bude OFF.

Jel ima neko ideju kako odraditi funkciju da radi posao?

@mbaksa

 

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

Varijabla zero ti predstavlja "OFF" stanje? Ili obratno od OFF? Gdje i kako mijenjaš njezinu vrijednost? Meni bi bilo logično da je šalješ kao referencu i onda da ti drugi red izgleda ovako:

...

else if (settings8[index] + value < minValue) {

  settings8[index] = !zero * maxValue;

  zero = !zero;

}

...

Poruka je uređivana zadnji put ned 9.12.2018 4:10 (mbaksa).
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ne, zero predstavlja gore naveden oblik postavke.

Dakle ovakav: OFF(0), 10000(minValue) ... 65000(maxValue), tada postavljam zero parametar na true(1)

Ako je oblik postavke 0(minValue) .. 5(maxValue) tada mi je zero parametar false(0).

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

 else if (settings8[index] + value < minValue) {

  if (zero && (value == 0))  settings8[index] = maxValue;

  else settings8[index] = !zero * maxValue;

}

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ovako sam nešto iskemijo.

Nije funkcija koja se cijelo vrijeme koristi pa nije toliko ni bitna. Radi svoj posao...

 

 int16_t newValue = settings8[index] + (value);

 if (newValue > maxValue) settings8[index] = !zero * minValue;
 else if (newValue < minValue)
 {
  if (zero)
  {
   if (newValue < 0) settings8[index] = maxValue;
   else if (value > 0) settings8[index] = minValue;
   else settings8[index] = 0;
  }
  else settings8[index] = maxValue;
 }
 else settings8[index] = newValue;

Jel netko zna gdje se može nabaviti STM32F103CB pločica? Izbacuje mi samo čipove za zalemit, a od pločica izbacuje samo C8T6 verziju.
Navodno se na C8T6 može ubaciti program od 128kB ako se kod uploada označi CB verzija. No u slučaju da ne radi program(ili ne daj Bože crke pločica), nek imam CB verziju.
Ako se ne varam CB i C8 su pločice istih dimenzija, isti oblik i sve, tako da ne bi trebao biti problem ih zamjeniti samo.
@EDIT: Da jednostavno probam s većim programom od 64kB.
Jel ima nekakav način da se uz par linija koda kreira program veličine >64kB?
@EDIT2: Lorem ok 90kB :D
Poruka je uređivana zadnji put pon 10.12.2018 4:28 (Dex.pwn).
7 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav svima, imam Arduino uno i Nano 3. Pokušao sam napraviti obični digitali sat s DS1302 Real Time Clock Module i TM1637 4-Digit LED 0.56 InchDisplay. Tube 7 Segments . Da li me možete uputiti na gotov, ispravan program s kojim bih te elemente upogonio u obični sat

hvala

 
0 0 hvala 0
6 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav,izvadio sam step motor iz printera i spojio ga na l298n te na arduino i sve super radi,problem je sto kad motor ne izvrsava nikakvu radnju stoji i pocinje se zagrijavati i to poprilicno jako,nemoguce ga je drzati u ruci. Kad izmjerim napon na izlazima za motor pokazuje oko 8v ,pa mi to nekako nije jasno,jel chip ne treba davati izlazni napon samo kad mu arduino to omoguci preko input pinova.Ne znam jesam ja nesto pogrijesio ili mi fali nekakva dodatna komponeneta za zastitu motora,jer ovako ce on jako brzo otici put smeca nastavili se zagrijavati.  :)

 
0 0 hvala 0
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Pokušaj odspojit motor
 
0 0 hvala 0
6 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

To je meni sve nesto cudno kad odspojim motor onda mi na izlazima mjeri identicni napon kao i na napajanju,kao da doslovce sav napon na napajanja proslijedi na output iako je arduino izvrsio naredbe i gotov je s kodom(ima 3 naredbe u setupu)

 
0 0 hvala 0
6 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Problem rijesen,logicno da je bio softverski,tko bi rekao da arduino kad izvrsi naredbe ne postavi sam input u low hahahahah.Evo nek ovih par postova budu samo savjet ako neko naide na isti problem. :)

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

Problem rijesen,logicno da je bio softverski,tko bi rekao da arduino kad izvrsi naredbe ne postavi sam input u low hahahahah.Evo nek ovih par postova budu samo savjet ako neko naide na isti problem. :)

Zbunjujuće mi je to što si pisao. Negdje pišeš input, drugdje output, još drugdje izlaz.

 

Arduino ulaze ne dira, osim ako sam ne aktiviraš interni pull-up otpornik. Arduino na izlazima drži onu vrijednost koja je zadnja postavljena (koja je onda zapisana u registru ili gdje već).

 

nikola_vk kaže...

To je meni sve nesto cudno kad odspojim motor onda mi na izlazima mjeri identicni napon kao i na napajanju,kao da doslovce sav napon na napajanja proslijedi na output iako je arduino izvrsio naredbe i gotov je s kodom(ima 3 naredbe u setupu)

Program u Arduinu nema kraj, nikad nije gotov. Nakon setupa ide loop, dakle glavna petlja, i ne da nema razloga da Arduino prije loopa izlaze postavlja na low, nego bi time napravio veliki kaos i štetu u svim ostalim slučajevima, tj. u slučajevima kad ljudi pišu normalne programe kojima setup služi samo za inicijalizaciju, a radnja se vrši u loopu. Pa poanta setupa, između ostalog, i jest da se postave vrijednosti za pinove!  Ti od Arduina očekuješ da se ponaša drugačije nego se ponaša, drugačije nego je zamišljen da se ponaša i drugačije nego bi se i trebao ponašati.

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

DS18B20 - problem

 

Arduino Uno WiFI Rev.2 + DS18B20

 

Pocetnicko pitanje, sve spojeno kako treba, pin1 sa DS na GDN, pin 2 sa DS na ulaz 2 na Arduino, pin 3 sa DS na +5 V, na Arduino + orpornik 4k7 izmedju pin 2 i pin3 na DS.

 

Uglavnom, isprobao deetak verzija programa i uvijek ocitana temperatura -127, kad ospojim pin 2 sa Arduino ista tamperatura, znaci na ocitava....isprobao sam par programa za detektiranje adrese DS, ali ne pronalazi ga. Imam dva DS i na oba ista stvar.

 

Par pitanja: da li treba vanjsko napajanje za ovo ili je dovoljno sa USB-a, ja sam sve radio samo sa napajanjem iz laptopa, nemam vise ideje nakon dva dana mozganja.

 

Spojeno je sve kako treba, isprobano sa napajanjem 5 V i sa parazitiskim napajanjem, ali bez rezultata.

 

D.

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

Koju biblioteku koristiš? Ja koristim ovu: https://www.milesburton.com/Dallas_Temperature_Control_Library

 

Daj da vidimo kod za očitavanje temperature.

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

Koristim OneWire.h i DallasTemperature.h, koristio sam desetak kodova sa interneta, evo i ovaj koji je prilozen uz DallaTemperature library, ali isto... -127, sada sam probao i sa vanjskim napajanjem 5 V.

Isto tako koristim i Hacktronic DS1820 scanner i ne pronalazi mi senzor. Sutra kupujem drugi senzor, jer ova dva su mi sumnjiva.

 

Hvala

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

Jesi sigurno dobro identificirao pinove 1, 2 i 3 na DS-u? Da ne bi ispalo da si okrenuo gnd i vcc.

 

Ako ti ne radi ovaj kod na stranici koju sam linkao (točno taj kod, bez dodanog tvog koda), problem vjerojatno jest hardverski.

 

Billo bi malo čudno da su oba senzora defektni, ali...

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

Evo rijeseno, mozda nekom pomogne.

 

Dakle, nasao sam na Arduino forumu da moja plocica Arduino WiFi Rev2 NE RADI sa senzorom DS18B20, link : https://forum.arduino.cc/index.php?topic=580188.0. Za rijesiti ovaj problem treba koristiti patchiran library OneWire, link: OneWire patched. Nakon toga sve radi kako treba. Nisam probao ostale stvari na OneWire sabirnici, ali vjerovatno treba za sve ovaj patch.

 

Ovo se odnosi samo na ORIGINAL Arduino WiFI Rev2.

 

Hvala na pomoci, R.

 

 

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

Pozdrav, ovo je moj projekt na kojem sam radio u slobodno vrijeme kroz ovogodišnje blagdane. Radi se o ručnom satu sa 0.96" OLED ekranom, ATmega328P-AU mikrom koji vrti arduino u kućištu napravljenom od bakrene žice. Preko ekrana sam stavio leću od led reflektora. Trošak cijelog projekta je par desetaka kuna. Sa krajnim rezultatom sam iznimno zadovoljan :)

// HaD: hackaday.io/Mile // IG: mile264 //
 
16 0 hvala 0
6 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Evo ja opet u problemima hahahaha....

Dakle trebam ocitati boju preko tipkala (prototip da nemam 100km koda od senzora boje) sto i uspjesno odradim i onda postavim color =1;,i iz loopa odem u void crveno,i tu nastaje problem jer mi u petlji za crveno samo okrene step motor a ne ceka za ova ocitanja induktivnog i optickog senzora nego se odmah vrati u loop.Zbog toga mi samo izlazi iz loop i ulazi u petlju za crveno i samo okrece step motor :D

 

https://codeshare.io/5oxwrX

Poruka je uređivana zadnji put čet 31.1.2019 22:10 (nikola_vk).
 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Dugačke kodove dijeli preko nekog specijaliziranog sajta, jer se iz ovog ništa ne vidi. Dakle, nešto poput ovog.

 

Kažeš "ne ceka za ova ocitanja induktivnog i optickog senzora". O kakvom čekanju govoriš? Imaš te linije u kojima očitaš vrijednosti sa senzora, a u kod nisi ugradio nikakvo "čekanje". Kod radi ono što treba raditi, radi onako kako si ga i napisao.

 

Što konkretno bi kod trebao raditi? Ne ići dalje sve dok kod očitanja sa senzora ne dobiš traženu vrijednost? Pa onda očitanje sa senzora staviš u petlju pa će se program onda cijelo vrjieme vrtjeti po toj petlji (dakle u osnovi čekati), sve dok senzor ne vrati vrijednost koja je uvjet za nastavak programa.

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

Odmah sam znao da cu to skroz nejasno napisat.pa stoga cu probat malo opsirnije.

Imam glavnu traku na kojoj je senzor boje i kad on ocita odredenu boju (r,g,b,y)predmeta treba otici u petlju za tu boju i tu odraditi rotaciju kruznog stola (tj.onog steppera koji se meni konstantno vrti) za odredeni broj stupnjeva(imam 4 pokretne trake za svaku boju)upaliti malu pokretnu traku na tom kruznom stolu da pogura predmet na pokretnu traku,kada predmet padne na pokretnu traku trebam ju upaliti i predmet se treba kretati i onda preko induktivnog i optickog odrediti jel se radi o metalnom ili drvenom predmetu,zatim okreniti skretnicu tj.onaj servo.Kad predmet dode do svog spremnika na kraju procesa onda ga opticki senzor detektira i tek se onda smije vratiti u loop i cekati novi predmet koji mu dolazi i tako sve u krug ovisno koja boja bude skenirana. 

Poruka je uređivana zadnji put čet 31.1.2019 19:07 (nikola_vk).
 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Nemrem te pratiti.

 

Napiši si pseudokod ili nešto bar slično tome. Nacrtaj tijek. Štogod.

6 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi
 
0 0 hvala 0
16 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
nikola_vk kaže...

Što ti pseudokod radi, a da kôd ne radi?

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

Kod je pisan po logici pseudokoda,uspio sam ja to nekako izvest,logika je sigurno glupa,ali mi je najbitnije da funkcionira :)

Poruka je uređivana zadnji put pon 4.2.2019 20:06 (nikola_vk).
 
0 0 hvala 0
5 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav,
preko bluetooth modula radim voice kontrol na arudinu. Poruke koje posaljem preko aplikacije, koja koristi "OK google", treba na pocetku sadrzavati * a na kraju # (npr. *poruka#) tako da se moze prepoznati pocetak i kraj naredbe. Kako sam pregledavao sto se sprema u varuijablu koja prima poruku vidio sam da nema znakova * # tako da ne moze prepoznat pocetak i kraj poruke. Kada posaljem naredbu tako da preko aplikacije upisem poruku u obliku *poruka# radi normalno.

 

 

KOD:
void loop()
{
   char ch=0;
   data="";
   while(1)
   {
      while(mySerial.available()<=0);
      ch = mySerial.read();
      if(ch=='#')
      break;
      data+=ch;
   }
Serial.println(data);

Ovo je dio koda pomocu kojeg primam naredbu. Posto u glasovnoj naredbi nema znaka # na kraju naredbe program ne moze izaci iz petlje while.

 
0 0 hvala 0
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Kod ti i nije nešto

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

normalno da nije kad je to samo dio koda u kojem primim poruku ali mi aplikacija ne posalje # na kraju naredbe pa da break izbavi iz while petlje 

evo primjera po kojem sam radio

#include <SoftwareSerial.h>

const int rxPin = 2;
const int txPin = 3;
SoftwareSerial mySerial(rxPin, txPin);

int ac=4;
int light=5;
int fan=6;
int tv=7;
String data;

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

pinMode(ac, OUTPUT);
pinMode(light, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(tv, OUTPUT);

digitalWrite(ac, LOW);
digitalWrite(light, LOW);
digitalWrite(fan, LOW);
digitalWrite(tv, LOW);
}

void loop()
{
int i=0;
char ch=0;
data="";
while(1)
{
while(mySerial.available()<=0);
ch = mySerial.read();
if(ch=='#')
break;
data+=ch;
}
Serial.println(data);

if(data=="*turn on AC")
{
digitalWrite(ac,HIGH);
Serial.println("ac on");
}
else if(data=="*turn off AC")
{
digitalWrite(ac,LOW);
Serial.println("ac off");
}
else if(data=="*turn on light")
{
digitalWrite(light,HIGH);
Serial.println("light on");
}
else if(data=="*turn off light")
{
digitalWrite(light,LOW);
Serial.println("light off");
}
else if(data=="*turn on fan")
{
digitalWrite(fan,HIGH);
Serial.println("fan on");
}
else if(data=="*turn off fan")
{
digitalWrite(fan,LOW);
Serial.println("fan off");
}
else if(data=="*turn on TV")
{
digitalWrite(tv,HIGH);
Serial.println("tv on");
}
else if(data=="*turn on TV")
{
digitalWrite(tv,LOW);
Serial.println("tv off");
}
else if(data=="*turn on all")
{
digitalWrite(ac,HIGH);
digitalWrite(light,HIGH);
digitalWrite(fan,HIGH);
digitalWrite(tv,HIGH);
Serial.println("all on");
}
else if(data=="*turn off all")
{
digitalWrite(ac,LOW);
digitalWrite(light,LOW);
digitalWrite(fan,LOW);
digitalWrite(tv,LOW);
Serial.println("all off");

}

}

jedmom sam uspio poslati poruku i radilo je, nakon toga aplikacija jednostavno ne salje zankove za pocetak i kraj poruke nego samo poruku. Probao sam i druge aplikacije, te na svakom primjeru slicnog koda se koriste *# za pocetak i kraj naredbe. 

 
0 0 hvala 0
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

while(1)
{ 
while(mySerial.available()<=0);
ch = mySerial.read();
if(ch=='#')
break;
data+=ch;
}

 

imaš dvije while petlje, koju petlju ti taj break prekida? Fali tu još malo koda, tj. mislim da je while(1) višak. probaj ovako..

 

while(mySerial.available()<=0);{
  ch = mySerial.read();
  if(ch=='#') break;
  data+=ch;
}

 

I možda bi trebao isprazniti incoming Serial buffer. Nisam previše upoznat sa arduino serial-om, ali mislim da bi trebao pustiti da primiš cijelu poruku, a onda izbaciti # is stringa. Neznam šta dobivaš na taj mySerial...

npr.

while(mySerial.available()<=0);{
  ch = mySerial.read();
  if(ch != '#') {
    data+=ch; 
    }
}

 

 

i predlažem da koristiš switch case umjesto tolko if-ova i elseif -ova (https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/)

 

 

14 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
koska182 kaže...

while(1)
{ 
while(mySerial.available()<=0);
ch = mySerial.read();
if(ch=='#')
break;
data+=ch;
}

 

imaš dvije while petlje, koju petlju ti taj break prekida? Fali tu još malo koda, tj. mislim da je while(1) višak. probaj ovako..

 

 

Prva je samo za cekanje podatka, vidis da je nakon nje ;

i kad dode podatak odnosno kad je >0 ide u while(1) iz kojeg onda ide break ako je "#"

 

moze se u while staviti:

ch!="#"

i netreba

break;

Poruka je uređivana zadnji put pon 11.2.2019 10:20 (CroNk3r).
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice