Operácie

Ovládanie elektrického zámku z cloudu: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2025 - '''Meno Priezvisko''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie 400px|thumb|center|Vývojová doska ACROB. '''Literatúra:''' * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“
 
StudentMIPS (diskusia | príspevky)
 
(13 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2025 - '''Meno Priezvisko'''
Záverečný projekt predmetu MIPS / LS2025 - '''Dominik Andraščík'''




== Zadanie ==
== Zadanie ==


Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
Cieľom zadania bolo vytvoriť program a overiť jeho funkčnosť na fyzickom modeli. Systém využíva cloudovú platformu BLYNK ovládanú prostredníctvom modulu ESP8266, prostredníctvom ktorej je možné diaľkovo ovládať elektronický zámok. Arduino v tomto systéme slúži ako prijímač údajov z ESP8266 a následne zabezpečuje samotné riadenie otvárania alebo zatvárania zámku.
[[Obrázok:Arduino UNO.png|400px|thumb|center|Vývojová doska Arduino UNO.]]


[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
== Analýza a opis riešenia ==
Na základe zadania bolo potrebné splniť tieto požiadavky:
• Vytvoriť komunikáciu medzi ESP8266 a Arduinom
• Umožniť diaľkové ovládanie systému pomocou internetového pripojenia
• Zrealizovať ovládanie elektrického zámku cez relé
• Zabezpečiť ochranu komponentov


'''Literatúra:'''
Navrhované riešenie využíva jednostrannú komunikáciu medzi ESP8266 a Arduinom. Kde ESP8266 sa pripája na internet prostredníctvom Wi-Fi a komunikuje s cloudovou platformou. Arduino je pripojene na ESP8266 cez sériovú komunikáciu UART, pričom prijíma jednoduché signály (1 alebo 0), ktoré určujú či sa ma zámok otvoriť alebo zatvoriť.
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
Zámok je riadený pomocou digitálneho výstupu z Arduina. Keďže Arduino pracuje na 5V logike a ESP8266 na 3,3V logike museli sme zabezpečiť ochranu vstupného pinu ESP8266. Túto ochranu sme zabezpečili pomocou napäťového deliča z rezistorov 1 kΩ a 2 kΩ, ktorý znižuje napätie TX pinu Arduina na bezpečnú úroveň pre RX pin ESP8266 teda 3,3V.  
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]


Na projekt som potreboval:
1x WiFi modul ESP8266
[[Obrázok:esp8266.png|400px|thumb|center]]
1x Relé
[[Obrázok:rele.png|400px|thumb|center]]
1x Arduino UNO
[[Obrázok:arduinouno.png|400px|thumb|center]]
1x Krokový servomotorček
[[Obrázok:servo.png|400px|thumb|center]]


__TOC__
== Algoritmus a program ==


== Analýza  a opis riešenia ==
1.Algoritmus činnosti Arduina


Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
•  Pri spustení sa inicializuje sériová komunikácia UART
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.


[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
• Arduino očakáva príchod znaku 0 alebo 1 zo sériového portu


Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.
• Ak Arduino prijme 1, aktivuje digitálny výstup čim zopne relé a otvorí zámok


[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]
• Ak je prijatá 0, Arduino digitálny výstup deteguje čim zámok zatvorí


• Cyklus je opakovaný neustále


=== Algoritmus a program ===
2.Algoritmus činnosti ESP8266


Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...
• Modul sa pripojí k nastavenej Wi-Fi sieti
Výpis kódu je nižšie...


• Po pripojení na Wi-Fi sa napojí na cloudovu službu BLYNK
• Keď prijme ovládací príkaz z cloudu odošle prostredníctvom sériovej komunikácie UART hodnotu 1 alebo 0 do arduina
• Po odoslaní očakáva ďalší úkon z internetu


<tabs>
<tabs>
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="Hlavný kód"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/io.h>
#include <util/delay.h>
#include "uart.h"
#define RELE PB5   
#define SERVO PB1 


int main(void)
int main(void)
{
{
  unsigned int measuredValue;
    uart_init(); //inicializacia komunikácie
    uart_puts("Servo a rele su pripravene.\n");
 
    // RELE ako výstup
    DDRB |= (1 << RELE);
 
    // SERVO ako výstup
    DDRB |= (1 << SERVO);
 
    // Nastavíme Timer1: Fast PWM, TOP = ICR1 (presné PWM pre servo)
    TCCR1A = (1 << COM1A1) | (1 << WGM11);
    TCCR1B = (1 << WGM12) | (1 << WGM13) | (1 << CS11);
    ICR1 = 40000; // 20 ms perioda (50 Hz)
 
    while (1)
    {
        char prikaz = uart_getc();


  while (1)
        if (prikaz == '1') {
  {
            PORTB |= (1 << RELE);    // zapni relé = napájanie pre servo
    /*  relax  */
OCR1A = 5000; //otocenie serva o 180°
  }
            uart_puts("Otvaram zamok\n");


  return(0);
        }
        else if (prikaz == '0') {       
       
OCR1A = 1000; //vratenie serva na 0°
_delay_ms(1000);
            PORTB &= ~(1 << RELE); 
uart_puts("Zatvaram zamok\n");
        }
    }
}
}


</syntaxhighlight ></tab>
</syntaxhighlight ></tab>
<tab name="filename.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="uart.c"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#include <avr/io.h>
#include <avr/io.h>
#include <stdio.h>
#include <string.h>
#define BAUD 9600
#define F_CPU 16000000UL
void uart_init( void )
{
UBRR0 = 103;
#if USE_2X
UCSR0A |= _BV(U2X0);
#else
    UCSR0A &= ~(_BV(U2X0));
#endif
    UCSR0C = _BV(UCSZ01) | _BV(UCSZ00);
    UCSR0B = _BV(RXEN0) | _BV(TXEN0);
}
void uart_putc(char c)
{
  if (c == '\n')
    {
      uart_putc('\r');
    }
  loop_until_bit_is_set(UCSR0A, UDRE0); /* Wait until data register empty. */
  UDR0 = c;
}
void uart_puts(const char *s)
{
  for(int i = 0; i<=strlen(s);i++)
  uart_putc(s[i]);
}
char uart_getc(void) {
    loop_until_bit_is_set(UCSR0A, RXC0); /* Wait until data exists. */
    return UDR0;
}
</syntaxhighlight ></tab>
<tab name="uart.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
void uart_init( void );
   
void uart_putc( char c );
void uart_puts( const char *s );
char uart_getc( void );


void adc_init(void);                                  // A/D converter initialization


unsigned int adc_read(char a_pin);
</syntaxhighlight ></tab>
<tab name="ESP8266 v IDE"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#define BLYNK_TEMPLATE_ID "TMPL4s3XVVGDQ"
#define BLYNK_TEMPLATE_NAME "Projekt ESP8266"
#define BLYNK_AUTH_TOKEN "3zNgryWRPOpyX2i46Z2Gnd28OdaS-bEC" %%tieto údaje poskytne cloud server
 
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
 
char ssid[] = "meno wifi";
char pass[] = "heslo wifi";
 
void setup()
{
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
 
void loop()
{
  Blynk.run();
}
 
// Ovládanie cez Blynk Virtual Pin V1
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt(); // 1 = ON, 0 = OFF
 
  if (pinValue == 1) {
    Serial.write('1');  // Otvor zámok
  } else {
    Serial.write('0'); // Zavri zámok
  }
}
</syntaxhighlight ></tab>
</syntaxhighlight ></tab>
</tabs>
</tabs>


Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
Zdrojový kód: [[Médiá:zadanieDominikAndraščík.zip|kody.zip]]
 
== Zapojenie a overenie funkčnosti ==


Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
Zapojenie:  


=== Overenie ===
• ESP8266 je napájane cez USB


Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
• Arduino je napájane cez USB
Na konci uvádzame fotku hotového zariadenia.


[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
• TX z ESP8266 je pripojený na RX Arduina


'''Video:'''
• TX z Arduina je pripojený na RX ESP8266 cez napäťový delič
<center><youtube>D0UnqGm_miA</youtube></center>
 
• Relé je ovládane výstupným signálom z digitálneho pinu Arduina PB5
 
Schéma zapojenia:
[[Obrázok:schemaesparduino.png|400px|thumb|center]]
 
Overenie:
 
Po zapojení sme systém overili nasledovne:
 
• Cloud nám ohlásil či je zariadenie Online alebo Offline


• Arduino nám v sériovom monitore oznámilo úspešnú inicializáciu komunikácie


• Arduino správne rozpoznalo prijatý signál a vypísalo Zámok otvorený alebo Zámok zatvorený v sériovom monitoru.


• Tieto funkcie sme otestovali niekoľkokrát po sebe


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
Týmto sme si potvrdili, že zariadenia spolu komunikujú správne, relé reaguje na príkazy od Arduina a teda ovládanie zámku na diaľku funguje spoľahlivo podľa očakávaní .


[[Category:AVR]] [[Category:MIPS]]
'''Video:'''
<center><youtube>004WkhIj4Wk</youtube></center>

Aktuálna revízia z 22:26, 16. máj 2025

Záverečný projekt predmetu MIPS / LS2025 - Dominik Andraščík


Zadanie

Cieľom zadania bolo vytvoriť program a overiť jeho funkčnosť na fyzickom modeli. Systém využíva cloudovú platformu BLYNK ovládanú prostredníctvom modulu ESP8266, prostredníctvom ktorej je možné diaľkovo ovládať elektronický zámok. Arduino v tomto systéme slúži ako prijímač údajov z ESP8266 a následne zabezpečuje samotné riadenie otvárania alebo zatvárania zámku.

Vývojová doska Arduino UNO.

Analýza a opis riešenia

Na základe zadania bolo potrebné splniť tieto požiadavky: • Vytvoriť komunikáciu medzi ESP8266 a Arduinom • Umožniť diaľkové ovládanie systému pomocou internetového pripojenia • Zrealizovať ovládanie elektrického zámku cez relé • Zabezpečiť ochranu komponentov

Navrhované riešenie využíva jednostrannú komunikáciu medzi ESP8266 a Arduinom. Kde ESP8266 sa pripája na internet prostredníctvom Wi-Fi a komunikuje s cloudovou platformou. Arduino je pripojene na ESP8266 cez sériovú komunikáciu UART, pričom prijíma jednoduché signály (1 alebo 0), ktoré určujú či sa ma zámok otvoriť alebo zatvoriť. Zámok je riadený pomocou digitálneho výstupu z Arduina. Keďže Arduino pracuje na 5V logike a ESP8266 na 3,3V logike museli sme zabezpečiť ochranu vstupného pinu ESP8266. Túto ochranu sme zabezpečili pomocou napäťového deliča z rezistorov 1 kΩ a 2 kΩ, ktorý znižuje napätie TX pinu Arduina na bezpečnú úroveň pre RX pin ESP8266 teda 3,3V.

Na projekt som potreboval: 1x WiFi modul ESP8266

1x Relé

1x Arduino UNO

1x Krokový servomotorček

Algoritmus a program

1.Algoritmus činnosti Arduina

• Pri spustení sa inicializuje sériová komunikácia UART

• Arduino očakáva príchod znaku 0 alebo 1 zo sériového portu

• Ak Arduino prijme 1, aktivuje digitálny výstup čim zopne relé a otvorí zámok

• Ak je prijatá 0, Arduino digitálny výstup deteguje čim zámok zatvorí

• Cyklus je opakovaný neustále

2.Algoritmus činnosti ESP8266

• Modul sa pripojí k nastavenej Wi-Fi sieti

• Po pripojení na Wi-Fi sa napojí na cloudovu službu BLYNK

• Keď prijme ovládací príkaz z cloudu odošle prostredníctvom sériovej komunikácie UART hodnotu 1 alebo 0 do arduina

• Po odoslaní očakáva ďalší úkon z internetu

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "uart.h"

#define RELE PB5     
#define SERVO PB1  

int main(void)
{
    uart_init(); //inicializacia komunikácie
    uart_puts("Servo a rele su pripravene.\n");

    // RELE ako výstup
    DDRB |= (1 << RELE);

    // SERVO ako výstup
    DDRB |= (1 << SERVO);

    // Nastavíme Timer1: Fast PWM, TOP = ICR1 (presné PWM pre servo)
    TCCR1A = (1 << COM1A1) | (1 << WGM11);
    TCCR1B = (1 << WGM12) | (1 << WGM13) | (1 << CS11);
    ICR1 = 40000; // 20 ms perioda (50 Hz)

    while (1)
    {
        char prikaz = uart_getc();

        if (prikaz == '1') {
            PORTB |= (1 << RELE);    // zapni relé = napájanie pre servo
			OCR1A = 5000; //otocenie serva o 180°
			
            uart_puts("Otvaram zamok\n");

        } 
        else if (prikaz == '0') {        
         
		OCR1A = 1000; //vratenie serva na 0°
		_delay_ms(1000);
            PORTB &= ~(1 << RELE);  
			uart_puts("Zatvaram zamok\n");
        }
    }
}
#include <avr/io.h>
#include <stdio.h>
#include <string.h>
#define BAUD 9600
#define F_CPU 16000000UL

void uart_init( void )
{
	UBRR0 = 103;
#if USE_2X
	UCSR0A |= _BV(U2X0);
#else
    UCSR0A &= ~(_BV(U2X0));
#endif

    UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); 
    UCSR0B = _BV(RXEN0) | _BV(TXEN0);
}

void uart_putc(char c) 
{
   if (c == '\n') 
    {
       uart_putc('\r');
    }
   loop_until_bit_is_set(UCSR0A, UDRE0); /* Wait until data register empty. */
   UDR0 = c;
}

void uart_puts(const char *s)
{
  for(int i = 0; i<=strlen(s);i++)
  uart_putc(s[i]);
}

char uart_getc(void) {
    loop_until_bit_is_set(UCSR0A, RXC0); /* Wait until data exists. */
    return UDR0;
}
void uart_init( void );
     
void uart_putc( char c );
void uart_puts( const char *s );

char uart_getc( void );
#define BLYNK_TEMPLATE_ID "TMPL4s3XVVGDQ"
#define BLYNK_TEMPLATE_NAME "Projekt ESP8266"
#define BLYNK_AUTH_TOKEN "3zNgryWRPOpyX2i46Z2Gnd28OdaS-bEC" %%tieto údaje poskytne cloud server

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char ssid[] = "meno wifi";
char pass[] = "heslo wifi";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}

void loop()
{
  Blynk.run();
}

// Ovládanie cez Blynk Virtual Pin V1
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt(); // 1 = ON, 0 = OFF

  if (pinValue == 1) {
    Serial.write('1');  // Otvor zámok
  } else {
    Serial.write('0');  // Zavri zámok
  }
}

Zdrojový kód: kody.zip

Zapojenie a overenie funkčnosti

Zapojenie:

• ESP8266 je napájane cez USB

• Arduino je napájane cez USB

• TX z ESP8266 je pripojený na RX Arduina

• TX z Arduina je pripojený na RX ESP8266 cez napäťový delič

• Relé je ovládane výstupným signálom z digitálneho pinu Arduina PB5

Schéma zapojenia:

Overenie:

Po zapojení sme systém overili nasledovne:

• Cloud nám ohlásil či je zariadenie Online alebo Offline

• Arduino nám v sériovom monitore oznámilo úspešnú inicializáciu komunikácie

• Arduino správne rozpoznalo prijatý signál a vypísalo Zámok otvorený alebo Zámok zatvorený v sériovom monitoru.

• Tieto funkcie sme otestovali niekoľkokrát po sebe

Týmto sme si potvrdili, že zariadenia spolu komunikujú správne, relé reaguje na príkazy od Arduina a teda ovládanie zámku na diaľku funguje spoľahlivo podľa očakávaní .

Video: