Malom arduinoval
Malom arduinoval
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.
Re: Malom arduinoval
é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:
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
olvashatóbb formában:
és ez is kb10-20 sec között állítható
(már ha ez volt a cél)
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);
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);
Kód: Egész kijelölése
uint daralasido = ( (potmeter *10)+10000);
(már ha ez volt a cél)