IoT - Internet Das Coisas
IoT - Internet Das Coisas
DAS COISAS
E sp. Felippe Fernandes Silva
I NI CI AR
i ntro duç ão
Introdução
Nesta unidade você será apresentado a prototipação com microcontroladores, auxiliado pela
construção e desenvolvimento de uma calculadora binária que realizará a soma de dois números
binários. Apresentaremos o software responsável pela programação e desenvolvimento em
Arduino e em seguida, aprenderá algumas funções e palavras reservadas dessa linguagem e
verificará sua proximidade com a linguagem C. Em seguida, no capítulo 2, será verificado a relação
entre Internet das Coisas e Big Data. Entenderemos como esses dados são gerados e como é
realizada a coleta, armazenamento e processamento de informações entre Big Data e IoT. No
capítulo seguinte, passaremos uma visão geral sobre ambientes inteligentes, relacionando
aprendizagem de máquina e inteligência artificial no uso da IoT. Por fim, no último capítulo
verificaremos através de alguns estudos, sobre Internet das Coisas e sua segurança, analisando a
proteção de dispositivos e informações.
Prototipando com Microcontroladores
Neste tópico faremos um simulador de uma calculadora binária de dois dígitos. Para isso
utilizaremos alguns conceitos de arduíno e de programação, mostrando que é possível realizar a
prototipação de um microcontrolador e alguns de seus componentes.
Para que o entendimento seja mais eficaz, explicaremos primeiramente o arduíno. O Arduíno é
uma plataforma de microcontrolador que atraiu a imaginação dos entusiastas de eletrônica, pois a
sua facilidade de uso e a sua natureza aberta fazem dele uma ótima opção para qualquer um que
deseja construir um projeto eletrônico. Basicamente, permite que você conecte circuitos
eletrônicos aos seus terminais de modo que ele possa controlar dispositivos (MONK, 2018).
Sabendo que o Arduíno é a parte física do nosso desenvolvimento, necessitamos então entender o
software que é utilizado juntamente com ele. Esse software pode ser encontrado no site <
www.arduino.cc > e instalado em seu computador. Após finalizar a instalação do programa já é
possível abrir o software e iniciar a implementação. Ao abrir o programa encontra-se um arquivo
vazio, porém, ao verificar a sua pasta de instalação, é possível verificar que existem vários
exemplos já desenvolvidos dentro de uma pasta, com diversos arquivos que podem ser úteis para
o entendimento do programa e seu funcionamento.
De acordo com Monk (2018), o aplicativo do Arduino é composto por sketches , que nada mais são
do que documentos em um editor de texto. Você pode abrí-los e copiar parte de um programa para
o outro. Dessa forma, você terá opções como abrir, salvar e salvar como no menu File . Como você
acabou de criar um skecth , o mesmo estará vazio e necessita de uma implementação.
Na programação para Arduino, destaca-se que a linguagem utilizada é o C. Da mesma forma que a
programação simples, para se programar em Arduino é necessário realizar uma série de instruções
que serão lidas pelo software. Um exemplo para isso é o acender e o apagar das luzes de um led
que se encontra na posição 13 do Arduino. Para isso é necessário escrever o seguinte código:
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
O código acima faz a leitura do led posicionado na entrada 13 e o comando HIGH, indica que o led
será aceso. A segunda linha de código propõe um delay de 500 milisegundos. Esse delay é o tempo
de espera em que o Arduino leva para realizar a instrução seguinte. Na terceira linha de código
podemos verificar e deduzir que o comando LOW vai apagar o led. Portanto, esse código vai
acender e apagar um led após 500 milisegundos. Vale ressaltar que, como não há um looping, isso
ocorrerá apenas uma vez e não é um pisca-pisca .
void setup()
digitalWrite(13, HIGH);
void loop()
{ }
Ainda sobre algumas palavras reservadas ou funções embutidas temos a função pinMode . Monk
(2018), descreve que essa função define o modo de funcionamento de um pino, seja ele como
entrada ou seja ele como saída. Portanto, para o processo de acender um led, primeiro definiremos
que o pino 13 deverá ser uma saída e em seguida, fazer com que sua saída acenda o led
novamente.
void setup()
pinMode(13, OUTPUT);
void loop()
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
Como toda ferramenta de desenvolvimento de software, possuímos uma etapa para declaração de
variáveis. Essa etapa ocorre antes da função de chamada do setup. A forma como uma variável é
declarada é bem parecida com as demais linguagens, como por exemplo, para definir que o led
está no pino 13, temos que declará-lo como inteiro ( int ) e fazê-lo receber o valor 13. Como no
exemplo abaixo:
Para qualquer item que seja programado em Arduino, é necessário fornecer a taxa de comunicação
de bits entre a placa serial. Para isso existe uma função chamada Serial.begin(9600) ; Essa função é a
responsável por passar a taxa de comunicação de bits por segundo. Essa taxa, por um padrão de
início de prototipação é mantida em 9600.
Um Arduino;
Dois LEDS;
Quatro botões tácteis;
Para iniciar esse programa, precisamos realizar as declarações das variáveis. Como é um exemplo
didático, essa calculadora funcionará apenas para número entre 0 e 3. Por se tratar de uma
calculadora binária, os leds serão declarados com o tipo de dado byte . Podemos ver isso no
exemplo a seguir:
byte led1 = 9;
Isso define que os leds estão serializados nas entradas 9 e 10. Essa inicialização ocorrerá também
para os botões (que são vinculados a cada led). Ao pressionar um desses botões o led se acenderá.
Também serão atribuídos mais três botões, um deles é responsável por indicar o valor de uma
soma e o outro responsável por armazenar o valor fornecido. Temos então o seguinte:
byte botao1 = 2;
byte botao2 = 3;
Como todo programa a ser desenvolvido, é necessário iniciar os valores a serem enviados para
esses botões. Esses valores são inicializados com o valor zero, da seguinte forma:
byte valor1 = 0;
byte valor2 = 0;
Por fim, finalizando as declarações, é necessário criar vetores para que seja possível armazenar os
valores. Nesse caso, temos um vetor de dois elementos que vai nos informar o valor atual de nossa
operação e à quais leds eles correspondem; um vetor para o registro dos dados e por fim um vetor
que vai retornar o resultado das operações. Como a seguir:
Após as declarações das variáveis acima, podemos iniciar a parte lógica de nossa calculadora de
soma. Primeiramente, como foi dito anteriormente, é necessário chamar uma função setup e
utilizar a função Serial.begin (9600) que já foi explicada anteriormente. Feito isso, precisamos
instanciar os nossos dois leds, informando que são dados de saída e que iniciarão apagados. O
mesmo será feito para os quatro botões(Botão led 1, botão led 2, botão soma e botão de registro).
O código dessa parte é representado da seguinte forma:
void setup() {
Serial.begin(9600);
delay(500);
pinMode(led2, OUTPUT);
digitalWrite(led2, LOW);
//Intanciando os botoes
pinMode(botao1, INPUT); //Definindo botao 1, como entrada "INPUT"
digitalWrite(botao1, HIGH);
pinMode(botao2, INPUT);
digitalWrite(botao2, HIGH);
pinMode(botaoReg, INPUT);
digitalWrite(botaoReg, HIGH);
pinMode(botaoSoma, INPUT);
digitalWrite(botaoSoma, HIGH);
Ainda dentro da função setup que é nossa função principal, teremos uma função chamada zera() .
Essa função é responsável por zerar todos os valores do dos vetores de led. Sua chamada é bem
simples, realizada após a última linha de código acima, por meio do seguinte comando:
zera();
Como dito acima, a função zera() é a responsável por zerar todos os valores dos leds e dos vetores
atuais, apagando seus leds como se estivessem iniciando o programa novamente. A
implementação dessa função é realizada da seguinte forma:
void zera() /*Funçao zera o vetor atual, apaga os leds e os valores de cada led*/
atual[i] = 0;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
valor1 = 0;
valor2 = 0;
void loop() {
if(digitalRead(botao1) == LOW){
torna-se 0... */
delay(300);
valor2 = !valor2;
atual[0] = valor2;
digitalWrite(led2, valor2);
delay(300);
Deve-se aplicar o mesmo para os botões que armazenam os valores, como o botão que registra um
valor informado e o botão soma. Dessa forma, completando a função de loop, temos o seguinte
trecho de código:
if(digitalRead(botaoReg) == LOW){
reg[i] = atual[i];
zera();
delay(500);
}
if(digitalRead(botaoSoma) == LOW){
delay(500);
Teremos agora o trecho mais importante de nosso programa, onde toda a lógica da calculadora
pode ser encontrada. A função soma nada mais será do que a soma de dois valores que resultem
no máximo o valor 3. Justificando, para que o código não se torne repetitivo, escolheu-se esse valor
e para que a lógica não ficasse tão complexa. Para a parte lógica dessa soma temos o clássico “vai
um”. Isso se aplica quando a soma de dois valores são maiores que a capacidade de
armazenamento aumentando em uma unidade a soma total de dois valores. Quando tratamos de
números binários deveremos lembrar que a soma de 1+1 é 10. Tratando essa parte lógica então,
temos o seguinte código para a função soma:
void soma(){
byte vaiUm = 0;
res[i] = 1;
vaiUm = 0;
continue;
res[i] = 0;
vaiUm = 1;
continue;
res[i] = 0;
vaiUm = 1;
continue;
res[i] = 1;
vaiUm = 1;
continue;
res[i] = 0;
continue;
res[i] = 1;
continue;
res[i] = 1;
continue;
res[i] = 0;
vaiUm = 1;
continue;
Para esse caso utilizamos vários conceitos básicos de programação, como as estruturas
condicionais if e for. Por fim, devemos então mostrar os resultados para o usuário que realizou as
operações. O trecho de código fica da seguinte forma:
void resultado(){
digitalWrite(led1, res[3]);
valor1 = res[1];
atual[1] = res[1];
digitalWrite(led2, res[0]);
valor2 = res[0];
atual[0] = res[0];
a) Calculadora
b) Alarmes de incêndio
c) Alarmes de carro
d) Elevadores
e) Todas as alternativas anteriores.
Internet das Coisas e Big Data
Neste tópico entenderemos melhor o que é Big Data e como podemos relacioná-la com a Internet
das Coisas, tratando as suas fontes de geração e quais seus tipos de dados e falando sobre a visão
geral de uma coleta, armazenamento e processamento de dados.
Analisando dessa forma vemos a importância que a IoT tem com a Big Data. Taurion (2013) afirma
que os imensos amontoados de dados provêm das mais diversas fontes, pois, além dos dados
gerados pelos sistemas transacionais das empresas, temos a imensidão de dados gerados pelos
objetos na Internet das Coisas, como sensores e câmeras, e os gerados nas mídias sociais via PCs,
smartphones e tablets. Integram o chamado Big Data o conteúdo de 640 milhões de sites, dados de
seis bilhões de celulares e os três bilhões de comentários feitos diariamente no Facebook.
Variedade porque estamos tratando tanto de dados textuais estruturados quanto não estruturados
como fotos, vídeos, e-mails e tuítes. E velocidade, porque muitas vezes precisamos responder aos
eventos quase que em tempo real. Ou seja, estamos falando de criação e tratamento de dados em
volumes massivos.
Podemos concluir então que Big Data e IoT estão relacionados diretamente entre si e com o
crescimento da quantidade de volume de dados e tecnologia, essa quantidade de informações
tende a crescer. Dessa forma, a capacidade massiva de armazenamento de dados deve
acompanhar esse crescimento e obviamente, crescer comitantemente.
Portanto, essas três características fundamentais estão relacionadas a Big Data: volume, variedade
e velocidade. Essas características são descritas em:
Para se coletar dados referentes a Big Data, é necessário realizar uma análise e um estudo que nos
informará a quantidade do fluxo de dados que é produzida por uma pessoa e suas respectivas
informações. Frank et al (2013), realiza um estudo comportamental de pessoas na rede social
Twitter, por exemplo, que conclui que os estadunidenses são mais felizes quando estão longe de
suas casas. Por outro lado Goldstein e Winkelmayer (2015), relata que estudos de Big Data devem
ser realizados utilizando os dados de sistemas de saúde. Apontando como exemplo, caso de
Taiwan, onde há um sistema universal de saúde, que abrange a 99% da população. E assim, ser
possível definir políticas públicas e comportamentos de doenças.
Para complementar a análise realizada, existem alguns aplicativos que auxiliam a coleta desses
dados. Como por exemplo um projeto que trata de um aplicativo que coleta informações de
buracos de ruas da cidade de Boston, EUA por meio do uso de acelerômetro e GPS, tecnologias
presentes apenas em smartphone. Os dados que são coletados são enviados ao governo
municipal, para que possa ser realizado, futuramente, o conserto das ruas que apresentam buracos
(Street Bump, 2015).
Sobre o armazenamento de dados, Taurion (2013) afirma que o volume chama atenção, mas é uma
variável bem subjetiva, pois os limites de armazenamento e tratamento de dados aumentam com a
rápida evolução tecnológica. Grandes corporações armazenam múltiplos petabytes e mesmo
pequenas e médias empresas trabalham com dezenas de terabytes de dados. Com esse volume
absurdo de dados, as informações que encontramos armazenadas em vários lugares do mundo
(incluindo empresas, páginas pessoais e etc) tendem a aumentar exponencialmente.
Por fim,o processamento dos dados pode ser auxiliado pelas tecnologias que sustentam Big Data e
essas informações analisadas sob duas óticas: as envolvidas com analytics, tendo Hadoop e
MapReduce como nomes principais e as tecnologias de infraestrutura, que armazenam e
processam os petabytes de dados. Neste aspecto, destacam-se os bancos de dados NoSQL (not
only SQL). Essas tecnologias são utilizadas pois Big Data é a simples constatação prática de que o
imenso volume de dados gerados a cada dia excede a capacidade das tecnologias atuais de os
tratarem adequadamente (TAURION, 2013).
Desde que os computadores foram inventados, sempre nos perguntamos se eles poderiam ser
feitos para aprender. Se pudéssemos compreender como programá-los para aprender e melhorar
automaticamente com experiência, o impacto seria dramático (LOPEZ, 2010).
Um conceito simples de aprendizado de máquina pode ser explicado quando um ambiente fornece
alguma informação ao elemento de aprendizagem. Esse elemento de aprendizagem utiliza esta
informação para melhorar em um base de conhecimentos e finalmente este processo vai
melhorando seu desempenho perfeitamente até encontrar uma solução melhor do que a proposta
(Haykin, 2001). Basicamente, há uma relação entre ambiente, elemento de aprendizado, base de
conhecimentos e performance.
Por outro lado, além da aprendizagem de máquina é necessário explicar também a inteligência
artificial. Teixeira (2014) explica que a inteligência artificial é uma tecnologia que se encontra entre a
ciência e a arte. Seu objetivo é construir máquinas que, ao resolver problemas, consigam também
pensar. Um bom exemplo disso é a máquina de jogar xadrez. Nesse contexto, existem três formas
de construir um dispositivo que jogue xadrez: fazer com que o ser humano imite uma máquina;
construir uma máquina que imite um ser humano ou conseguir que uma máquina ultrapasse a
mente humana.
Uma “learning machine” aprende com dados e quanto mais dados ele tiver, mais o algoritmo
aprende. Cria-se, portanto, um círculo virtuoso. Big Data é um passo significativo em busca da
computação cognitiva. O exemplo do Watson da IBM é emblemático dessa tendência (Taurion,
2013).
De acordo com Taurion (2013), com Big Data as fontes de informação se ampliam
consideravelmente. Com essas informações fornecidas, podemos alcançar o próprio usuário que
compartilhou seus dados. Esses dados podem ser obtidos, desde a exposição dos dados via rede
social, até cliques e visitas a determinadas páginas da web. É possível coletar dados e informações
armazenadas pelo próprio navegador utilizado e por meio dele identificar preferências de compra e
hábitos comuns do usuário. Como por exemplo a Amazon. Ela, com seu leitor eletrônico Kindle,
consegue obter informações sobre os hábitos de cada usuário. Ao ligá-lo ele envia para Amazon,
entre outras informações, o livro que está sendo lido, quantas páginas foram lidas, o tempo
consumido nesta leitura e os parágrafos sublinhados.
De um modo geral, podemos entender que nossos dispositivos IoT conseguem captar um grande
volume de dados e, por meio dessa coleta de dados, é possível realizar uma filtragem e começar a
utilizar as informações coletadas a nosso favor. Como por exemplo, quando você busca uma
passagem aérea em uma companhia de vôo. Ao finalizar essa simples busca, seu navegador
entende que você está a procura de passagens e, dessa forma, começará a indicar propagandas
com descontos e promoções de passagem. Da mesma forma, como citado acima, a Amazon utiliza
de seu Kindle para entender as preferências de leitura de seus usuários e, a partir disso, relacionar
tipo de leitura parecidos. Isso pode ser vinculado com o e-mail do usuário e ao revelar uma
promoção, indicar gêneros parecidos para melhorar sua venda. Podemos verificar também que,
isso auxilia no processo de vendas de uma empresa, portanto, é um ramo crescente na tecnologia
da informação e inclusive no marketing digital.
ref
Reflitalita
Você já pensou no poder que a inteligência artificial e a aprendizagem de máquina chegaram? As pesquisas
realizadas para essa área da tecnologia estão crescentes e, muitas vezes faz o que antes era visto apenas em
filmes, tornar-se real. Alguns robôs já são capazes de simular sentimentos com base na tonalidade de voz ou
descobrir o seu humor por meio das características físicas (principalmente faciais) de um ser humano. Convido-
lhe a refletir sobre o seguinte tema: Um dia, os robôs imitarão os humanos em uma sociedade?
A C ESSA R
ati v i dade
Atividade
Sobre aprendizagem de máquina e de acordo com o que foi estudado sobre o tema, é correto afirmar que:
Muitas das soluções que vêm sendo desenvolvidas para melhorar o desempenho dos atuais
sistemas de segurança para cenários como a IoT baseiam-se em sistemas de processamento por
fluxos para grandes massas de dados. Além do monitoramento de dados das camadas de rede e de
transporte na IoT, existem propostas que buscam antecipar ataques por meio de dados não
estruturados como aqueles divulgados por seres humanos em redes sociais online . Nesse caso, o
monitoramento é feito diretamente na camada de aplicação. A justificativa para utilizar redes
sociais online em sistemas de segurança vem principalmente do fato de que, nesses ambientes,
usuários tendem a propagar mensagens consideradas relevantes, além de serem influenciados por
outros usuários com muitos seguidores (Batista e Kaminski, 2017).
Apesar do avanço que vem sendo realizado em segurança da informação para IoT, diversos
desafios de pesquisa ainda precisam ser resolvidos, como a redução de falsos positivos gerados
pelos sistemas de alerta, a busca pelos melhores algoritmos de aprendizado de máquina para
detecção de novos ataques e o desenvolvimento de técnicas mais eficientes para a correlação de
dados heterogêneos (Batista e Kaminski, 2017).
a) Phishing.
b) Rollback.
c) Ataque DDOS.
d) Ransomware.
e) Cavalo de Troia.
i n di c a çõ e s
Material Complementar
LIVRO
Fundação
Isaac Asimov
Editora: Editora Aleph; Edição: 1ª
ISBN: 8576570661
Comentário: Recomenda-se esse livro em uma visão da literatura da
ficção científica. Esse livro é indicado em várias fontes de
conhecimento para que seja criada uma visão abrangente e ampla de
inteligência artificial, estimulando o pensamento futurístico de onde as
máquinas podem chegar. Essa reflexão exposta no livro, faz com que
máquinas e humanos vivam em uma única sociedade, perguntando-se,
até quando as máquinas seguirão obedientes aos humanos?
FILME
Eu, robô
Ano: 2004
Comentário: O filme indicado se chama “Eu, robô” e conta com o
renomado ator Will Smith. Esse filme se passa em 2035 e pode-se
verificar que robôs e humanos vivem em uma sociedade onde robôs
são subordinados as ordens humanas. Uma das leis da robótica
descrita pelo filme é que os robôs são impedidos de fazer mal à um
humano. Eis que essa lei é quebrada por um robô e a investigação
começa a ocorrer. O filme foi indicado em 2005 para o Oscar de
Melhores Efeitos Visuais.
Para conhecer mais sobre o filme, acesse o trailer disponível.
TRAI L ER
co n cl u s ã o
Conclusão
Concluímos então o conteúdo de Internet das Coisas. Nessa unidade verificamos algumas práticas
de programação e analisamos o potencial da Big Data e sua utilização na aprendizagem de
máquina e na Inteligência Artificial. Neste capítulo você teve a oportunidade de:
r e f e r ê n ci a s
Referências Bibliográficas
CONEGLIAN, Caio Saraiva; SEGUNDO, José Eduardo Santarem; SANT'ANA, Ricardo César Gonçalves.
Big Data: fatores potencialmente discriminatórios em análise de dados . Em Questão, v. 23, n.
1, p. 62-86, 2017.
EGIDIO, Lucas; UKEI, T. Internet das Coisas (IoT): Uma análise de aplicabilidade . In: 1º WSEE-
Workshop de Sistemas Embarcados da ES670. 2015.
FRANK, Morgan R. et al. Happiness and the patterns of life: A study of geolocated tweets .
Scientific reports, London, v. 3, Set. 2013.
HAYKIN, Simon. Redes Neurais: Princípios e prática . Porto Alegre RS:Bookman, 2001.
LOPEZ, Alvaro Gustavo Talavera. Controle Preditivo com Aprendizado por Reforço para
Produção de Óleo em Poços Inteligentes . 2010. Tese de Doutorado. PUC-Rio.
MACAFFE E Brynjolfsson: MCAFEE, Andrew; BRYNJOLFSSON, Erik. Big Data: the management
revolution . Harvard Business Review, Brighton, v. 90, n. 10, p. 61-67, oct. 2012.
Monk, Simon. Programação com Arduino: Começando com Sketches . Bookman. 2018.
STREET BUMP. About street bump . Boston, 2015. Disponível em: <
http://www.streetbump.org/about >. Acesso em: 24 abr. 2019.
TEIXEIRA, João F. Inteligência artificial . Pia Sociedade de São Paulo-Editora Paulus, 2014.
TOLE, A. A. Big Data Challenges. Database Systems Journal , v. IV, n. 3, 2013, p.31-40.
VIEIRA, Marcos Rodrigues et al. Bancos de Dados NoSQL: conceitos, ferramentas, linguagens e
estudos de casos no contexto de Big Data . Simpósio Brasileiro de Bancos de Dados, 2012.
IMPRIMIR