Jump to content

Arduino kontrolēts apgaismojums


markei
 Share

Recommended Posts

Sveika tauta!

 

        Sen jau gribējās aptaustīt Arduino, paņēmu Arduino Nano mega168.  Tad sāku domāt, ko lai pasāk ar šo verķi. Izdomāju sev apgaismojumu mājās izštancelēt ar kustības sensoriem, lai bērns naktī pats var aizskriet uz tualeti un gaisma ieslēgtos pati. Pasūtīju vēl 2 kustības sensorus un vienu gaismas sensoru. Tualetē tiks uzlikts prasti= ienāk 12volti DC, kas iet uz kustības sensoru, kuram jau uzlodēju mosfetu, kas ieslēgs LED apgaismojumu no tiem pašiem 12voltiem (netiks savienots ar arduino).

        Bet koridorā gribas izvirtības. Doma tāda= ir viens kustības sensors un viens gaismas sensors, lai dienā neslēdzas iekšā. Saņemot augstu signālu no kustības sensora, arduino momentāli aktivizēs vienu pinu, tad otru, tad trešo, tad ceturto un uzņems laiku un pēc noteikta laika, ja nebūs vairāk signālu no kustības sensora, tad pa vienam secīgi atslēgs. Ja ar dzelzisko pusi viss skaidrs, tad ar softisko grūti, tā teikt pirmie soļi un viss "copy paste" caur googli. Nezinu kā lai panāk, lai gaismas sensora augstais signāls bloķē kustības sensoru programmiski. Protams var uztaisīt dzelziski caur kādu tranzistoru, ka gaismas sensora augstais signāls atslēdz kustības sensora signālu no arduino, bet gan jau softiski būtu labāk. Man ir uz Simolatora strādājošs kods, kas pēc kustības sensora signāla ieslēdz vienu pinu un pēc laika to atslēdz:

Spoiler

/*
 * Apgaismojums
 */
 
int inputPin = 3;               // Kustibas sensors
int inputPin = 4;               // Gaismas sensors
int outputPin = 7;                // Gaisma1
int outputPin = 8;                // Gaisma2
int outputPin = 9;                // Gaisma3
int outputPin = 10;               // Gaisma4
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
unsigned long detectTime;

void setup() {
  pinMode(3, INPUT);       // Kustibas sensors
  pinMode(4, INPUT);       // Gaismas sensors
  pinMode(7, OUTPUT);        // Gaisma1
  pinMode(8, OUTPUT);        // Gaisma2
  pinMode(9, OUTPUT);        // Gaisma3
  pinMode(10, OUTPUT);       // Gaisma4
}
 
void loop(){
  val = digitalRead(3);  // Kustibas sensors
  if (val == HIGH) {            
    digitalWrite(7, HIGH);  // Gaisma1
      detectTime = millis();

    }
if ( (millis() - detectTime) == 1){  // Laiks tiks pieregulets
    digitalWrite(7, LOW); // izslegt Gaisma1

    }
  }
}

 


Bet mēģinot pievienot secīgos izejas pinus, izmet kļūdu, īsti nezinu iemeslu. Arī kā panākt, lai gaismas sensors bloķē kustības sensora signālu? Vēl kā panākt, lai laika atskaite resetojas, ja saņem atkārtotu signālu no kustības sensora, kad vēl iepriekšējā laika atskaite nav beigusies?

Spoiler

/*
 * Apgaismojums
 */
int inputPin = 3;               // Kustibas sensors
int inputPin = 4;               // Gaismas sensors
int outputPin = 7;                // Gaisma1
int outputPin = 8;                // Gaisma2
int outputPin = 9;               // Gaisma3
int outputPin = 10;               // Gaisma4
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
unsigned long detectTime;

void setup() {
  pinMode(3, INPUT);       // Kustibas sensors
  pinMode(4, INPUT);       // Gaismas sensors
  pinMode(7, OUTPUT);        // Gaisma1
  pinMode(8, OUTPUT);        // Gaisma2
  pinMode(9, OUTPUT);       // Gaisma3
  pinMode(10, OUTPUT);       // Gaisma4
}
 
void loop(){
  val = digitalRead(3);  // Kustibas sensors
  if (val == HIGH) {            
    digitalWrite(7, HIGH);  // ieslegt Gaisma1
 
val = digitalRead(3);  
  if (val == HIGH) {  
  delayMicroseconds(100);        // Laiks tiks pieregulets
    digitalWrite(8, HIGH);  // ieslegt Gaisma2

 

val = digitalRead(3);  
  if (val == HIGH) {  
  delayMicroseconds(150);         
    digitalWrite(9, HIGH);  // ieslegt Gaisma3

 

val = digitalRead(3);  
  if (val == HIGH) {  
  delayMicroseconds(200);         
    digitalWrite(10, HIGH);  // ieslegt Gaisma4

 
      detectTime = millis();

    }
if ( (millis() - detectTime) == 1){
    digitalWrite(7, LOW); // izslegt Gaisma1

 

if ( (millis() - detectTime) == 1){
delayMicroseconds(100);               // Laiks tiks pieregulets
    digitalWrite(8, LOW); // izslegt Gaisma2

 

if ( (millis() - detectTime) == 1){
delayMicroseconds(150);
    digitalWrite(9, LOW); // izslegt Gaisma3

 

if ( (millis() - detectTime) == 1){
delayMicroseconds(200);
    digitalWrite(10, LOW); // izslegt Gaisma4

    }
  }
}

 

 

  • Patīk 2
Link to comment
Share on other sites

Varbūt šitā būs vieglāk? Programmējami laika releji, kas var ieslēgt un izslēgt jebkuros laika intervālos (daudzos diennakts laikā) un jebkurās nedēļas dienās + kustības sensors gaismai vai termoregulātors grīdām.

thumbnail.jpg

Link to comment
Share on other sites

1 stundu atpakaļ, markei teica:

Nezinu kā lai panāk, lai gaismas sensora augstais signāls bloķē kustības sensoru programmiski.

 

Kā, kā - ar ifu! :)  Tu kodā gaismas sensoru (pin4) esi norādījis kā inputu, bet izmantot to tu nekur neizmanto.

Labots - itanium
  • Patīk 1
Link to comment
Share on other sites

Tas, ka kods ir auzās, es jau pats saprotu, es tak ne bū ne bē programmēšanā. Es jau viņu lipināju no googlē atrodamajiem kodiem, mēģinot saprast, un skatījos, kas notiek. Varētu jau prasti- Kustības sensors kustina mosfetu, gaismas sensors caur tranzistoru bloķē no kustības sensora signālu uz mosfetu pie noteikta gaišuma. Bet tad jau zūd iespēja variēt un padarīt to apgaismojumu interesantāku vai piekabināt vēl kaut ko klāt. Šobrīd doma, ka pie kustības ieslēdzas apgaismojums pakāpeniski, piemēram, iedegas pirmās divas LED lampas, tad nākamās divas un tā tālāk un pēc X laika, ja nav kustības, pa pārim sāk izslēgties, bet ja saņem atkal signālu no kustības sensora, tad izslēgšanos pārtrauc.

Link to comment
Share on other sites

AndrisBB

Nav man Arduino uz kā pārbaudīt, bet vajadzētu strādāt. Ja nestrādā, tad ganjau sapratīsi kā pielabot

https://pastebin.com/xBgyCP3p

 

#define KUSTIBAS_SENSORS        3
#define GAISMAS_SENSORS         4
#define GAISMA_1                7

#define STATE_IDLE              0
#define STATE_GAISMA_TURN_ON    1
#define STATE_GAISMA_ON         2
#define STATE_GAISMA_TURN_OFF   3

#define WAIT_TIME              (10 * 1000) 

int state = STATE_IDLE;
int start_time = 0;

void setup() 
{
	pinMode(KUSTIBAS_SENSORS, INPUT);
	pinMode(GAISMAS_SENSORS, INPUT);
	pinMode(GAISMA_1 + 0, OUTPUT);
	pinMode(GAISMA_1 + 1, OUTPUT);
	pinMode(GAISMA_1 + 2, OUTPUT);
	pinMode(GAISMA_1 + 3, OUTPUT);
}

void loop() 
{
	int i = 0;
	int now = 0;
	switch(state)
	{
		case STATE_IDLE:
			if(digitalRead(KUSTIBAS_SENSORS) && !digitalRead(GAISMAS_SENSORS))
			{
				state = STATE_GAISMA_TURN_ON;
			}
			break;
		case STATE_GAISMA_TURN_ON:
			for(i = 0; i < 4; i++)
			{	
				digitalWrite(GAISMA_1 + i, HIGH);
				delay(2 * 1000);
			}
			state = STATE_GAISMA_ON;
			start_time = millis();
			break;
		case STATE_GAISMA_ON:
			now = millis();
			if((now - start_time) > WAIT_TIME)
			{
				// Parbaudi 10 reizes vai nav kustiba
				bool kustiba = false;
				for(i = 0; i < 10; i++)
				{
					if(digitalRead(KUSTIBAS_SENSORS))
					{
						kustiba = true;
						break;
					}
					delay(100);
				}

				if(kustiba)
				{
					start_time = millis();
				}
				else
				{
					state = STATE_GAISMA_TURN_OFF;
				}
			}
			break;
		case STATE_GAISMA_TURN_OFF:	
			for(i = 0; i < 4; i++)
			{	
				digitalWrite(GAISMA_1 + i, LOW);
				delay(2 * 1000);
			}
			state = STATE_IDLE;
			break;
	}
}

 

Labots - AndrisBB
  • Patīk 2
Link to comment
Share on other sites

AndrisBB eleganti uzrakstījis... tā kā es arī gribu iemācīties :biggrin: Tas ir tas (kā lai pareizi pasaka) stāvokļu automāts?

Link to comment
Share on other sites

AndrisBB
Pirms 9 minūtēm , Jurkins teica:

Tas ir tas (kā lai pareizi pasaka) stāvokļu automāts?

Jā, State Machine. Šajā gadījumā visdrīzāk nav nepieciešama, jo nav nav jau nekādi lielie sazarojumi

Link to comment
Share on other sites

Vienīgi, man laikam patiktos to gaismas izdzēšanos arī taisīt uz millis() nevis uz aizturēm, jo, ja piemēram gaisma sāk dzēsties ārā, bet tur no guļamistabas streipuļo otrs bērns :biggrin:, tad gaisma neiedegsies atpakaļ, kamēr tie visi delay() nebūs izbeigušies.

Link to comment
Share on other sites

AndrisBB
Pirms 23 minūtēm , Jurkins teica:

nīgi, man laikam patiktos to gaismas izdzēšanos arī taisīt uz millis() nevis uz aizturēm,

Nu var jau ievies ari katrai gaismai pa "steitam", un pec katras ieslŗgtās paskatities vai nav atkal kustiba, ja ir stad sakt slegt iekša sakot ar to pašu, kuru pirmstam izslēdza. Vai ari turet tas gaismas kautkada masīvā un tad ieslēgt izslēgt pec kārtas, 100 un viens variants.

Un vel ja ātri aizsedz un atsedz gaismas sensoru 10 reizes, tad ieslēdzas disko gaismas. :D

Labots - AndrisBB
Link to comment
Share on other sites

AndrisBB
Pirms 3 minūtēm , JDat teica:

if ( !(lightSensor) || moveSensor ) turnLightOn

Tad nebūs ne interesanti ne ko programmēt

Link to comment
Share on other sites

pirms 7 stundām , markei teica:

Doma tāda= ir viens kustības sensors un viens gaismas sensors, lai dienā neslēdzas iekšā

VAr jau blietēt ar lielgabalu pa zvirbuli, bet labas klases Infrā ir arī tumsa slēdzis, skaņo kā vajag!

Link to comment
Share on other sites

Ehhh. Laikam tā arī ir....

a) jāizlasa visa diskusija

b) nedrīkst sabojāt arduino programmēšanas prieku...

Link to comment
Share on other sites

Arduino viņam jau ir, bet tādu programmējamu releju gan jau ka nav + ir vēlme mācīties. Kāpēc ne? :)

Link to comment
Share on other sites

Kāpēc ritenis no jauna jātaisa, piedevām caur stāstiu?

Link to comment
Share on other sites

Teju vai visi, kas sāk ņemties ar Arduino, sāk ar LED ieslēgsanu/izslēgšanu. Bet kāpēc?

Slēdži tak eksistē! Gan fiziski, gan programmējami u.t.t.

Lai mācītos! ;) 

  • Patīk 1
Link to comment
Share on other sites

Pirms 2 minūtēm , itanium teica:

Lai mācītos! ;) 

 

Tieši tā! Lai mācītos kā ir pareizi un lai mācītos kā ir nepareizi.

 

Pirmais punkts: "definēt uzdevumu" ar kura palīdzību mācīties jau ir izpildīts. Pārējais ir vēlme "rakt līdz saknei" un novest visu līdz galam.

Labots - JDat
  • Patīk 2
Link to comment
Share on other sites

AndrisBB
Pirms 9 minūtēm , jema teica:

Kāpēc ritenis no jauna jātaisa, piedevām caur stāstiu?

Tak skaidrs ka cilvēks meklē jaunu hobiju un grib ar kautko nodarboties, merķis nav uztaisīt kautkādu industriālas kvalitātes sistēmu.

Plus tur vēl var strīdēties vai tie releji būs vieglāks/labāks risinājums, Arduino gadījumā tas noteikti būs vieglak "uzlabojams"

Link to comment
Share on other sites

Gribi mācīties, taisi gudro māju pats, nevis no gataviem moduļiem, tikai jēga neredzu, jo visus šos krutos puper risinājumus izmanto vienreiz lai ieslēgtu un tālāk viņi tiek aizmirsti līdz pirmai ķibelei! Tas ir kā mašīnas klimu vienreiz ieslēdz un aizmirsti, kad ir kāds vispār viņu vēlreiz regulējis?

Pirms 1 minūtes , AndrisBB teica:

Arduino gadījumā tas noteikti būs vieglak "uzlabojams"

Kas tieši?

Es saprotu kaut kāda iekša/ arā laišanas sitēmas ar auto signalizācijām, cilvēku sekošanu u.t.t, ja tur ir ok!

Link to comment
Share on other sites

Just now, jema teica:

Gribi mācīties, taisi gudro māju pats, nevis no gataviem moduļiem

Em, kopš kura laika Arduino un daži sensori ir gatavs modulis? Kas tad būtu tas taisi pats?

 

Pirms 1 minūtes , jema teica:

Tas ir kā mašīnas klimu vienreiz ieslēdz un aizmirsti, kad ir kāds vispār viņu vēlreiz regulējis?

Jā, regulāri to daru! ;) Visi mani draugi tieši tāpat!

Link to comment
Share on other sites

AndrisBB
Pirms 1 minūtes , jema teica:

Kas tieši?

Kāda jēga te strīdēties par to kas pareizāks? Tiem kam no programmēšanas ne-bū, ne-mē, liksies ka tas ir sarežģīti.

 

Link to comment
Share on other sites

Pirms 1 minūtes , itanium teica:

Jā, regulāri to daru! ;) Visi mani draugi tieši tāpat!

Ko tatad tu dari, pēc 22 grādu uzlikšanas?

Link to comment
Share on other sites

AndrisBB
Pirms 1 minūtes , jema teica:

Ko tatad tu dari, pēc 22 grādu uzlikšanas?

Kāds sakars te klimatkontrolei ar Arduino. Ja nav ko teikt par tēmu, tad nevaijag te ieviest offtopiku.

Tēma ir Arduino, releji, slēdži, klimatkontrole - offtopiks

Labots - AndrisBB
Link to comment
Share on other sites

Just now, AndrisBB teica:

Tiem kam no programmēšanas ne-bū, ne-mē, liksies ka tas ir sarežģīti.

VAr jau būt es piekasos, bet jūs visur gribas programēt tur kur tas jau sen nav jādara! Vēl jau ir tāda lieta kā elektrības patēriņš, jebkurā devēja ņem mikroA, jūs pariktes diezvai!

Link to comment
Share on other sites

Lieku 18, tad 16, Min, tad 22, tad atkal 20 - nezinu, ko vēl tev lai pasaka.

Netraucē cilvēkam kaut ko jaunu apgūt! (ne mans gadījums ar klimata kontroli :) )

 

Vēlāk varēs papildināt/apgreidot risinājumu ar WC apmeklējumu logošanu mākonī, sejas atpazīšanu, notifikācijām par veselības problēmām u.t.t. :D

Link to comment
Share on other sites

Pirms 1 minūtes , AndrisBB teica:

Kāds sakars te klimatkontrolei ar Arduino

TAs bija salīdzinājums, bet to var tieši pārnest uz māju, man mājā kā ir nolikts 21.5, tā 10 gadus stāv!

Link to comment
Share on other sites

AndrisBB
Pirms 1 minūtes , jema teica:

Vēl jau ir tāda lieta kā elektrības patēriņš, jebkurā devēja ņem mikroA

Jā, mikrokontrolieris patērē tik daudz ka nespēs samaksāt elektrības rēkinu

Link to comment
Share on other sites

Pirms 1 minūtes , AndrisBB teica:

Jā, mikrokontrolieris patērē tik daudz ka nespēs samaksāt elektrības rēkinu

Nu ja tev ir 1, tad po, bet man ir ļoti daudz pa māju kopā, salasās, man mēnesī ir 600+

 

Pirms 3 minūtēm , itanium teica:

Lieku 18, tad 16, Min

:biggrin: - es ar tevi pat diskutēt netaisos, tu tagad muļķibas dot vaļā!

Link to comment
Share on other sites

Pirms 2 minūtēm , jema teica:

:biggrin: - es ar tevi pat diskutēt netaisos, tu tagad muļķibas dot vaļā!

Lai ta būtu :D

 

Pirms 2 minūtēm , jema teica:

bet man ir ļoti daudz pa māju kopā, salasās, man mēnesī ir 600+

Kā mēs no autora vēlmes iemācīties kaut ko jaunu nokļuvām līdz tavām "problēmām" ar elektrības patēriņu?

Man šis vakars forumā patīk - kaut kāds jancīgs :D

Labots - itanium
Link to comment
Share on other sites

Sorry, abu mūsu pienesums ir 0 :biggrin:

Link to comment
Share on other sites

Pirms 1 minūtes , jema teica:

TAs bija salīdzinājums, bet to var tieši pārnest uz māju, man mājā kā ir nolikts 21.5, tā 10 gadus stāv!

 

Nē nu var Argusā (vai hipsteru-deģenerātu variantā: Aibana utml) nokpirkt termoslēdzi un priecāties, bet var pamačities PID matemātiskos principus. Nu kāda vella pēc visu uzreiz vajag apstraģēt uz "kā efektīvāk darīt". Vai esi iedomājies par variantu: "mācīties no savām kļūdām", nevis "piedzimt ar skrūvgriezi rokās"?

 

Jā var visu darīt arī ar 555 timer un 74LSxxx mikrenēm, bet pareizi taisot ar MCU, vajadzēs mazāk detaļu + (piemēram) termālā stabilitāte būs lielāka.

 

Tajā pat laikā nevajag aiziet otrā galējībā un klozetpoda ūdens kloķi nav jānospiež ar arduino un WC.flush() klasi. viss ir kompomiss. Pat ja ir gribēšana mācīties, nevis risināt jemas klimatkontroles un elektroenerģijas patēriņa problēmas.

 

Starp citu: Daži vietējie bāleliņi ar mainīgām sekmēm mēdz publicēties tajā pat hackaday.com, kas nu nemaz nav salīdzināms ar sūdkafijas zābalforuma "balto biedrīšu" viedokli.

Link to comment
Share on other sites

Nu ok, es tas muļķis, kas lieto gatavos risinājumus, vienkāršās vietās!

Link to comment
Share on other sites

AndrisBB
Just now, jema teica:

Nu ok, es tas muļķis, kas lieto gatavos risinājumus, vienkāršās vietās!

Vienkārši te neviens nejautāja pēc gatavā risinājuma.

Link to comment
Share on other sites

Pirms 1 minūtes , JDat teica:

Tajā pat laikā nevajag aiziet otrā galējībā un klozetpoda ūdens kloķi nav jānospiež ar arduino un WC.flush() klasi

Nu to gan es vēl varētu saprast, jo proces nav tik viennozīmīgs, ļoti daudz variāciju, bet nu infru neatļaut ieslēgt ar programmēšanu, kad ir parasts foto relejs, nu piedodiet! :pleasantry:

Pirms 2 minūtēm , AndrisBB teica:

Vienkārši te neviens nejautāja pēc gatavā risinājuma.

 

Pirms 41 minūtēm , jema teica:

VAr jau blietēt ar lielgab

 

Link to comment
Share on other sites

Pirms 4 minūtēm , JDat teica:

Tajā pat laikā nevajag aiziet otrā galējībā un klozetpoda ūdens kloķi nav jānospiež ar arduino un WC.flush() klasi. viss ir kompomiss

Pievieno vēl klāt kādu sensoru, un vairs nav tik traka tā ideja! Publiskās tualetēs varētu arī noderēt ;)

Link to comment
Share on other sites

Pirms 3 minūtēm , jema teica:

Nu ok, es tas muļķis, kas lieto gatavos risinājumus, vienkāršās vietās!

 

Muļkis ir tas kurš ar shatlu stāda kartupeļus. Galu galā ari gataviem risinājumiem nav ne vainas. Stāsts ir par mācīšanos, nevis gatavu klucīšu bīdīšanu.

 

Jā. Var uztaisīt UN/VAI/NE dzelziski. Protams, ja māk. Bet vai konrētajā (markei) gadījumā tas ir pats galvenais?

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...