Internet Das Coisas Cloadoaldo IDE ARDUINO
Internet Das Coisas Cloadoaldo IDE ARDUINO
Internet Das Coisas Cloadoaldo IDE ARDUINO
4 Projeto A 25
4.1 Materiais . . . . . . . . . . . . . . . . . . . . . 25
4.2 Implementação . . . . . . . . . . . . . . . . . . 26
4.2.1 Gateway . . . . . . . . . . . . . . . . . . 26
4.2.2 Nó com sensor DTH11 . . . . . . . . . . 29
4.2.3 Controlador . . . . . . . . . . . . . . . . 31
5 Projeto B 35
5.1 Materiais . . . . . . . . . . . . . . . . . . . . . 35
5.2 Implementação . . . . . . . . . . . . . . . . . . 36
5.2.1 Gateway . . . . . . . . . . . . . . . . . . 36
5.2.2 Nó com sensor DTH11 . . . . . . . . . . 39
5.2.3 Nó com sensor LDR . . . . . . . . . . . 41
5.2.4 Controlador . . . . . . . . . . . . . . . . 42
SUMÁRIO v
6 Projeto C 45
6.1 Materiais . . . . . . . . . . . . . . . . . . . . . 45
6.2 Implementação . . . . . . . . . . . . . . . . . . 46
6.2.1 Gateway . . . . . . . . . . . . . . . . . . 46
6.2.2 Nó com sensor DTH11 e LDR . . . . . . 49
6.2.3 Nó com atuador LED . . . . . . . . . . . 52
6.2.4 Controlador . . . . . . . . . . . . . . . . 54
vi SUMÁRIO
Capı́tulo 1
Materiais e Softwares
Utilizados
2.1 Arduino
Arduino 1 é uma plataforma de prototipagem de código
aberto baseada na fácil utilização do software e hardware. As
placas Arduino são capazes de efetuarem leitura de uma en-
trada (sensores) e transformar em uma de saı́da (Atuadores).
O projeto Arduino nasceu no Ivrea Interaction Design Ins-
titute como uma ferramenta fácil para prototipagem rápida,
destinado a estudantes sem conhecimento aprofundado em
eletrônica e programação.
A plataforma Arduino possui uma IDE para a programação
e para gravar códigos na placa, a IDE está possui suporte a
1
https://www.arduino.cc/en/Guide/Introduction
4 Materiais e Softwares Utilizados
3
https://www.arduino.cc/en/Reference/SPI
6 Materiais e Softwares Utilizados
2.3.1 DTH11
O DTH11 6 é um sensor de baixo custo para a medição de
temperatura e umidade do ambiente. Sua faixa de medição de
temperatura vai de 0° a 50° Celsius, com 2% de margem de
erro. Já a medição de umidade pode variar de 20% até 90%
com precisão de 5%.
O sensor possui 4 pinos: um pino para o GND(ground), um
para a alimentação(5V), um pino para envio dos dados que é
conectado a uma entrada digital do Arduino e um pino que
não é utilizado.
2.3.2 LDR
O LDR (do inglês, Light Dependent Resistor), ou Resistor
dependente de Luz, é uma fotorresistência, ou seja, um resistor
cuja sua resistência varia de acordo com a intensidade da luz
que incidir sobre ele.
6
https://learn.adafruit.com/dht
2.3 Sensores e Atuadores 9
2.3.3 Relé
O relé é um dispositivo eletromecânico capaz de desligar
ou ligar outros dispositivos. Basicamente, o relé é acionado
quando uma corrente elétrica passa a percorrer as espiras da
bobina do mesmo, criando assim a um campo magnético que
10 Materiais e Softwares Utilizados
2.3.5 LED
Light Emitting Diode(LED), ou diodo emissor de luz, é
utilizado para emissão de luz em locais onde lampadas não
são viáveis, por exemplo em produtos da microeletrônica como
7
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-
sensor/
2.4 Protoboard 11
2.4 Protoboard
É uma placa com uma matriz de furos e conexões condu-
toras utilizadas para a prototipação de circuitos eletrônicos.
A Figura 2.9 ilustra uma protoboard. Essa placa tipica-
mente possui trilhas conectas na vertical que possibilitam a
ligação entre componentes e trilhas isoladas na horizontal.
12 Materiais e Softwares Utilizados
Infraestrutura da
Internet das Coisas
3.1.2 O rádio
Com a necessidade de comunicação e coleta de dados dos
sensores e devido a possı́vel distancia entre eles, é necessário
uma conexão sem fio. Para tais fins, é utilizado um pequeno
18 Infraestrutura da Internet das Coisas
3.1.3 Software
3.2.4 Controlador
O controlador pode realizar as seguintes funções:
1
http://www.mysensors.org/controller/pimatic
24 Infraestrutura da Internet das Coisas
Capı́tulo 4
Projeto A
4.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:
• 2 Arduinos;
• 2 Rádios RF;
• Jumpers.
26 Projeto A
4.2 Implementação
Para a implementação desta atividade é necessário a cons-
trução dos seguintes nós.
4.2.1 Gateway
Esquemático
Código
45 v a l i s t args ;
46 v a s t a r t ( a r g s , fmt ) ;
47 v s n p r i n t f P ( s e r i a l B u f f e r , MAX SEND LENGTH, fmt , a r g s ) ;
48 v a e nd ( a r g s ) ;
49 Serial . print ( serialBuffer ) ;
50 }
51
52
53 void setup ( )
54 {
55 gw . b e g i n ( incomingMessage , 0 , t r u e , 0 ) ;
56
57 setupGateway (INCLUSION MODE PIN , INCLUSION MODE TIME,
ou tp ut ) ;
58
59 PCintPort : : a t t a c h I n t e r r u p t ( p i n I n c l u s i o n ,
s t a r t I n c l u s i o n I n t e r r u p t , RISING ) ;
60
61 s e r i a l (PSTR( ” 0 ; 0 ; % d ; 0 ; % d ; Gateway s t a r t u p c o m p l e t e . \ n” ) ,
C INTERNAL, I GATEWAY READY) ;
62 }
63
64 void loop ( )
65 {
66 gw . p r o c e s s ( ) ;
67
68 checkButtonTriggeredInclusion () ;
69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }
4.2 Implementação 29
Esquemático
Código
47 S e r i a l . p r i n t ( ”T : ” ) ;
48 S e r i a l . p r i n t l n ( temperature ) ;
49 }
50
51 f l o a t humidity = dht . getHumidity ( ) ;
52 i f ( i s n a n ( humidity ) ) {
53 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
54 } e l s e i f ( humidity != lastHum ) {
55 lastHum = humidity ;
56 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
57 S e r i a l . p r i n t ( ”H: ” ) ;
58 S e r i a l . p r i n t l n ( humidity ) ;
59 }
60
61 gw . s l e e p (SLEEP TIME) ;
62 }
4.2.3 Controlador
Arquivo de configuração do Pimatic
25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” i d ” : ”DHT11 1” ,
31 ”name” : ” S e n s o r Temperatura ” ,
32 ” c l a s s ” : ”MySensorsDHT” ,
33 ” nodeid ” : 2 ,
34 ” sensorid ” : [
35 0,
36 1
37 ]
38 }
39
40 ],
41 ” rules ” : [
42
43 ],
44 ” pages ” : [
45 {
46 ” id ” : ” favourite ” ,
47 ”name” : ” F a v o u r i t e s ” ,
48 ” devices ” : [ ]
49 }
50 ],
51 ” groups ” : [
52
53 ],
54 ” users ” : [
55 {
56 ” username ” : ” admin ” ,
57 ” password ” : ” admin ” ,
58 ” r o l e ” : ” admin ”
59 }
60 ],
61 ” roles ”: [
62 {
63 ”name” : ” admin ” ,
64 ” permissions ” : {
65 ” pages ” : ” write ” ,
66 ” rules ” : ” write ” ,
67 ” variables ” : ” write ” ,
68 ” messages ” : ” w r i t e ” ,
69 ” events ” : ” write ” ,
70 ” devices ” : ” write ” ,
71 ” groups ” : ” write ” ,
72 ” plugins ” : ” write ” ,
73 ” updates ” : ” write ” ,
74 ” database ” : ” write ” ,
75 ” config ” : ” write ” ,
76 ” c o n t r o l D e v i c e s ” : true ,
4.2 Implementação 33
77 ” r e s t a r t ” : true
78 }
79 }
80 ]
81 }
34 Projeto A
Capı́tulo 5
Projeto B
5.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:
• 3 Arduinos;
• 3 Rádios RF;
• Jumpers.
36 Projeto B
5.2 Implementação
5.2.1 Gateway
Esquemático
Código
45 v a l i s t args ;
46 v a s t a r t ( a r g s , fmt ) ;
47 v s n p r i n t f P ( s e r i a l B u f f e r , MAX SEND LENGTH, fmt , a r g s ) ;
48 v a e nd ( a r g s ) ;
49 Serial . print ( serialBuffer ) ;
50 }
51
52
53 void setup ( )
54 {
55 gw . b e g i n ( incomingMessage , 0 , t r u e , 0 ) ;
56
57 setupGateway (INCLUSION MODE PIN , INCLUSION MODE TIME,
ou tp ut ) ;
58
59 PCintPort : : a t t a c h I n t e r r u p t ( p i n I n c l u s i o n ,
s t a r t I n c l u s i o n I n t e r r u p t , RISING ) ;
60
61 s e r i a l (PSTR( ” 0 ; 0 ; % d ; 0 ; % d ; Gateway s t a r t u p c o m p l e t e . \ n” ) ,
C INTERNAL, I GATEWAY READY) ;
62 }
63
64 void loop ( )
65 {
66 gw . p r o c e s s ( ) ;
67
68 checkButtonTriggeredInclusion () ;
69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }
5.2 Implementação 39
Esquemático
Código
47 S e r i a l . p r i n t ( ”T : ” ) ;
48 S e r i a l . p r i n t l n ( temperature ) ;
49 }
50
51 f l o a t humidity = dht . getHumidity ( ) ;
52 i f ( i s n a n ( humidity ) ) {
53 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
54 } e l s e i f ( humidity != lastHum ) {
55 lastHum = humidity ;
56 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
57 S e r i a l . p r i n t ( ”H: ” ) ;
58 S e r i a l . p r i n t l n ( humidity ) ;
59 }
60
61 gw . s l e e p (SLEEP TIME) ;
62 }
Código
5.2.4 Controlador
Arquivo de configuração do Pimatic
Listing 5.4: json.conf
5.2 Implementação 43
1 {
2 ” // ” : ” P l e a s e o n l y change t h i s f i l e when p i m a t i c i s NOT
running , o t h e r w i s e p i m a t i c w i l l o v e r w r i t e your c h a n g e s . ”
,
3 ” settings ” : {
4 ” httpServer ” : {
5 ” enabled ” : true ,
6 ” p o r t ” : 8080
7 },
8 ” database ” : {
9 }
10 },
11 ” plugins ” : [
12 {
13 ” plugin ” : ” cron ”
14 },
15 {
16 ” p l u g i n ” : ” mysensors ” ,
17 ” driver ” : ” serialport ” ,
18 ” protocols ” : ” 1.4.1 ” ,
19 ” driverOptions ” : {
20 ” s e r i a l D e v i c e ” : ” / dev /ttyACM0” ,
21 ” b a u d r a t e ” : 115200
22 }
23 },
24 {
25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” id ” : ” Light 1 ” ,
31 ”name” : ” S e n s o r LDR” ,
32 ” c l a s s ” : ” MySensorsLight ” ,
33 ” nodeid ” : 3 ,
34 ” sensorid ” : 1
35 },
36 {
37 ” i d ” : ”DHT11 1” ,
38 ”name” : ” S e n s o r Temperatura ” ,
39 ” c l a s s ” : ”MySensorsDHT” ,
40 ” nodeid ” : 2 ,
41 ” sensorid ” : [
42 0,
43 1
44 ]
45 }
46
47 ],
48 ” rules ” : [
49
50 ],
44 Projeto B
51 ” pages ” : [
52 {
53 ” id ” : ” favourite ” ,
54 ”name” : ” F a v o u r i t e s ” ,
55 ” devices ” : [ ]
56 }
57 ],
58 ” groups ” : [
59
60 ],
61 ” users ” : [
62 {
63 ” username ” : ” admin ” ,
64 ” password ” : ” admin ” ,
65 ” r o l e ” : ” admin ”
66 }
67 ],
68 ” roles ”: [
69 {
70 ”name” : ” admin ” ,
71 ” permissions ” : {
72 ” pages ” : ” write ” ,
73 ” rules ” : ” write ” ,
74 ” variables ” : ” write ” ,
75 ” messages ” : ” w r i t e ” ,
76 ” events ” : ” write ” ,
77 ” devices ” : ” write ” ,
78 ” groups ” : ” write ” ,
79 ” plugins ” : ” write ” ,
80 ” updates ” : ” write ” ,
81 ” database ” : ” write ” ,
82 ” config ” : ” write ” ,
83 ” c o n t r o l D e v i c e s ” : true ,
84 ” r e s t a r t ” : true
85 }
86 }
87 ]
88 }
Capı́tulo 6
Projeto C
6.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:
• 3 Arduinos;
• LED;
• 3 Rádios nRF24L01;
• Jumpers;
• Protoboard.
6.2 Implementação
6.2.1 Gateway
Esquemático
6.2 Implementação 47
Código
69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }
Esquemático
50 Projeto C
Código
20 f l o a t lastTemp ;
21 f l o a t lastHum ;
22 boolean metric = true ;
23 MyMessage msgHum(CHILD ID HUM , V HUM) ;
24 MyMessage msgTemp (CHILD ID TEMP , V TEMP) ;
25 int node id = 2;
26
27 void setup ( )
28 {
29 gw . b e g i n (NULL, n o d e i d ) ;
30
31 gw . s e n d S k e t c h I n f o ( ” L i g h t S e n s o r ” , ” 1 . 0 ” ) ;
32 gw . p r e s e n t ( CHILD ID LIGHT , S LIGHT LEVEL ) ;
33
34 dht . s e t u p (HUMIDITY SENSOR DIGITAL PIN) ;
35
36 // Send t h e S k e t c h V e r s i o n I n f o r m a t i o n t o t h e Gateway
37 gw . s e n d S k e t c h I n f o ( ” Humidity ” , ” 1 . 0 ” ) ;
38
39 // R e g i s t e r a l l s e n s o r s t o gw ( t h e y w i l l be c r e a t e d a s
child devices )
40 gw . p r e s e n t (CHILD ID HUM , S HUM) ;
41 gw . p r e s e n t (CHILD ID TEMP , S TEMP) ;
42
43 m e t r i c = gw . g e t C o n f i g ( ) . i s M e t r i c ;
44
45
46 }
47
48 void loop ( )
49 {
50
51 i n t l i g h t L e v e l = (1023 − analogRead (LIGHT SENSOR ANALOG PIN) )
/10.23;
52 Serial . println ( lightLevel ) ;
53 i f ( l i g h t L e v e l != l a s t L i g h t L e v e l ) {
54 gw . send ( msg . s e t ( l i g h t L e v e l ) ) ;
55 lastLightLevel = lightLevel ;
56 }
57
58 d e l a y ( dht . getMinimumSamplingPeriod ( ) ) ;
59
60 f l o a t t e m p e r a t u r e = dht . getTemperat ure ( ) ;
61 i f ( isnan ( temperature ) ) {
62 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g t e m p e r a t u r e from DHT” ) ;
63 } e l s e i f ( t e m p e r a t u r e != lastTemp ) {
64 lastTemp = t e m p e r a t u r e ;
65 i f ( ! metric ) {
66 t e m p e r a t u r e = dht . t o F a h r e n h e i t ( t e m p e r a t u r e ) ;
67 }
68 gw . send ( msgTemp . s e t ( t e m p e r a t u r e , 1 ) ) ;
69 S e r i a l . p r i n t ( ”T : ” ) ;
52 Projeto C
70 S e r i a l . p r i n t l n ( temperature ) ;
71 }
72
73 f l o a t humidity = dht . getHumidity ( ) ;
74 i f ( i s n a n ( humidity ) ) {
75 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
76 } e l s e i f ( humidity != lastHum ) {
77 lastHum = humidity ;
78 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
79 S e r i a l . p r i n t ( ”H: ” ) ;
80 S e r i a l . p r i n t l n ( humidity ) ;
81 }
82
83 gw . s l e e p (SLEEP TIME) ; // s l e e p a b i t
84 }
Código
44 }
45
46 v o i d incomingMessage ( c o n s t MyMessage &message ) {
47 // We o n l y e x p e c t one t y p e o f message from c o n t r o l l e r . But
we b e t t e r c h e c k anyway .
48 i f ( message . t y p e==V LIGHT) {
49 // Change r e l a y s t a t e
50 d i g i t a l W r i t e ( message . s e n s o r −1+RELAY 1 , message . g e t B o o l ( )
?RELAY ON: RELAY OFF) ;
51 // S t o r e s t a t e i n eeprom
52 gw . s a v e S t a t e ( message . s e n s o r , message . g e t B o o l ( ) ) ;
53 // Write some debug i n f o
54 S e r i a l . p r i n t ( ” Incoming change f o r s e n s o r : ” ) ;
55 S e r i a l . p r i n t ( message . s e n s o r ) ;
56 S e r i a l . p r i n t ( ” , New s t a t u s : ” ) ;
57 S e r i a l . p r i n t l n ( message . g e t B o o l ( ) ) ;
58 }
59 }
6.2.4 Controlador
Arquivo de configuração do Pimatic
23 },
24 {
25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” id ” : ” Light 1 ” ,
31 ”name” : ” S e n s o r LDR” ,
32 ” c l a s s ” : ” MySensorsLight ” ,
33 ” nodeid ” : 2 ,
34 ” sensorid ” : 3
35 },
36 {
37 ” i d ” : ” Switch LED ” ,
38 ”name” : ”LED” ,
39 ” c l a s s ” : ” MySensorsSwitch ” ,
40 ” nodeid ” : 3 ,
41 ” sensorid ” : 1
42 },
43 {
44 ” i d ” : ”DHT11 1” ,
45 ”name” : ” S e n s o r Temperatura 01 ” ,
46 ” c l a s s ” : ”MySensorsDHT” ,
47 ” nodeid ” : 2 ,
48 ” sensorid ” : [
49 0,
50 1
51 ]
52 }
53
54 ],
55 ” rules ” : [
56
57 ],
58 ” pages ” : [
59 {
60 ” id ” : ” favourite ” ,
61 ”name” : ” F a v o u r i t e s ” ,
62 ” devices ” : [ ]
63 }
64 ],
65 ” groups ” : [
66
67 ],
68 ” users ” : [
69 {
70 ” username ” : ” admin ” ,
71 ” password ” : ” admin ” ,
72 ” r o l e ” : ” admin ”
73 }
74 ],
56 Projeto C
75 ” roles ”: [
76 {
77 ”name” : ” admin ” ,
78 ” permissions ” : {
79 ” pages ” : ” write ” ,
80 ” rules ” : ” write ” ,
81 ” variables ” : ” write ” ,
82 ” messages ” : ” w r i t e ” ,
83 ” events ” : ” write ” ,
84 ” devices ” : ” write ” ,
85 ” groups ” : ” write ” ,
86 ” plugins ” : ” write ” ,
87 ” updates ” : ” write ” ,
88 ” database ” : ” write ” ,
89 ” config ” : ” write ” ,
90 ” c o n t r o l D e v i c e s ” : true ,
91 ” r e s t a r t ” : true
92 }
93 }
94 ]
95 }
Referências Bibliográficas