Você está na página 1de 58

UNIVERSIDADE PAULISTA

CRISTIAN KEVIN DE SOUSA NOLETO


JOAO PAULO DE OLIVEIRA
KALLEW CARLOS MACHADO DE OLIVEIRA
LUCIANO FERREIRA ARAÚJO

INTELIGÊNCIA ARTIFICIAL NA AUTOMAÇÃO RESIDENCIAL

GOIANIA – GO
2021
CRISTIAN KEVIN DE SOUSA NOLETO
JOAO PAULO DE OLIVEIRA
KALLEW CARLOS MACHADO DE OLIVEIRA
LUCIANO FERREIRA ARAÚJO

INTELIGÊNCIA ARTIFICIAL NA AUTOMAÇÃO RESIDENCIAL

Relatório apresentado à Banca Examinadora do


Trabalho Técnico-cientifico de Conclusão de Curso
de Ciência da Computação para análise e
aprovação.
Orientador(a): Fabriccio Dias Canhete

GOIANIA – GO
2021
AGRADECIMENTOS
Agradecemos Primeiramente a DEUS que nos proporcionou estarmos
aqui e também por ser a base das nossas conquistas;
Somos muito gratos às nossas famílias que nos apoiaram o tempo todo claro, não
poupando esforços para vencermos no final desta jornada.
Agradecemos também aos nossos amigos pelo apoio, incentivo e ajuda durante toda
esta jornada.
A todos os professores que nos ajudaram nessa caminhada, com toda sua
dedicação e também as orientações na elaboração deste trabalho, colaborando com
toda ajuda possível para o desenvolvimento de nossas ideias.
Enfim podemos dizer Acabou, Vencemos!
RESUMO

A inteligência artificial, encontra-se em um desenvolvimento constante, a integração


de sistemas usando IA com outros mecanismos que realizam algumas tarefas que
facilitam o dia a dia de todas as pessoas vem sendo método e objeto de estudo e de
pesquisa de profissionais de diversos ramos de conhecimento, dos quais os
sistemas se destacam. O objetivo deste Trabalho de Conclusão de Curso é
desenvolver um sistema capaz de ter uma interação da inteligência artificial, no caso
iremos usar o jarvis com Arduino, por meio de comandos de voz que serão dados
usando um microfone, com a finalidade de automatizar uma residência por completo.
Por meio deste sistema será feita a comunicação de um microfone com o Arduino
usando a inteligência artificial que irá gerenciar todos os dispositivos que estão na
residência. Dentre vários microcontroladores utilizamos o Arduino, que tem uma
gama quase infinita para automação.
Iremos utilizar um algoritmo para se comunicar com o Arduino, para que ao serem
executados comandos o sistema possa se comunicar com a casa, podendo executar
as tarefas que são relacionadas a automação na residência, através de comandos
por aplicativo, ou por comandos de voz.
A motivação desde trabalho se dá muito por conta da necessidade de meios que
promovam maior conforto, segurança e interação para os usuários e suas
respectivas casas, ou escritórios. Ao final deste trabalho obteve-se um sistema que
gerencia a automação de residências, em uma ou mais delas, resultando em um
protótipo de casa inteligente capaz de ouvir e executar comando gerados pelo
sistema.
Palavra Chave: Arduino, Inteligência Artificial, Automação residencial.
ABSTRACT
Artificial intelligence is in constant development, the integration of systems using AI
with other mechanisms that perform some tasks that facilitate the daily lives of all
people has been a method and object of study and research by professionals from
different branches knowledge, of which the systems stand out. The objective of this
Course Conclusion Work is to develop a system capable of having an interaction of
artificial intelligence, in which case we will use jarvis with Arduino, through voice
commands that will be given using a microphone, in order to automate a residence
complete. Through this system, a microphone will be communicated with the Arduino
using artificial intelligence that will manage all the devices that are in the residence.
Among several microcontrollers we use the Arduino, which has an almost infinite
range for automation.
We will use an algorithm to communicate with the Arduino, so that when commands
are executed, the system can communicate with the house, being able to perform the
tasks that are related to automation in the residence, through commands by
application, or by voice commands.
The motivation for work is largely due to the need for means that promote greater
comfort, safety and interaction for users and their respective homes, or offices. At the
end of this work, we obtained a system that manages home automation in one or
more of them, resulting in a prototype of a smart home capable of hearing and
executing commands generated by the system.
Keyword: Arduino, Artificial Intelligence, Home Automation.
SUMÁRIO
1. INTRODUÇÃO............................................................................................................................8
2. ABSTRACT..................................................................................................................................8
3. INTRODUÇÃO............................................................................................................................9
4. COMPREENSÃO E CARACTERIZAÇÃO DOS CONCEITOS DE LEITURA, COMPREENSÃO E
ANALFABETISMO FUNCIONAL.........................................................................................................11
4.1. LEITURA...........................................................................................................................11
4.2. COMPREENSÃO................................................................................................................12
4.3. ANALFABETISMO FUNCIONAL..........................................................................................14
5. DISCENTE DO ENSINO SUPERIOR E SEU NÍVEL DE LEITURA E COMPREENSÃO..........................16
5.1. COMO ISSO AFETA SUA FORMAÇÃO ACADÊMICA?..........................................................18
6. CONCLUSÃO............................................................................................................................20
7

1 INTRODUÇÃO

O surgimento e a popularidade recente da internet, computadores pessoais


Smartphones e tables tornam esses dispositivos indispensveis na vida diária de
pessoas, seja na comunicação, no trabalho ou no lazer.

O atual crescimento da indústria de eletrônicos e do setor imobiliário tem


Incorporar novas tecnologias na residência, visando proporcionar e Melhore a
segurança, o conforto, os efeitos de economia de energia e promova os serviços de
manutenção e manutenção para estender sua vida útil enquanto avalia o valor da
propriedade Transação imobiliária (MATTAR, 2007). Surgiu,a domótica, que é uma
combinação de palavras latinas "Domus" com o termo "robótica" é uma "casa
inteligente" que os usuários podem possuir controle sua residência através do app
ou sistema. Este controle visa diminuir o trabalho realiza no dia a dia com tarefas do
cotidiano que não são complexas, que executamos a todo tempo, e que agora por
conta da domotica, porem ser realizadas de forma automatizada, proporcionando
mais comodidade, interação e praticidade no dia a dia (PINHEIRO, 2004).

De acordo com MARIOTONI E ANDRADE (2007), domótica é nada mais que


a utilização da eletrocina, da eletricidade, e ou das tecnologias que a todo tempo nos
fornece informações a respeito do ambiente residencial que vivemos, permitindo que
o usuario possa gerenciar partes de sua casa que diretamente interferem no
ambiente interno, de forma remota podendo ser de qualquer lugar do mundo ou
local, o que nos dá mais segurança, um conforto bem maior, gestao de consume do
Sistema eletrico de toda a casa, e uma possibilidade maior e melhor de
comunicação.

A utilização de todas estas tecnologias constitui o processo de automação


residencial( ou domótica) que através do uso de um Sistema capaz de interpretar os
comandos humanos e enviar comandos para um microcontrolador, irá viabilizar a
comunicação entre um proprietario e sua residencia aliada a capacidade do
equipamento, proporcionando comodidade e interatividade.

De acordo com autores MARIOTONI E ANDRADE (2007), os sistemas


automatizados proporcionam uma melhor mobiliade, conectividade e portabilidade
8

que outros dispositivos não sao capazes de entregar. Há uma grande espectativa
para que este tipo de sistema seja mais comumente encontrado em poucas decadas
ou ate anos, por conta de todos os avanços que a tecnologia, proporciona para gerar
maior comodidade em todas as tarefas do cotidiano, fazendo com que o valor de
mercado destas tecnologias que hoje, uma parcela menor de pessoas tem, por
conta de todos os custos e valores envolvidos, para criação do Sistema,
implementação e venda, os valores ainda sao altos, porem com o avanço da
tecnologia, os valores irao abaixar em muito pouco tempo, fazendo com que mais
pessoas possam aproveitar destas tecnologias, com a popularização da tecnologia
poucas pessoas nao irão querer aproveitar de todos os avanços e melhorias que
serao implementadas no contexto social em um todo, porque ligar a luz pelo
interruptor se posso comprar ou programar um robo para que ligue a luz quando
houver um comando ou uma movimentação em determinado cômodo?

Atualmente o mais comumente usado para ativar qualquer dispositivo


eletrônico ou equipamento eletrônico doméstico é realizado por meio de um
interruptor ou controle remoto. Ambos fornecem interatividade mínima para o
proprietário, exigindo que o proprietário esteja na localização do dispositivo a ser
controlado.

(PINHEIRO, 2004). De um modo geral, a maioria das residencias só usa essa


tecnologia, o que exige esforço desnecessário, usado para realizar tarefas simples,
como por exemplo ligar ou desligar uma lâmpada.

2 OBJETIVO GERAL

1.1 Objetivos específicos

Qual será o objetivo da proposta do desenvolvimento deste trabalho? Terão


uma proposta de desenvolvimento de um Sistema físico que tenha como base o
microcontrolador Arduino, e o Sistema de reconhecimento por voz, implementando a
Inteligência Artificial com nome de Jarvis que por sua vez é uma grande aliada a
interação de sistemas com inteligência artificial e Arduino para automação de
residências e diversas outras interações de IA com sistemas automatizados, que por
9

sua vez irá proporcionar ao usuário uma interação usuário-ambiente para ser
automatizado. A apresentação deste Sistema se dará pela criação de uma maquete
que, terá condições ideias e reais em uma residência, simulando um Sistema real
em um residência real, proporcionando a avaliação.

Como objetivos principais da criação do Sistema de interação automatizada


serão.

Qual é o motivo da criação do Sistema automatizado dentro de uma


residência? Dentro da interação automatizada, precisamos compreender o
funcionamento da domótica e IA(inteligência artificial) para fins de pesquisa pois o
desenvolvimento de um sistema que reconheça a voz do usuário através de
comandos para o Arduino devem auxiliar as pessoas que irão utilizar esse tipo de
automação, e compreender o funcionamento da domótica e da IA para fins
estudantis, a fim de desenvolver um Sistema que reconhecera a voz do usuário que
irá mandar comandos para o Arduino, também desenvolver um protótipo em
miniatura que simulara um caso real de interação homem-residência, através dos
Sistema automatizado, para que seja possível construir um Sistema interativo entre
as ligações elétricas necessárias entre o Arduino, a placa de automação, e o
protótipo da residência, simulado um caso real, e por último para demostrar novos
modelos e empregos de tecnologias para interação não só de residências, mas de
tudo que pode gerar um conforto e uma interação melhores entre seus respectivos
locais fisicas e o usuário.

3 REVISAO BIBLIOGRAFICA

4 ALGORITMOS
2.1 O que é algoritmo:

Algoritmo ou em inglês: script, é como se fosse uma espécie de “roteiro” para


um computador, só que esse roteiro é constituído por sequências de códigos, onde
leva em consideração dados de entrada (inputs) e produz dados de saída (outputs),
e assim executam uma determinada tarefa computacional, onde esses resultados
10

podem ser mostrado em uma tela (monitor) ou então a tarefa é executada em


backend,e assim nós não vemos o resultado.

Um algoritmo é uma sequência extremamente precisa de instruções que,


quando lida e executada por uma outra pessoa, produz o resultado
esperado, isto é, a solução de um problema. (Marcos Castilho, 2020)

Essas sequências de códigos devem ser bem explícitas, não podendo haver
ambiguidades e muitas menos várias interpretações, ou seja, um código escrito uma
vez deve sempre trazer o mesmo resultado.

Para o desenvolvimento de um algoritmo eficiente é necessário obedecermos


a algumas premissas básicas no momento de sua construção:

 Definir ações simples e sem ambiguidade;


 Organizar as ações de forma ordenada
 Estabelecer as ações dentro de uma sequência finita de passos.
Obedecendo essas premissas terá um código e que funciona. Assim o
computador conseguirá fazer pequenas tarefas automatizadas, facilitando a
execução de tarefas do usuário.

Um bom código é sempre aquele que funciona, mas ele deve também ser
leve, pois assim executam uma tarefa em menos tempo e facilitam as futuras
manutenções no código. Para um algoritmo ser leve, deve seguir uma boa
arquitetura, ser planejado antes de ser codificado, definir funções iniciais ao seu
algoritmo para que não sejam um monte de código soltos e estar sempre revisando
o que já foi feito na fase de implementação para que certifique-se de o algoritmo
está seguindo uma boa arquitetura

O objetivo da arquitetura de software é minimizar os recursos humanos


necessários para construir manter um determinado sistema (Robert Cecil
Martin, 2019)

A medida da qualidade do design corresponde à medida do esforço necessário para


satisfazer as demandas do cliente. Se o esforço for baixo e se mantiver assim ao
11

longo da vida do sistema, o design é bom, se o esforço aumentar a casa novo


release ou nova versão, o design é ruim;

3.1 O que é um programa


Quando um algoritmo está finalizado e todo implementado temos enfim um
programa, o resultado da implementação de um algoritmo. Tendo um programa
pode então ser executado pelo computador e assim ter o resultado final da sua
execução.

Um programa é a codificação em alguma linguagem formal que garanta que


os passos do algoritmo sejam executados da maneira como se espera por
quem executa as instruções (Fabio Silva, 2020)

Imagine que uma pessoa vai entrar em uma cozinha pela primeira vez em sua vida e
resolve fazer um bolo de chocolate. A próxima imagem representa um algoritmo com
os passos para fazer um bolo de chocolate. Essa pessoa é um novato e precisa de
instruções bem detalhadas, pois ele é inexperiente e por exemplo ele não sabe o
que é “bater as claras em neve”.
12

Agora temos as instruções bem detalhadas, mas ainda assim o inexperiente


ainda vai ter dificuldades como: separar gemas. Ele ainda não sabe fazer isso. E
qual o tempo limite do processo de detalhamento da solução.

Nesse caso o problema é que o cozinheiro que escreveu a instrução não


sabia em que nível estava a pessoa que estava lendo. Então é necessário
estabelecer nível mínimo de conhecimento para quem irá executar a tarefa, assim a
pessoa que irá escrever saberá em que nível de detalhamento deixar a receita.

Assim o programa poderá ser escrito de forma detalhada o suficiente para


que a pessoa consiga executar a tarefa.

Como estamos pensando em deixar que o computador execute um


algoritmo, precisamos escrever um programa em uma linguagem na qual o
computador possa entender as instruções para posteriormente poder
executá-las com sucesso. (Fabio Silva, 2020)

Assim como um cozinheiro que faz instruções para um cozinheiro novato, os


desenvolvedores de software precisam escrever instruções detalhadas para que os
computadores possam executá-las, pois os computadores pois os computadores
conhecem apenas instruções lógicas então é necessária cria algoritmos neste nível.

4.1 Linguagens
Todo tipo de informação que deve ser armazenada, processada ou transferida
é necessário está no formato de uma linguagem. No processo de comunicação a
linguagem é essencial. Quando duas máquinas se comunicam, elas estão trocando
informações, nesse caso isso se chama protocolo. Para que um ser humano consiga
programar, armazenar e buscar informações em um computador, é preciso uma
linguagem que ele consiga entender, pois o computador entende apenas a
linguagem de máquina, ou seja, não há uma comunicação direta entre eles, é
necessário uma linguagem intermediária para que haja uma comunicação entre a
13

máquina e o ser humano, essas linguagens são as chamadas linguagens de


programação, classificadas como linguagem intermediária.

As linguagens de programação tem a função de intermediário entre a


máquina e o ser humano devido ao seu nível complexidade, onde o nível de
complexidade é definido pela capacidade que ser o ser humano tem de entender, ou
seja, quanto mais difícil para nós mais baixo é o nível,e enquanto mais fácil maior é
o nível. A linguagem de alto nível ela é bem parecida com nossa escrita, exemplo de
linguagens de alto nível: Python, Java, Javascript, C#, Perl, PHP e várias outras. As
linguagens de baixo nível são aquelas que as instruções são bem parecidas com
aquelas que serão executadas no processador (binário), um exemplo de linguagem
de baixo nível é a linguagem de montagem (assembly).

Os processadores não conseguem executar códigos do nível das linguagens


de programação, por isso os códigos de alto nível devem ser traduzidos para
códigos de baixo nível e quem faz essa tradução são os compiladores.

Quando um programa é implementado em uma linguagem de máquina, ele irá


conter instruções para aquele processador específico, e a instrução funcionará
apenas para aquele processador e para outros parecidos, sendo assim, se
quisermos que um programa funcionasse em dois computadores diferentes, seria
preciso criar dois códigos, sendo um para cada computador. Mas isso não é nem um
pouco viável, pois se precisássemos que um programa rodasse em cem
computadores, precisaríamos escrever esse programa cem vezes. A linguagem de
programação também resolve esse problema, pois ela contém instruções abstratas,
que podem ser compilado em máquinas diferentes, se seja, todos o computador com
a linguagem natural diferente entendem a mesma coisa quando se recebe instrução
de uma linguagem de programação, sendo assim, tem sempre o mesmo resultado
final.

5.1 Compiladores
De maneira resumida um compilador é um programa de computador (ou um
grupo de programas) que lê um código fonte de uma linguagem qualquer que pode
14

ser compilada, ele cria um programa semanticamente equivalente ao que escrito


originalmente pelo programador, porém escrito em outra linguagem, código objeto,
ou seja, ele transcreve para linguagem de máquina.

Posto de forma simples, um compilador é um programa que lê um


programa escrito numa linguagem, a linguagem fonte e o traduz num

programa equivalente numa outra linguagem, a linguagem alvo. ( Alfred

Aho, 1995)

De acordo com o livro Compiladores Princípios, Técnicas e Ferramentas


existe uma variedade enorme de compiladores, pode até ser assustador a
quantidade. Esse número enorme de compiladores é devido a uma variedade ainda
maior de linguagens fonte, desde as mais tradicionais como Pascal e Fortran até as
linguagens mais novas. Podendo ser classificado algumas vezes os compiladores
como de uma passagem, como de passagens múltiplas, de carregar e executar,
depuradores ou otimizantes.

Existem alguns compiladores que produzem código de montagem, assim é


passado para um montador que será processado futuramente. Existem os
compiladores que executam a tarefa do montador, neles é reproduzido um código de
máquina relocável, que pode ser passado para um carregador/editor de ligações
diretamente.

O código de montagem é uma versão mnemônica do código de máquinas,


nela ao invés de códigos binários são usados nomes, nas operações são fornecidos
nomes aos endereços de memórias.

Depois dos primeiros compiladores, começaram a criar ferramentas para


facilitar o processo de fazer novos compiladores. Foram referidos como
compiladores de compiladores, geradores de compiladores e sistemas de escrita de
tradutores. Muitos dos compiladores de compiladores criam rotinas de análises
15

lexicais fixas para ser usado no compilador gerado. As ferramentas que têm maior
possibilidade de sucesso são as que escondem os detalhes do algoritmo de geração
e produzem componentes que conseguem sem muitas dificuldades a serem
integrados à parte restante do compilador.

6.1 Estrutura Sequencial


Nessa estrutura os passos (instruções) do algoritmo é construído de maneira
sequencial, ele é executado na ordem em que os códigos foram escritos, da primeira
linha até a última, durante um tempo finito.

Quando no algoritmo a presença de condições, laços de repetições e funções.


O algoritmo deixa de seguir a sequência visual do código, ele ainda segue uma
sequência, só não é sequência decrescente de linha que vemos na tela, ou seja, o
código não vai da linha um até a última linha na sequência, pode ser que exista
condições e assim precisará pular uma parte do código, ou então um pode haver um
laço de repetição que quando chegar na linha 17 ele terá que voltar pra linha 10 e
executar tudo de novo, e pode ser que também exista um grupo de código que pode
repetir várias vezes durante o algoritmo e assim ele ficam numa parte reservada do
código para quando precisar chamá-la basta apenas invoca-la.

Quando há necessidade de um implementar um algoritmo todo sequencial é


por que o problema que esse algoritmo irá resolver é bem simples, pois um
algoritmo todo sequencial, não é muito viável, ele fica com poucas possibilidades e
perde boa parte do poder que a programação nos dá. Nos próximos itens será
possível entender o porquê não é viável fazer um programa todo sequencial.

7.1 Estrutura condicional


A Estrutura Condicional são elementos no código que possibilita a escolha de
um grupo de ações e estruturas para serem executadas quando determinadas
condições são ou não satisfeitas pelas condições, caso existam duas ou mais
16

possibilidades. Uma maneira melhor de entender as estruturas condicionais é


imaginar uma pessoa que pretende ir ao mercado, mas não sabe se o mercado está
aberto, então ele vai até o mercado e ao chegar no mercado ele terá duas
possibilidades, entrar se o mercado estiver aberto ou voltar para casa caso o
mercado esteja fechado. Ou seja, se o mercado está aberto, fulano entra, se não
fulano volta.

Entendo esse exemplo é possível compreender como funciona as estruturas


condicionais em algoritmos

Em Estrutura Condicional existem a Estrutura Condicional Simples ou


Composta, é a para melhor o entendimento é necessário aprofundar um pouco mais
no assunto

1.1.1 Estrutura Condicional Simples


As estruturas simples são condições únicas, ou seja, o código é executado se
a condição for verdadeira se não for o código continua a fazer o que já estava
fazendo.
17

Exemplo se a condição for verdadeira:

Fulano está indo para o trabalho, mas antes deseja tomar um café da manhã,
e assim vai a padaria, chegando no estabelecimento pede um café, então toma o
café, continua o percurso até o seu trabalho.

Exemplo se a condição for falsa:

Fulano está indo para o trabalho, mas antes ele deseja tomar um café da
manhã, assim vai a padaria, chegando no estabelecimento pede o café, mas o
atendente lhe informa que o café acabou, devido a isso fulano volta para o percurso
até o seu trabalho.

Fulano toma o café apenas se tiver café no estabelecimento, se não tiver o


café ele continua a ir ao trabalho como ele já estava indo.

2.1.1 Estrutura Condicional Composta


18

Em estruturas compostas existem mais de uma condição, se a condição for


verdadeira irá executar um grupo de ações, mas se a condição for falsa um outro
grupo de ações será realizado.

Exemplo se a condição for verdadeira:

Fulano está indo para o trabalho, mas antes deseja tomar um café da manhã,
e assim vai a padaria, chegando no estabelecimento pede um café, então toma o
café, continua o percurso até o seu trabalho.

Exemplo se a condição for falsa:

Fulano está indo para o trabalho, mas antes ele deseja tomar um café da
manhã, assim vai a padaria, chegando no estabelecimento pede o café, mas o
atendente lhe informa que o café acabou, então pede para que lhe sirva um copo de
leite, fulano toma o leite e volta para o percurso até o seu trabalho.
19

Agora na estrutura composta vemos que se uma condição não acontece


como desejaria ele tenta uma outra condição. No exemplo quando não tem o café
tem o leite, mas poderia acontecer de não haver leite também na padaria, então
nesse caso ele poderia pedir um suco e se também não tiver pode pedir um chá ou
simplesmente desistir e ir embora. E assim funcionaria a estrutura de um algoritmo
condicional

3.1.1 Estrutura de Repetição


Essa estrutura permite que seja executado mais de uma vez um mesmo
trecho de código. Trata-se de uma maneira de executar alguns blocos de comandos
quando atende uma condição, mas com a opção de repetir o mesmo bloco quantas
vezes for necessário. Podemos ver que Estrutura de Repetição é uma evolução da
Estrutura Condicional, a diferença entre entre-la é que se a condição for verdadeira
uma parte do código pode ser repetido várias vezes, de acordo com a necessidade
do problema.

As estruturas de repetição são úteis, por exemplo, para repetir uma série de
operações semelhantes que são executadas para todos os elementos de uma lista
ou de uma tabela de dados, ou simplesmente para repetir um mesmo
processamento até que uma certa condição seja satisfeita.
20

Exemplo:

Um marceneiro pretende pregar um prego em uma tábua, ele encosta o prego


na tábua e começa dando a primeira martelada é feito uma condição para que a
segunda martelada aconteça, o prego já está preso o suficiente? se não martela
mais uma vez, e assim é feito até que o prego esteja preso. A condição era o prego
estar preso, o laço de repetição era martelar.

8.1 Algoritmos no dia a dia:


Um exemplo bem simples. Imagine que você é um diretor(a) de uma escola e
precise calcular a média dos alunos para saber se o aluno foi aprovado ou não. Um
algoritmo computacional consegue resolver seu problema com muita facilidade.
Estudando um pouco de desenvolvimento de algoritmos computacionais é possível
compreender como desenvolver um script simples para calcular a média dos alunos
e retornar se ele foi aprovado ou não, pois a ideia é bem simples, ficando fácil o
desenvolvimento.
21

A ideia é calcular quatro valores que podem ser diferentes para cada aluno,
levando em conta que será calculado o ano letivo inteiro, ou seja, a cada três meses
o aluno irá fazer uma prova, que será o resultado da sua nota do trimestre. Para
esses valores dos quatros trimestres chamaremos de variáveis. Nessas variáveis
serão guardados os resultados das notas dos alunos, ou seja, a variável representa
a nota do aluno. Para não ficar confuso podemos colocar apelidos nessas variáveis,
neste caso chamaremos elas assim: nota1, nota2, nota3 e nota4. O número no final
de cada “apelido” se refere ao trimestre no qual o aluno fez a prova. O computador
entende que são quatro espaços diferentes alocados na memória, ele diferencia
uma da outra pelo “apelido” que colocamos nelas, como mostrei no exemplo.

O cálculo para saber a média é bem simples:

Sabendo como funciona a formula só precisamos adpatar ao nosso contexto,


ficando assim:

media = nota1 + nota2 + nota3 + nota4 / 4

Ou seja, o resultado da média é a soma de todas as notas dividido pela


quantidade das notas. Agora que a fórmula está adaptada ao nosso contexto,
precisamos passar a fórmula para o computador, e para isso é necessário a
linguagem de computação. Hoje existem várias linguagens de computação, e cada
uma delas tem suas vantagens, mas para o exemplo irei utilizar a linguagem
“Python”, pois é bem simples e fácil de entender.

Primeiro precisamos declarar as variáveis que receberão a nota do aluno.

nota1 = float(input('nota do 1º semestre '))


22

Essa linha de código significa: nota1 recebe um input, ou seja, qualquer coisa
que for digitado quando esse código for executado. Entre as aspas simples é um
texto que será mostrado no console para orientar quem está executando o código.
Note que tanto o texto entre as aspas e o “input” então dentro de parênteses, mais
precisamente então dentro do “float”, e com isso, o computador entende que o que
será digitado será um número com vírgula, exemplo: 1.5, 2.3, 7.7.

Entendendo essa primeira linha de código já conseguimos receber as notas


dos alunos. Agora só precisamos replicar para receber as notas dos semestre 2, 3 e
4. Ficando assim:

nota1 = float(input('nota do 1º semestre '))


nota2 = float(input('nota do 2º semestre '))
nota3 = float(input('nota do 3º semestre '))
nota4 = float(input('nota do 4º semestre '))

Agora que já conseguimos receber as notas precisamos calcular a média delas:

media = (nota1 + nota2 + nota3 + nota4) / 4

Para isso precisamos de mais uma variável, que irá guardar o resultado do
cálculo. Essa variável recebeu o apelido de “media”, pois ela vai guardar a média do
aluno. A variável média receberá a soma da nota1, nota2, nota3 e a nota4 e dividirá
por 4, que é a quantidade total de notas. Feito isso o computador já sabe a média do
aluno, mas o resultado não será apresentado na tela, pois não mandamos o script
mostrar o resultado. Para isso usará o comando “print()” , que serve para imprimir
tudo que estiver dentro dos parênteses na tela. Vale ressaltar que, qualquer
caractere que estiver entre aspas simples ou duplas será mostrado na tela, e se
estiver fora das aspas o computador entende como variável, lista ou objeto, e ao
invés de mostrar os caracteres escritos ele mostrará o valor que os caracteres
representam. Ficando assim:
23

print('Média: ', media)

O comando irá mostrar a palavra “Média:” e em seguida o valor da variável média.

Indo um pouco mais além, podemos acrescentar

if media >= 6:
print('Aprovado')
else:
print('Reprovado')

Esse código retorna se o aluno foi aprovado ou não. A primeira linha significa:
Se o valor da média for maior ou igual a 6 execute a próxima linha. Agora a terceira
linha: Se a condição da primeira linha não acontecer execute a quarta linha.
Resumindo, Se a média for maior ou igual a 6 escreva “Aprovado” senão escreva
“Reprovado”.

9.1 Conclusão
Os algoritmos ou scripts, tem nos dados imensas possibilidades do que fazer,
ela está presente no nosso dia a dia para executar desde tarefas simples até as
mais complexas, como elaboração de redes neurais. A evolução das linguagens de
programação tem sido algo extraordinário nos últimos anos, com sintaxes mais
simples e com muito mais funcionalidades. Cada vez mais pessoas têm entrado no
mundo da programação pois percebem a grandiosidade que é a programação. ela é
uma ferramenta muito poderosa para as empresas nos dias atuais, podendo
automatizar tarefas como geração de relatório, coleta de dados, envio de e-mails e
etc. Tendo o benefício de executar a tarefa com mais agilidade e livre de erros
humanos. Dominar a área de desenvolvimento dará grandes vantagens para a vida
pois sempre que precisar automatizar uma tarefa você poderá desfrutar dos
benefícios dos códigos computacionais para que realizem a tarefa para você.
24

5 ARDUINO

6 SISTEMAS DIGITAIS

Uma das opções disponíveis atualmente são os Circuitos Integrados de


Aplicativos Específico ou ASIC (Circuito Integrado Específico de Aplicativo). ASICs
representam o máximo que podemos obter em termos de desempenho e eficiência
energética, mas seu desenvolvimento é tempo complexo e exigente, ferramentas
sofisticadas e profissionais altamente treinados. A ASICs também é cara de fabricar,
geralmente variando de centenas de milhares de dólares a Milhão de dólares. Além
disso, dada a sua natureza estática, uma vez que um projeto é fabricado e contém
um defeito, não pode ser corrigido após o produto ter sido lançada no mercado,
introduzindo importantes fatores de risco no seu desenvolvimento.

10.1 Arduino

O objetivo era conceber um dispositivo que fosse económico, funcional e fácil


de programar, sendo assim acessível a estudantes e designers amadores. Além
disso, foi adotado o conceito de hardware livre, o que significa que qualquer pessoa
pode montar, modificar, melhorar e customizar o Arduino, a partir do mesmo
hardware básico.

Atualmente, qualquer dispositivo eletrônico possui algum tipo de inteligência


embutida. Essa capacidade de analisar e responder a estímulos pode ser
implementada usando uma série de tecnologias.

Como alternativa aos ASICs, por exemplo, dispositivos programáveis, como


Processadores de uso geral - GPPs, processadores para tratamento digital de sinais
e microcontroladores. Todos esses dispositivos têm o mesmo princípio de operação,
executando uma série de instruções previamente armazenadas em uma memória
externa para eles. A capacidade que esses dispositivos têm para ter seus a
programação alterada, praticamente em qualquer lugar e a qualquer hora, introduz
uma grande flexibilidade para produtos desenvolvidos com este tipo de tecnologia. O
revés introduzido através do uso de dispositivos programáveis está no maior
25

consumo de energia e com baixo desempenho ASICs, pois seu funcionamento é


limitado à execução sequencial de instruções.

Uma categoria intermediária entre ASICs e dispositivos programáveis são


dispositivos configuráveis, como FPGAs (Field Programmable Gate Arrays). A
diferença entre os termos empregado no presente trabalho, programável e
configurável, reside na granularidade de computação que pode ser modificada em
tempo de execução. GPPs modificam a função realizada em uma ALU com cada
nova instrução - granularidade no nível da palavra, enquanto em FPGAs em cada
arquivo de configuração alteram as funções executadas no hardware no nível função
lógica - granularidade de nível de bit. FPGAs podem oferecer desempenho próximo
circuitos dedicados (ASICs) com a flexibilidade de circuitos programáveis. Estima-se
que, em média, os projetos implementados em FPGA sofrem uma perda de
eficiência de 5 a 25% em termos de área ou velocidade quando comparado a uma
implementação ASIC.

11.1 Field Programmable Gate Array

Eles também oferecem a flexibilidade de sistemas programáveis.


comportamento configurado de forma rápida e fácil.

FPGAs representam uma classe de dispositivos que têm a capacidade de


implementar diferentes funções lógicas em hardware, permitindo obter desempenho
semelhante ou próximo ao dos ASICs, ao possibilitar a implantação de sistemas com
alto grau de paralelismo.

Além desses benefícios, cita-se a vantagem financeira da utilização de


FPGAs, por serem 12 (doze) produzido em altíssima escala, chegando ao mercado
com um preço bastante competitivo.

Deve-se notar que o custo dos produtos eletrônicos desenvolvidos com


dispositivos FPGA é competitivo com ASICs apenas para pequenos e médios
volumes de produção. No entanto, os dispositivos FPGA têm a limitação de
implementar apenas circuitos digitais. Esta classe de circuitos integrados também
representa o estado da arte em termos de processos de fabricação. Para efeito de
comparação, no momento em que este trabalho está em andamento desenvolvido, a
26

mais recente série Xilinx de FPGAs, Virtex-7, é fabricado usando um Processo de 28


nm, enquanto o processador mais recente lançado pela Intel usa tecnologia de 32
nm.

Junto com as funcionalidades básicas de um FPGA, é comum que esses


dispositivos também incluem módulos de hardware auxiliares, como memórias RAM,
gerenciadores de relógio, multiplicadores, controladores de rede (MAC Ethernet) e
até mesmo processadores, tornando-os verdadeiras plataformas para o
desenvolvimento de SoCs (Sistemas em um Chip).

12.1 Fluxo Genérico

No fluxo do projeto para FPGAs, é comum o uso de estratégias top-down de,


ou seja, após definir uma arquitetura para o projeto a ser implementado, a
implementação dos primeiros passos não influencia no resultado final que será
mapeado no FPGA. Recomenda-se segmentar o projeto em níveis hierárquicos,
mas isso não é obrigatório para uma estratégia de design convencional de cima para
baixo. Abordaremos a seguir as etapas de um fluxo de projeto convencional para
FPGAs.

Independentemente do fabricante do dispositivo a ser utilizado, todos seguem


fluxos semelhantes. O fluxo geral de projetos para FPGAs segue as seguintes
etapas: síntese lógica, mapeamento, posicionamento e roteamento e geração de
fluxo de bits.

13.1 Síntese Lógica

As ferramentas de síntese buscam identificar estruturas que foram descritas


no código-fonte HDL e gerar seus equivalentes em componentes lógicos ainda
genéricos. Após esta etapa, é comum que o diagrama de visualização do projeto
sintetizado seja disponibilizado pelas ferramentas CAD.

14.1 Mapeamento
27

As ferramentas buscam nesta etapa otimizar a implementação da arquitetura


definida pela descrição HDL, por exemplo, ser capaz de definir as estruturas que
armazenam informações como um conjunto de flip-flops, ou como um bloco
específico de memória disponibilizado pelo dispositivo usado.

Para esta etapa, é obrigatório definir a arquitetura e o membro da família


FPGA que será usado, para que a ferramenta CAD possa inferir corretamente os
componentes de lógica a ser usada.

15.1 Estrutura e Funcionamento dos dispositivos FPGAs

Para entender como funciona, podemos pensar no FPGA como um


dispositivo composto por duas camadas. Um, a camada lógica, que abriga estruturas
lógicas genéricos, cujo comportamento é definido pelo estado dos bits armazenados
na camada de Memória de Configuração.

16.1 FPGA visto como duas camadas: Lógica e Memória de


Configuração

Basicamente, na Camada Lógica encontraremos três tipos de estruturas


configuráveis: Bloco lógico configurável (CLB), interconexões e blocos de entrada /
saída.

17.1 Estrutura básica de um FPGA formado por Blocos Lógicos


interconectados

O multiplexador M1 implementa uma tabela, chamada Lookup Table (LUT),


responsável por implementar tabelas de verdade de funções booleanas
selecionando as saídas do Registradores R, permitindo a criação de qualquer lógica
combinatória. O registro R1 é usado para registrar a saída em circuitos lógicos que
requerem status de manutenção. O multiplexador M2 seleciona se a saída do
circuito será o LUT ou o estado armazenado em R1.

4.1.1 Reconfiguração Parcial e Dinâmica


28

Podemos definir Reconfiguração Parcial e Dinâmica (RPD) como a técnica


que permite, após a configuração de um FPGA com uma determinada
implementação, ser possível reconfigurar partes deste mesmo FPGA sem
comprometer a integridade ou interromper o funcionamento de suas outras partes.
Esta reconfiguração pode ser realizada de forma autônoma pelo próprio FPGA

5.1.1 Vantagens e desvantagens de RPD

A aplicação do RPD também apresenta algumas desvantagens, como uma


degradação de aproximadamente 10% na frequência do relógio, em parte devido à
restrição que impõe às otimizações em circuitos reconfiguráveis. Outra desvantagem
é a adição de novas etapas no fluxo de design.

18.1 Exemplos de Aplicações de RPD

6.1.1 Interface de rede multiporta.

Podemos considerar um switch de rede como um exemplo típico de uma


possível aplicação RPD. Freqüentemente, os switches implementam diferentes
protocolos de rede em suas portas, mas apenas um é usado. Nesse caso, o uso de
técnicas de RPD pode evitar o desperdício de manter o hardware dedicado ao
implementar os outros protocolos não utilizados.

7.1.1 Dispositivo periférico usando barramento PCI Express.

Podemos encontrar FPGAs em dispositivos conectados a um barramento


PCI-Express. A especificação deste barramento estipula um tempo máximo para que
todos os dispositivos respondam ao controlador. Muitas vezes, esse tempo não é
suficiente para que todo o processo de configuração do FPGA seja concluído.
29

8.1.1 Processador de pacotes reconfigurável dinámicamente

Em uma aplicação que necessita processar um grande número de pacotes de


rede, é possível aplicar a técnica RPD para que o hardware implementado no FPGA
possa ser alterado em tempo real dependendo do tipo de pacote recebido.

19.1 Arquitetura Virtex 5

No caso da arquitetura Virtex 5, os LUTs são implementados usando RAMs


de 64 bits cada. Cada LUT tem seis entradas e duas saídas independentes, de
modo que cada LUT é capaz de para implementar qualquer função booleana com 6
entradas, ou duas funções booleanas com 5 entradas, desde que essas funções
compartilhem algumas das entradas.

Na arquitetura Xilinx, cada CLB é dividido em estruturas chamadas Slices. No


caso de Virtex 5 cada CLB contém duas fatias, cada uma delas conectada a uma
matriz de chaveamento.

20.1 CLB contendo Slices conectados a uma matriz de chaveamento

Cada fatia contém 4 LUTs, quatro registros para manutenção de estado, além
de circuitos que auxiliam na implementação da lógica de transporte em operações
aritmética.

Os Slices também possuem outras estruturas para auxiliar na implantação de


circuitos comum na maioria dos projetos. No caso de SLICEMs, LUTs podem ser
configurados para, junto com as caixas registradoras disponíveis no Slice.

21.1 Recursos de memória RAM interna

A arquitetura FPGA Virtex 5 oferece duas alternativas para implementação de


memória Intrachip RAM, o uso de memórias RAM internas chamadas Block RAMs
ou BRAMs e o uso de Memória RAM distribuída usando LUTs disponíveis em cada
CLB.As memórias RAM dedicadas da arquitetura FPGA Xilinx são chamadas
30

BRAMs. Estes são blocos de memória posicionados em todo o dispositivo para uso
como memórias de acesso rápido para lógica dedicada ou como FIFOs. Cada
BRAM é uma memória RAM de porta dupla com 36kbits de capacidade.

É possível definir diferentes domínios de relógio para cada porta a fim de


gerar um FIFO assíncrono. Para evitar problemas de acesso simultâneos é possível
definir a seqüência de prioridades de operação em cada porta através dos primitivos
Xilinx. Ambas as portas de cada BRAM possuem primitivas de prioridade do tipo ler
primeiro ou gravar primeiro.

9.1.1 Recursos Aritméticos

Além da lógica Fast Carry Chain já mencionada em 2.1.1, FPGAs da família


Virtex 5 eles também têm blocos DSP (Processador de Sinal Digital). Esses blocos
têm estruturas otimizadas para realizar várias operações aritméticas, como
multiplicação, soma e comparação.

22.1 Recursos de Hardware para RPD

O elemento chave para a implementação do RPD em um FPGA reside em


seus mecanismos programação. No caso da tecnologia Xilinx, mais especificamente
um dispositivo embutido no FPGA, denominado ICAP (Porta de Acesso à
Configuração Interna). Compreendendo o 19 a operação do ICAP se torna simples
depois de estudar outra interface de programação Xilinx, Chamada SelectMap.

Internamente, a memória de configuração FPGA é organizada em uma matriz


contendo linhas e colunas. A menor unidade endereçável nesta memória é chamada
de quadro, ou quadro. Uma tabela não corresponde necessariamente a um CLB,
geralmente correspondendo a vários CLBs.

Assim, embora o ICAP seja capaz de acessar e reconfigurar os frames do


FPGA tanto em linhas quanto em colunas, não é possível reconfigurar um CLB
particular. A granularidade de reconfiguração parcial em dispositivos Virtex 5
compreende:

• Regiões de corte: 20 CLBs de altura por 11 CLBs de largura


31

• Regiões BRAM: 4 RAMB36

• Regiões DSP: 8 DSP48

• Regiões IOB: 40 IOB (um banco)

Do ponto de vista prático, a reconfiguração parcial pode ser realizada de


forma 2D, ou seja, módulos retangulares, que não cobrem necessariamente toda a
altura do dispositivo.

23.1 Lógica de interface entre lógica estática e lógica reconfigurável

A interface entre a parte estática e a reconfigurável do projeto é feita pelos


pinos atribuídos à partição reconfigurável. Nestes pontos está inserido na periferia
da lógica estático um componente âncora para lógica reconfigurável. Este elemento
de a ancoragem é chamado de lógica de proxy, normalmente uma LUT é usada para
esta finalidade que terá apenas uma entrada usada, então chamada LUT1.

A existência destes elementos é o que torna possível e garante a conexão


física correta entre o roteamento lógico módulos estáticos e reconfiguráveis.

A atribuição desses elementos é feita automaticamente pela ferramenta, mas


se for necessário ou desejável, também é possível atribuir a localização desses
pinos virtuais usando restrições específicas no arquivo UCF do projeto.

24.1 Arquitetura dos bitstreams parciais

Os fluxos de bits parciais possuem um cabeçalho com informações sobre sua


implementação, essas informações são adicionadas pela própria ferramenta bitgen,
que é responsável pela geração dos fluxos de bits no ambiente Xilinx.

Isso ilustra a composição desse cabeçalho, que contém informações como


nome do módulo, data de implementação e dispositivo alvo da implementação.
Depois disso, o resto da composição do fluxo de bits segue a estrutura básica usada
pelos dispositivos Virtex.
32

25.1 Fluxo Genérico do Projeto

No fluxo de projeto para FPGAs é comum a utilização de estratégias de


desenvolvimento top-downde, ou seja, após a definição de uma arquitetura para o
projeto a ser implementado, a execução dos primeiros passos não influencia no
resultado final que será mapeado no FPGA .

Recomenda-se segmentar o projeto em níveis hierárquicos, mas isso não é


obrigatório para uma estratégia de design convencional de cima para baixo.
Abordaremos a seguir as etapas de um fluxo de projeto convencional para FPGAs.
Independentemente do fabricante do dispositivo a ser utilizado, todos seguem fluxos
semelhantes.

O fluxo geral de projetos para FPGAs segue as seguintes etapas: síntese


lógica, mapeamento, posicionamento e roteamento e geração de fluxo de bits.

Esses dispositivos estão cada vez mais sendo utilizados na indústria de


sistemas eletrônicos, embarcados e em tempo real, devido à facilidade de
configuração e alto nível de desempenho. Eles também têm um longo ciclo de vida e
baixa dissipação de energia, um recurso antes presente apenas em dispositivos
ASIC. Além dos diversos dispositivos e periféricos integrados aos FPGAs, outro
atrativo é a grande versatilidade na utilização de seus recursos, podendo inclusive
ter parte de sua funcionalidade alterada na operação para atender a demandas
específicas, conforme demonstraremos utilizando RPD.

Tendo em vista esta característica de configurabilidade, que agrega a


flexibilidade do software ao hardware, uma solução de fluxo de projeto utilizando
RPD é apresentada no decorrer desta proposta, para aumentar a flexibilidade dos
projetos e diminuir o consumo de área em projetos lógicos programáveis plataformas
que usam FPGAs com essa funcionalidade. Este fluxo de projeto será desenvolvido
utilizando as ferramentas fornecidas pela Xilinx, que hoje é um dos principais
fabricantes de FPGA.

O fluxo de design para aplicativos que usam a Reconfiguração Parcial


Dinâmica é estável e muito mais acessível e automatizado do que antes. No entanto,
o design de um projeto inteiro que necessitou de um processador embarcado é
33

muito extenso, o que pode confundir ou atrapalhar o fluxo de desenvolvimento do


projeto.

7 INTELIGENCIA ARTIFICIAL
26.1 Introdução a Inteligência artificial

A inteligência artificial e a robótica sempre foram alvo de especulação, debate


e crítica desencadeada por pensamentos inspirados em muitos romances e contos
de ficção científica. Neste capitulo iremos abordar detalhes sobre a inteligência
artificial aplicada a automação residencial.

27.1 Definição de Inteligência artificial

Para Entender mais sobre o assunto, devemos primeiramente entender o que


é ser inteligente, e também o que é ser artificial. Pessoas inteligentes têm sabedoria,
são capazes de entender, são espertas e habilidosas. Segundo o autor Inteligência é
a faculdade de saber, aprender, conceber e compreender, é o que difere o animal do
ser humano. A inteligência artificial é um conjunto de teorias e técnicas usadas com
o objetivo de desenvolver uma máquina que possa simular a inteligência humana
(Larousse, 1999)

Os dois grandes pesquisadores Marvin Minky e Herbert Simon se


empenharam para descrever o cérebro humano em forma de máquina, mais
precisamente em forma de computador. O termo de Inteligência artificial foi utilizado
por McCarthy em 1956, termo este que após vários anos sendo um dos maiores
temas de filmes de ficção, a cada dia tem se tornado mais real, exemplo disso que
existem várias maquinas que simulam seres humano, mesmo que com uma
inteligência anos luz abaixo da do ser humano, algumas ações podem ser
comparados aos de seres humanos, podendo ter semelhanças não somente na
parte intelectual, mas também na parte física.

Sistemas inteligentes a vários anos andam em constante evolução


(Nikolopoulos,1997), eles se baseiam em arquitetura que tem como base de
conhecimentos, motores de inferências, módulos de aquisições de conhecimentos,
34

módulos de explicações e a interface com o usuário. Até o momento em que


perceberam que a alimentação de conhecimentos não foi automática, e que sempre
era necessário alguém para operar e alimentar sua base de conhecimentos. Já na
segunda geração dos sistemas foram adicionados o aprendizado automático, ou o
aprendizado de máquina simbólico (symbolic machine learning).

No meio de todo o processo de implementação do sistema de aprendizado


automático algumas linguagens de programação foram implementadas e
apresentadas, algumas delas são, a linguagem Prolog, Fortan, Cobol e a Lisp, cada
uma delas tem uma base diferente, mas todas foram utilizadas no meio deste
processo de implementação.

Segundo Kolodner et al. (1993) Analogia, Instancia, Evolução, Seleção,


Reforço não supervisionado, bayesiano, explicações e indução são os métodos que
mais tem influencia no aprendizado simbólico, sendo eles as bases para aplicação
do sistema automatizado. O aprendizado é o principal motivo que levou o ser
humano ter sua superioridade, é o princípio da inteligência. (SANCHES; GEROMINI,
2001).

Aprendizado denota mudanças no sistema, que são adaptáveis no


sentido de que elas possibilitam que o sistema faça a mesma tarefa ou
tarefas sobre uma mesma população, de uma maneira mais eficiente a cada
vez (SIMON, 1983).

Tal definição nos apresenta uma dimensão do quão importante é o


aprendizado automático, e quais mudanças podem ocorrer, nessas mudanças é
necessário ter o sistema pronto para qualquer e eventuais adaptações, por conta
que estas mudanças serão feitas automaticamente, com a maior eficiência e
precisão possível. As técnicas e ferramentas usadas para automatizar o processo de
aprendizado automático são coletadas a partir de conjunto de banco de
conhecimentos (MITCHELL, 1997).

Um dos maiores desafios do aprendizado automático é criar softwares que


tenham uma maior capacidade de aprender automaticamente com as experiencias
dotadas, para obter uma prevenção deste problema é necessário entender os erros
35

da maneira certa, para que sejam prevenidos erros maiores, que causariam uma
queda no sistema ou algo similar.

Pode-se afirmar que um programa computacional é capaz de


aprender a partir da experiência E com respeito a um grupo de tarefas T e
segundo a medida de desempenho P, se seu desempenho nas tarefas T,
medido segundo P, melhora com a experiencia E. (MITCHELL, 1997).

Baseado no modelo simbólico o paradigma de aprendizado automático, onde


as representações estão expostas de formas logicas, com arvores de decisões e
redes semânticas. Os algoritmos ID3 (QUINLAN, 1986) e C4.5 (QUINLAN, 1993)
são unicamente utilizados em induções de arvores de decisão, que são
constantemente utilizadas por pesquisadores que trabalham na área da Inteligência
artificial.

De acordo com o autor (OSÓRIO, 1999) os sistemas de aprendizado


automático podem ser classificados em três categorias, primeiramente o
aprendizado supervisionado, que é quando se sabe o roteiro que o software segue,
podendo ser possível generalizar aplicando-se de qualquer entrada, também o
aprendizado não-supervisionado, que é quando não existe informação de um
comportamento predefinido dos dados, sendo necessário o uso de algum algoritmo
que tenta organizar ou classificar, procurando padrões que consigam identificar este
comportamento, por último o aprendizado semi-supervisionado, que basicamente é
a junção do supervisionado e o não-supervisionado, que realiza a busca por todos
os resultados que foram abstraídos, atribuindo pontuações que possam medir a
quantidade de erros e acertos, sendo possível com isso ajustar o melhor
comportamento, e buscando o melhor resultado.

28.1 Domótica Inteligente

Antes de começar a falar sobre o assunto de domótica, iremos explicar o que


é a domótica, o termo tem relação a automatização de residências e escritórios com
equipamentos eletrônicos inteligentes, que são capazes de processar, gerenciar e
terem um autopoder de aprendizado.
36

O termo de domótica, pode ser implementado e aplicado de varias formas,


tendo como objetivo principal de quem o utiliza a comodidade, para melhor
qualidade de vida de quem não quer mais se preocupar detalhes podendo
automatizar trabalhos domésticos que são mais simples, como abrir uma porta, ligar
uma luz, desligar um ar condicionado e afins, trazendo mais segurança e
organizando diversos recursos que existem em uma residência (ANGEL, 1993).

Sistemas que utilizam a domótica precisam de vários outros dispositivos para


auxilia-los no processamento e gerenciamento de dados, a quantidade de processos
sendo executados ao mesmo instante é muito alta, permitindo assim um controle
maior do equipamento sem perder todo o conforto que foi prometido e adicionado ao
se instalar este sistema (BOLZANI, 2004).

As principais características da domótica inteligente são ter memoria, uma


percepção inteligente de tempo, fazer variadas funções, ter uma interação inteligente
com o habitante, capacidade de uma auto reprogramação e autocorreção. São
necessárias várias técnicas de inteligência artificial para implementar todas essas
ideias e conceitos inteligentes, termo este que está ligado a adaptação de regras,
para adaptação dos habitantes nas residências.

A domótica antiga era muito medíocre em termos de inteligência, e isso a


tornava pouco favorável para o usuário, por conta de que era muito cara, não havia
nenhuma padronização, e só eram utilizadas funções básicas de sensores, exemplo
disso são os medidores de temperatura, umidade que eventualmente transformavam
parâmetros físicos em sinais elétricos capazes de tornarem legível para os sistemas
de domótica, conectados a um controlador são usados atuadores que tem suas
funções alteradas conforme os impulsos elétricos recebidos.

The Intelligent Room Project (BROOKS, 1997), do MIT ¹, é um dos artigos de


maior importância e relevância quando se fala em Domótica inteligente, nele é
descrito informações sobre salas inteligentes que fazem o uso de técnicas de
reconhecimento de voz, visão computacional, que auxilia os habitantes em tarefas
do cotidiano, projeto com foco em interação homem maquina, para estudos.

Os Autores (RUTISHAUSER; SCHÄFER, 2002) apresentam modelos de


domótica inteligente que são baseados logicamente em Fuzzy e multi-agentes. O
37

desenvolvimento do artigo cita a adaptação dos sistemas com o comportamento dos


habitantes, que podem dinamicamente ser alteradas através de mudanças do
cotidiano, utilizando uma politica que é conhecida desde a Idade media que é a de
punição e recompensa. No fim do projeto foi concluído após teste em sistema real
que o obteve-se êxito no processo. Porem alguns desafios ainda precisaram e
precisam serem quebrados mesmo com todo o avanço tecnológico dentro do
processo de execução, como por exemplo a interação com os habitantes que de
uma forma geral abre espaço para novas regras serem usadas no processo de
aprendizado que ocorre com o tempo de forma automática e não avalia de forma
especifica.

Interagir, aprender, executar e automatizar um processo devem ser um dos


papeis que uma residência inteligente deve executar, sendo necessário estar pronta
para tomar decisões que são de grande importância que inclui o bem estar dos
habitantes ate o gerenciamento de tarefas simples e dos dispositivos existentes na
residência. É requisito principal que a residência se adapte ao comportamento dos
habitantes, sendo possível assim que qualquer pessoa mesmo com menor
familiaridade com o sistema possa utilizar e entender como funciona mesmo depois
de vários anos que o sistema foi criado e implementado

Depois de o público conhecer uma residência automatizada, não


haverá como retroceder, toda a cadeia de concepção da moradia, (a
arquitetura construção etc.), evoluirá, e, principalmente, o ocupante do
imóvel. Assim, deverão ser necessários vários profissionais que,
interagindo, permitirão o real desenvolvimento das técnicas da domótica.
(MITCHELL, 1997).

29.1 Domótica em negócio de expansão

Para o autor (LIPOVESTKY, 2005) o mercado vive uma nova fase, que
apresenta novos aspectos, focando em maximização da vida e deixando mais de
lado o luxo que uma vida pode trazer, onde a maioria das pessoas escolhem investir
seu tempo e dinheiro nas coisas que proporcionam prazer. “Vivemos numa
38

sociedade de consumo alimentada pela autonomia do indivíduo. Ela valoriza o bem-


estar, as necessidades individuais.”

No começo da automação residencial o foco era para construções de casas


que atendessem os seus proprietários que tinham uma renda elevada ou para
aumentar o valor de mercado dos imóveis por conta de todas as automações. Com o
tempo houveram mudanças de tendencias que passaram a considerar a evolução
dos elementos que tornaram parte do dia a dia de pessoa de classe media ou baixa
como os microcomputadores, smartphones, tablets e a internet. No geral os valores
de mercado dos itens de automação diminuíram consideravelmente foi o que
possibilitou os profissionais da área de construção terem maiores possibilidades de
desenvolver projetos com mais adequações as famílias modernas.

Depois de o público conhecer uma residência automatizada, não


haverá como retroceder, toda a cadeia de concepção da moradia, (a
arquitetura a construção. Etc.) evoluirá e principalmente, o ocupante do
imóvel. Assim deverão ser necessários vários profissionais que interagindo,
permitirão o real desenvolvimento das técnicas da demótica. (WERNECK,
1999).

Várias empresas e grupos trabalham no desenvolvimento de tecnologias,


centradas em sistemas de automação residenciais. Em vários países desenvolvidos,
a casa automatizada é um mercado consolidado, com várias soluções disponíveis e
apropriado para atender às suas necessidades. O alto custo dos componentes
continua sendo o principal obstáculo para aumentar a popularização da automação
residencial (SAHUN, 2003). No próximo capitulo iremos falar sobre banco de dados
e como pode ser feita a interação dentro da inteligência artificial e a domótica dentro
do banco de dados, quais os frutos e vantagens que uma interação a tal nível pode
acarretar e bonificar os desenvolvedores de um sistema inteligente.

8 SISTEMA DE BANCO DE DADOS

Neste capitulo iremos explorar a área de pesquisa determinado no trabalho.


Iremos história explorar a história de banco de
39

30.1 Introdução ao Banco de dados

Ao usar um cartão de crédito ou fazer uma transação de qualquer forma que


possa ser realizada online, como em uma loja e em compras online o simples fato de
visitar um determinado site é o mesmo que interagir com alguns bancos de dados.
(WADE; CHAMBERLIN, 2012).

A partir de 1970 a tecnologia de Sistemas de Banco de dados ficou conhecida


e acabou se tornando uma base para que desenvolvedores pudessem criar
aplicações, de órgãos do governo e também de empresas da indústria em geral.
Permitindo através de toda esta tecnologia a criação de aplicativos que teriam uma
comunicação online, que servia para desktop de uma maneira mais rápida e que não
acumulasse tantos custos para quem estivesse criando a aplicação. (GRAD;
BERGIN, 2009).

Com a tecnologia avançando a cada momento, houveram mudanças


significativas para todo o sistema de banco de dados, criando vários modelos novos
que a cada implementação puderam acrescentar e fazer mudanças no sistema de
banco de dados neste capitulo iremos citar os mais importantes, que são os que
mais se falam, como exemplo:

 Relacional: O modelo de banco de dados relacional é uma coleção


conjuntos variados de dados organizados em uma tabela por si
possuindo relações com uma definição bem organizada entre elas.
Com a criação do modelo relacional, houve também a criação de
uma linguagem que pudesse interpretar os dados que o usuário
deseja que o sistema execute, esta linguagem tem por nome
SQL(Structured Query Language)linguagem essa que facilita muito
a interpretação do banco, podendo ter uma interação melhor entre
homem máquina. (WADE; CHAMBERLIN, 2012).
 Em memória: O modelo de banco de dados na memória é Sistema
de gerenciamento de banco de dados que ao contrário dos
modelos convencionais que utilizam a memória auxiliar do sistema,
eles usam a memória principal para armazenar dados. Estes
40

sistemas são usados geralmente em programas ou aplicações que


demandam de um menor tempo para resposta, como em sistemas
de comunicação em tempo real, que devem ter o tempo de
resposta em altíssimo nível e qualidade (MOLKA; CASALE, 2015).

31.1 Conceitos

O Sistema de banco de dados, é um sistema que armazena registros em um


computador, ele basicamente, serve como uma prateleira de arquivos para sistemas
de computadores. Eles são gravados em sistemas de banco de dadas que usam
tabelas e colunas para salvar cada dado, contendo vários formatos para salvar os
dados em quantas tabelas o usuário quiser.

Ele armazena uma grande quantidade de arquivos e dados, sendo necessário


um sistema para que o usuário possa requisitar os dados, para fazer alterações
como criar, editar e excluir, porem para que o usuário possa obter o acesso a esses
dados, é necessário usar o sistema de gerenciamento de banco de dados.

O objetivo do SGBD é criar um ambiente em que é possível o


armazenamento e a recuperação dos dados, como uma ide, mas para banco de
dados. Um sistema SGBD consiste em um modelo que é uma coleção de dados que
se inter-relacionam em vários programas que o fazem acessível, eles existem de
duas formas os bancos de dados centralizados, e os descentralizados ou
distribuídos. O sistema centralizado todas as maquinas que fazem parte deste
sistema ficam em apenas um computador ou em somente um site. E os seus
integrantes são somente os dispositivos para armazenamento, os aplicativos de
gerenciamento de dados e todos os dados, mas mesmo com esse sistema sendo
centralizado, ele ainda pode ser acessado através de terminais diferentes, basta
somente se conectar a ele, e ter acesso aos dados, porem o sistema em si, fica
situado em somente um site ou máquina.

Juntamente com o avanço das tecnologias, melhorias nas áreas de bancos e


dados e tecnologia de processamento em rede, e computadores com sistemas
distribuídos em vários sites na rede, sistemas novos de banco de dados
41

apareceram, foram eles os sistemas distribuídos que foi uma nova forma para se
trabalhar com SGBDs, uma forma mais simples e mais interativa.

Segundo ÖZSU et al. (2001), “sistema de gestão de banco dados distribuídos


são conceituados como um arquivo um sistema que permite a gestão de bases de
dados distribuídas e isso transforma a distribuição de dados de forma clara para
usuários como se fosse um sistema centralizado”.

32.1 TIPOS DE SGBDs DISTRIBUÍDOS

Segundo ÖZSU e KORTH existem dois tipos de SBDD, o SBDD homogêneo


e o SBDD heterogêneo. Em todos os sites, os DBMS locais são semelhantes, ou a
estrutura do banco de dados em todos os sites é a mesma. Já o SBDD heterógeno
pode haver dois ou mais SBDD As diferenças se espalham entre sites ou na
estrutura do banco de dados também diferente.

Os SGBDs homogêneos consistem em SGBDs locais que ofereçam


interfaces idênticas ou pelo menos da mesma família (mesma empresa ou
versões diferentes) e que forneçam os mesmos serviços aos usuários em
diferentes sites (CASANOVA, 1985).

Os SGBDs distribuídos heterogêneos existem quando há necessidade de

integrar sistemas já existentes. (CASANOVA, 1985).

Quando não há homogeneidade entre os bancos de dados, é necessário


converter Entre SBDD. De um modo geral, esse mecanismo de conversão envolve
uma forma para facilitar a conversão de dados e modelos, programa usado para
converter instruções de manipulação de dados. Normalmente está heterogeneidade
é introduzida, quando Construímos um SGBD distribuído a partir de vários SGBDs
autônomos e centralizados. Na verdade, eles devem ser considerados como
42

suplementos em termos dos seguintes aspectos. Relacionamento com SGBDs


distribuídos.

Existem dois tipos de distribuição dos dados no SBDD: particionar e


replicar. Particionando, o banco de dados se separa em diversas partições
disjuntas, e cada partição é colocada em um site. Replicando, pode ser
totalmente ou parcialmente replicado. Totalmente replicado, cópias do
banco de dados inteiro são armazenados em cada site. E parcialmente
replicado, cada partição do banco de dados é armazenado em mais de um
site. (ÖZSU, 1985).

33.1 Banco de Dados Relacional

O surgimento dos Sistemas de Gerenciamento de Banco de Dados


Relacionais (SGBDRs) segundo Wade e Chamberlin (2012), pode ser considerado
um dos mais bem-sucedidos e influentes diretamente na vida das pessoas. Só
porque Edgar Frank Codd ingressou no início dos anos 70 Do IBM® Research Lab
em San José.

Em contrapartida, Darwen (2012) dizia que antes mesmo da existência de um


modelo relacional a IBM® já usava um sistema com um modelo de gerenciamento
de dados parecido com o relacional, porém com menos recursos, que tem por nome
“Terminal Business System” (TBS). TBS Contém métodos de acesso que podem ser
processados fazendo os pedidos, por exemplo, usando pares de valores-chave ou
ponteiro. O modelo fornece alguns utilitários gerais, escrito na própria linguagem do
TBS para manutenção e geração relatório. O utilitário de manutenção permitia que
os usuários realizem as seguintes operações: Adicionar, alterar e excluir registros de
arquivo. Geração de relatórios como o nome sugere, os relatórios permitem que
sejam gerados a partir dos seguintes locais, dado um arquivo você pode selecionar
o registro a ser selecionado apresentar e calcular um total, subtotal e outras formas
de projeto.
43

Porém, este modelo se diferenciava por vários motivos do que seria criado, a
partir de agora iremos citar algumas limitações que haviam no antigo sistema.

 Apenas um arquivo pode ser acessado por vez;


 Os registros no arquivo devem ser todos iguais formato;
 Esses registros não podem apontar para outros registros, isso é
mesmo em registros contidos no mesmo arquivo.
No início dos anos 1970, quando Cord estava trabalhando no laboratório No
estudo da IBM® em San Jose, ele escreveu um artigo O novo foco do
armazenamento de informações Computador chamado “A Relational Model of Data
for Large Shared Databanks”, que posteriormente foi batizado de “Modelo de Dados
Relacional”, porque é baseado na teoria matemática das relações. Também
descreve Chamado de "formas normais" e seu objetivo é eliminar Redundância e
evitar inconsistências no conteúdo armazenado no banco de dados (WADE;
CHAMBERLIN, 2012).

Através da implementação dessa ideia que mesmo após uma demora de


aproximadamente dez anos para a aceitação em larga escala por parte de
programadores de sistemas comerciais de banco de dados, se tornou um motivo de
aumento de produtividade por parte de todos os programadores que utilizavam
banco de dados, por que ao diminuir algumas estruturas fisicas de dados, como os
índices de conteúdo a criação de ponteiros e outras estruturas necessárias para
obter um melhor desempenho, então o programador precisará de um Modelo de
dados composto pelos valores da tabela.

34.1 Modelo relacional

O conceito de modelo relacional foi criado por Edgar Frank Codd em 1970,
sendo explicitado e descrito no artigo que tem por nome o "Relational Model of Data
for Large Shared Data Banks". Segundo Strawn e Strawn (2016), o modelo
relacional fornece uma clara separação de como a representação é representada, se
é de forma física ou de forma de logica da informação. Com dados sendo
processados e projetados em formas de tabelas fica a cargo do sistema o
gerenciamento dos dados, e ele define como armazenar as informações, a fim de
que os elementos que suportam o modelo relacional tornam-se importantes, é
44

traçado um plano de controle de transação, padronização de dados e definição de


dados e linguagem de consulta.

35.1 Banco de Dados em Memoria

Segundo Wang et al. (2015) a capacidade das memórias RAM (Random


Access Memory) vem aumentando consideravelmente enquanto que o preço vem
decaindo. Este fato torna possível armazenar completamente O banco de dados na
memória principal do sistema está ficando cada vez maior. Esta Desta forma, o
conceito de banco de dados in-memory torna-se cada vez mais Realidade e
tendência. A diferença entre este conceito e o modelo tradicional é os dados são
armazenados na memória principal, não no disco, o que acaba levando a nos
seguintes casos, o tempo de resposta da transação foi melhorado comparado com a
cópia tradicional baseada em disco.

Para Wang, Zhong e Kun (2015), outra função

A diferença das áreas de armazenamento tradicionais é a falta de

Operações de "entrada e saída" (E / S), causando a eliminação deste gargalo


possível. Pois, em um sistema baseado em disco, a informação passa pelo leitor,
que é o braço robótico não pode garantir o desempenho necessário operações mais
complicadas. Autores que também concordam com esta afirmação são Gupta,
Verma e Verma (2013) quando eles enfatizam armazenar informações na memória
principal, eliminando operações a velocidade de E / S melhora muito a velocidade de
leitura e gravação.

36.1 Bancos em memória

Nos últimos anos, o mercado de banco de dados tem tido várias soluções de
memória expandidas empresas famosas na indústria global por exemplo, IBM®,
Oracle®, SAP®, etc. Mas, por mais que todos suportem o padrão SQL e têm a
capacidade de manter armazenados completamente na memória, eles têm vários
recursos uns aos outros (GUPTA; VERMA; VERMA, 2013).
45

Existe uma lista de divisões entre os bancos de dados e seus diferentes


blocos, no próximo tópico, iremos enfatizar e explicar cada tópico e seus diferentes
focos.

Foco em tecnologias novas:

 VoltDb: É um sistema baseado no conceito NewSQL, desenvolvido por


Mike Stonebraker e suporta atributos ACID. VoltDB é um projeto de código
aberto focado em tempo de resposta curto entre transações, por exemplo,
aplicativos financeiros e de telecomunicações. (VOLTDB,2016).
 MongoDB: É um sistema baseado no conceito NoSQL, desenvolvido pela
empresa de publicidade DoubleClick®.O modelo que foi utilizado é o de
orientação a documentos este é um projeto open source, realiza
operações de manutenção em seu próprio idioma e consulta dados em
vez de SQL (MONGODB, 2016).

Foco em sistemas embarcados:

 SQLite: É um sistema que foca na memória dispositivos com espaço e


recursos de memória limitados, como por exemplo, smartphones e tablets.
Foi desenvolvido por Dwayne Richard Hipp sua principal característica é
um projeto de código aberto (código aberto), e não requer um servidor
externo ao dispositivo que usa o dispositivo (OWENS, 2006).

Foco comercial:

 eXtremeDB: É um sistema de memória, criado por McObject®. Sua


principal característica é propriedades ACID e a capacidade de ser usado
em sistemas embarcados usando muito pouca memória. (McObject, 2016).
 TimesTen: É um sistema de banco de dados na memória, propriedade da
Oracle® baseado em modelo relacional. Seu principal a função é: suportar
atributos ACID e tempo de resposta informações quase instantâneas
46

exigidas por aplicativos em tempo real, como aplicações de


telecomunicações (ORACLE, 2016).

O objetivo de realizar estudo com abordagens de Banco de Dados,


considerando aspectos diversos, como de desempenho em que tange a consulta de
dados e toda a população que a usa, também foi possível identificar que o sistema
de banco de dados é basicamente um sistema que guarda dados em um
computador, cujo o objetivo é registra-los e deixá-los armazenados.

O principal objetivos de um banco de dados não somente é atender as


necessidades de uma organização e de seus usuários, além é claro de armazenar
dado, contando que deve haver “flexibilidade”. Flexibilidade esta que deve existir,
porque a cada necessidade que for requisitada deverá haver outras novas soluções
para que o sistema não pare e se torne inutilizável. No próximo capitulo, iremos
abordar um tema que tem grande relação com o sistema de banco de dados, ao
criar um Sistema relacional, é preciso fazer um diagrama que tenha os passos e os
dados definidos em cada um, sendo possível fazer a organização de todo o banco,
ao fazer edições, também tem uma interação de alto nível entre os dois tópicos,
resumindo os dois caminham juntos, e agora iremos entender como eles interagem
entre si

9 UML

É notável que hoje em dia o uso da UML é essencial para o desenvolvimento


de um software e como sabemos a diversas ferramentas para orientação a objetos,
mas e as dificuldades para planejar, visualizar, imaginar um projeto complexo
inteiro? Isso certamente não é um trabalho muito fácil para ficar apenas na mente, e
com isso foram surgindo as linguagens de modelagem orientadas a objetos, existiam
vários métodos usados para modelagem, dentre eles alguns se destacavam mais
como: método de booch, OOSE (Engenharia de Software Orientada a Objetos) de
Jacobson e também a OMT (técnica de modelagem de objetos) de Rumbaugh.

E então chegamos ao grande momento que é quando foi reunido um conjunto


de ideias por Grady Booch, Ivar Jacobson e James Rumbaugh, da qual seus
métodos já estavam sendo conhecido como os principais métodos orientados a
47

objetos. Então surgiu uma grande motivação para que fosse criado uma linguagem
Unificada de modelagem.

UML (Linguagem unificada de modelagem) é um grupo de notações gráficas,


que favorece a apresentação na proposta de programas computacionais,
principalmente aos que são orientados a objetos. Essa é uma definição simples. Na
realidade para várias pessoas uma UML tem o uma representação diferente, isso
por causa de sua própria história que é feito de maneira diferente das maneiras que
é vista para compor um método de criação de um software eficiente. Como solução
grande parte a tarefa é equipar a situação para que este livro possa explicar
diferente maneiras por quais as pessoas possam utilizar uma UML.

Ainda que as linguagens gráficas de modelagem estão a um período grande,


existe uma discordância relacionada a sua função no desenvolvimento dos sistemas
operacionais. E essa discordância influenciam de modo direto como os indivíduos
olham a função da UML em si.

Na perspectiva conceitual, a UML representa uma descrição dos


conceitos de u m domínio de estudo. Aqui, não estamos falando a respeito
de elementos de software, tanto quanto estamos construindo um
vocabulário para falarmos sobre um domínio em particular. (FOWLER,
2005, p. 28).

Em um projeto de automação não é diferente o uso da UML para elaboração


de tal objetivo, pois com ele pode se ter uma visão maior sobre como ira funcionar a
ferramenta para comunicar com o usuário através do uso do Caso de Uso, assim
como também de outros UML como o de Classes e a Máquina de Estado que irá
favorecer e enriquecer o projeto como um todo para a equipe que está a
desenvolve-lo.

37.1 Características do Processo Unificado


O processo Unificado é direcionado a arquitetura, este por sua vez é a forma
da qual direcionamos o olhar perante um sistema computacional em geral. Ao
traçarmos questões relacionada a orçamento, tecnologias e também espaço de
software visando o que será traçado no novo sistema. Dando uma estrutura de um
48

software pode ser apresentada com os documentos e diagramas a seguir:,


Diagrama de Caso de Uso, Diagrama de classes e estado, que nos permite ter uma
perspectiva de uma estrutura de um software.

38.1 As fases do processo de Unificação


Existem quatro principais fases pro Processo Unificado que são: Concepção,
Elaboração, Construção e Transição. Internamente em cada uma das fases são
executadas as interações. Cada uma dessas fases poderia ter uma ou mais
interações pois não existe número determinado que limite esse número de
interações que poderia existir nelas.

Durante a fase de concepção, é olhado para o Sistema operacional, no qual o


arquivo com a mesma nomenclatura é criado, relacionando os principais riscos ou
mais aparentes, avaliamos a tecnologia que se apresenta, e é feito a detecção nas
áreas que são mais críticas a serem tratadas.

Esta fase é o período onde será feito a tentativa de escrever os Casos de Uso
do componente bem complicada. No termino dessa fase, pode ser entregue uma
sugestão, o documento de visão, a apresentação das partes mais graves do
diagrama de caso de uso do sistema. Por outra forma, uma parte, um diagrama de
classes e do máquina de estado do seguimento mais complicado do sistema. Tendo
essas informações podemos agora então com mais clareza, informar um prazo do
que será feito.

A fase da concepção tem como função uma interação para acrescentar um


melhor entendimento do software em geral para os membros que atuam no projeto.

Na fase de elaboração é a fase em que são levantados os requisitos


apresentados nas áreas mais críticas (os que foram apresentados no Casos de
Uso). Aqui consolida a fase de Concepção atribuindo valor a cada relação que sofre.
Esta fase de elaboração é repetida no decorrer do desenvolvimento em ressalta
durante todo o período do sistema.

Já aqui na fase de construção, sempre que vem em mente sobre protótipos e


nas relações com campos de um banco de dados, enquanto funções ou stored
procedures interagem com partes no Servlets ou EJB, nos encontramos na fase de
construção do Processo Unificado. Os envolvidos irão avaliar o Sistema no momento
49

em que ele esteja na versão beta. O conceito de que sempre irá ter uma versão beta
para avaliação é uma mostra de que essa fase passa por uma interação.

Com isso é nessa fase em que ocorrem os testes para que possa ser
resolvido quaisquer erros ou problemas relacionados ao projeto que está sendo
colocado para ser desenvolvido.

No momento na qual o Sistema sai de sua fase beta que permite ele ser
avaliado como uma versão de produção, é nesse momento em que se encontra na
fase de transição, onde a taxa de erros a serem encontrado deverão ser mínimos
possíveis. Se alcançarmos a aprovação da parte que está a ser analisada, o ciclo do
projeto é enfim encerrado.

39.1 Diagramas UML


Existem vários diagramas oficiais que nos são apresentados no UML 2,
iremos apresentar alguns que estarão citados e classificados na figura 1.1 abaixo.

 Embora esses tipos de diagrama sejam a maneira como muitas pessoas


encaram a UML e como eu organizei este livro, os autores da UML não
veem os diagramas como a parte central da UML. (FOWLER, 2005, p.32)

Com isso em mente, podemos ver que esses diagramas não são nenhum
pouco rígidos para o seu uso. Com muita frequência pode ser usar componentes de

Figura 1.1 Classificação dos tipos de diagrama da UML


50

um diagrama em qualquer outros sem quaisquer problemas. Por padrão um UML


tem seus próprios elementos, mas isso não é regra estabelecida, que permite certos
elementos que são desenhados para um tido de diagrama, possa passar a ser
desenhado eu um outro diagrama.

Fonte: Desenvolvendo software com UML (2004)

40.1 Início de um Diagrama


Não tem uma maneira exata que lhe fara ter o uso completo que te fará ter
acesso de todas possibilidades que há em uma UML. “Ninguém, nem mesmo seus
criadores, entende ou utiliza tudo que há na UML.” Martin Fowler (2005, p.37)

Nos é sugerido ao iniciar com o uso de diagramas, que sim podemos começar
apenas com as formas básicas dos diagramas para então após domínio deles,
começar o uso de diagramas mais avançados, fazer alguns testes, experimentar de
fato, e olhar como eles podem servir para nossas aplicações sem medo de descartar
aquilo que não eficiente para nossas necessidades em particular.

41.1 Diagrama de Classes


Se alguém chegar perto de você em um beco escuro e disser: “Psiu, quer
ver um diagrama UML?”, esse provavelmente seria um diagrama de
classes. A maioria dos diagramas UML que vejo é composta por diagramas
de classes. (FOWLER, 2005, p.52)

O diagrama de Classes conta os variados objetos que estarão nos sistemas e


muitos outros relacionamentos estáticos presentes com eles, apresenta também
propriedades e as operações de classe e as restrições que são aplicadas a forma
que esses objetos são conectados. A palavra característica é usada na UML como
um termo amplo que cobre a operação e propriedades de uma classe.

42.1 Casos de Uso


Os casos de uso é uma técnica que nos permite obter os requisitos
necessário para o sistema, ele serve para apresentar uma típica relação entre o
usuário e o sistema, fornecendo uma apresentação de como será usado.

Não maneiras padrão de descrever um diagrama de casos de uso, pois cada


um tem seu formato único conforme a sua necessidade, cada caso de uso, é uma
interação do usuário com o sistema, mostrando a interação entre eles para melhor
51

construir um cenário principal onde fornecerá o que será necessário na visão geral
que está sendo desenvolvida.

43.1 Diagrama de Estado


Diagramas de estado é conhecido por mostrar o comportamento de um
sistema. Existe muitos tipos de diagramas de estado dês de os anos 90 é uma das
mais antigas técnicas de orientação objeto e adotaram para apresentar
comportamentos. Neste diagrama você desenha um diagrama de máquina de
estado para uma classe e para mostrar um ciclo de vida de um único objeto.

Martin Fowler (2005, p.111) “máquina de estados pode mostrar apenas o que o
objeto observa ou ativa diretamente.” Quando se é falado sobre objetos os
desenvolvedores frequentemente se referem ao estado dos objetos como o
significado da combinação de todos os dados presentes no campo do objeto. O
Diagrama tem uma forma abstrata disso, basicamente implicam em diferentes
estados de reagir aos eventos.

Diagrama de Caso de Uso


52

Figura 2: Diagrama de caso de Uso

Diagrama de Classe

Figura 3: Diagrama de Classe

44.1 Conclusão
Como foi visto, a UML é sem dúvida não so uma linguagem útil mas tambem
bastante necessária no desenvolvimento de qualquer Sistema que seja abordado,
no nosso projeto em questão podemos ter uma profundidade maior da usuabilidade
dos métodos trabalhado nessa Linguagem, e como hoje como sua evolução está
ainda cada vez mais presente no crecimento da engenharia de software, mas isso é
claro que nem so de planejamento e organização está um projeto a ser desenvolvido
e com o uso da UML mas as diversas tecnologias e ferramentas pode ser da vida a
criação de muito mais ferramentas para o futuro da tecnologia, tendo isso em mente
em nosso projeto incluímos o uso de técnicas e métodos atribuídos de Sistemas
Digitais para melhor desenvolvimento de nossa aplicação na criação de uma
residência automatizada.
53
54

10 REFERÊNCIAS

ÖZSU, M. Tamer; VALDURIEZ, Patrick. Principles of Distributed Database Systems.


tradução [da 2ª ed. americana] Vandenberg D. de Souza. Rio de Janeiro : Campus, 2001.

KORTH, Henry F., Sistema de Banco de Dados, tradução [da 2ª ed.ver] Maurício
Heihachiro Galvan Abe. São Paulo : Makron Books,1995.

CASANOVA, Marco Antônio ; MOURA, Arnaldo Vieira, Princípios de Sistemas de


Gerência de Banco de Dados Distribuídos, Rio de Janeiro : Campus, 1985.

JUST, N. & LATZER, M. Governance by Algorithms: Reality Construction by Algorithmic


Selection on the Internet. Accepted manuscript forthcoming in Media, Culture & Society 2016.
Disponível em:
<http://mediachange.ch/media/pdf/publications/Just_Latzer2016_Governance_by_Algorithms_Reality
_Construction.pdf>. Acesso em: 06/03/2021

MANOVICH, Lev. O banco de dados. Revista ECO Pós | ISSN 2175-8689 | Arte,
tecnologia e mediação | V. 18 | N. 1 | 2015 | Dossiê. Disponível
em:<https://www.scribd.com/document/346379430/O-Banco-de-Dados-The-database-Levanovich>.
Acesso em 19/03/2021

WADE, B.; CHAMBERLIN, D.; IBM Relational Database Systems:The Early Years. IEEE
Annals of the History of Computing, v. 34, n. 4,p. 38-48, 2012.

GRAD, B.; BERGIN, T. J. History of Database Management Systems. IEEE


Ann. Hist. Comput., vol. 31, no. 4, p. 3 - 5, 2009.

MOLKA, Karsten; CASALE, Giuliano. Experiments or Simulation? A


Characterization of Evaluation Methods for In-Memory Databases. Acm Sigmod
Record:, South Kensington, v. 44, n. 0, p.1-9, ago. 2015.

GUPTA, M. Kumar; VERMA, V.; VERMA, M. S. In-Memory Database Systems


-A Paradigm Shift, Int. J. Eng. Trends Technol., vol. 6, no. 6, 2013.
55

MONGODB. Introduction to MongoDB. Disponível


em:https://docs.mongodb.com/manual/introduction. Acesso em 19/02/2021

ORACLE. Oracle Berkeley DB 12c. Disponível em:


<http://www.oracle.com/technetwork/database/databasetechnologies/berkeleydb/ove
rview/index.html>. Acesso em 19/03/2021

ORACLE. Oracle TimesTen In-Memory Database Overview.Disponível em:


<http://www.oracle.com/technetwork/database/databasetechnologies/timesten/overvi
ew/timesten-imdb-086887.html>. Acesso em 20/03/2021

MCOBJECT – extremeDB in-memory database systems. Disponível em:


<http://www.mcobject.com/extremedbfamily.shtml>. Acesso em 23/03/2021

OWENS, Michael, The Definitive Guide to SQLite. Estados Unidos, Apress


Inc., 2006.

VOLTDB. What Is VoltDB? Disponível em:https://www.voltdb.com/overview.


Acesso em 25/03/2021

GRAD, B.; BERGIN, T. J. History of Database Management Systems. IEEE


Ann. Hist. Comput., vol. 31, no. 4, p. 3 - 5, 2009.
56

Cechinel, Cristian; e Ferrari, Fabrício. Introdução a Algoritmos. Versão 2.2.


Disponivel em: http://www.ferrari.pro.br/home/documents/FFerrariCCechinel-
Introducao-a-algoritmos.pdf. Acesso em 29/03/2021

Castilho, M. A., Silva, F., Weingaertner, D., 2020. Apresentação do livro


Algoritmos e Estruturas de Dados 1. SBC Horizontes. ISSN: 2175-9235. Disponível
em: http://horizontes.sbc.org.br/index.php/2020/12/apresentacao-do-livro-algoritmos-
e-estruturas-de-dados-1/. Acesso em 11/04/2021

Compiladores / Regina Fedozzi. – Londrina: Editora e Distribuidora


Educacional S.A., 2018.

AHO, A. V.; SETHI R.; ULLMAN J. D. Compiladores: Princípios, técnicas e


ferramentas. 2. Ed. São Paulo: Pearson, 2007.

LAROUSSE. Grande Enciclopédia Larousse Cultural. Editora Nova Cultural,


1999.

NIKOLOPOULOS, Chris. Expert Systems – Introduction to First and Second


Generation and Hybrid Knowledge Based Systems. Marcel Dekker Inc. Press. 1997.

Kolodner, J. (1993) “Case-Based Reasoning”. San Mateo: Offices.

Chauhan, A.; Rajawat, A.; Patel, R. “Reconfiguration of FPGA for Domain


Specific Applications using Embedded System Approach”. In: International
Conference on Signal Processing Systems, 2009, pp. 438-442.
57

Dehon, A.; Hauck, S. “Reconfigurable Computing The Theory and Practice of


FPGABased Computing”. Elsevier, 2008, 945 p.

Duhem, F. Muller, F. Lorenzini, P. "Reconfiguration time overhead on field


programmable gate arrays: reduction and cost model". IET Computer & Digital
Techniques, v.6(2), 2012, pp 105-113.

“Partial Reconfiguration Flow Presentation Manual”. Capturado em:


http://www.xilinx.com/member/xup/workshops/partial-
reconfigurationflow/materials/13x/ml605/docs_pdf.zip. Abril 2021. Acesso em
28/04/2021

Mesquita, D. "Contribuições para Reconfiguração Parcial, Remota e Dinâmica


de FPGAs". Dissertação de Mestrado, Programa de Pós-Graduação em Ciência da
Computação, PUCRS, 2001, 103 p. Partial Reconfiguration Flow Workshop and
Teaching Materials”. Capturado em:
http://www.xilinx.com/university/workshops/partial-reconfiguration-flow/index.htm.
Abril 2021. Acesso em 28/04/2021

ANGEL, P. M. Introducción a la domótica; Domótica: controle e automação.


Escuela Brasileño-Argentina de Informática. EBAI. 1993.

MITCHELL, Tom M. Machine Learning. McGraw-Hill, 1997.


Web:http://www.cs.cmu.edu/afs/cs.cmu.edu/user/mitchell/ftp/tomhome.html.Acesso
em 28/04/2021
58

RUTISHAUSER, U; SCHÄFER, A. Adaptative Building Automation: A multi-


agent approach. Research project. University of Applied Science Rapperswil. Suiça.
2002a, 2002b.

BROOKS, A.R. The intelligent Room Project. In: 2th International Cognitive
Technology Conference (ICT’97). Proceedings. Aizu, Japão. 1997.

BOLZANI, C.A.M. Desenvolvimento de um simulador de controle de


dispositivos residenciais inteligentes: uma introdução aos sistemas domóticos. São
Paulo, Dissertação (mestrado), Universidade de São Paulo. 2004a.

LIPOVESTSKY, Gilles. O luxo muda de Cara. Época, Rio de Janeiro:Globo, n.


380, ago. 2005.

WERNECK, Siva Bianchi de Frontin. Domótica: União de arquitetura e


tecnologia da informação na edificação residencial urbana. Tese deMestrado em
Arquitetura, Universidade Federal do Rio de Janeiro. Riode Janeiro, 1999.

SAHÚN, José. Utilization of Gases for Domestic, Commercial and


Transportation. World Gas Conference, 22, 2003, Tokyo: Japan GasAssociation, 1
CD-ROM.

Você também pode gostar