Προς το περιεχόμενο

Προγραμματισμός σε arduino


Makis990

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

θα ήθελα την βοήθεια σας,
έχω βρει στο internet αυτό το κύκλωμα με το arduino,

FLSR5D0HZ9O2AF4.LARGE.jpg.cb483694f827c87123a75bf442303c0d.jpg

έχω βάλει αυτό το προγραμματισμό 

/*
  Under the bed nightlight

  Lights up a led strip under the bed when it detects movement while its dark.

  The circuit:
   PIR for movement. The ammout of sensors depends on the bed.
   LDR for light sensor
          Transistor to drive the LED strip

*/
#define ldr_pin A0
#define led_pin 3

const int numberOfPirs = 1;              // Number of pir sensors
const int pir_pins[numberOfPirs] = {2};  // Pins of the pir sensors Example = {pin,pin,pin}

const int led_time = 120; // Time to have the leds on (no an exact timing) (in Sec)
const int on_delay = 100; // Delay to turn the leds on (in mSec)
const int off_delay = 50; // Delay to turn the leds off (in mSec)

const int ldr_value = 5; // Value to make the differene between dark and light

const int led_max = 200;  // Ledstrip max pwm value
const int led_min = 0;    // Ledstrip min pwm value (0 recommended, else it wont turn off)

boolean licht = false;   // Booelan thats true when the light is on;
boolean led = false;     // Boolean thats true when the led strip is on;
int timer = 0;           // Integer for the timer;

void setup() {

  pinMode(ldr_pin, INPUT);

  // Set pinmode for all pir sensors
  for (int i = 0; i < numberOfPirs; i++) {
    pinMode(pir_pins, INPUT);
  }

  pinMode(led_pin, OUTPUT);
}

void loop() {

  // Read ldr value
  int ldr = analogRead(ldr_pin);

  // Read all pir sensors
  boolean pir = false;
  for (int i = 0; i < numberOfPirs; i++) {
    if (digitalRead(pir_pins) == 1) {
      pir = true;
    }
  }

  // Check if the room hase enough light
  if (ldr > ldr_value) {
    licht = true;
  } else {
    licht = false;
  }

  // If the room is dark and movement is detected the leds turn on and the timer is set to 0
  if (pir == true && licht == false) {
    ledAan();
    timer = 0;
  }

  // if the leds are on and the room has enough light the leds go off
  if (led == true && licht == true) {
    ledUit();
  }

  // if the leds are on icrement the timer
  if (led == true) timer++;

  // if the timer is equal to the set time turn the leds off.
  if (timer == led_time) {
    ledUit();
  }

  delay(1000);
}


// function to turn the leds on
void ledAan() {
  if (led == false) {
    for (int i = led_min; i <= led_max; i++) {
      analogWrite(led_pin, i);
      delay(on_delay);
    }
    led = true;
  }
}

// function to turn the leds off
void ledUit() {
  if (led == true){
    for (int i = led_max; i >= led_min; i--) {
      analogWrite(led_pin, i);
      delay(off_delay);
    }
    led = false;
  }
}
 

το πρόβλημα μου είναι το έξης... Όταν χαμηλώνει το φως και βλέπει κίνηση ο αισθητήρας τα led ανοίγουν για ένα χρονικό διάστημα και μετά σβήνουν, απλά θα ήθελα όσο βλέπει συνέχεια κίνηση ο αισθητήρας, τα led να μην σβήνουν μέχρι έως να μην υπάρχει κίνηση 

Επεξ/σία από Makis990
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

gon1332 ευχαριστώ πολύ για την απάντηση σου.

στον αισθητήρα PIR τον βραχυκυκλωτήρα τον έχω στην θέση ''H'' αλλά αυτό συνεχίζει και αναβοσβήνει...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

να ρωτησω κατι; ειναι νομιμο να φτιαξεις κατι με Arduino shield + parts και μετα να το πας commercial Κια να το πουλησεις; Σημερα αρχισα να διαβαζω για arduino.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
21 ώρες πριν, Makis990 είπε

gon1332 ευχαριστώ πολύ για την απάντηση σου.

στον αισθητήρα PIR τον βραχυκυκλωτήρα τον έχω στην θέση ''H'' αλλά αυτό συνεχίζει και αναβοσβήνει...

Αφήνεις τον αισθητήρα να "ζεσταθεί"; Αν θυμάμαι καλά χρειάζεται τουλάχιστον 1 λεπτό για να αρχίζει να δουλεύει κατά τ'αναμενόμενα.

Επίσης, έχε υπόψιν ότι ο αισθητήρας έχει 3 δευτερόλεπτα αδράνειας από τη στιγμή που σταμάτησε να αναγνωρίζει κίνηση.

Τέλος, δες την γωνία που έχει και έλεγξε αν την τηρείς. Ίσως τον έχεις βάλει σε λάθος σημείο και δεν αναγνωρίζει πάντα κίνηση και σε συνδιασμό με το από πάνω να παρατηρείς τη συμπεριφορά που έχεις.

Σημείωση: Ίσως να υπάρχει κάποιο θέμα και στον κώδικά σου ή το κύκλωμα, αλλά δεν τα έχω τσεκάρει, λόγω έλλειψης χρόνου.

Επεξ/σία από gon1332
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 2/10/2018 στις 5:28 ΜΜ, gon1332 είπε

Αφήνεις τον αισθητήρα να "ζεσταθεί"; Αν θυμάμαι καλά χρειάζεται τουλάχιστον 1 λεπτό για να αρχίζει να δουλεύει κατά τ'αναμενόμενα.

Επίσης, έχε υπόψιν ότι ο αισθητήρας έχει 3 δευτερόλεπτα αδράνειας από τη στιγμή που σταμάτησε να αναγνωρίζει κίνηση.

Τέλος, δες την γωνία που έχει και έλεγξε αν την τηρείς. Ίσως τον έχεις βάλει σε λάθος σημείο και δεν αναγνωρίζει πάντα κίνηση και σε συνδιασμό με το από πάνω να παρατηρείς τη συμπεριφορά που έχεις.

Σημείωση: Ίσως να υπάρχει κάποιο θέμα και στον κώδικά σου ή το κύκλωμα, αλλά δεν τα έχω τσεκάρει, λόγω έλλειψης χρόνου.

Ο αισθητήρας σίγουρα ζεσταίνετε γιατί προσπαθώ να βρω τρόπο πάνω από μια ώρα και επίσης είναι ακριβός από μπροστά μου για το θέμα της γωνίας... για την αδράνεια το γνωρίζω αλλά το πρόβλημα είναι ότι βλέπει κίνηση συνέχεια αλλά τα led μετά από 30 δευτερόλεπτα περίπου σβήνουν και ξανά ανοίγουν απευθείας.... μετά από πολύ ψάξιμο στο internet από ότι κατάλαβα πρέπει να έχω κάποιο λάθος στον κώδικα με την εντολή σε αυτό το σημείο:

// if the timer is equal to the set time turn the leds off.
  if (timer == led_time) {
    ledUit();
  }

  delay(1000);
}

 επειδή δεν γνωρίζω και πολλά από το προγραμματισμό ίσως να φταίει και κάποιο άλλο if που έχω μέσα.... 

τον κώδικα ολόκληρο το έχω βρει μέσα στο internet έτοιμο... με τα λίγα που ξέρω προσπάθησα να το φέρω στα μέτρα μου... 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

5 ώρες πριν, Makis990 είπε

Ο αισθητήρας σίγουρα ζεσταίνετε γιατί προσπαθώ να βρω τρόπο πάνω από μια ώρα και επίσης είναι ακριβός από μπροστά μου για το θέμα της γωνίας... για την αδράνεια το γνωρίζω αλλά το πρόβλημα είναι ότι βλέπει κίνηση συνέχεια αλλά τα led μετά από 30 δευτερόλεπτα περίπου σβήνουν και ξανά ανοίγουν απευθείας.... μετά από πολύ ψάξιμο στο internet από ότι κατάλαβα πρέπει να έχω κάποιο λάθος στον κώδικα με την εντολή σε αυτό το σημείο:

// if the timer is equal to the set time turn the leds off.
  if (timer == led_time) {
    ledUit();
  }

  delay(1000);
}

 επειδή δεν γνωρίζω και πολλά από το προγραμματισμό ίσως να φταίει και κάποιο άλλο if που έχω μέσα.... 

τον κώδικα ολόκληρο το έχω βρει μέσα στο internet έτοιμο... με τα λίγα που ξέρω προσπάθησα να το φέρω στα μέτρα μου... 

Για να βοηθήσεις λίγο στην ανάγνωση του κώδικα εδώ, για ρίξ'τον σε code blocks.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόγραμμα που έχεις βάλει, ανάβει τα λεντ για 120 δευτερόλεπτα εάν υπάρχει κίνηση και δεν υπάρχει φως. Τα λεντ κλείνουν μετά από 120 δευτερόλεπτα ή νωρίτερα αν υπάρχει φως.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...