Escolar Documentos
Profissional Documentos
Cultura Documentos
Viatura Inteligente
Docente:
Nzakiese Mbongo
Luanda, 2024
UNIVERSIDADE METODISTA DE ANGOLA
FACULDADE DE ENGENHARIA INFORMÁTICA
Integrantes do grupo:
i
Lista de Tabelas
ii
Resumo
iii
ABSTRACT
This work aims to explore and develop an innovative convergence between robotics and
artificial intelligence, with the aim of creating smart taxis capable of redefining urban
mobility, starting with a contextualization of the current transition in mobility, where
emerging technologies promise to transform the way we travel. we move around cities,
we highlight the central role of robotics and artificial intelligence in this process.
By delving into the nuances of robotics applied to smart vehicles, we identify the
importance of advanced sensors, actuators and processing systems to create a vehicle
capable of perceiving and interacting with the environment in an intelligent way.
Artificial intelligence, with a focus on algorithms such as A*, emerges as specific for the
efficient navigation of smart taxis, providing dynamic mapping of the environment and
optimized route planning.
The strategic insertion of smart traffic lights is not just a response to traffic control, but a
strategy to optimize vehicular flow and improve synchronization at urban intersections.
These traffic lights, with precisely calculated waiting times, aim to significantly
contribute to the fluidity of traffic and the reduction of idle times.
Furthermore, the work addresses specific features to improve the user experience. From
automatic environment settings inside the taxi to integration with virtual assistants to
provide real-time information, these features aim not only at technical efficiency, but also
at comfort and personalization of the journey.
However, as we explore the potential of these smart taxis, it is imperative to consider the
harmful ethical and legal issues. Cybersecurity, data privacy protection and incident
responsibilities emerge as crucial challenges that require careful attention and appropriate
regulation.
In summary, this work proposes a comprehensive technical-theoretical approach to the
development of smart taxis, exploring the transformative potential of robotics and
artificial intelligence in urban mobility. The vision is not just the creation of independent
vehicles, but rather the establishment of a new era in the urban transport experience, with
smart taxis at the forefront of mobility evolution in the cities of the future.
Keywords: Intelligent Agents. Simulation. Autonomous Vehicles. Obstacle avoidance.
iv
1- Introdução
1
2- OBJECTIVOS DO ESTUDO
3- Metodologia
2
4- TÉCNICA/CIENTÍFICA APLICÁVEL AO PROJECTO
3
4.1- ARDUINO UNO
4
4.1.1- Princípio de funcionamento do Arduino
O Arduino é um computador em menor escala que possui, menos memória e menor poder
de processamento, constituído pelos seguintes elementos: microprocessador, memória
RAM, memória flash, temporizadores e contadores.
5
5- Kit Carro Robotizado c/ 4 motores 4WD
6
Figura 3: Kit Carro Robotizado c/ 4 motores 4WD.
7
Figura 4: Sensor Ultrassônico HC-SR04
O termo "Servo Motor 4.3g" refere-se a um tipo específico de motor servo, que é um
dispositivo utilizado para controlar movimentos precisos em muitas aplicações, como
robótica, automação, modelismo e outros projetos eletrônicos. Vamos analisar o
significado desse termo:
Servo Motor: Um servo motor é um tipo de motor elétrico que possui um mecanismo de
feedback incorporado para controlar com precisão sua posição angular. Isso significa que
ele pode ser movido para uma posição específica e manter essa posição mesmo sob carga.
4.3g: O peso indicado (4.3g) refere-se ao peso do próprio servo motor. Isso é
particularmente relevante em aplicações como modelismo, onde o peso dos componentes
pode afetar o desempenho geral do projeto. Um servo motor leve, como o de 4.3g, pode
ser preferível em certas situações.
Características típicas de um servo motor 4.3g podem incluir:
Torque: A força que o motor pode exercer para mover uma carga.
Velocidade de rotação: A rapidez com que o eixo do motor pode se mover.
Faixa de movimento angular: A amplitude do movimento que o servo motor pode
alcançar, geralmente especificado em graus.
8
8- Placa Breadboard MB-102 de 830 pontos.
10- LED
É um tipo especial de díodo semicondutor que emite luz quando é polarizado diretamente.
Num díodo normal, quando polarizado diretamente, uma grande quantidade de portadores
atravessa a região de depleção na qual, alguns deles, recombinam-se com átomos
10
ionizados. Nesse processo, os eletrões perdem energia na forma de radiação. Nos díodos
de silício e germânio, essa radiação é liberada principalmente na forma de calor mas, em
compostos de arseneto de gálio (GaAs), existe a liberação de energia na forma de luz.
Esses díodos são chamados de díodos emissores de luz ou, LED (do inglês Light Emitting
Díode) e podem emitir luz visível, infravermelho (frequência menor ou comprimento de
onda maior que a faixa de luz visível) ou ultravioleta (frequência maior ou comprimento
de onda menor que a faixa de luz visível).
Na figura abaixo mostraremos um LED e o seu símbolo eléctrico.
Os principais LEDs de luz visível são feitos a partir de Gás acrescidos de fósforo que,
dependendo da quantidade, podem irradiar luzes vermelha, laranja, amarela, verde ou
azul e são muito utilizados como sinalizadores em instrumentos eletrónicos ou na
fabricação de displays.
Portanto, para se polarizar um díodo deve-se usar um resistor limitador de corrente para
que o mesmo não se danifique.
Também devido a sua estrutura, os LEDs têm uma tensão de rutura muito menor que os
díodos normais. Um LED típico poderá ter uma tensão de rutura apenas de 5V. Por isso
quando usar corrente alternada para ativar um LED, conecte um díodo normal em paralelo
para protegê-lo do pico de tensão reversa durante o semiciclo negativo da forma de onda
(ADOLFO et al., 2015).
11
Tabela 2: Propriedades Eléctricas dos LEDs.
LED CORRENTE
(mA)
Infravermelho 1.2 a 1.7
O módulo Bluetooth HC-06 é um dispositivo bastante popular para comunicação sem fio
em projetos eletrônicos. Aqui estão algumas informações sobre o módulo Bluetooth HC-
06:
• Função Básica: O HC-06 é um módulo Bluetooth Serial que permite a
comunicação sem fio entre dispositivos por meio de uma interface serial UART.
• Alcance: O alcance típico do HC-06 é de cerca de 10 metros em condições ideais.
Isso pode variar dependendo do ambiente e de outros obstáculos.
• Modo de Operação: O HC-06 opera principalmente em modo escravo (Slave), o
que significa que ele responde a comandos de outros dispositivos mestres
Bluetooth.
• Emparelhamento: O emparelhamento geralmente é feito por meio de códigos
PIN. No caso do HC-06, o código PIN padrão é frequentemente "1234" ou "0000".
• Alimentação: O módulo geralmente requer uma fonte de alimentação de 3.3V a
6V.
12
• LEDs Indicadores: Muitos módulos HC-06 possuem LEDs indicadores para
mostrar o estado do emparelhamento e da comunicação.
• Comandos AT: Alguns módulos HC-06 possuem suporte a comandos AT,
permitindo a configuração de certos parâmetros, como nome do dispositivo, taxa
de baudagem.
13
Configuração de Ponte H: Certifique-se de entender como configurar corretamente as
pontes H para o modo de operação desejado (avanço, reverso, frenagem, etc.).
Figura 10: drive L298N(Ponte H)
14
14- Arduino Nano
O Arduino Nano é uma placa microcontroladora que faz parte da família Arduino. Ela é
compacta e projetada para aplicações onde o tamanho é um fator crucial. Aqui estão
algumas características e informações sobre o Arduino Nano:
Microcontrolador: O Arduino Nano é baseado em um microcontrolador Atmel
ATmega328 ou ATmega168. A versão mais recente do Nano geralmente utiliza o
ATmega328.
Portas de E/S: Possui 14 portas digitais de E/S, das quais 6 podem ser usadas como
saídas PWM, e 8 portas analógicas.
Comunicação: Suporta comunicação serial (UART) através de um conector USB para
comunicação com o computador. Também possui portas I2C e SPI para comunicação
com outros dispositivos.
Alimentação: Pode ser alimentado por meio de uma fonte externa de 7-12V ou através
do conector USB. O regulador de tensão incorporado gera a voltagem de operação de 5V.
Conectividade USB: Possui um conector USB Mini-B para programação e comunicação
com o computador.
Tamanho: O Arduino Nano é notável pelo seu tamanho compacto, o que o torna ideal
para projetos onde o espaço é limitado.
Programação: Programado utilizando a IDE Arduino, que suporta a linguagem de
programação baseada em C/C++.
Pinagem: A pinagem pode variar ligeiramente entre diferentes versões, por isso é
importante verificar o esquema específico da versão que você está utilizando.
Figura 12: Arduino Nano
15
15- Software envolvido
16
16- Software de controlo remoto
Teclas de seta: Esta ferramenta oferece botões de direção que podem ser totalmente
customizados com os dados a serem enviados, e a sensibilidade, que permite enviar dados
continuamente para a placa mantendo-os pressionados longamente.
Controle de voz: Você já sonhou em conversar com seus robôs? bem, agora seu sonho
está se tornando realidade! Com o Arduino Bluetooth Control, você pode personalizar
seus próprios comandos vocais e usá-los para controlar todas as suas placas baseadas em
microcontroladores
17
17- Esquema de montagem do projecto
18
18- Conclusão
À medida que concluímos este trabalho, emerge uma visão clara da transformação
potencial na mobilidade urbana através do táxi inteligente. A convergência de tecnologias
avançadas, como a robótica e a inteligência artificial, abre portas para um futuro onde a
experiência de transporte é redefinida por inovações que vão além da automação veicular
convencional.
A implementação do algoritmo A* revelou-se crucial para o mapeamento do ambiente e
o planejamento de rotas eficientes, permitindo que o táxi inteligente navegue de maneira
segura, evitando obstáculos e otimizando trajetórias. A estrada inteligente, com linhas
delimitadoras avançadas e dispositivos de segurança, contribui não apenas para a
segurança viária, mas também para a integração harmoniosa do táxi com a infraestrutura
urbana.
A capacidade de deslocamento automático, baseado em comandos vocais do cliente,
representa um avanço significativo na interação humano-máquina. Essa personalização
da experiência do usuário não apenas melhora a comodidade, mas também antecipa uma
era onde a tecnologia se adapta de forma intuitiva às necessidades individuais.
A integração de semáforos inteligentes e a exploração de funcionalidades opcionais,
como ajustes automáticos de ambiente, demonstraram impactos positivos na eficiência
do tráfego e na satisfação do usuário. Essas funcionalidades vão além da simples
automação, abraçando a ideia de proporcionar uma jornada personalizada e eficiente.
19
Bibliografia
Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to
Algorithms. MIT Press. (Livro clássico sobre algoritmos, contendo informações sobre o
Radix Sort e sua análise de complexidade.)
Sedgewick, R., & Wayne, K. (2011). Algorithms (4th Edition). Addison-Wesley
Professional. (Outro livro amplamente utilizado sobre algoritmos, abordando o Radix
Sort e suas aplicações.)
Knuth, D. E. (1997). The Art of Computer Programming, Volume 3: Sorting and
Searching (2nd Edition). Addison-Wesley Professional. (Livro abrangente sobre
algoritmos de ordenação, incluindo uma análise detalhada do Radix Sort.)
GeeksforGeeks. Radix Sort. Disponível em: https://www.geeksforgeeks.org/radix-sort/.
(Um recurso online com explicações detalhadas sobre o Radix Sort, sua implementação
em várias linguagens de programação e exemplos de código.)
Wikipedia. Radix Sort. Disponível em: https://en.wikipedia.org/wiki/Radix_sort. (Um
artigo na Wikipedia que fornece uma visão geral do Radix Sort, sua história,
características e algoritmo, juntamente com exemplos e referências adicionais.)
20
19- Programação inicial
#include <Servo.h>
#include <SoftwareSerial.h>
#include <Ultrasonic.h>
SoftwareSerial TXRX(10,11);
String readvoice;
Servo servopin;
#define pin1 4
#define pin2 5
#define port1 3
#define pin3 7
#define port2 6
#define pin4 8
int ler;
int distance;
char lido;
void parar_motor(){
digitalWrite(pin1, LOW);
digitalWrite(pin4, LOW);
21
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
void tras(){
servopin.write(60);
digitalWrite(pin1, HIGH);
digitalWrite(pin4, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
void frente(){
digitalWrite(pin1, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
void esquerda(){
analogWrite(port1, 120);
analogWrite(port2, 120);
digitalWrite(pin1, LOW);
digitalWrite(pin4, HIGH);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
22
delay(500);
void direita(){
analogWrite(port1, 120);
analogWrite(port2, 120);
digitalWrite(pin1, HIGH);
digitalWrite(pin4, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
delay(500);
void setup() {
Serial.begin(9600);
TXRX.begin(9600);
servopin.attach(13);
pinMode(pin1, OUTPUT);
pinMode(port1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(port2, OUTPUT);
pinMode(pin4, OUTPUT);
23
pinMode(13, OUTPUT);
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
analogWrite(port1, 150);
analogWrite(port2, 150);
servopin.write(60);
void loop() {
distance=ultrasonic.read();
lido=Serial.read();
ler=TXRX.read();
delay(20);
if(distance>=20){
switch(ler){
24
parar_motor();
break;
frente();
break;
servopin.write(0);
delay(1000);
distance=ultrasonic.read();
servopin.write(60);
delay(1000);
if (distance>=20){
direita();
parar_motor();
delay(200);
frente();
delay(500);
parar_motor();
delay(400);
esquerda();
parar_motor();
delay(400);
frente();
25
}
break;
servopin.write(120);
delay(1000);
distance=ultrasonic.read();
servopin.write(60);
delay(1000);
if (distance>=20){
esquerda();
parar_motor();
delay(200);
frente();
delay(500);
parar_motor();
delay(400);
direita();
parar_motor();
delay(400);
frente();
break;
26
tras();
break;
servopin.write(0);
delay(1000);
distance=ultrasonic.read();
servopin.write(60);
delay(1000);
if (distance>=20){
direita();
delay(300);
parar_motor();
frente();
break;
servopin.write(120);
delay(1000);
distance=ultrasonic.read();
servopin.write(60);
delay(1000);
if (distance>=20){
esquerda();
delay(300);
27
parar_motor();
frente();
break;}
if (distance<=19){
tras();
delay(500);
parar_motor();
28