ACER_082021 ACER_082021 ACER_082021 Advertisement

Arduino Smarthome Kit – príklady softvérovej obsluhy senzorov a motorov

1

článku sme predstavili stavebnicu Arduino Smarthome Kit, ktorá okrem dielov dreveného domčeka obsahuje riadiacu dosku kompatibilnú s Arduinom, nadstavbu Sensor Shield, modul pre bluetooth komunikáciu, dvojriadkový displej, množstvo senzorov, dva servomotory, jednosmerný motor a moduly s tlačidlami a LED diódami. V tomto článku ukážeme jednoduché príklady demonštrujúce softvérovú obsluhu týchto hardvérových modulov a motorčekov.  

Video s príkladmi

Pozrite si fungovanie modelu smarthome

Riadiaca doska a Sensor Shield

Začneme dvomi modulmi s LEDkami. Prvá aplikácia je modifikovaný príklad „blinky“ pre Arduino, ktorá rozbliká LED diódy pripojené na porty D5 (žltá) a D13 (biela)

void setup() {
  // pin 5 a 13 ako  output.
  pinMode(5, OUTPUT);
  pinMode(13, OUTPUT);
}
 
void loop() {
  digitalWrite(5, HIGH);  
  digitalWrite(13, LOW);  
  delay(500);             
  digitalWrite(5, LOW);   
  digitalWrite(13, HIGH);  
  delay(500);             
}

Vľaho modul s LED diódou a servo na otváranie okna, vpravo modul s relé a na streche jednosmerný motor

Prakticky rovnaký kód môžeme použiť na periodické spínanie relé. Je pripojené na porte D12

int Relay = 12; // relé na pine D12
void setup ()
{
   pinMode (Relay, OUTPUT); // relé
}
 
void loop ()
{
   digitalWrite (Relay, HIGH);
   delay (2000);
   digitalWrite (Relay, LOW);
   delay (2000);
}

Na reguláciu jasu LED použijeme PWM, čiže pulzne šírkovú moduláciu

int ledPin = 5; //Oranzova LED pin D5
void setup () {
      pinMode (ledPin, OUTPUT);
}
 
void loop () {
for (int value = 0; value<255; value = value + 1) {
     analogWrite (ledPin, value); //PWM ako analógový výstup
     delay (5); // delay 5MS
   }
   for (int value = 255; value>0; value = value-1) {
     analogWrite (ledPin, value); // stmievanie
     delay (5); // delay 5MS
   }}

Modul s bielou LED, dva tlačidlá, PIR senzor pohybu, displej a v ruke je senzor vlhkosti pôdy

Tlačidlá sú pripojené na portoch D4 a D8, ktoré je potrebné nakonfigurovať ako vstupy. Po zatlačení tlačidla na D4 sa rozsvieti žltá LED na porte D5

int ledpin = 5;
int inpin = 4; // tlacidlo
int val; // premenna
 
void setup ()
{
   pinMode (ledpin, OUTPUT); // LED --output
   pinMode (inpin, INPUT); // tlacidlo -- input
}
 
void loop ()
{
   val = digitalRead (inpin); // logická úroveň na tlačidle
   if (val == LOW) // ak je zatlacene
      {digitalWrite (ledpin, HIGH);}
   else
      {digitalWrite (ledpin, LOW);}
}

Dvojriadkový LCD displej je pripojený štyrmi vodičmi na rozhranie I2C, ktoré využíva signály SCL a SDA.

Využijú sa funkcie z knižnice  LiquidCrystal_I2C

#include
#include
 
LiquidCrystal_I2C lcd (0x27,16,2); // Adresa LCD displeja 0x27
 
void setup ()
{
  lcd.init (); // inicializacia LCD
  lcd.backlight ();
  lcd.setCursor (3,0);
  lcd.print ("NEXTECH"); // prvý riadok
  lcd.setCursor (2,1);
  lcd.print ("Smarthome"); // Druhý riadok
}
 
void loop (){}

V ďalšom príklade vyskúšame fotodiódu, ktorá je pripojená na analógový vstup A1.

Senzor dažďa, osvetlenia a obvod na ovládanie jednosmerného motora

Hodnota intenzity svetla, technicky je to hodnota napätia sa prenáša cez sériové rozhranie, ktoré sa využíva aj na programovanie Arduina. Hodnoty si môžete zobraziť pomocou nástroja Monitor sériového portu, ktorý je súčasť Arduino IDE a zobrazíte ho v menu Nástroje

int LED = 5; // oranžová LED na D5
int val = 0; // premenná na načítanie napätie
void setup () {
       pinMode (LED, OUTPUT); // LED ako output
       Serial.begin (9600); // Rýchlosť sériovej komunikácie
}
void loop () {
       val = analogRead (A1); // napätie na pine A1
       Serial.println (val); // výstup na sériový port
       if (val <200)
       {// LED vypnutá
       digitalWrite (LED, HIGH);
       }
       else
       {// LED zapnutá
       digitalWrite (LED, LOW);
       }
       delay (10);
}

Rovnako načítame aj hodnotu vlhkosti vzduchu zo senzora na streche modulu pripojeného na port A3

void setup()
{
   Serial.begin(9600); //open serial port, and set baud rate at 9600bps
}
 
void loop()
{
   int val;
   val=analogRead(3); //údaj zo senzora
   Serial.println(val,DEC); //výstup na seriový port
   delay(100); //100ms
}

Senzor pohybu je pripojený na port D2, takže poskytuje len hodnoty 0 (nie je pohyb) a 1 (detegovaný pohyb). Pohyb budeme indikovať bielou LED na porte D13

void setup () {
   Serial.begin (9600);
   pinMode (2, INPUT); // DPIR vstup na D2
   Serial.begin (9600);
   pinMode (13, OUTPUT); // LED na D13
}
 
void loop () {
   Serial.println (digitalRead (2));
   delay (500); // 500ms
   if (digitalRead (2) == 1) // ak je detegovaný pohyb
  {
     digitalWrite (13, HIGH); // LED ON
 
   } else // ak nie je pohyb
   {
     digitalWrite (13, LOW); // LED OFF
   }
}

Senzor horľavých plynov otestujete jednoducho. Stačí pod senzor dať nádobku, v ktorej je trochu alkoholického nápoja. Alkoholové výpary sú predsa tiež horľavé a pre takýto test sa alkohol určite hodí lepšia ako napríklad zapáchajúci acetón. My sme vo videu použili bylinkový likér.

Senzor je pripojený na analógový vstup A1 a prekročenie nastavenej úrovne indikuje pípnutím bzučiaka

int MQ2 = A0; // MQ2 gas senzora ako A0
int val = 0; // premenná
int buzzer = 3; // zvuk
 
void setup ()
{
   pinMode (MQ2, INPUT); // MQ2 ako input
   Serial.begin (9600); // seriový port
   pinMode (buzzer, OUTPUT);
}
 
void loop ()
{
   val = analogRead (MQ2); // hodnota zo senzoru
   Serial.println (val); // na seriový port
   if (val> 100)
   {
      tone (buzzer, 589);
      delay(300);
   }
   else
   {
      noTone (buzzer);
   }
}

Servomotory sú použité na simuláciu otvárania a zatváranie okna a dverí.

Mechanizmus ovládania okna vľavo a dverí vpravo

V príklade je natočenie serva z jednej krajnej polohy do druhej

#include // Servo function library
Servo myservo;
int pos = 0; // init uhol
 
void setup ()
{
   myservo.attach (9); // Servo na pine D9
}
 
void loop ()
{
   for(pos = 0; pos < 180; pos += 1)// uhol 0 to 180 stupňov
   {
      myservo.write (pos);
      delay (15); //  15ms
   }
   for(pos = 180; pos>=1; pos-=1) // Angle from 180 to 0 degrees
   {
      myservo.write (pos);
      delay (15); // 15ms
   }
}

Smer otáčania jednosmerného motora sa ovláda pomocou signálov na portoch D6 a D7. V príklade sa motorček striedavo otáča na jednu a druhú stranu

void setup () {
   pinMode (7, OUTPUT);
   pinMode (6, OUTPUT);
}
void loop () {
   digitalWrite (7, LOW);
   digitalWrite (6, HIGH); // fwd
   delay (3000); // delay 3S
   digitalWrite (7, LOW);
   digitalWrite (6, LOW); //stop
   delay (2000); //delay 1S
   digitalWrite (7, HIGH);
   digitalWrite (6, LOW); // reverz
   delay (3000); // delay 3S
}

 

Bluetooth modul na komunikáciu so smartfónom otestujete jednoduchým programom, ktorý povely prijaté cez bluetooth zobrazuje cez monitor sériového portu. Takže si stiahnite aplikáciu keyes IoT a skúste ovládanie. Povely sa zatiaľ nebudú zobrazovať

//test bluetooth
char val;
void setup()
{
   Serial.begin(9600);
}
 
void loop()
{
   while (Serial.available()>0)
   {
      val=Serial.read();// Read the value sent by Bluetooth
      Serial.print(val);// The serial port prints the read value
   }
}

Aby ste mohli z aplikácie ovládať všetky funkcie modelu smarthome, musíte do Arduina nahrať zdrojový, ktorý nájdete na konci stránky s návodmi. Kód si samozrejme môžete upraviť. https://wiki.keyestudio.com/KS0085_Keyestudio_Smart_Home_Kit_for_Arduino .

 

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
Arduino Smarthome Kit arduino IoT SmartHome

1 komentár

Smart houm a zistíš, že platíš za vychytávky tisíce ročne. Kto nanosí dreva a uhlia do pece? Arduino? :-D reakcia na: Arduino Smarthome Kit – príklady softvérovej obsluhy senzorov a motorov

2.5.2021 14:05
Smart houm a zistíš, že platíš za vychytávky tisíce ročne. Kto nanosí dreva a uhlia do pece? Arduino? :-D
Reagovať

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať