Sziasztok!
Az alábbi kóddal feltöltött ARDUINO egy UH szenzorral és egy relével összekötve furcsán működik. A meghatározott távolságon belüli tárgyat, vagy személyt érzékeli,- a relé bekapcsol, viszont utána szabálytalan időközönként ki- be kapcsolgat, annak ellenére, hogy a kapcsolási távolságon belül ott az akadály, vagy személy. A kód még fog valamikor egy motoros szerkezetet is vezérelni, de az még nincs összekötve.
Nem találom a hibát. Esetleg a szenzor adta meg magát, vagy sok lenne az érzékelőt a lapkával összekötő vezeték hossza? (kb 70 cm.)
#define echoPin 11 // Echo 11-es lábhoz rendelve
#define trigPin 12 // Trigger a 12-as lábhoz
#define LEDPin 13 // Arduino beépített led 13-as láb
#define RELAY1 8 // Relé - 8-as láb
#define MotorKi 9 //asztallap kitolása 9 láb
#define MotorBe 10 // asztallap visszahúzása 10 láb
#define VegallasBent 2// Belső végálláskapcsoló 2 láb
#define VegallasKint 3 //Külső végálláskapcsoló 3 láb
#define KapcsFesz 4 //PC táp kapcsolófesz 4 láb
//int maximumRange = 200; // maximális távolság értéke
//int minimumRange = 0; // minimális távolság értéke
long duration, distance; // Időtartam kiszámításához használt távolság
void setup() {
Serial.begin (9600);//soros monitor bitsebessége
pinMode(trigPin, OUTPUT);// beállítás kimenetnek(kimenő jel a szenzorra)
pinMode(echoPin, INPUT);// beállítás bemenetenek(bejövő jel a szenzorról)
pinMode(LEDPin, OUTPUT); // a led kimenet beállítása
pinMode(RELAY1, OUTPUT); // relé kimenet beállítása
pinMode(MotorBe,OUTPUT); // Motor visszahúzás
pinMode(MotorKi,OUTPUT); // Motor kitolás
pinMode(VegallasBent,INPUT_PULLUP); // Belső végálláskapcsoló
pinMode(VegallasKint,INPUT_PULLUP); //Külső végálláskapcsoló
pinMode(KapcsFesz,INPUT_PULLUP); //Pc táp kapcsolófeszültség
}
void loop() {
digitalRead(KapcsFesz);
if (KapcsFesz==HIGH)
{
if (VegallasKint==HIGH)
{
digitalWrite(MotorKi, HIGH); //van kapcsolófesz és még nem érte el a külső végállást - kitolja
}
if (VegallasKint==LOW)
{
digitalWrite(MotorKi, LOW); //van kapcsolófesz és elérte a külső végállást - megáll
}
}
if (KapcsFesz==LOW)
{
if (VegallasBent==HIGH)
{
digitalWrite(MotorBe, HIGH); // nincs kapcsolófesz és még nem érte el a belső végállást- behúzza
}
if (VegallasBent==LOW)
{
digitalWrite(MotorBe,LOW); // nincs kacsolófesz és elérte a belső végállást- megáll
}
}
/* Egy ultrahang küldő fogadó ciklus. */
digitalWrite(trigPin, LOW); // nincs kimeneti hang (2mikrosec)
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);// kimeneti ultrahang küldése (10microsec)
delayMicroseconds(10);
digitalWrite(trigPin, LOW);// nincs kimeneti hang
duration = pulseIn(echoPin, HIGH);// ultrahang érzékelő bekapcsolása és elmentése a duration változóba
//A hangsebesség alapján kiszámítjuk a távolságot cm-ben és ezt az értéket a distance változóba tesszük.
distance = duration/58.2;
if (distance <= 20) { // eredeti -- (distance >= maximumRange || distance <= minimumRange){
/* ha distance értéke a megadott tartományon belül esik akkor bekapcsol a led és a relé, valamint kiküldi a bekapcs feliratot a soros monitorra
*/
Serial.println("Bekapcs");
digitalWrite(LEDPin, HIGH); //led bekapcsolása
digitalWrite(RELAY1,HIGH); // relé bekapcsolása
}
else {
/* ha tartományon belül van akkor a távolság értékét elküldi a soros monitora és a led is kikapcsol. */
Serial.println(distance );
digitalWrite(LEDPin, LOW); // Led kikapcsolása
digitalWrite(RELAY1,LOW); // relé kikapcsolása
}
//várakozik 5 s-ot a következő beolvasásig
delay(5000);
}
UH szenzor hiba?
Re: UH szenzor hiba?
Ami ilyen hiba:
- az UH szenzor 40 fokban lát. Ideálisan tükröződő és elnyelő felületek vannak, valójában meg vegyesen. Nekem a szőnyeg zavart be, ugyanis a látószögbe az is bekerült. Most kicsit felfele kell hogy nézzen a szenzor...
- a 70 cm kábel szerintem határeset. Ha van motor/szervo is az 5V-on? Az adhat simán fals jelet...
- az UH szenzor 40 fokban lát. Ideálisan tükröződő és elnyelő felületek vannak, valójában meg vegyesen. Nekem a szőnyeg zavart be, ugyanis a látószögbe az is bekerült. Most kicsit felfele kell hogy nézzen a szenzor...
- a 70 cm kábel szerintem határeset. Ha van motor/szervo is az 5V-on? Az adhat simán fals jelet...
Re: UH szenzor hiba?
A szenzor egy íróasztal klaviatura tartó aljára van rögzítve, ezzel kapcsolná fel a LED világítást, ha valaki leül a gép elé. Csak az a baj, hogy amikor odaülnek , akkor fel is kapcsol szépen, csak néha gondol egyet és lekapcsol, majd ismét fel. A relét uln2003 kapcsolja. Motor még nincs rákötve - az nem zavarhat be. Próbáltam a távolságokkal sakkozni, az időzítéssel, a kapcsolás felcserélésével, de a hiba maradt. Halott az egész ötlet, vagy mi lehet a hiba. Egyébként 20 cm vezetékkel is ezt produkálja. Régebben IR kapcsolóval működött az egész, de a folyamatos működéshez néha mocorogni kellett, ezért tettem fel az UH-t. A motor a számítógép bekapcsolására egy mechanikával kitolja a billentyűzetet, kikapcsoláskor pedig visszahúzza. ( Pihent agyú ötlet, de szerintem gyakorlásnak- meglepinek jópofa...) De mint írtam - ez még nincs bekötve, csak a kódba tettem be a vázlatát.
Re: UH szenzor hiba?
3 lüke 5let, de hátha az egyik bejön:
ha bizonytalan az uh mérés, mérj többször!
azután vagy átlagolj, és az eredmény, (35cm)
vagy többségi eredmény (5 mérésből legalább 3 igen)
alapján dönstd el, ül-e ott valaki?
fordíts a mérés irányán, ha lehet!
ha a vizszintes távmérés bizonytalan eredményt ad, csinálj egy "hangsorompót"
pl asztal-padló távolság állandónak tekinthető. de ha ott ül valaki, ez drasztikusan változhat!
lassítsd a visszahúzási döntést!
(ez majdnem az első ötletem, csak aszimmetrikus formában.
mivel nem lőnek vele nyulat, várj meg 3 üres jelzést a lámpa leo+tálcavissza előtt.
ezzel vesztesz 15 sec-et, de nem lesz ideges a felhasználód
az élesítés mehet az első riasztásra.
elsőre ennyi jutott eszembe
(c)
ha bizonytalan az uh mérés, mérj többször!
azután vagy átlagolj, és az eredmény, (35cm)
vagy többségi eredmény (5 mérésből legalább 3 igen)
alapján dönstd el, ül-e ott valaki?
fordíts a mérés irányán, ha lehet!
ha a vizszintes távmérés bizonytalan eredményt ad, csinálj egy "hangsorompót"
pl asztal-padló távolság állandónak tekinthető. de ha ott ül valaki, ez drasztikusan változhat!
lassítsd a visszahúzási döntést!
(ez majdnem az első ötletem, csak aszimmetrikus formában.
mivel nem lőnek vele nyulat, várj meg 3 üres jelzést a lámpa leo+tálcavissza előtt.
ezzel vesztesz 15 sec-et, de nem lesz ideges a felhasználód
az élesítés mehet az első riasztásra.
elsőre ennyi jutott eszembe
(c)
Re: UH szenzor hiba?
Köszi a tippet- bevált. Beraktam egy számlálót, ami számolja a kikapcsoló jelet. Ha eléri az 5 értéket, akkor lekapcsol, és nulláz, viszont ha a következő mérés a tartományon belül van, akkor csak a számlálót nullázza le. Ezzel a megoldással fel tudtam gyorsítani a mérések ciklusidejét, így a motorvezérlés nem fog megakadni. (majd ha elkészül
)
Köszönöm a tippet !!
Köszönöm a tippet !!