Malom arduinoval

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
janq
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2016. augusztus 27. szombat, 9:27

Malom arduinoval

Hozzászólás Szerző: janq »

malom kapcs rajz_02.jpg
Sziasztok,

Kb 1 hónapja kezdtem foglalkozni Arduinoval, tehát elég kezdő vagyok. Egy barátom megkért hogy keressek megoldást a malom project-éhez.
Szóval van egy tartály, amiben pár kiló búza lenne beletöltve. A tartály alján lévő zárszerkezetet egy auto központi zárja nyitja ill. zárja. A "betöltés " állapot 2 mp, a "darálás" állapot 10-20 mp lenne amit egy potméterrel lehetne állítani.A tartály aljához közel egy fotoellenállást képzeltem el, ő jelezné ha elfogy a búza és bekapcsolna egy figyelmeztető szirénát. Csatoltam egy képet amit megépítettem és természetesen a a programot is.Azt kérném, mivel elég kezdő vagyok, hogy véleményezni kellene, és ha hiba van benne (biztos van) hogyan tudnám jobbá és biztonságosabbá tenni a működését. Előre is köszönöm a segítséget.

a program:

int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int sirena = 9;
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(sirena, OUTPUT);
Serial.begin(9600);

}
void loop(){
int fotoellenallas = analogRead(A1);
delay(1);
int potmeter = analogRead(A0);
delay(1);
if (fotoellenallas>200)
{digitalWrite (sirena,HIGH);
}
else
{digitalWrite (sirena,LOW);
}
float daralasido = (potmeter * (10000.0/ 1023.0)+10000);
Serial.println(daralasido);
Serial.println(fotoellenallas);
digitalWrite(relay1, LOW);//2 ÁLLÁS
digitalWrite(relay2, LOW); //2 ÁLLÁS
digitalWrite(relay3, LOW);//+12 KIADOM
delay(100);//100 ms-ig adok tápot a központi zárnak
digitalWrite(relay3, HIGH);//+12 ELVESZEM
delay(daralasido);// DARÁLÁS
digitalWrite(relay1, HIGH);//1 ÁLLÁS
digitalWrite(relay2, HIGH);//1 ÁLLÁS
digitalWrite(relay3, LOW);//+12 KIADOM
delay(100);//100 ms-ig adok tápot a központi zárnak
digitalWrite(relay3, HIGH);//+12 ELVESZEM
delay(2000);//MAGTÖLTÉS

}
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Malom arduinoval

Hozzászólás Szerző: csegebiga »

és mi a problémád?
leszámítva azt, hogy a malom üresen is jár miközben szirénázgat
ha az else ág bezáró }-át a munkavégző rész alá tennéd, akkor a malom nem fut üresen, csak szirénázik.

egy ilyen bonyolultságú programnál még nem gond a gépi erőforrások pazarlása, de érdemes korán megszokni a spórolást ezekkel
itt van pl ez a sor:

Kód: Egész kijelölése

float daralasido = (potmeter * (10000.0/ 1023.0)+10000);
látod? a potméter értékétől teljesen független a " (10000.0/ 1023.0)+10000)"
a 10000.0/ 1023.0 egy konstans. elég az elején egyszer kiszámolni
a másik: nem lőnek nyulat szerintem, ha a 1023 helyett 1000-rel osztasz
és máris nem kell lebegőpontos aritmetikát alkalmazni

Kód: Egész kijelölése

uint daralasido = (potmeter * (10000/ 1000)+10000);
olvashatóbb formában:

Kód: Egész kijelölése

uint daralasido = ( (potmeter *10)+10000);
és ez is kb10-20 sec között állítható
(már ha ez volt a cél)
Válasz küldése