Operácie

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

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Riadok 176: Riadok 176:
   }
   }
}
}
'''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]
__TOC__
== Analýza  a opis riešenia ==
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
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.]]
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.
[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]
=== Algoritmus a program ===
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...
Výpis kódu je nižšie...
<tabs>
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#include <avr/io.h>
int main(void)
{
  unsigned int measuredValue;
  while (1)
  {
    /*  relax  */ 
  }
  return(0);
}
</syntaxhighlight ></tab>
<tab name="filename.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#include <avr/io.h>
void adc_init(void);                                  // A/D converter initialization
unsigned int adc_read(char a_pin);
</syntaxhighlight ></tab>
</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á:projektMenoPriezvisko.zip|zdrojaky.zip]]
=== Overenie ===
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.
Na konci uvádzame fotku hotového zariadenia.
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
'''Video:'''
<center><youtube>D0UnqGm_miA</youtube></center>
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
[[Category:AVR]] [[Category:MIPS]]

Verzia z 21: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

<tabs>

#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 );

<tab name="ESP8266 v IDE"><syntaxhighlight lang="c++" style="background: LightYellow;">

  1. define BLYNK_TEMPLATE_ID "TMPL4s3XVVGDQ"
  2. define BLYNK_TEMPLATE_NAME "Projekt ESP8266"
  3. define BLYNK_AUTH_TOKEN "3zNgryWRPOpyX2i46Z2Gnd28OdaS-bEC" %%tieto údaje poskytne cloud server
  1. include <ESP8266WiFi.h>
  2. 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
 }

}