Arduino Polska Forum

Pełna wersja: Oświetlenie schodów
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
CEO: Za każdą pomoc użytkownik zostaje nagrodzony i dostaje (+10) punktów reputacji.

witam. szukam pomocy w napisaniu programu do oswietlenia schodow jestem poczatkujacy i nie kumam jeszcze wszystkiego. nie wiem jak zrobic zeby port analogowy (np.A0) gdzie chce wpiac czujnik ruchu z fotorezystotem uruchamial mi jedna sekfecje a naprzyklad port drugi (A1) druga.

Co chce zrobic...

1.czujnik 1 (na dole) uruchamia stopniowo lampki na stopniach az do gory (ze zwloka 0,5 s - np.)
2.zapalaja sie wszystkie i swieca caly czas.
3.po uruchomieniu drugiego czujnika na gorze, gasza sie po kolei od dolu (ze zwloka 0,2 s - np.)
4.to samo dzieje sie w odwrotnej kolejnosci zaczynajac od gory.
5.i uruchamiajac np. 1 czujnik na dole a nie uruchamiajac drugiego na gorze ( zawracam w polowie schodow) tylko z powrotem uruchamiam 1 czujnik drugi raz gasna stopnie po kolei od gory   (ze zwloka 0,2 s - np.)

jezeli ktos wie jak to zrobic prosze o pomoc
dzieki
Masz już jakiś układ Arduino, jakieś konkretne czujniki?
tak : UNO : czujniki - AC 220V Infrared PIR Motion Sensor Switch For LED Light Bulb 500W Max Reliable - kupilem na ebayu. oswietlenie mam juz podlaczone na schodach i wszystko dziala czujniki zalanczaja oswietlenie i gasnie po 60 sekundach taka wartosc maja fabrycznie ustawiona ( czujniki sa z detekcja ruchu i fotorezystorem )
w zestawie startowym ktory kupilem juz zaczelem sie bawic podlaczylem na listwie diody i prubuje cos napisac...... to max co narazie zrobilem

Kod:
void setup() {


pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);

}

void loop () {
digitalWrite(13, HIGH);
delay(300);
digitalWrite(12, HIGH);
delay(300);
digitalWrite(11,HIGH);
delay(300);
digitalWrite(10, HIGH);
delay(300);
digitalWrite(9, HIGH);
delay(300);
digitalWrite(8, HIGH);
delay(300);
digitalWrite(7, HIGH);
delay(300);
digitalWrite(6, HIGH);
delay(300);
digitalWrite(5, HIGH);
delay(300);
digitalWrite(4, HIGH);
delay(300);

digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
delay(5000);

digitalWrite(13, LOW);
delay(500);
digitalWrite(12, LOW);
delay(500);
digitalWrite(11, LOW);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(9, LOW);
delay(500);
digitalWrite(8, LOW);
delay(500);
digitalWrite(7, LOW);
delay(500);
digitalWrite(6, LOW);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(4, LOW);
delay(3000);
Poniżej prezentuję 2 programiki do sterowania oświetleniem zgodnie z założeniami projektu . Pierwszy do bezpośredniego sterowania z wyjść arduino ( na filmie ), natomiast drugi przy użyciu expandera opartego na układzie PCF8574P . Jako zamienniki PIR których nie mam posłużyły mi czujniki odbiciowe E18-D50NK .
Jako element wykonawczy do zasilania pasków ledowych można zastosować mój ulubiony układ ULN2803 .

tutaj filmik




tutaj kodzik pod wyjścia arduino

Kod:
// Projekt oświetlenia schodów

//  http://forum.arduinopolska.com JasQ


int pin[8]={5,6,7,8,9,10,11};

int q = 0;
byte s = 0;


void setup() {
 
 Serial.begin(9600);
 
 pinMode( 2 , INPUT);
 pinMode( 3 , INPUT);
 
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 
}

void loop() {
 
 // dół

 if (digitalRead(2) == LOW and s == 0){
 
 for( q = 0; q < 7; q++ ){
   digitalWrite( pin[q], HIGH );delay(500);}
   
   s = 1;
   
  }
   
   if (digitalRead(2) == LOW and s == 1 ){
 
 for( q = 7; q >= 0; q-- ){
   digitalWrite( pin[q], LOW );delay(200);}
 
   s = 0;
   
 }
 
 // góra
   
    if (digitalRead(3) == LOW and s == 0){
 
 for( q = 7; q >= 0; q-- ){
   digitalWrite( pin[q], HIGH );delay(500);}
   
   s = 1;
   
  }
   
   if (digitalRead(3) == LOW and s == 1){
 
 for( q = 0; q < 7; q++ ){
   digitalWrite( pin[q], LOW );delay(200);}
 
   s = 0;
 
 }
}

i jeszcze kodzik pod expander PCF8574P

Kod:
// Projekt oświetlenia schodów

//  http://forum.arduinopolska.com JasQ

#include "PCF8574.h"
#include <Wire.h>

int pin[8]={0,1,2,3,4,5,6,7};

int q = 0;
byte s = 0;

PCF8574 expander;

void setup() {
  
  expander.begin(0x20);
  
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, OUTPUT);
  expander.pinMode(4, OUTPUT);
  expander.pinMode(5, OUTPUT);
  expander.pinMode(6, OUTPUT);
  expander.pinMode(7, OUTPUT);
  
  pinMode( 2 , INPUT);
  pinMode( 3 , INPUT);
  

}

void loop() {
  
  // dół

  if (digitalRead(2) == LOW and s == 0){
  
  for( q = 0; q < 7; q++ ){
    expander.digitalWrite( pin[q], HIGH );delay(500);}
    
    s = 1;
    
   }
    
    if (digitalRead(2) == LOW and s == 1 ){
  
  for( q = 7; q >= 0; q-- ){
    expander.digitalWrite( pin[q], LOW );delay(200);}
  
    s = 0;
    
  }
  
  // góra
    
     if (digitalRead(3) == LOW and s == 0){
  
  for( q = 7; q >= 0; q-- ){
    expander.digitalWrite( pin[q], HIGH );delay(500);}
    
    s = 1;
    
   }
    
    if (digitalRead(3) == LOW and s == 1){
  
  for( q = 0; q < 7; q++ ){
    expander.digitalWrite( pin[q], LOW );delay(200);}
  
    s = 0;
  
  }
}
a czy w samochodzie sterować chcesz pilotem i czy to diody mono chromatyczne czy RGB mam napisany sterownik do oświetlenia pokoju diodami RGB jeśli to ci pomoże mogę ci udostępnić kod pilot działa każdy wystarczy w swich case zmienić stan zmiennej ja używam pilotu od dekodera hd5000 polsatu.
(30-08-2015, 11:21)adix20_20 napisał(a): [ -> ]a czy w samochodzie sterować chcesz pilotem i czy to diody mono chromatyczne czy RGB mam napisany sterownik do oświetlenia pokoju diodami RGB jeśli to ci pomoże mogę ci udostępnić kod pilot działa każdy wystarczy w swich case zmienić stan zmiennej ja używam pilotu od dekodera hd5000 polsatu.

chyba posty pomyliłeś Wink tu chodzi o schody takie w domu chyba że tu chodzi o piętrowy autobus czego autor nie napisał
sorki nie wiem jak czytałem ze przeczytałem ze chodzi o oświetlenie w samochodzie a nie do schodów sorki wielki tak czy inaczej zapytanie dalej aktualne bo zastosowanie nie ma znaczenia czy oświetlamy samochód czy schody mimo wszystko sorki

pytanie do autora jakie to czujniki stosujesz ile led ,czy to rgb, czy mono chromatyczne troszkę więcej danych ,czy ty potrzebujesz pomocy .czy gotowego programu bo jak gotowe to kolega idzie na łatwiznę.
program jest prosty
Kod:
const int czuj1 = 22;
const int czuj2 = 23;

const int red = 13;//
const int green = 14;//
const int blue = 15;// pwm wyjscia led  ustawic w zaleznosci od atmego moja to m2560
const int led1 = 24;
const int led2 = 25;
const int led3 = 26;
const int led4 = 27;
String dane;
int pwmred ;
int pwmgreen ;
int pwmblue ;
int opcja = 0;
int pomoc[5];
int x = 0;
int czujnik1 = 0;
int czujnik2 = 0;
long czas=800;

void setup() {

  Serial.begin(9600);
pinMode(czuj1, INPUT);
pinMode(czuj2, INPUT);
pinMode(czuj1, OUTPUT);
pinMode(czuj2, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
czujnik1=1;
czujnik2=1;

}
void kolor()
{
  pwmred = 0;
    pwmgreen = 0;
    pwmblue = 0;
      analogWrite(red, pwmred);
    analogWrite(green, pwmgreen);
    analogWrite(blue, pwmblue);
}
void loop()
{
czujnik1 = digitalRead(czuj1);
czujnik2 = digitalRead(czuj2);

  if(czujnik1==1){
  pomoc[2]=1;
  }
  else
  {
    pomoc[2]=0;
  }
  
  if(czujnik2==1){
    pomoc[3]=1;
  }
   else
  {
    pomoc[3]=0;
  }
  if(pomoc[5]==1){
  }
  else
  {
  if(pomoc[2] == 1){
digitalWrite(led1, 1);
delay(czas);
digitalWrite(led2, 1);
delay(czas);
digitalWrite(led3, 1);
delay(czas);
digitalWrite(led4, 1);
delay(czas);
pomoc[2]=0;
pomoc[4]=1;
  }
  }
  if (pomoc[3] ==1) {
    if(pomoc[4]==1){
  digitalWrite(led1, 0);
delay(czas);
digitalWrite(led2, 0);
delay(czas);
digitalWrite(led3, 0);
delay(czas);
digitalWrite(led4, 0);
delay(czas);
pomoc[3]=0;
pomoc[4]=0;
}}
if(pomoc[3] == 1){
digitalWrite(led4, 1);
delay(czas);
digitalWrite(led3, 1);
delay(czas);
digitalWrite(led2, 1);
delay(czas);
digitalWrite(led1, 1);
delay(czas);
pomoc[3]=0;
pomoc[5]=1;
  }
  
  
  if (pomoc[2] ==1) {
    if(pomoc[5]==1){
  digitalWrite(led4, 0);
delay(czas);
digitalWrite(led3, 0);
delay(czas);
digitalWrite(led2, 0);
delay(czas);
digitalWrite(led1, 0);
delay(czas);
pomoc[2]=0;
pomoc[5]=0;
}}}
program działający tak jak podają w wytycznych jak z kończę to podam wersie z regulacja barwy przez bluetooth czy com teraz to wersja light
program wymaga sterowania nie tylko katodami ale i anodami wiec to komplikuje schemat połączeń,
Kod:
const int czuj1 = 22;
const int czuj2 = 23;

const int red = 13;//
const int green = 14;//
const int blue = 15;// pwm wyjscia led  ustawic w zaleznosci od atmego moja to m2560
const int led1 = 24;
const int led2 = 25;
const int led3 = 26;
const int led4 = 27;
String dane;
int pwmred ;
int pwmgreen ;
int pwmblue ;
int opcja = 0;
int pomoc[5];
int x = 0;
int czujnik1 = 0;
int czujnik2 = 0;
long czas=800;

void setup() {

  Serial.begin(9600);
pinMode(czuj1, INPUT);
pinMode(czuj2, INPUT);
pinMode(czuj1, OUTPUT);
pinMode(czuj2, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
czujnik1=1;
czujnik2=1;

}

void loop()
{
czujnik1 = digitalRead(czuj1);
czujnik2 = digitalRead(czuj2);

  if (pomoc[1] == 0)
  {
    pwmred = 0;
    pwmgreen = 0;
    pwmblue = 0;
    analogWrite(red, pwmred);
    analogWrite(green, pwmgreen);
    analogWrite(blue, pwmblue);
    pomoc[1] = 1;
  }
  if(czujnik1==1){
  pomoc[2]=1;
  }
  else
  {
    pomoc[2]=0;
  }
  
  if(czujnik2==1){
    pomoc[3]=1;
  }
   else
  {
    pomoc[3]=0;
  }
  if(pomoc[5]==1){
  }
  else
  {
  if(pomoc[2] == 1){
digitalWrite(led1, 1);
delay(czas);
digitalWrite(led2, 1);
delay(czas);
digitalWrite(led3, 1);
delay(czas);
digitalWrite(led4, 1);
delay(czas);
pomoc[2]=0;
pomoc[4]=1;
  }
  }
  if (pomoc[3] ==1) {
    if(pomoc[4]==1){
  digitalWrite(led1, 0);
delay(czas);
digitalWrite(led2, 0);
delay(czas);
digitalWrite(led3, 0);
delay(czas);
digitalWrite(led4, 0);
delay(czas);
pomoc[3]=0;
pomoc[4]=0;
}}




if(pomoc[3] == 1){
digitalWrite(led4, 1);
delay(czas);
digitalWrite(led3, 1);
delay(czas);
digitalWrite(led2, 1);
delay(czas);
digitalWrite(led1, 1);
delay(czas);
pomoc[3]=0;
pomoc[5]=1;
  }
  
  
  if (pomoc[2] ==1) {
    if(pomoc[5]==1){
  digitalWrite(led4, 0);
delay(czas);
digitalWrite(led3, 0);
delay(czas);
digitalWrite(led2, 0);
delay(czas);
digitalWrite(led1, 0);
delay(czas);
pomoc[2]=0;
pomoc[5]=0;
}}
    
  
  
  
  while (Serial.available() > 0) {

    dane = Serial.readString();
    odczyt();
  }

  switch (x)
  {
    case 1:
      opcja = 1;
      //    Serial.println("czerwony");
      pwmred = 0; //kalibracja koloru np red 20 green 40 blue 90  maxymalne wartosci 255 minimum 0
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 11:
      opcja = 1;
      //    Serial.println("czerwony-1");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 12:
      opcja = 1;
      //    Serial.println("czerwony-2");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 13:
      opcja = 1;
      //    Serial.println("czerwony-3");
      pwmred = 0; //kalibracja koloru
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 2:
      opcja = 1;
      //    Serial.println("niebieski");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 21:
      opcja = 1;
      //    Serial.println("niebieski-1");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 22:
      opcja = 1;
      //    Serial.println("niebieski-2");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 23:
      opcja = 1;
      //     Serial.println("niebieski-3");
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      break;
    case 3:
      opcja = 1;
      pwmred = 0;
      pwmgreen = 0;
      pwmblue = 0;
      //    Serial.println("zielony");
      break;
  }
  if (opcja != 0) {
    Serial.println(pwmred);
    Serial.println(pwmgreen);
    Serial.println(pwmblue);
    analogWrite(red, pwmred);
    analogWrite(green, pwmgreen);
    analogWrite(blue, pwmblue);
  }
  opcja = 0; x = 0;

}

void odczyt() {

  if ( dane == "czerwony"  ) {
    x = 1;
  }
  if ( dane == "czerwony-1"  ) {
    x = 11;
  }
  if ( dane == "czerwony-2"  ) {
    x = 12;
  }
  if ( dane == "czerwony-3"  ) {
    x = 13;
  }
  if ( dane == "niebieski" ) {
    x = 2;
  }
  if ( dane == "niebieski-1" ) {
    x = 21;
  }
  if ( dane == "niebieski-2"   ) {
    x = 22;
  }
  if ( dane == "niebieski-3" ) {
    x = 23;
  }
  if ( dane == "zielony"   ) {
    x = 3;
  }

}
Można też dodać 3 potencjometry podłączone do wejść analogowych arduino, dzięki którym można było by regulować czas zapalania, świecenia i gaszenia, oraz sterować ledami za pomocą PWM i np tranzystorów IRL540n ( w zależności od prądu oczywiście ) co dało by efekt płynnego zapalania się i gaszenia Smile
można to zrobić i nie tylko tak lecz to ma być elektronika dziś analogi giną wiec jak było by lepiej zmieniać to pilotem czy biegać z śrubokrętem
Stron: 1 2 3