·
Administração ·
Abastecimento de Água
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
38
TESTEINDEXAÇÃO 1726801877188 RELACIONAMENTO-INTERPESSOAL-E-ÉTICA-PROFISSIONAL pdf
Abastecimento de Água
UNIABEU
2
TESTINGTHEINDEX 1726682134484 O PAPEL DAS AGENCIAS REGULADORAS NO BRASIL À LUZ DA LEI 13 1 docx
Abastecimento de Água
UNIABEU
10
TESTEBOLA 44566a18-99ff-46cf-905c-2b6bcaec4582_0 pdf
Abastecimento de Água
UNIABEU
20
TESTEFEDERAL 1700173055381 4 - Funções - 1a aula 1 pdf
Abastecimento de Água
UNIABEU
2
TESTINGTHEINDEX 1726854349218 20_16 docx
Abastecimento de Água
UNIABEU
9
TESTEELETROCARDIOGRAMA 1726850711376 Coaching e desenvolvimento humano docx
Abastecimento de Água
UNIABEU
3
Teste do Blur 1
Abastecimento de Água
UNIABEU
1
TESTEELETROCARDIOGRAMA 1726842773664 Farmacocinetica - Excreção e Farmacodinamica pdf
Abastecimento de Água
UNIABEU
4
TESTEFEDERAL 1696778710804 Álgebra_1 pdf
Abastecimento de Água
UNIABEU
1
TESTEVACA 1726951011294 Artigo IIC pdf
Abastecimento de Água
UNIABEU
Texto de pré-visualização
Projeto: Sem´aforo Inteligente - Uso da Internet das Coisas Alunos: 1 Introdu¸c˜ao O projeto consiste em um sistema de sem´aforo inteligente, desenvolvido com base no uso da Internet das Coisas (IoT). O sistema tem como objetivo melhorar o fluxo de carros e pedestres, utilizando um sensor de movimento para detectar a aproxima¸c˜ao de ve´ıculos priorit´arios (como ambulˆancias), al´em de um bot˜ao de solicita¸c˜ao para pedestres que, quando pressionado, altera o funcionamento do sem´aforo, priorizando a travessia de pedestres. O sem´aforo controla tanto o fluxo de carros quanto o de pedestres, sendo equipado com LEDs de diferentes cores, um buzzer para sinaliza¸c˜ao sonora, um sensor PIR para detectar ve´ıculos priorit´arios, e um display LCD que informa o status do sistema em tempo real. 2 Componentes do Projeto O projeto ´e implementado utilizando os seguintes componentes: • LEDs para sem´aforo de carros (vermelho, amarelo e verde). • LEDs para sem´aforo de pedestres (vermelho e verde). • Buzzer para emitir sons de alerta. • Sensor PIR para detectar ve´ıculos priorit´arios. • Bot˜ao para pedestres solicitarem a travessia. • Display LCD para exibi¸c˜ao de mensagens. 1 3 C´odigo do Projeto O c´odigo foi implementado em C++, utilizando bibliotecas para controle do display LCD e manipula¸c˜ao dos LEDs e sensores. A seguir, ser˜ao descritas as principais partes do c´odigo e suas funcionalidades. 4 Configura¸c˜ao Inicial dos Componentes No in´ıcio do c´odigo, os componentes s˜ao configurados. Aqui, o LiquidCrystal define os pinos que controlam o display LCD, e as vari´aveis associadas aos LEDs e bot˜oes s˜ao inicializadas. 1 #include <LiquidCrystal .h> 2 LiquidCrystal lcd(A0 , A1 , A2 , A3 , A4 , A5); 3 int carRed = 12; 4 int carYellow = 11; 5 int carGreen = 10; 6 int pedRed = 9; 7 int pedGreen = 8; 8 int buzzerpino = 4; 9 int pirPin = 2; 10 int button = 3; Nesta etapa, os pinos do Arduino para os LEDs do sem´aforo de carros e pedestres s˜ao definidos, al´em do pino para o sensor PIR e o bot˜ao para os pedestres. 5 Configura¸c˜ao do Display LCD O display LCD exibe o estado atual do sem´aforo. Inicialmente, uma mensagem de boas-vindas ´e exibida, e a partir da´ı, o display passa a exibir o status de funcionamento, dependendo das condi¸c˜oes do sem´aforo. 1 lcd.begin (16, 2); 2 lcd.setCursor (0, 0); 3 lcd.print("Semaforo␣Inteligente"); 4 lcd.setCursor (0, 1); 5 lcd.print("Funcionando"); 6 delay (1000); 7 lcd.clear (); O display ´e configurado para exibir mensagens de 16 colunas e 2 linhas, utilizando o m´etodo setCursor para definir a posi¸c˜ao da escrita. 6 Controle do Sem´aforo O funcionamento b´asico do sem´aforo ´e controlar as luzes para carros e pedestres. Quando o bot˜ao ´e pressionado ou quando o sensor detecta a aproxima¸c˜ao de um ve´ıculo priorit´ario, as luzes mudam de estado de acordo com a l´ogica do sem´aforo. 6.1 Sem´aforo sem ativa¸c˜ao do sensor Caso o sensor PIR n˜ao seja ativado, o sem´aforo segue o fluxo normal de mudan¸ca de estados, alternando entre o verde, amarelo e vermelho para os carros, enquanto os pedestres aguardam ou s˜ao autorizados a atravessar. 1 if (CARVERDE == HIGH && PEDESTREVER == HIGH) { 2 lcd.setCursor (0, 0); 3 lcd.print("␣SEM␣MOVIMENTO␣"); 4 } else if (CARVERDE == LOW && CARVERMELHO == LOW) { 5 lcd.setCursor (0, 0); 6 lcd.print("␣PREPARA␣PARE␣␣"); 7 } else if (CARVERDE == LOW && CARAMARELO == LOW) { 8 lcd.setCursor (0, 0); 9 lcd.print("␣ATRAVESSE␣AGORA"); 10 } Nesta parte do c´odigo, a mudan¸ca das luzes do sem´aforo ´e sincronizada com o display, que informa aos pedestres quando podem atravessar ou devem aguardar. 2 6.2 Sem´aforo com ativa¸c˜ao do sensor PIR (ve´ıculos priorit´arios) Quando o sensor PIR detecta um ve´ıculo priorit´ario, o sem´aforo dos pedestres ´e fechado imediatamente, e uma mensagem de alerta ´e exibida no display LCD, priorizando a passagem do ve´ıculo. 1 int estado = digitalRead (pirPin); 2 if (estado == HIGH) { 3 digitalWrite (pedGreen , LOW); 4 digitalWrite (pedRed , HIGH); 5 lcd.clear (); 6 lcd.setCursor (0, 0); 7 lcd.print("ATENCAO:␣AMBULANCIA"); 8 lcd.setCursor (0, 1); 9 lcd.print("AGUARDANDO ..."); 10 delay (2000); 11 digitalWrite (carGreen , HIGH); 12 } Ao detectar movimento, o sensor fecha o sem´aforo de pedestres e permite a passagem dos carros, exibindo uma mensagem de aten¸c˜ao para que pedestres aguardem a passagem do ve´ıculo. 6.3 Sem´aforo acionado pelo bot˜ao dos pedestres Caso o bot˜ao seja pressionado pelos pedestres, o sem´aforo ´e configurado para fechar o sinal dos carros e abrir o sinal para a travessia de pedestres. O sistema usa tempos predefinidos para cada estado de transi¸c˜ao. 1 int estado2 = digitalRead (button); 2 if (estado2 == HIGH && CARVERMELHO == LOW && CARAMARELO == LOW && millis () - changeTime > 5000) { 3 digitalWrite (carGreen , LOW); 4 digitalWrite (carYellow , HIGH); 5 delay (2000); 6 digitalWrite (carRed , HIGH); 7 digitalWrite (pedGreen , HIGH); 8 delay(crossTime); 9 } Ao pressionar o bot˜ao, o sem´aforo entra em estado de aten¸c˜ao para os carros, passando pelo amarelo e vermelho antes de liberar a travessia para pedestres. 7 Conclus˜ao Este projeto de sem´aforo inteligente integra diversos sensores e atuadores para controlar de forma eficiente o tr´afego de ve´ıculos e pedestres. Com o uso do sensor PIR, o sistema ´e capaz de priorizar ve´ıculos de emergˆencia, enquanto o bot˜ao permite que pedestres atravessem em seguran¸ca. O display LCD facilita a compreens˜ao do status do sem´aforo, exibindo mensagens informativas em tempo real. Assim, o projeto contribui para melhorar a seguran¸ca e a fluidez no trˆansito urbano. Clique no link para acessar o projeto do Sem´aforo Inteligente no Tinkercad. 3 C´odigo do Projeto 1 #include <LiquidCrystal .h> 2 3 LiquidCrystal lcd(A0 , A1 , A2 , A3 , A4 , A5); 4 char abertosemsensor [] = {"␣SEM␣MOVIMENTO␣"}; 5 char atencaosemsensor [] = {"␣PREPARA␣PARE␣␣"}; 6 char paresemsensor [] = {"␣ATRAVESSE␣AGORA"}; 7 8 // V a r i v e i s dos LEDs 9 int carRed = 12; 10 int carYellow = 11; 11 int carGreen = 10; 12 int pedRed = 9; 13 int pedGreen = 8; 14 int CARVERMELHO = LOW; 15 int CARAMARELO = LOW; 16 int CARVERDE = HIGH; 17 int PEDESTREVERDE = LOW; 18 int PEDESTREVER = HIGH; 19 20 // V a r i v e l do buzzer 21 int buzzerpino = 4; 22 23 // V a r i v e l do sensor 24 int pirPin = 2; 25 26 // V a r i v e l do pushbutton 27 int button = 3; 28 29 // V a r i v e i s de controle do tempo do s e m f o r o 30 int crossTime = 5000; 31 unsigned long changeTime = 0; 32 unsigned long previousmillis1 = 0; 33 unsigned long previousmillis2 = 0; 34 unsigned long previousmillis3 = 0; 35 unsigned long tempo1 = 5000; 36 unsigned long tempo2 = 2000; 37 unsigned long tempo3 = 5000; 38 unsigned long tempoRestante = 0; 39 unsigned long inicioContagem = 0; 40 41 void setup () { 42 pinMode(carRed , OUTPUT); 43 pinMode(carYellow , OUTPUT); 44 pinMode(carGreen , OUTPUT); 45 pinMode(pedRed , OUTPUT); 46 pinMode(pedGreen , OUTPUT); 47 pinMode(pirPin , INPUT); 48 pinMode(buzzerpino , OUTPUT); 49 50 lcd.begin (16, 2); 51 lcd.setCursor (0, 0); 52 lcd.print("SMART␣SEMAPHORE"); 53 lcd.setCursor (0, 1); 54 lcd.print("version␣2.0"); 55 delay (1000); 56 lcd.clear (); 57 58 digitalWrite (carGreen , HIGH); 59 digitalWrite (pedRed , HIGH); 60 inicioContagem = millis (); 61 } 62 63 void loop () { 64 digitalWrite (carGreen , CARVERDE); 65 digitalWrite (carYellow , CARAMARELO ); 66 digitalWrite (carRed , CARVERMELHO); 67 digitalWrite (pedRed , PEDESTREVER); 68 digitalWrite (pedGreen , PEDESTREVERDE ); 69 70 if (CARVERDE == HIGH && PEDESTREVER == HIGH) { 71 lcd.setCursor (0, 0); 4 72 lcd.print( abertosemsensor ); 73 } else if (CARVERDE == LOW && CARVERMELHO == LOW) { 74 lcd.setCursor (0, 0); 75 lcd.print( atencaosemsensor ); 76 } else if (CARVERDE == LOW && CARAMARELO == LOW) { 77 lcd.setCursor (0, 0); 78 lcd.print( paresemsensor ); 79 } 80 81 if (CARVERDE == HIGH) { 82 tempoRestante = tempo1 - (millis () - inicioContagem ); 83 } else if (CARAMARELO == HIGH) { 84 tempoRestante = tempo2 - (millis () - inicioContagem ); 85 } else { 86 tempoRestante = tempo3 - (millis () - inicioContagem ); 87 } 88 89 if ( tempoRestante < 0) { 90 tempoRestante = 0; 91 } 92 93 lcd.setCursor (0, 1); 94 lcd.print("Tempo:␣"); 95 lcd.print( tempoRestante / 1000); 96 lcd.print("s␣␣␣␣␣"); 97 98 if (millis () - previousmillis1 >= tempo1 && CARVERMELHO == LOW && CARAMARELO == LOW) { 99 previousmillis1 = millis (); 100 inicioContagem = millis (); 101 if (CARVERDE == LOW) { 102 CARVERDE = HIGH; 103 PEDESTREVERDE = LOW; 104 PEDESTREVER = HIGH; 105 tone(buzzerpino , 1000 , 200); 106 } else { 107 CARVERDE = LOW; 108 } 109 digitalWrite (carGreen , CARVERDE); 110 digitalWrite (pedRed , PEDESTREVER ); 111 } 112 113 if (millis () - previousmillis2 >= tempo2 && CARVERDE == LOW && CARVERMELHO == LOW) { 114 previousmillis2 = millis (); 115 inicioContagem = millis (); 116 if (CARAMARELO == LOW) { 117 CARAMARELO = HIGH; 118 tone(buzzerpino , 500, 500); 119 } else { 120 CARAMARELO = LOW; 121 } 122 digitalWrite (carYellow , CARAMARELO ); 123 } 124 125 if (millis () - previousmillis3 >= tempo3 && CARVERDE == LOW && CARAMARELO == LOW) { 126 previousmillis3 = millis (); 127 inicioContagem = millis (); 128 if ( CARVERMELHO == LOW) { 129 CARVERMELHO = HIGH; 130 PEDESTREVERDE = HIGH; 131 PEDESTREVER = LOW; 132 tone(buzzerpino , 300, 1000); 133 } else { 134 CARVERMELHO = LOW; 135 PEDESTREVERDE = LOW; 136 PEDESTREVER = HIGH; 137 } 138 digitalWrite (carRed , CARVERMELHO ); 139 digitalWrite (pedGreen , PEDESTREVERDE ); 140 digitalWrite (pedRed , PEDESTREVER ); 141 } 142 143 int estado = digitalRead (pirPin); 5 144 if (estado == HIGH) { 145 digitalWrite (pedGreen , LOW); 146 digitalWrite (pedRed , HIGH); 147 delay (1000); 148 digitalWrite (pedRed , LOW); 149 delay (500); 150 digitalWrite (pedRed , HIGH); 151 delay (1000); 152 digitalWrite (pedRed , LOW); 153 delay (500); 154 digitalWrite (pedRed , HIGH); 155 156 lcd.clear (); 157 lcd.setCursor (0, 0); 158 lcd.print("ATENCAO:␣AMBULANCIA "); 159 lcd.setCursor (0, 1); 160 lcd.print("AGUARDANDO ..."); 161 162 digitalWrite (carRed , LOW); 163 digitalWrite (carGreen , HIGH); 164 delay (2000); 165 166 digitalWrite (carRed , LOW); 167 digitalWrite (carGreen , HIGH); 168 lcd.clear (); 169 } 170 171 int estado2 = digitalRead (button); 172 if (estado2 == HIGH && CARVERMELHO == LOW && CARAMARELO == LOW && millis () - changeTime > 5000) { 173 digitalWrite (carGreen , LOW); 174 delay (1000); 175 digitalWrite (carYellow , HIGH); 176 delay (2000); 177 digitalWrite (carYellow , LOW); 178 digitalWrite (carRed , HIGH); 179 delay (1000); 180 digitalWrite (pedRed , LOW); 181 digitalWrite (pedGreen , HIGH); 182 delay(crossTime); 183 changeTime = millis (); 184 } 185 } Listing 1: C´odigo em C++ para o Sem´aforo Inteligente 6
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
38
TESTEINDEXAÇÃO 1726801877188 RELACIONAMENTO-INTERPESSOAL-E-ÉTICA-PROFISSIONAL pdf
Abastecimento de Água
UNIABEU
2
TESTINGTHEINDEX 1726682134484 O PAPEL DAS AGENCIAS REGULADORAS NO BRASIL À LUZ DA LEI 13 1 docx
Abastecimento de Água
UNIABEU
10
TESTEBOLA 44566a18-99ff-46cf-905c-2b6bcaec4582_0 pdf
Abastecimento de Água
UNIABEU
20
TESTEFEDERAL 1700173055381 4 - Funções - 1a aula 1 pdf
Abastecimento de Água
UNIABEU
2
TESTINGTHEINDEX 1726854349218 20_16 docx
Abastecimento de Água
UNIABEU
9
TESTEELETROCARDIOGRAMA 1726850711376 Coaching e desenvolvimento humano docx
Abastecimento de Água
UNIABEU
3
Teste do Blur 1
Abastecimento de Água
UNIABEU
1
TESTEELETROCARDIOGRAMA 1726842773664 Farmacocinetica - Excreção e Farmacodinamica pdf
Abastecimento de Água
UNIABEU
4
TESTEFEDERAL 1696778710804 Álgebra_1 pdf
Abastecimento de Água
UNIABEU
1
TESTEVACA 1726951011294 Artigo IIC pdf
Abastecimento de Água
UNIABEU
Texto de pré-visualização
Projeto: Sem´aforo Inteligente - Uso da Internet das Coisas Alunos: 1 Introdu¸c˜ao O projeto consiste em um sistema de sem´aforo inteligente, desenvolvido com base no uso da Internet das Coisas (IoT). O sistema tem como objetivo melhorar o fluxo de carros e pedestres, utilizando um sensor de movimento para detectar a aproxima¸c˜ao de ve´ıculos priorit´arios (como ambulˆancias), al´em de um bot˜ao de solicita¸c˜ao para pedestres que, quando pressionado, altera o funcionamento do sem´aforo, priorizando a travessia de pedestres. O sem´aforo controla tanto o fluxo de carros quanto o de pedestres, sendo equipado com LEDs de diferentes cores, um buzzer para sinaliza¸c˜ao sonora, um sensor PIR para detectar ve´ıculos priorit´arios, e um display LCD que informa o status do sistema em tempo real. 2 Componentes do Projeto O projeto ´e implementado utilizando os seguintes componentes: • LEDs para sem´aforo de carros (vermelho, amarelo e verde). • LEDs para sem´aforo de pedestres (vermelho e verde). • Buzzer para emitir sons de alerta. • Sensor PIR para detectar ve´ıculos priorit´arios. • Bot˜ao para pedestres solicitarem a travessia. • Display LCD para exibi¸c˜ao de mensagens. 1 3 C´odigo do Projeto O c´odigo foi implementado em C++, utilizando bibliotecas para controle do display LCD e manipula¸c˜ao dos LEDs e sensores. A seguir, ser˜ao descritas as principais partes do c´odigo e suas funcionalidades. 4 Configura¸c˜ao Inicial dos Componentes No in´ıcio do c´odigo, os componentes s˜ao configurados. Aqui, o LiquidCrystal define os pinos que controlam o display LCD, e as vari´aveis associadas aos LEDs e bot˜oes s˜ao inicializadas. 1 #include <LiquidCrystal .h> 2 LiquidCrystal lcd(A0 , A1 , A2 , A3 , A4 , A5); 3 int carRed = 12; 4 int carYellow = 11; 5 int carGreen = 10; 6 int pedRed = 9; 7 int pedGreen = 8; 8 int buzzerpino = 4; 9 int pirPin = 2; 10 int button = 3; Nesta etapa, os pinos do Arduino para os LEDs do sem´aforo de carros e pedestres s˜ao definidos, al´em do pino para o sensor PIR e o bot˜ao para os pedestres. 5 Configura¸c˜ao do Display LCD O display LCD exibe o estado atual do sem´aforo. Inicialmente, uma mensagem de boas-vindas ´e exibida, e a partir da´ı, o display passa a exibir o status de funcionamento, dependendo das condi¸c˜oes do sem´aforo. 1 lcd.begin (16, 2); 2 lcd.setCursor (0, 0); 3 lcd.print("Semaforo␣Inteligente"); 4 lcd.setCursor (0, 1); 5 lcd.print("Funcionando"); 6 delay (1000); 7 lcd.clear (); O display ´e configurado para exibir mensagens de 16 colunas e 2 linhas, utilizando o m´etodo setCursor para definir a posi¸c˜ao da escrita. 6 Controle do Sem´aforo O funcionamento b´asico do sem´aforo ´e controlar as luzes para carros e pedestres. Quando o bot˜ao ´e pressionado ou quando o sensor detecta a aproxima¸c˜ao de um ve´ıculo priorit´ario, as luzes mudam de estado de acordo com a l´ogica do sem´aforo. 6.1 Sem´aforo sem ativa¸c˜ao do sensor Caso o sensor PIR n˜ao seja ativado, o sem´aforo segue o fluxo normal de mudan¸ca de estados, alternando entre o verde, amarelo e vermelho para os carros, enquanto os pedestres aguardam ou s˜ao autorizados a atravessar. 1 if (CARVERDE == HIGH && PEDESTREVER == HIGH) { 2 lcd.setCursor (0, 0); 3 lcd.print("␣SEM␣MOVIMENTO␣"); 4 } else if (CARVERDE == LOW && CARVERMELHO == LOW) { 5 lcd.setCursor (0, 0); 6 lcd.print("␣PREPARA␣PARE␣␣"); 7 } else if (CARVERDE == LOW && CARAMARELO == LOW) { 8 lcd.setCursor (0, 0); 9 lcd.print("␣ATRAVESSE␣AGORA"); 10 } Nesta parte do c´odigo, a mudan¸ca das luzes do sem´aforo ´e sincronizada com o display, que informa aos pedestres quando podem atravessar ou devem aguardar. 2 6.2 Sem´aforo com ativa¸c˜ao do sensor PIR (ve´ıculos priorit´arios) Quando o sensor PIR detecta um ve´ıculo priorit´ario, o sem´aforo dos pedestres ´e fechado imediatamente, e uma mensagem de alerta ´e exibida no display LCD, priorizando a passagem do ve´ıculo. 1 int estado = digitalRead (pirPin); 2 if (estado == HIGH) { 3 digitalWrite (pedGreen , LOW); 4 digitalWrite (pedRed , HIGH); 5 lcd.clear (); 6 lcd.setCursor (0, 0); 7 lcd.print("ATENCAO:␣AMBULANCIA"); 8 lcd.setCursor (0, 1); 9 lcd.print("AGUARDANDO ..."); 10 delay (2000); 11 digitalWrite (carGreen , HIGH); 12 } Ao detectar movimento, o sensor fecha o sem´aforo de pedestres e permite a passagem dos carros, exibindo uma mensagem de aten¸c˜ao para que pedestres aguardem a passagem do ve´ıculo. 6.3 Sem´aforo acionado pelo bot˜ao dos pedestres Caso o bot˜ao seja pressionado pelos pedestres, o sem´aforo ´e configurado para fechar o sinal dos carros e abrir o sinal para a travessia de pedestres. O sistema usa tempos predefinidos para cada estado de transi¸c˜ao. 1 int estado2 = digitalRead (button); 2 if (estado2 == HIGH && CARVERMELHO == LOW && CARAMARELO == LOW && millis () - changeTime > 5000) { 3 digitalWrite (carGreen , LOW); 4 digitalWrite (carYellow , HIGH); 5 delay (2000); 6 digitalWrite (carRed , HIGH); 7 digitalWrite (pedGreen , HIGH); 8 delay(crossTime); 9 } Ao pressionar o bot˜ao, o sem´aforo entra em estado de aten¸c˜ao para os carros, passando pelo amarelo e vermelho antes de liberar a travessia para pedestres. 7 Conclus˜ao Este projeto de sem´aforo inteligente integra diversos sensores e atuadores para controlar de forma eficiente o tr´afego de ve´ıculos e pedestres. Com o uso do sensor PIR, o sistema ´e capaz de priorizar ve´ıculos de emergˆencia, enquanto o bot˜ao permite que pedestres atravessem em seguran¸ca. O display LCD facilita a compreens˜ao do status do sem´aforo, exibindo mensagens informativas em tempo real. Assim, o projeto contribui para melhorar a seguran¸ca e a fluidez no trˆansito urbano. Clique no link para acessar o projeto do Sem´aforo Inteligente no Tinkercad. 3 C´odigo do Projeto 1 #include <LiquidCrystal .h> 2 3 LiquidCrystal lcd(A0 , A1 , A2 , A3 , A4 , A5); 4 char abertosemsensor [] = {"␣SEM␣MOVIMENTO␣"}; 5 char atencaosemsensor [] = {"␣PREPARA␣PARE␣␣"}; 6 char paresemsensor [] = {"␣ATRAVESSE␣AGORA"}; 7 8 // V a r i v e i s dos LEDs 9 int carRed = 12; 10 int carYellow = 11; 11 int carGreen = 10; 12 int pedRed = 9; 13 int pedGreen = 8; 14 int CARVERMELHO = LOW; 15 int CARAMARELO = LOW; 16 int CARVERDE = HIGH; 17 int PEDESTREVERDE = LOW; 18 int PEDESTREVER = HIGH; 19 20 // V a r i v e l do buzzer 21 int buzzerpino = 4; 22 23 // V a r i v e l do sensor 24 int pirPin = 2; 25 26 // V a r i v e l do pushbutton 27 int button = 3; 28 29 // V a r i v e i s de controle do tempo do s e m f o r o 30 int crossTime = 5000; 31 unsigned long changeTime = 0; 32 unsigned long previousmillis1 = 0; 33 unsigned long previousmillis2 = 0; 34 unsigned long previousmillis3 = 0; 35 unsigned long tempo1 = 5000; 36 unsigned long tempo2 = 2000; 37 unsigned long tempo3 = 5000; 38 unsigned long tempoRestante = 0; 39 unsigned long inicioContagem = 0; 40 41 void setup () { 42 pinMode(carRed , OUTPUT); 43 pinMode(carYellow , OUTPUT); 44 pinMode(carGreen , OUTPUT); 45 pinMode(pedRed , OUTPUT); 46 pinMode(pedGreen , OUTPUT); 47 pinMode(pirPin , INPUT); 48 pinMode(buzzerpino , OUTPUT); 49 50 lcd.begin (16, 2); 51 lcd.setCursor (0, 0); 52 lcd.print("SMART␣SEMAPHORE"); 53 lcd.setCursor (0, 1); 54 lcd.print("version␣2.0"); 55 delay (1000); 56 lcd.clear (); 57 58 digitalWrite (carGreen , HIGH); 59 digitalWrite (pedRed , HIGH); 60 inicioContagem = millis (); 61 } 62 63 void loop () { 64 digitalWrite (carGreen , CARVERDE); 65 digitalWrite (carYellow , CARAMARELO ); 66 digitalWrite (carRed , CARVERMELHO); 67 digitalWrite (pedRed , PEDESTREVER); 68 digitalWrite (pedGreen , PEDESTREVERDE ); 69 70 if (CARVERDE == HIGH && PEDESTREVER == HIGH) { 71 lcd.setCursor (0, 0); 4 72 lcd.print( abertosemsensor ); 73 } else if (CARVERDE == LOW && CARVERMELHO == LOW) { 74 lcd.setCursor (0, 0); 75 lcd.print( atencaosemsensor ); 76 } else if (CARVERDE == LOW && CARAMARELO == LOW) { 77 lcd.setCursor (0, 0); 78 lcd.print( paresemsensor ); 79 } 80 81 if (CARVERDE == HIGH) { 82 tempoRestante = tempo1 - (millis () - inicioContagem ); 83 } else if (CARAMARELO == HIGH) { 84 tempoRestante = tempo2 - (millis () - inicioContagem ); 85 } else { 86 tempoRestante = tempo3 - (millis () - inicioContagem ); 87 } 88 89 if ( tempoRestante < 0) { 90 tempoRestante = 0; 91 } 92 93 lcd.setCursor (0, 1); 94 lcd.print("Tempo:␣"); 95 lcd.print( tempoRestante / 1000); 96 lcd.print("s␣␣␣␣␣"); 97 98 if (millis () - previousmillis1 >= tempo1 && CARVERMELHO == LOW && CARAMARELO == LOW) { 99 previousmillis1 = millis (); 100 inicioContagem = millis (); 101 if (CARVERDE == LOW) { 102 CARVERDE = HIGH; 103 PEDESTREVERDE = LOW; 104 PEDESTREVER = HIGH; 105 tone(buzzerpino , 1000 , 200); 106 } else { 107 CARVERDE = LOW; 108 } 109 digitalWrite (carGreen , CARVERDE); 110 digitalWrite (pedRed , PEDESTREVER ); 111 } 112 113 if (millis () - previousmillis2 >= tempo2 && CARVERDE == LOW && CARVERMELHO == LOW) { 114 previousmillis2 = millis (); 115 inicioContagem = millis (); 116 if (CARAMARELO == LOW) { 117 CARAMARELO = HIGH; 118 tone(buzzerpino , 500, 500); 119 } else { 120 CARAMARELO = LOW; 121 } 122 digitalWrite (carYellow , CARAMARELO ); 123 } 124 125 if (millis () - previousmillis3 >= tempo3 && CARVERDE == LOW && CARAMARELO == LOW) { 126 previousmillis3 = millis (); 127 inicioContagem = millis (); 128 if ( CARVERMELHO == LOW) { 129 CARVERMELHO = HIGH; 130 PEDESTREVERDE = HIGH; 131 PEDESTREVER = LOW; 132 tone(buzzerpino , 300, 1000); 133 } else { 134 CARVERMELHO = LOW; 135 PEDESTREVERDE = LOW; 136 PEDESTREVER = HIGH; 137 } 138 digitalWrite (carRed , CARVERMELHO ); 139 digitalWrite (pedGreen , PEDESTREVERDE ); 140 digitalWrite (pedRed , PEDESTREVER ); 141 } 142 143 int estado = digitalRead (pirPin); 5 144 if (estado == HIGH) { 145 digitalWrite (pedGreen , LOW); 146 digitalWrite (pedRed , HIGH); 147 delay (1000); 148 digitalWrite (pedRed , LOW); 149 delay (500); 150 digitalWrite (pedRed , HIGH); 151 delay (1000); 152 digitalWrite (pedRed , LOW); 153 delay (500); 154 digitalWrite (pedRed , HIGH); 155 156 lcd.clear (); 157 lcd.setCursor (0, 0); 158 lcd.print("ATENCAO:␣AMBULANCIA "); 159 lcd.setCursor (0, 1); 160 lcd.print("AGUARDANDO ..."); 161 162 digitalWrite (carRed , LOW); 163 digitalWrite (carGreen , HIGH); 164 delay (2000); 165 166 digitalWrite (carRed , LOW); 167 digitalWrite (carGreen , HIGH); 168 lcd.clear (); 169 } 170 171 int estado2 = digitalRead (button); 172 if (estado2 == HIGH && CARVERMELHO == LOW && CARAMARELO == LOW && millis () - changeTime > 5000) { 173 digitalWrite (carGreen , LOW); 174 delay (1000); 175 digitalWrite (carYellow , HIGH); 176 delay (2000); 177 digitalWrite (carYellow , LOW); 178 digitalWrite (carRed , HIGH); 179 delay (1000); 180 digitalWrite (pedRed , LOW); 181 digitalWrite (pedGreen , HIGH); 182 delay(crossTime); 183 changeTime = millis (); 184 } 185 } Listing 1: C´odigo em C++ para o Sem´aforo Inteligente 6