• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Swiatło w kuchni
#1
Witam!
  Jestem i pracuję jako automatyk w firmie drzewiarskiej.
  Bardzo zainteresowałem się arduino, myślę o możliwości wykorzystania jego w kilku maszynach. Ale nie wszędzie - brakuje wielowątkowości - jak np. simatic, - ale cena jego... jest okrutna.

  I mam taki plan : chcę dla żony zrobić światło w kuchni automatyczne z takimi założeniami:

1. Układ liczy ile osób weszłodo kuchni - dodaje i odejmuje. - i włącza/wyłącza
 - w tym celu będą dwie czujki IR jedna za drugą w odstępie około 20 cm - aby wiadomo z której strony się ktoś porusza - która pierwsza jest aktywowana.
2. Fotorezystor i ustawiony poziom zadziałania światła
3. NADRZĘDNY układ - który pozwoli niezależnie od pory dnia (fotorez.) oraz ilości osób zliczonych na dwa (lub lepiej trzy?)klaśnięcia załącza - lub wyłącza , czyli zmienia stan na przeciwny, światło. (Swiatło na żądanie).
4. Niezależnie od wł/wył światła licznikosób liczy - aby po wyjściu osób po ciemku wiedział, iż wewnątrz nie ma osób - zarazem był gotowy po wyzerowaniu licznika załączyć się po wejściu pierwszej nowej osoby.

Mam nadzieję, że to w miarę wytłumaczyłem.

I proszę o pomoc - siedzę nad tym koł 3 - 4 tygodnie, pewnie prędzej bym to zrobił tradycyjnie, z elementów dyskretnych ale chcę tak, programowo. pisałem już kilka wersji, żadna do końca. najwięcej co zostało - to tyle :

Kod:
int licznik = 0;
int a = 0;
void setup() {
pinMode(12, OUTPUT); // lampa - wyjście      - 12 YYY
pinMode(11, INPUT_PULLUP); // wejście czuj 1 - 11 ED1
pinMode(10, INPUT_PULLUP); // wejście czuj 2 - 10 ED2
pinMode(8, INPUT_PULLUP); // microfon        - 8  EAM
pinMode(7, INPUT_PULLUP); // foto            - 7  EAF
pinMode(2, OUTPUT); // wyjście mic           - 2  YMI
pinMode(3, OUTPUT); // wyjście czuj 2        - 3  YD1
pinMode(4, OUTPUT); // wyjście czuj 1        - 4  YD2
}
void loop() {
 licznik ++;
 {if(digitalRead(10) == HIGH)
   digitalWrite(3,LOW);
   else
   digitalWrite(3,HIGH) ; }
 {if(digitalRead(11) == LOW)
   digitalWrite(4,HIGH);
   else
   digitalWrite(4,LOW) ; }
 koniec ();
   }
void koniec (){
if (digitalRead (3) && digitalRead (4) == LOW)
   digitalWrite (12, HIGH);
   else
  ( digitalWrite (12) = !digitalRead (12));}
void koniec1 (){
  if (digitalRead (3) && digitalRead (4) == HIGH)
   digitalWrite (12, LOW);}


Resztę mam w kawałkach, pociachane.
Ktoś pomoże mi to ułożyć i wykonać? Zasiadłem znów do tego - ale naczytałem się o bibliotece TIMERS.h i myślę, czy nie lepiej od zera zacząć z nią?
 Zarazem super nauka.
Proszę o pomoc.
 
Odpowiedź
#2
Zdefiniuj sobie wejścia i wyjścia jako zmienne

np.
lampa = 12;
microfon=8;

Potem używaj
pinMode(lampa, OUTPUT); // lampa - wyjście - 12 YYY
pinMode(microfon, INPUT); // wyjście mic - 2 YMI

Wtedy program będzie czytelniejszy i łątwiej bedzie go analizować

Ale zacznij od diagramu (schematu) i zdefiniuj sobie
jak to po kolei będzie działało.

Zdefiniuj stan wyjściowy (stan wejść i wyjść po resecie uC) i stany, do których przechodzi układ
po spełnieniu określonych warunków (stanów wejść)

Możesz wykorzystać bibliotekę timers.h są przykłądy, które po modyfikacji możesz zaimplementować

Z tego co zamieściłeś niewiele wiadomo, kod niekompletny...

polecenie

licznik ++ ;

zwiększa jego wartość po każdej wykonanej pętli programu, więc bardzo szybko osiągnie wartość max dla int (65tys.)
i zacznie liczyć od zera
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości