scieee Science in your language
[es] (orig)

Coche de juguete teledirigido

Abstract

Este trabajo se centra en el desarrollo de un coche teledirigido basando su creación en las opciones elegidas que se expondrán durante la memoria. El coche teledirigido tiene como imposición propia el uso de una cámara con la que se pueda ver desde dentro del habitáculo como si de un piloto se tratase. El manejo se hará desde una página web que tendrá los controles y la visión de la cámara. En la introducción, se presentarán las razones que motivan la realización del proyecto, los objetivos que se pretenden alcanzar y un plan de trabajo que guiará su desarrollo. A partir de ahí, se exploran distintas opciones para determinar la base sobre la que se creará el coche teledirigido, considerando las siguientes alternativas: la Raspberry Pi, Arduino y ESP-32 CAM. Una vez definido sobre qué se programará la lógica del coche, se lleva a cabo un proceso de aprendizaje centrado en Arduino. Esto se debe a que la base sobre la que se parte es muy baja, y no existen conocimientos previos con ninguna de las tres opciones. En esta etapa, se describen los materiales empleados y se realizan diversos proyectos guiados iniciales para familiarizarse con la plataforma, tales como la programación de LED, el uso de resistencias LDR, sensores de temperatura, servomotores, sensores de inclinación y el control de motores mediante un puente-H. Estos ejercicios prácticos permiten adquirir conocimientos fundamentales necesarios para avanzar en el desarrollo del coche. Como se mencionará más adelante, solo se han incluido en la memoria los que aportan ideas para el futuro coche a pesar de que en realidad han sido muchos más los proyectos de iniciación a Arduino. El aprendizaje continúa con la exploración de los SoC (system-on-chip) ESP32 y ESP32-CAM, donde se detalla la configuración del entorno de desarrollo y las pruebas realizadas con diferentes componentes: el flash, los servomotores, los motores y la creación de un servidor web. Esta parte del proyecto es crucial para comprender cómo integrar distintos módulos y tecnologías, asegurando un desarrollo correcto de cara a la implementación conjunta para el coche teledirigido. La construcción final del coche se produce gracias a la aplicación de los conocimientos adquiridos y la selección y descarte de materiales electrónicos y estructurales. A partir de una estructura de coche montada con bloques que simulan el estilo LEGO® Technic™, se verá cómo integrar los componentes electrónicos para intentar construir un modelo viable. Aquí se describirá el proceso de montaje y del desarrollo del código necesario para el funcionamiento del coche, basado en el paradigma de la POO (programación orientada a objetos) para el control del servidor web, la cámara, el motor y el servo. Finalmente, el trabajo incluye una bibliografía que reúne todas las fuentes consultadas, aportando el fundamento teórico y técnico necesario para la realización del proyecto.

Read accessible full text

Coche de juguete teledirigido

Author: Docampo Prieto-Puga, Marcos
Year: 2024
Source: https://docta.ucm.es/bitstreams/bbb02801-de29-4b9d-b93e-c82857ff6424/download
COCHE DE JUGUETE
TELEDIRIGIDO
REMOTE CONTROL TOY CAR
TRABAJO DE FIN DE GRADO
CURSO 2023-2024
AUTOR
Ma cos Docampo P ie o-Puga
DIRECTOR
Juan Ca los Fabe o Jiménez
GRADO EN INGENIERÍA INFORMÁTICA
FACULTAD DE INFORMÁTICA
UNIVERSIDAD COMPLUTENSE DE MADRID
COCHE DE JUGUETE
TELEDIRIGIDO
REMOTE CONTROL TOY CAR
TRABAJO DE FIN DE GRADO EN INGENIERÍA INFORMÁTICA
AUTOR
Ma cos Docampo P ie o-Puga
DIRECTOR
Juan Ca los Fabe o Jiménez
CONVOCATORIA: SEPTIEMBRE 2024
GRADO EN INGENIERÍA INFORMÁTICA
FACULTAD DE INFORMÁTICA
UNIVERSIDAD COMPLUTENSE DE MADRID
1 DE SEPTIEMBRE DE 2024
2
Dedica o ia
A mis pad es, po apoya siemp e mis decisiones,
que iendo que encuen e no o a cosa que la elicidad.
3
Ag adecimien os
A Juan Ca los, mi u o , po sopo a la ince idumb e de la al a de eedback. A mis pad es, Al onso y
Bea iz, po hace posible que es é haciendo es e TFG. A mis amigos po saca me de casa cuando
lle aba días ence ado abajando. A mi he mana, A iadna, y a mis ga os po hace me compañía en
esos días.
4
Resumen
Coche de jugue e eledi igido
Es e abajo se cen a en el desa ollo de un coche eledi igido basando su c eación en las
opciones elegidas que se expond án du an e la memo ia. El coche eledi igido iene como imposición
p opia el uso de una cáma a con la que se pueda e desde den o del habi áculo como si de un pilo o
se a ase. El manejo se ha á desde una página web que end á los con oles y la isión de la cáma a.
En la in oducción, se p esen a án las azones que mo i an la ealización del p oyec o, los
obje i os que se p e enden alcanza y un plan de abajo que guia á su desa ollo. A pa i de ahí, se
explo an dis in as opciones pa a de e mina la base sob e la que se c ea á el coche eledi igido,
conside ando las siguien es al e na i as: la Raspbe y Pi, A duino y ESP-32 CAM.
Una ez de inido sob e qué se p og ama á la lógica del coche, se lle a a cabo un p oceso de
ap endizaje cen ado en A duino. Es o se debe a que la base sob e la que se pa e es muy baja, y no
exis en conocimien os p e ios con ninguna de las es opciones. En es a e apa, se desc iben los
ma e iales empleados y se ealizan di e sos p oyec os guiados iniciales pa a amilia iza se con la
pla a o ma, ales como la p og amación de LED, el uso de esis encias LDR, senso es de empe a u a,
se omo o es, senso es de inclinación y el con ol de mo o es median e un puen e-H. Es os eje cicios
p ác icos pe mi en adqui i conocimien os undamen ales necesa ios pa a a anza en el desa ollo del
coche. Como se menciona á más adelan e, solo se han incluido en la memo ia los que apo an ideas
pa a el u u o coche a pesa de que en ealidad han sido muchos más los p oyec os de iniciación a
A duino.
El ap endizaje con inúa con la explo ación de los SoC (sys em-on-chip) ESP32 y
ESP32-CAM, donde se de alla la con igu ación del en o no de desa ollo y las p uebas ealizadas con
di e en es componen es: el lash, los se omo o es, los mo o es y la c eación de un se ido web. Es a
pa e del p oyec o es c ucial pa a comp ende cómo in eg a dis in os módulos y ecnologías,
asegu ando un desa ollo co ec o de ca a a la implemen ación conjun a pa a el coche eledi igido.
La cons ucción inal del coche se p oduce g acias a la aplicación de los conocimien os
adqui idos y la selección y desca e de ma e iales elec ónicos y es uc u ales. A pa i de una
es uc u a de coche mon ada con bloques que simulan el es ilo LEGO® Technic™, se e á cómo
in eg a los componen es elec ónicos pa a in en a cons ui un modelo iable. Aquí se desc ibi á el
p oceso de mon aje y del desa ollo del código necesa io pa a el uncionamien o del coche, basado en
el pa adigma de la POO (p og amación o ien ada a obje os) pa a el con ol del se ido web, la
cáma a, el mo o y el se o.
Finalmen e, el abajo incluye una bibliog a ía que eúne odas las uen es consul adas,
apo ando el undamen o eó ico y écnico necesa io pa a la ealización del p oyec o.
Palab as cla e
A duino, cáma a, coche, ESP32-Cam, POO, p o oboa d, SoC (sys em-on-ci cui ), mo o DC,
se omo o , web se e .
5

Abs ac
Remo e con ol oy ca
This wo k ocuses on he de elopmen o a emo e-con olled ca , basing i s c ea ion on he
chosen op ions ha will be p esen ed on his documen . The emo e-con olled ca has my own
imposi ion on he use o a came a wi h which i will be possible o see om inside he cockpi as i i
we e a pilo . The managemen sys em will be con olled om a web page ha will ha e he simula ed
con olle and a window o display he ideo.
In he in oduc ion you will see he easons ha mo i a es his p ojec , he objec i es o be
achie ed and a wo k plan o guide he de elopmen . F om he e, di e en op ions will be conside ed
in o de o de e mine he basis on which he emo e con olled ca will be c ea ed, ollowing hese
al e na i es: he Raspbe y Pi, A duino and ESP-32 CAM.
Once i is de ined wha he ca 's logic will be p og ammed on, a lea ning p ocess ocused on
A duino is ca ied ou . This is because he basis on which I s a is e y low, and he e is no p io
knowledge wi h any o he h ee op ions. In his s age, I desc ibe he ma e ials ha a e used in and
a ious ini ial guided p ojec s a e ca ied ou o become amilia wi h he pla o m, such as he
p og amming o LEDs, he use o pho o ansis o s, empe a u e senso s, se o mo o s, il senso s and
he con ol o mo o s using a H-b idge. These exe cises will allow me o acqui e he undamen al
knowledge necessa y o ad ance in he de elopmen o he ca . I will be men ioned la e , bu only
hose ha p o ide ideas o he u u e ca ha e been included in he epo , al hough in eali y he e
ha e been many mo e.
The lea ning con inues wi h he explo a ion o he SoC (sys em-on-chip) ESP32 y
ESP32-CAM, whe e he epo de ails he con igu a ion o he en i onmen and he es s done wi h
di e en componen s such as he lash, se o mo o s, mo o s and he c ea ion o a web page. This
chap e o he p ojec is capi al o unde s and how o in eg a e di e en pa s, modules and
echnologies, ensu ing he co ec de elopmen owa ds he u u e emo e-con olled ca .
The inal chap e con ains he assembly o he ca , which is p oduced hanks o he
acknowledgemen acqui ed and he selec ion o disca d o ma e ials, bo h elec onic and s uc u als.
S a ing wi h a ca s uc u e assembled wi h blocks ha simula e LEGO® Technic™, I will y o join
all he componen s o c ea e a iable ca . In his memo you can see he p og ess o building and
de eloping he necessa y code o he co ec ope a ion o he ca . This code is based on he OOP
(objec o ien ed p og amming) pa adigm which allows he encapsula ion and abs ac ion o he
handling o he came a, mo o and se o mo o .
Finally, he memo also includes a bibliog aphy ha b ings oge he all he sou ces o
in o ma ion consul ed, which p o ided he ounda ion o he heo e ical and echnical knowledge
necessa y o ca y ou his p ojec .
Keywo ds
A duino, came a, ca , ESP32-Cam, POO, p o oboa d, SoC (sys em-on-ci cui ), mo o DC,
se omo o , web se e .
6
Índice de con enidos
Dedica o ia..............................................................................................................................................3
Ag adecimien os.....................................................................................................................................3
Resumen..................................................................................................................................................5
Coche de jugue e eledi igido............................................................................................................5
Palab as cla e.................................................................................................................................... 5
Abs ac ...................................................................................................................................................5
Remo e con ol oy ca ...................................................................................................................... 6
Keywo ds...........................................................................................................................................6
In oducción..........................................................................................................................................11
Mo i ación.......................................................................................................................................11
Mo i a ion....................................................................................................................................... 12
Obje i os..........................................................................................................................................13
Objec i es.........................................................................................................................14
Plan de abajo................................................................................................................................. 15
Wo k plan........................................................................................................................................ 16
El coche eledi igido.............................................................................................................................17
1. Capí ulo I: Elección del o ma o................................................................................................. 17
1.1. Opciones.............................................................................................................................17
1.1.1. Raspbe y..................................................................................................................17
1.1.2. A duino.....................................................................................................................17
1.1.3. ESP-32 CAM............................................................................................................17
1.2. Decisión inal.....................................................................................................................17
2. Capí ulo II: Ap endiendo A duino.............................................................................................. 18
2.1. Ma e iales...........................................................................................................................18
2.2. P oyec os de ap endizaje....................................................................................................20
2.2.1. LED.......................................................................................................................... 20
2.2.2. Resis encias LDR..................................................................................................... 23
2.2.3. Senso de empe a u a.............................................................................................. 26
2.2.4. Se omo o ............................................................................................................... 29
2.2.5. Piezoeléc ico........................................................................................................... 32
2.2.6. Senso de inclinación................................................................................................34
2.2.7. Puen e-H...................................................................................................................37
3. Capí ulo III: Ap endiendo sob e ESP32 y ESP32-CAM.............................................................41
3.1. Disposición pa a desa ollo................................................................................................41
3.1.1. Nue o ma e ial......................................................................................................... 41
3.1.2. Cons ucción del en o no..........................................................................................43
3.2. P uebas...............................................................................................................................44
3.2.1. Flash......................................................................................................................... 44
3.2.2. Se omo o ............................................................................................................... 45
3.2.3. Mo o ........................................................................................................................47
7
3.2.4. Web se e ................................................................................................................50
4. Capí ulo IV: Cons uyendo el coche............................................................................................53
4.1. Ma e iales...........................................................................................................................53
4.1.1. Componen es elec ónicos........................................................................................53
4.1.2. Componen es es uc u ales.......................................................................................54
4.2. Código................................................................................................................................55
4.2.1. main.ino....................................................................................................................56
4.2.2. MyWebSe e .h........................................................................................................57
4.2.3. MyCame a.h.............................................................................................................61
4.2.4. MyMo o .h................................................................................................................62
4.2.5. MySe o.h................................................................................................................ 64
4.2.6. webcode.h.................................................................................................................66
4.3. Mon aje.............................................................................................................................. 69
Conclusiones y abajo u u o.............................................................................................................77
Conclusions and u u e wo k..............................................................................................................78
Bibliog a ía........................................................................................................................................... 79
8
Índice de figu as
Figu a 1-1. El o igen del p oyec o......................................................................................................... 11
Figu a 1-2. The inspi a ion o he p ojec .............................................................................................. 12
Figu a 2-1. Ci cui o con LED................................................................................................................ 21
Figu a 2-2. Ci cui o con esis encia LDR.............................................................................................. 24
Figu a 2-3. Ci cui o con senso de empe a u a.....................................................................................27
Figu a 2-4. Ci cui o con se omo o ......................................................................................................30
Figu a 2-5. Ci cui o con zumbado piezoeléc ico.................................................................................33
Figu a 2-6. Ci cui o con senso de inclinación...................................................................................... 35
Figu a 2-7. Ci cui o con puen e-H......................................................................................................... 38
Figu a 4-1. Manual de cons ucción del coche...................................................................................... 54
Figu a 4-2. Esquema de uncionamien o en el a chi o p incipal...........................................................55
Figu a 4-3. Diag ama de la clase MyWebSe e ................................................................................... 57
Figu a 4-4. Diag ama de la clase MyCame a.........................................................................................61
Figu a 4-5. Diag ama de la clase MyMo o ...........................................................................................62
Figu a 4-6. Diag ama de la clase MySe o............................................................................................64
Figu a 4-7. Base del coche. T ansmisión y di ección............................................................................ 69
Figu a 4-8. Sis ema mon ado en la p o oboa d......................................................................................70
Figu a 4-9. Sis ema mon ado en la p o oboa d......................................................................................71
Figu a 4-10. Sis ema con el ESP32-CAM mon ado.............................................................................. 72
Figu a 4-11. Se o conec ado a la di ección..........................................................................................73
Figu a 4-12. Mo o con eng anaje de jugue e conec ado a la ansmisión.............................................74
Figu a 4-13. Alimen ación del coche: 2 pilas de 9V..............................................................................75
Figu a 4-14. Coche e minado con la capo a abie a..............................................................................76
Figu a 4-15. Coche de jugue e eledi igido............................................................................................76
9
Wo k plan
The goal is o comple e he en i e p ojec wi hin a maximum o 5 mon hs o e ec i e wo king
ime. Tha is, no om he s a o he end da e, bu a he de ined in weeks o ac ual wo k. I will
b eak his down in a able wi h ou columns: phase (P) o simul aneously compa ible wo k, ask,
desc ip ion, and du a ion (T) in weeks.
P
T abajo
Desc ipción
T
1*
In oduc ion
De ine he mo i a ion, objec i es, and p ojec plan.
1
Choice o Fo ma
Explo e and decide on he mos sui able ha dwa e pla o m o
build he ca . Resea ch op ions, weigh p os and cons, and
make a inal decision.
2
2
Lea ning A duino
Comple e he 15 p ojec s om he A duino s a e pack,
lea ning abou componen s and hei unc ionali y.
4
-
6
3
Lea ning ESP32
Lea n o use he ESP32 and ESP32-CAM pla o ms o
in eg a e hem in o he p ojec by eplica ing he A duino
p ojec s in he new en i onmen .
3
-
5
4
Code De elopmen
Design, de elop, and es he code needed o he ca 's
ope a ion, based on he objec -o ien ed p og amming pa adigm
(OOP).
3
-
4
Ci cui Assembly
Build a po able ci cui , based on he c ea ed diag ams, ha
can be in eg a ed in o he ca .
2
Ca Assembly
Assemble and modi y he ca o in eg a e he ci cui wi hin he
ca ’s s uc u e.
1
-
2
5
Tes ing
Conduc unc ional es s o check and co ec he beha io o
he applied ci cui .
2
6
Repo
Final p epa a ion o he epo and p esen a ion.
1
Tabla I-2. Wo k plan
[*] - Phase 1 is a blocking phase o he es o he planning. The e o e, i is no possible o p oceed
wi h u he planning un il i is comple ed.
16

El coche eledi igido
1. Capí ulo I: Elección del o ma o
1.1. Opciones
1.1.1. Raspbe y
Fue mi idea inicial pues o que he is o que es a e ec os p ác icos un o denado mini, con una
g an capacidad de cómpu o y p ocesamien o. Se le puede me e un sis ema ope a i o comple o y
hace uso de componen es ex e nos conec ados a la placa. Tiene in e az g á ica, sopo e pa a
múl iples lenguajes de p og amación y, muy impo an e, una a je a de ed pa a pode maneja el
coche de o ma inalámb ica.
1.1.2. A duino
Mi plan B e a usa una placa de A duino, pues o que du an e la explo ación es algo que había
is o que e a posible. Tienen un bajo consumo de ene gía, son muy p og amables pa a dis in as a eas
y es á diseñado pa a con ol de ha dwa e en iempo eal, o sea, muy ú il pa a mo o es y cáma as.
Posee además un en o no de p og amación dedicado pa a subi el ma e ial y pueden añadi se módulos
pa a que engan conexión Wi-Fi.
1.1.3. ESP-32 CAM
Es a ue la ecomendación de mi u o . Yo no sabía que exis ía así que explo é sob e ello. Es e
SoC es capaz de ansmi i ídeo g acias a su cáma a in eg ada y capacidades Wi-Fi. Es bas an e
ba a a (menos de 5 €), es bas an e pequeña y iene un bajo consumo de ene gía. Y se puede p og ama
en el A duino IDE, Pla o mIO, o di ec amen e en C++ o Py hon.
1.2. Decisión inal
El p ime desca e se ía la Raspbe y. Todo lo bueno que iene es a placa es lo que la hace
innecesa ia pa a es e p oyec o. Usa una Raspbe y pa a con ola un coche eledi igido se ía un
malgas o de po encia, o sea, “ma a moscas a cañonazos”.
En e las dos opciones que es aban, decidí apoya me en la expe iencia de mi u o , Juan
Ca los debido a mi bajo conocimien o en la ma e ia y su más que sob ada y con as ada expe iencia.
En cualquie caso, ESP32-CAM es un apa a o dedicado con compa ibilidad con los p og amas de
desa ollo de A duino. Bajo consumo y mucha mayo po encia que una placa de A duino, además de
conec i idad.
Un ac o ambién di e encial es el p ecio, pues o que sé que hab á que comp a un mon ón de
ma e ial y debo op imiza al máximo el p esupues o que engo.
17
2. Capí ulo II: Ap endiendo A duino
Pa a el ap endizaje de ci cui os op é po comp a el S a e Ki de A duinoⓇpo que e a la
mane a más di ec a pa a ap ende desde ce o. El lib o que ae es de un ni el básico y es á explicado
pa a p incipian es. Enseña de una mane a muy p ác ica y dinámica e incluye una placa A duino, un
mon ón de componen es elec ónicos (senso es, LED, esis encias, mo o es…). Además como lo
enden en iendas no engo que espe a a que enga po co eo, aho ando iempo y dine o. La idea de
es os p oyec os es eplica los más a des con el ESP32 y así comp ende su uncionamien o más
p o undamen e.
2.1. Ma e iales
A con inuación se mues a una abla con los componen es que incluye el pack:
Nomb e
Can idad
Especi icaciones
Base de plás ico
1
-
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
70
5 mm ~ 50 mm
Condensado es
3
100 µF
Condensado es
5
100 nF
Condensado es
5
100 pF
Conec o de pila 9V
1
-
Diodos
7
-
D i e de mo o es
1
Puen e en H
LED
1
Blanco b illan e
LED
1
RGB
LED
8
Rojo
LED
8
Ve de
LED
8
Ama illo
LED
3
Azul
Mo o DC pequeño
1
6 V ~ 9 V
Op oacoplado es
2
-
Pan alla LCD
1
16x2 ca ac e es
18
Nomb e
Can idad
Especi icaciones
Piezoeléc ico
1
-
Placa A duino UNO
1
R3
Placa de p o o ipado
1
29x10 pines
Plás icos anspa en es
3
RGB de 2x10 mm
Po encióme os
3
10 kΩ
Pulsado es
10
-
Resis encias
22
220 Ω
Resis encias
7
560 Ω
Resis encias
7
1 kΩ
Resis encias
7
4,7 kΩ
Resis encias
22
10 kΩ
Resis encias
7
1 MΩ
Resis encias
7
10 MΩ
Senso de inclinación
1
-
Senso de luz
6
Senso de empe a u a
1
-
Se omo o pequeño
1
-
Ti a de pines macho
1
40x1 pines
T ansis o es
2
MOSFET
T ansis o es
5
NPN
Tabla 2-1. Ma e iales de ap endizaje
19
2.2. P oyec os de ap endizaje
Teniendo en cuen a que se empezaba de ce o, leí e hice odos los p oyec os del lib o. Sin
emba go, pa a simpli ica inclui é en la memo ia sólo los es ic amen e necesa ios y que me die on
ideas pa a su implemen ación en el coche. En cada apa ado se pod á lee cuál es la idea que saqué
pa a el ehículo, además de una b e e explicación del p oyec o, la lis a de ma e iales necesa ios y el
código con la explicación de unciones. Los p oyec os, que ya se pudie on lee en el índice, son:
- LED. P ime con ac o
- Resis encia LDR.. Fa os o osensibles
- Senso de empe a u a. Tempe a u a in e io .
- Piezoeléc ico. Cláxon.
- Senso de inclinación. Suspensión
- Puen e-H. Mo o DC.
2.2.1. LED
El obje i o es ap ende sob e la lógica de con ol con bo ones, el uso de en adas digi ales y la
in e acción básica con LED. El p oyec o a a de simula el uncionamien o de un semá o o de bo ón
u ilizando es LED de los colo es ca ac e ís icos y un bo ón. El pulsado que ac i a la secuencia de
LED, que pasa á de ojo a ama illo y luego a e de con un lapso de 0,25 s. Es e p oyec o lo incluyo
pa a que se pueda se conscien e de la base de la que se pa e, pues o que es a es la p ime a ez que
p og ama ía sob e un mic ocon olado . Pa a es e ci cui o ue on necesa ios los siguien es ma e iales:
Nomb e
Can idad
Especi icaciones
Básicas
A duino UNO Ⓡ
1
R3
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
-
Usa a olun ad
P o oboa d
1
-
Especí icas
LED
3
Rojo, ama illo y e de
Pulsado es
1
-
Resis encias
4
220 Ω (3 uds.), 10 kΩ (1 ud.)
Tabla 2-2. Ma e iales del ci cui o con LED
20
Figu a 2-1. Ci cui o con LED. Diag ama sacado de [1].
El bo ón pulsado se conec a al pin digi al de A duino ‘2’ y a una esis encia pull-down pa a
asegu a que el es ado po de ec o sea bajo (LOW). Los LED se conec an a los pines ‘3’, ‘4’ y ‘5’ y se
usan esis encias pa a limi a la co ien e. El código de es e ci cui o, sacado de [2], es el siguien e:
in swi chS a e =0;
oid se up() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, INPUT);
}
oid loop() {
swi chS a e =digi alRead(2);
i (swi chS a e == LOW) {
digi alW i e(3, HIGH);
digi alW i e(4, LOW);
digi alW i e(5, LOW);
}
else {
digi alW i e(3, LOW);
digi alW i e(4, LOW);
digi alW i e(5, HIGH);
delay(250);
digi alW i e(4, HIGH);
digi alW i e(5, LOW);
21

delay(250);
}
}
Guía de unciones nue as usadas:
● oid se up(): se llama una sola ez pa a inicializa las a iables.
● oid pinMode(in pin, in mode): con igu a el pin como en ada o salida.
○pin: núme o del pin cuyo modo se ha de con igu a .
○mode: INPUT, OUTPUT, o INPUT_PULLUP.
● oid loop(): i e a sob e sí mismo una y o a ez.
●in digi alRead(in pin): lee el alo de un pin especi icado.
○pin: núme o del pin de donde se quie e lee la en ada.
○ e u n: 0 (LOW) o 1 (HIGH).
● oid digi alW i e(in pin, in alue): esc ibe en el pin el alo que ido.
○pin: núme o del pin cuyo alo se ha de con igu a .
○ alue: 0 (LOW) o 1 (HIGH).
● oid delay(in ms): pausa el p og ama un iempo en milisegundos.
○ms: núme o de milisegundos a espe a .
22
2.2.2. Resis encias LDR
El obje i o es ap ende sob e la in e acción analógica, el con ol de LED RGB y cómo
combina colo es de mane a dinámica con A duino. El p oyec o es c ea una luz que puede cambia de
colo ajus ando la in ensidad de los componen es ojo, e de y azul de un LED RGB median e la
abso cion de la luz de es esis encias LDR, cada uno asignado a un colo (R-G-B). Cada esis encia
LDR con ola la in ensidad de un colo del LED RGB: uno pa a el ojo, o o pa a el e de y o o pa a
el azul. Tapando las esis encias LDR se puede ajus a el b illo de cada colo , lo que pe mi e mezcla
los colo es y c ea di e en es onos. El LED RGB combina es os colo es pa a mos a una a iedad de
colo es. Lo in e esan e de es e p oyec o y aplicable pa a el ehículo inal es pode usa las luces de
c uce cuando es é oscu o. Pa a es e ci cui o ue on necesa ios los siguien es ma e iales:
Nomb e
Can idad
Especi icaciones
Básicas
A duino UNO Ⓡ
1
R3
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
-
Usa a olun ad
P o oboa d
1
-
Especí icas
LED
3
RGB
Resis encias
6
220 Ω (3 uds.), 10 kΩ (3 uds.)
Resis encias LDR
3
-
Tabla 2-3. Ma e iales del ci cui o con esis encia LDR.
23
Figu a 2-2. Ci cui o con esis encia LDR.. Diag ama sacado de [3].
El LED RGB se conec a a es pines PWM de A duino: ‘9’, ‘10’ y ‘11’. Se u ilizan
esis encias pa a limi a la co ien e de cada componen e de colo . Las esis encias LDR se conec an a
es pines analógicos de A duino: ‘A0’, ‘A1’ y ‘A2’. Los ex emos de las esis encias LDR an a
GND y 5V, y el pin cen al se conec a a las en adas analógicas. El código de es e ci cui o, basado en
[4], es el siguien e:
cons in gLEDp =9;
cons in LEDp =10;
cons in bLEDp =11;
cons in Senso =A0;
cons in gSenso =A1;
cons in bSenso =A2;
in Value =0;
in gValue =0;
in bValue =0;
in SensVal =0;
in gSensVal =0;
in bSensVal =0;
oid se up() {
Se ial.begin(9600);
pinMode(gLEDp, OUTPUT);
pinMode( LEDp, OUTPUT);
pinMode(bLEDp, OUTPUT);
}
oid loop() {
24
SensVal =analogRead( Senso );
delay(5);
gSensVal =analogRead(gSenso );
delay(5);
bSensVal =analogRead(bSenso );
Se ial.p in ("Raw Senso Values ed: ");
Se ial.p in ( SensVal);
Se ial.p in (" g een: ");
Se ial.p in (gSensVal);
Se ial.p in (" blue: ");
Se ial.p in ln(bSensVal);
Value = SensVal /4;
gValue =gSensVal /4;
bValue =bSensVal /4;
Se ial.p in ("Mapped Senso Values ed: ");
Se ial.p in ( Value);
Se ial.p in (" g een: ");
Se ial.p in (gValue);
Se ial.p in (" blue: ");
Se ial.p in ln(bValue);
analogW i e( LEDp, Value);
analogW i e(gLEDp, gValue);
analogW i e(bLEDp, bValue);
}
Guía de unciones nue as usadas:
●Se ial.begin(in baud): es ablece los baudios del moni o en se ie.
○baud: elocidad. Usualmen e 9600 o 115200 baudios.
●in analogRead(in pin): lee el alo analógico de un pin especí ico.
○pin: núme o del pin de donde se quie e lee la en ada.
○ e u n: alo de 10 bi s (0-1024)
●Se ial.p in (s ing ex ): plasma en el moni o en se ie un ex o.
○ ex : el mensaje que se quie e en ia .
● oid analogW i e(in pin, in alue): plasma un alo analógico en un pin.
○pin: núme o del pin cuyo alo se ha de con igu a .
○ alue: señal PWM (pulse wid h modula ion) de 0 a 255.
25
2.2.5. Piezoeléc ico
El obje i o de es e p oyec o es usa senso es analógicos pa a cap u a da os del en o no y
con e i los en señales sono as median e un zumbado piezoeléc ico. Al cub i o des apa un senso
o osensible, la ecuencia del sonido cambia y gene a dis in os sonidos. Es e p oyec o pod ía se i
pa a implemen a un claxon en el ehículo. Pa a es e ci cui o ue on necesa ios los siguien es
ma e iales:
Nomb e
Can idad
Especi icaciones
Básicas
A duino UNO Ⓡ
1
R3
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
-
Usa a olun ad
P o oboa d
1
-
Especí icas
Piezoeléc ico
1
100 μF
Resis encia
1
10 kΩ
Resis encia LDR
1
-
Tabla 2-6. Ma e iales del ci cui o con zumbado piezoeléc ico
32

Figu a 2-5. Ci cui o con zumbado piezoeléc ico. Diag ama sacado de [9].
La esis encia LDR a conec ada a 5V y al pin analógico de ‘A0’, y el piezoeléc ico a
conec ado al pin digi al ‘8’ y el pin nega i o a GND. El código del ci cui o, sacado de [10], es el
siguien e:
in sensVal;
in sensLow =1023;
in sensHigh =0;
cons in ledPin =13;
oid se up() {
pinMode(ledPin, OUTPUT);
digi alW i e(ledPin, HIGH);
while (millis() <5000) {
sensVal =analogRead(A0);
i (sensVal >sensHigh) {
sensHigh =sensVal;
}
i (sensVal <sensLow) {
sensLow =sensVal;
}
}
digi alW i e(ledPin, LOW);
Se ial.p in ln("Se up inished");
}
oid loop() {
sensVal =analogRead(A0);
in pi ch =map(sensVal, sensLow, sensHigh, 50,4000);
one(8, pi ch, 20);
delay(10);
}
Guía de unciones nue as usadas:
●unsigned long millis(): de uel e el alo en milisegundos desde que empezó el p og ama.
○ e u n: un alo en e o ipo long que ep esen a los milisegundos desde el inicio.
● oid one(in pin, unsigned in equency, unsigned long du a ion): gene a una onda.
○pin: el núme o de pin del piezoeléc ico.
○ equency: la ecuencia a la que a a ib a el piezoeléc ico.
○du a ion: el iempo que a a sona en milisegundos.
33
2.2.6. Senso de inclinación
El obje i o de es e p oyec o es con ola múl iples salidas digi ales (LED) median e la
de ección de un es ado u ilizando un senso de inclinación. El senso de inclinación de ec a si el
disposi i o es á inclinado y basado en la o ien ación de ec ada, los LED se encienden o apagan de
mane a secuencial. Es e p oyec o es in e esan e po que pod ía se i pa a maneja digi almen e la
suspensión del ehículo. Pa a es e ci cui o ue on necesa ios los siguien es ma e iales:
Nomb e
Can idad
Especi icaciones
Básicas
A duino UNO Ⓡ
1
R3
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
-
Usa a olun ad
P o oboa d
1
-
Especí icas
LED
6
Rojos
Resis encia
7
220 Ω (6 uds.) y 10 kΩ (1 ud.)
Senso de inclinación
1
-
Tabla 2-7. Ma e iales del ci cui o con senso de inclinación
34
Figu a 2-6. Ci cui o con senso de inclinación. Fo og a ía de [11]
Pa a el uncionamien o se conec an los LED a pines digi ales ‘2’ a ‘7’, cada uno con una
esis encia de 220 Ω en se ie pa a limi a la co ien e y el senso se conec a al pin digi al ‘8’ y a GND.
El código del ci cui o, basado en [12], es el siguien e:
cons in swi chPin =8;
unsigned long p e Time =0;
in swi chS a e =0;
in p e Swi chS a e;
in led =2;
long in e al =1000;
oid se up() {
o (in x=2; x <8; x++) {
pinMode(x, OUTPUT);
}
pinMode(swi chPin, INPUT);
}
oid loop() {
unsigned long cu en Time =millis();
i (cu en Time -p e Time >in e al) {
p e Time =cu en Time;
digi alW i e(led, HIGH);
35
led++;
}
i (led == 7) {
// Apaga
}
// Lec u a del senso (pin 8)
swi chS a e =digi alRead(swi chPin);
i (swi chS a e != p e Swi chS a e) {
o (in x=2; x <8; x++) {
digi alW i e(led, LOW);
}
led =2;
p e Time =cu en Time;
}
p e Swi chS a e =swi chS a e;
}
36
2.2.7. Puen e-H
El obje i o de es e p oyec o es con ola un mo o DC u ilizando señales PWM ges ionadas
median e un puen e-H. El po encióme o ansmi e un alo analógico a la placa y es e aduce la señal
pa a con ola la elocidad de o ación del mo o . El ci cui o iene dos bo ones, uno que enciende y
apaga el mo o , y o o que in ie e la señal del mo o pa a que aya hacia delan e yhacia de ás.
Sendas uncionalidades se án ú iles en el plan eamien o del coche. Pa a es e ci cui o ue on necesa ios
los siguien es ma e iales:
Nomb e
Can idad
Especi icaciones
Básicas
A duino UNO Ⓡ
1
R3
Cable USB
1
-
Cables de p o o ipado
2
-
Cables ígidos de p o o ipado
-
Usa a olun ad
P o oboa d
1
-
Especí icas
Ba e ía
1
9V
Conec o de ba e ía
1
-
Mo o
1
DC
Po encióme o
1
-
Puen e-H
1
L293D
Pulsado
2
-
Resis encia
2
10 kΩ
Tabla 2-8. Ma e iales del ci cui o con puen e-H
37

Figu a 2-7. Ci cui o con puen e-H. Fo og a ía de [13]
Pa a el uncionamien o hay que ene en cuen a como ope a el puen e-H. Es e ci cui o
in eg ado se usa pa a con ola mo o es DC o paso a paso. En es e caso se usa un mo o DC, a a es
del manejo de señales digi ales con e idas en el A duino UNO. Los pines en su nume ación an
p ime o la columna izquie da de a iba a abajo y luego la columna de echa de abajo a a iba, y los
necesa ios pa a su uso son los siguien es:
Pin
Nomb e
Desc ipción
1
Enable 1,2
Ac i ación de la señal (ON-OFF)
2
Inpu 1
En ada del mo o 1
3
Ou pu 1
Salida del mo o (5V)
4
GND
-
5
GND
-
6
Ou pu 2
Salida del mo o (GND)
7
Inpu 2
En ada del mo o 2
8
Vcc2
Alimen ación del mo o a 9V
16
Vcc1
Alimen ación es ánda a 5V
Tabla 2-9. Pines del puen e-H
El código del ci cui o, basado en [14], es el siguien e:
cons in con olPin1 =2;
38
cons in con olPin2 =3;
cons in enablePin =9;
cons in di ec ionSwi chPin =4;
cons in onO Swi chS a eSwi chPin =5;
cons in po Pin =A0;
in onO Swi chS a e =0;
in p e iousOnO Swi chS a e =0;
in di ec ionSwi chS a e =0;
in p e iousDi ec ionSwi chS a e =0;
in mo o Enabled =0;
in mo o Speed =0;
in mo o Di ec ion =1;
oid se up() {
pinMode(di ec ionSwi chPin, INPUT);
pinMode(onO Swi chS a eSwi chPin, INPUT);
pinMode(con olPin1, OUTPUT);
pinMode(con olPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
digi alW i e(enablePin, LOW);
}
oid loop() {
onO Swi chS a e =digi alRead(onO Swi chS a eSwi chPin);
delay(1);
di ec ionSwi chS a e =digi alRead(di ec ionSwi chPin);
mo o Speed =analogRead(po Pin)/4;
i (onO Swi chS a e != p e iousOnO Swi chS a e) {
i (onO Swi chS a e == HIGH) {
mo o Enabled = !mo o Enabled;
}
}
i (di ec ionSwi chS a e != p e iousDi ec ionSwi chS a e) {
i (di ec ionSwi chS a e == HIGH) {
mo o Di ec ion = !mo o Di ec ion;
}
}
i (mo o Di ec ion == 1) {
digi alW i e(con olPin1, HIGH);
digi alW i e(con olPin2, LOW);
}
39
else {
digi alW i e(con olPin1, LOW);
digi alW i e(con olPin2, HIGH);
}
i (mo o Enabled == 1) {
analogW i e(enablePin, mo o Speed);
}
else {
analogW i e(enablePin, 0);
}
p e iousOnO Swi chS a e =onO Swi chS a e;
p e iousDi ec ionSwi chS a e =di ec ionSwi chS a e;
}
40
3. Capí ulo III: Ap endiendo sob e ESP32 y ESP32-CAM
Como se mencionó al p incipio, pa a es e p oyec o se decidió hace uso del SoC
(sys em-on-chip) ESP32 pa a p ac ica debido a su capacidad de p ocesamien o, pequeño amaño y
conec i idad Wi-Fi. Además, su e sión ESP32-CAM, a pesa de ene menos pines incluye un
módulo pa a el uso de una cáma a, imp escindible pa a el ehículo.
3.1. Disposición pa a desa ollo
3.1.1. Nue o ma e ial
Es a es una lis a del ma e ial que ue comp ado. No hay ma e iales usados de exis encias
p opias pues yo nunca había hecho uso de es e ipo de ma e ial. La mayo ía ue comp ado a lo la go
de odo el iempo de p oyec o, incluyendo los que se u ie on que comp a de o ma imp e is a.
Nomb e
Can idad
Especi icaciones
Adap ado de uen e de alimen ación 3,3V/5V
5
MB102 B eadboa d
Adap ado FTDI
3
Cabezal de 6 pines macho
Al omb illa de co e e de A3
1
44×30 cm, 5 capas
Alica es co acables
1
-
An ena ex e na
1
-
Bobina de es año
2
-
Cables de p o o ipado hemb a
120
Colo es a iados
Cables de p o o ipado macho
240
Colo es a iados
Cable mic o-USB
2
-
Cable mini-USB
1
-
Cables ígidos de p o o ipado
540
14 longi udes dis in as
Cáma a compa ible con ESP32-CAM
3
OV2640
Coche mon able con bloques de cons ucción
1
Simila a los LEGO
Conec o de pila 9V
12
Ma ca YIXISI
ESP32-CAM
1
-
ESP32-CAM con ESP32-CAM-MB
2
Con módulo de p og amación
ESP32-WROOM-32
1
-
Módulo de bajada de DC a 3,3V
5
TECNOIOT 5pcs LM1117
Mul íme o
1
-
41
bool d i eST = alse;
bool p e D i eST = alse;
Las úl imas a iables con olan el es ado del mo o : encendido, elocidad y di ección.
in mo o Enabled =0;
in mo o Speed =0;
in mo o Di ec ion =1;
Al inicio del p og ama se es ablecen si los pines se án de en ada o salida, así como el pin que
se enca ga á de manda la señal al puen e-H. Así pues, los pines del puen e-H son de esc i u a, y los
de los bo ones son de lec u a.
oid se up() {
pinMode(bu onGea s, INPUT);
pinMode(bu onS a , INPUT);
pinMode(b idgeD i e, OUTPUT);
pinMode(b idgeRe s, OUTPUT);
pinMode(b idgeS a , OUTPUT);
// Con igu ación de canal PWM usando la nue a API ledcA ach
ledcA ach(b idgeS a , 5000,8); // Pin, F ecuencia, Resolución
// Inicia con el mo o desac i ado (0% de PWM)
ledcW i e(0,0);
}
En la p ime a pa e del bucle de uso se maneja el encendido y apagado del mo o . Se lee el
bo ón que lo acciona, se es ablece la elocidad a 128 (mi ad de po encia) y se pe mu a su es ado en
unción de la lec u a del mo o y p e io es ado. Es el mé odo oid ledcW i e(in pin, in eloci y) el
que se enca ga de asigna la elocidad al mo o .
oid loop() {
// MOTOR START
s a ST =digi alRead(bu onS a );
mo o Speed =128;
i (s a ST != p e S a ST) {
i (s a ST == HIGH) {
Se ial.p in ln(" => S a : " +mo o Enabled);
mo o Enabled = !mo o Enabled;
}
}
p e S a ST =s a ST;
i (mo o Enabled) {
ledcW i e(b idgeS a , mo o Speed);
}else {
ledcW i e(b idgeS a , 0);
}
Simila men e, en la segunda pa e se maneja la di ección. Sin emba go, es a iene una
peculia idad que ha de se explicada eniendo en cuen a el uso de los pines del puen e-H ya explicado
en el ejemplo de A duino. Pa a que el mo o o e ha de ene el pin GPIO 12 y GPIO 13 en es ados
48

HIGH y LOW opues os. La pe mu ación de es os dos es ados en los pines es lo que ha á que la
di ección de o ación a íe.
// MOTOR DIRECTION
d i eST =digi alRead(bu onGea s);
i (d i eST != p e D i eST) {
i (d i eST == HIGH) {
Se ial.p in ln(" => Di ec ion: " +mo o Di ec ion);
mo o Di ec ion = !mo o Di ec ion;
}
}
p e D i eST =d i eST;
i (mo o Di ec ion == 1) {
digi alW i e(b idgeD i e, HIGH);
digi alW i e(b idgeRe s, LOW);
}
else {
digi alW i e(b idgeD i e, LOW);
digi alW i e(b idgeRe s, HIGH);
}
}
49
3.2.4. Web se e
El se ido web es el más di ícil de en ende de odos. En es e caso se a a de la c eación de
un se ido en el pue o 80 de una IP de la ed local. No se necesi a nada especí ico pa a es a p ueba,
debido a que lo más impo an e es la comp ensión de la c eación de un se ido web. Po ello, paso
di ec amen e al desglose del código:
Lo p ime o es usa los includes necesa ios. #include <WiFi.h> si e pa a accede a la ed
local y #include <WebSe e > pa a c ea el se ido .
#include <WiFi.h>
#include <WebSe e .h>
Los c edenciales de la ed es án ocul os en o o a chi o (ob iamen e incluido en el
.gi igno e). Pa a no mezcla lo se c ea una a iable global a la que se le asigna la palab a de inida en
es e a chi o. Además, ambién hay que c ea el se ido en el pue o 80. Debe se una a iable global
po que debe se accedido desde los dos mé odos p incipales: oid se up() y oid loop().
cons cha *ssid =NETWORK;
cons cha *passwo d =PASSWORD;
WebSe e se e (80);
Pa a compa imen a el código y abs ae se lo máximo posible, y es o es algo que se usa á
mucho en el desa ollo inal, se ponen ue a de los dos mé odos que manejan el se ido . En es e
caso, el mé odo WebSe e .send(in code, cha * ype, cha * ex ) se enca ga de en ia un mensaje al
se ido con lo que debe p ocesa .
El pa áme o in code es el ipo de espues a que se quie e en ia . Son los códigos de es ado
HTTP:
●100+ (In o ma i o):
○100 - Con inue
○101 - Swi ching P o ocols
○102 - P ocessing (WebDAV)
●200+ (Éxi o):
○200 - OK (Respues a es ánda pa a solici udes HTTP exi osas)
○201 - C ea ed
○202 - Accep ed
○203 - Non-Au ho i a i e In o ma ion
○204 - No Con en (Respues a exi osa sin con enido)
○205 - Rese Con en
○206 - Pa ial Con en (U ilizado pa a ans e encias de a chi os)
●300+ (Redi ección):
○300 - Mul iple Choices
○301 - Mo ed Pe manen ly
○302 - Found (o 302 Tempo a ily Mo ed)
○303 - See O he
○304 - No Modi ied
○307 - Tempo a y Redi ec
○308 - Pe manen Redi ec
●400+ (E o es del Clien e):
○400 - Bad Reques
○401 - Unau ho ized
50
○403 - Fo bidden
○404 - No Found (Recu so no encon ado)
○405 - Me hod No Allowed
○406 - No Accep able
○408 - Reques Timeou
○409 - Con lic
○410 - Gone
○411 - Leng h Requi ed
○413 - Payload Too La ge
○414 - URI Too Long
○415 - Unsuppo ed Media Type
●500+ (E o es del Se ido ):
○500 - In e nal Se e E o
○501 - No Implemen ed
○502 - Bad Ga eway
○503 - Se ice Una ailable
○504 - Ga eway Timeou
○505 - HTTP Ve sion No Suppo ed
El segundo pa áme o cha * ype hace e e encia al ipo de con enido que se en ía al clien e:
- ex /h ml: Pa a en ia con enido HTML.
- ex /plain: Pa a en ia ex o plano sin o ma o.
- ex /css: Pa a en ia hojas de es ilo CSS.
- applica ion/json: Pa a en ia da os en o ma o JSON.
- applica ion/xml: Pa a en ia da os en o ma o XML.
- ex /ja asc ip : Pa a en ia sc ip s Ja aSc ip .
- image/png: Pa a en ia imágenes en o ma o PNG.
- image/jpeg: Pa a en ia imágenes en o ma o JPEG.
- image/gi : Pa a en ia imágenes en o ma o GIF.
- image/s g+xml: Pa a en ia imágenes en o ma o SVG.
- applica ion/pd : Pa a en ia a chi os PDF.
- applica ion/oc e -s eam: Pa a en ia da os bina ios o a chi os desca gables.
- audio/mpeg: Pa a en ia a chi os de audio en o ma o MP3.
- ideo/mp4: Pa a en ia a chi os de ideo en o ma o MP4.
- on /wo 2: Pa a en ia uen es web en o ma o WOFF2.
- ex /cs : Pa a en ia a chi os de da os en o ma o CSV.
Po úl imo es á el cha * ex con la in o mación en cues ión. En es e caso es un a chi o
HTML.
oid handleRoo () {
se e .send(200," ex /h ml", h ml_index);
}
Lo p ime o que se hace al inicia el p og ama es in en a es ablece conexión con la ed local
con el mé odo oid WiFi.begin(cha * ssid, cha * passwo d). T as es o se espe a de o ma bloquean e
a que la conexión es é es ablecida con el mé odo in WiFi.s a us().
oid se up() {
Se ial.begin(115200);
WiFi.begin(ssid, passwo d);
while (WiFi.s a us() != WL_CONNECTED) {
delay(1000);
Se ial.p in (".");
51
}
Se ial.p in ln(" Done! n");
Po úl imo se es ablecen los manejado es con con el mé odo oid Se e .on(cha * whe e, in
ype, oid handle ). El p ime pa áme o ma ca dónde se aloja esa pe ición en el se ido . El segundo
pa áme o es el mé odo HTTP que maneja á. Puede se :
- HTTP_GET: Solici udes GET, las más comunes pa a ob ene ecu sos del se ido .
- HTTP_POST: Solici udes POST, pa a en ia da os al se ido .
- HTTP_PUT: Solici udes PUT, que se u ilizan pa a ac ualiza o c ea ecu sos.
- HTTP_DELETE: Solici udes DELETE, u ilizadas pa a elimina ecu sos del se ido .
- HTTP_OPTIONS: Solici udes OPTIONS, pa a ob ene las opciones de comunicación..
- HTTP_PATCH: Solici udes PATCH, que se u ilizan pa a ealiza ac ualizaciones.
Po úl imo el oid handle , que puede se un mé odo que hay en o a pa e del código (como
en es e caso) o una unción lambda (como se á en el código de ini i o).
se e .on("/", HTTP_GET, handleRoo );
se e .begin();
Se ial.p in ln(" => Se e HTTP s a ed");
}
En el bucle p incipal simplemen e se usa el mé odo oid Se e .handleClien () que se enca ga
de e si hay nue as conexiones o desconexiones, si hay alguna solici ud HTTP en an e al se ido y
ambién se asegu a de que se en íe una espues a.
oid loop() {
se e .handleClien ();
}
52
4. Capí ulo IV: Cons uyendo el coche
4.1. Ma e iales
4.1.1. Componen es elec ónicos
La lis a ce ada de ma e iales elec ónicos que han sido usados pa a mon a el ci cui o es el
siguien e:
Nomb e
Can idad
Especi icaciones
Adap ado de uen e de alimen ación 3,3V/5V
1
MB102 B eadboa d
Adap ado del eng anaje del mo o
1
-
Ba e ía
2
9V
B azo del se omo o
1
Cuña
Cables de p o o ipado hemb a
20
Flexibles
Cables de p o o ipado macho
1
Flexibles
Condensado
2
100 µF
Conec o de ba e ía
2
-
ESP32-CAM
1
-
Mo o
1
DC
Pines macho
21
-
P o oboa d
1
Pequeña
Puen e-H
1
L293D
Se omo o
1
-
Tabla 4-1. Componen es elec ónicos del coche
La es uc u a se di ide en 4 pa es, que se án explicadas con más de alle en el apa ado de
mon aje con diag amas y o og a ías. En la explicación se sub ayan los elemen os que pe enecen a
es as secciones. Las cua o zonas son:
-Alimen ación, en el asien o del copilo o. Es a incluye 2 ba e ías 9V: una alimen ando el
adap ado de uen e de alimen ación, con igu ado pa a p opo ciona únicamen e 5V, y la pila
del mo o , que se conec a di ec a a la p o oboa d.
-Cableado, en la zona del mo o . Con la p o oboa d como base, se han usado dos i as de 5
pines macho pa a conec a odos los componen es que necesi en 5V y GND, espec i amen e.
O a i a de 8 pines macho se ha usado pa a conec a los cables de p o o ipado hemb a del
puen e-H, y o os 2 pines macho suel os se han usado pa a elemen os que había que conec a
desde un e minal hemb a a la placa. Sob e es a placa se coloca el ya mencionado puen e-H y
las conexiones del se o y del mo o .
53

-Mo o , conec ado a la ansmisión. Es e mo o DC iene encajado una pieza ci cula de
plás ico o iginal de A duino que a su ez se ha pegado a un eng anaje que ajus a la medida
del mo o a la de la ansmisión. Con es o nos asegu amos que el mo o consiga encaja se
den o de la es uc u a.
-Se o, conec ado a la di ección. Debajo del salpicade o se ha hecho un hueco pa a que quepa
el se omo o . Es e es á pegado a un eng anaje que se enca ga de ansmi i los gi os del
olan e a las uedas.
4.1.2. Componen es es uc u ales
Pa a cons ui la ca casa del coche op é po cons ui un coche basado en la es uc u a de
bloques que simulan el es ilo LEGO® Technic™. Es o acili a la mayo pa e de la cons ucción
po que e dan una base sólida sob e la que abaja y no hay que p eocupa se exage adamen e po la
in eg idad es uc u al del cue po. Es cie o que hay que sali se del manual pa a in eg a co ec amen e
los componen es, pe o haciendo la alo ación, es mejo que ab ica de mane a ín eg a y au ónoma un
chasis. Asimismo, es bas an e asequible económicamen e: menos de 16 €.
Figu a 4-1. Manual de cons ucción del coche
54
4.2. Código
La es uc u a gene al del código es á basado en el pa adigma de la p og amación o ien ada a
obje os (POO). Usando es o, he di idido las di e en es uncionalidades del ci cui o en código
encapsulado e incomunicado en e ellos. Pa a no ex ende demasiado la memo ia con código que
exis e en Gi HubⓇ, an solo oy a explica cómo uncionan los mé odos más impo an es de cada
a chi o.
Como idea gene al, se han usado 4 clases de “cosecha p opia” pa a el uncionamien o de los
componen es. Es os son class MyCame a,class MyMo o ,class MySe o yclass MyWebSe e ; cada
una manejando lo que su nomb e indica.
Todas es os obje os se c ean en el a chi o p incipal, el esp32cam_ oyca .ino, que c ea una
ins ancia de cada clase. La clase MyWebSe e se á la enca gada de maneja el es o de clases, que se
le pasa án po pa áme o. También, y como se ha is o en las p uebas, a a és del obje o con la
palab a ese ada WiFi se conec a a la ed local.
Figu a 4-2. Esquema de uncionamien o en el a chi o p incipal
Du an e la explicación de los mé odos y clases, pa a acili a la lec u a se elimina án odos
los con oles de e o es, así como código auxilia que pueda dis ae del con ex o eal que se quie e
expone .
55
4.2.1. main.ino
El a chi o .ino es el p incipal del código. En él se c ean y se manejan los obje os. En la zona
de decla aciones se asignan la ed y la con aseña, así como los pines que se usa án en la
ESP32-CAM. En es e caso son:
-GPIO 12 pa a i hacia delan e.
-GPIO 13 pa a i hacia a ás.
-GPIO 15 pa a ac i a el mo o .
-GPIO 14 pa a maneja el se omo o .
Asimismo, se decla an y se pasan po pa áme o los obje os a MyWebSe e , que se enca ga á
de maneja los según lo que eciba de la página web.
cons cha *ssid =NETWORK;
cons cha *passwo d =PASSWORD;
cons in pinFo wa d =12;
cons in pinBackwa d =13;
cons in pinEnaleMo o =15;
cons in pinSe o =14;
cons in po =80;
MyCame a cam;
MySe o s (pinSe o);
MyMo o mo (pinFo wa d,pinBackwa d,pinEnaleMo o );
MyWebSe e mws(cam,mo ,s ,po );
En el oid se up() se inicializan con los mé odos públicos de los obje os.
oid se up() {
[...]
WiFi.begin(ssid, passwo d);
cam.ini Came a();
mo .se upMo o ();
s .se upSe o();
[...]
}
Po úl imo, en el oid loop() se maneja el mé odo que se enca ga de e isa los cambios en
cada componen e.
oid loop() {
mws.handleLoop();
}
56
4.2.2. MyWebSe e .h
Figu a 4-3. Diag ama de la clase MyWebSe e
57
4.2.5. MySe o.h
Figu a 4-6. Diag ama de la clase MySe o
La clase MySe o iene nue e a iables p i adas:
-Se o _se o: Obje o que ep esen a el se o mo o .
-in _pin: Pin al que es á conec ado el se o.
-in _angle: Ángulo ac ual del se o.
-cons in _maxAngle: Ángulo máximo pe mi ido pa a el se o (180 g ados).
-cons in _midAngle: Ángulo medio del se o (90 g ados).
-cons in _minAngle: Ángulo mínimo pe mi ido pa a el se o (0 g ados).
Asimismo, ambién iene cua o mé odos públicos y dos p i ados. El p ime o de ellos es oid
MySe o::se upSe o(). P ime o asigna el pin GPIO 14 al se omo o , y luego se llama al mé odo
oid MySe o::sweep() pa a comp oba que unciona co ec amen e, hace un mo imien o de a co de
ida y uel a y después se coloca en el cen o.
oid MySe o::se upSe o() {
_se o.a ach(_pin);
sweep();
}
Los mé odos oid MySe o:: igh (), oid MySe o::cen e () y oid MySe o::le () son
idén icos, sal o que su alo po de ec o es el ángulo del lado al que se quie e gi a . Es o son 0º pa a
la izquie da, 90º pa a el cen o y 180º pa a la de echa.
oid MySe o:: igh (in newAngle =180) {
angle(newAngle);
}
64

El mé odo di e ido de es a clase es oid MySe o::sweep(), que como ya se ha explicado
hace un mo imien o de izquie da a de echa y uel a, pa a al inal queda se con el b azo en el cen o.
Es e mo imien o lo hace con un e aso es ánda de 10 ms po g ado.
oid MySe o::sweep(in delayTime =10) {
o (in pos =_minAngle; pos <= _maxAngle; pos++) {
angle(pos);
delay(delayTime);
}
o (in pos =_maxAngle; pos >= _minAngle; pos--) {
angle(pos);
delay(delayTime);
}
[...]
cen e ();
}
El úl imo mé odo es oid MySe o::angle(), que simplemen e se enca ga de manda la o den
al se o de la nue a posición que ha de ene . P ime o se asegu a de que el alo es á en ango usando
el mé odo oid cons ain (), que limi a el ángulo máximo a los alo es ma cados. Después usa la
unción oid Se o.w i e() pa a mo e el b azo.
oid MySe o::angle(in newAngle) {
_angle =cons ain(newAngle, _minAngle, _maxAngle);
_se o.w i e(_angle);
}
65
4.2.6. webcode.h
El a chi o webcode.h con iene el código .h ml,.ico y.css en o ma o necesa io pa a el
uncionamien o co ec o de la página web. Lo más impo an e de odos es os a chi os es el <sc ip >
in eg ado en el .h ml, que con iene la lógica de la comunicación en e el se ido y clien e.
P ime o e isa é el con enido del .h ml pu o, an es de en a en el <sc ip >. En el código
siguien e se puede e donde se aloja el ecuad o de ídeo: el <di id=” ideoCon aine ”></di >,
cuya o ma se edi a á con es ilos en el .css. La siguien e pa e in e esan e es el ejemplo de bo ón que
hay. En es e caso es el bo ón que mue e hacia delan e el ehículo. Es e bo ón iene dos mé odos:
- onmousedown: el usua io es á pulsando el bo ón. Es o causa la llamada de oid
sendCMD(‘D’) que, como hemos is o an es en el oid MyWebSe e ::onE en Mo o (), al
ecibi el comando “D” (D i e), llama á a la unción oid MyMo o :: o wa d().
- onmouseup: el usua io ha dejado de pulsa el bo ón. El p oceso es el mismo pe o en es e caso
el comando es “N” (Neu al), que llama a la unción oid MyMo o ::b eak().
Es impo an e ecalca que se llama el mé odo oid MyMo o ::b eak() y no al oid
MyMo o ::lock() po que se quie e una acele ación y decele ación p og esi a. De o a o ma, se
pod ía quema el mo o . Se ía como me e en un coche eal la ma cha a ás cuando se a po la
au opis a.
<!DOCTYPE h ml>
<h ml lang="en">
<head> [...] </head>
<body>
[...]
<di id=" ideoCon aine ">
<img id=" ideoS eam" [...]>
</di >
<di id="con ols">
<bu on id ="a ow-bu on"
s yle ="g id-a ea: 1 / 2;"
onmousedown ="sendCMD('D')"
onmouseup ="sendCMD('N')">
▲</bu on>
[...]
</di >
[...]
<sc ip > [...] </sc ip >
</body>
</h ml>
Den o del .h ml se encuen a el código del sc ip de comunicación se ido -clien e, pe o
pa a simpli ica lo lo expond é como si es u ie a en su p opio a chi o, un sc ip .js. Pa a cada socke
hay que c ea una a iable que lo sopo e, su URL y una unción que encapsule su compo amien o.
En es e caso oy a usa como ejemplo el de la cáma a ya que es el más complicado de odos.
Los pasos pa a c ea una comunicación exi osa con cada socke son los siguien es:
66
P ime o hay que decla a la a iable que c ea á el socke y su URL:
a wsCam;
a wsCamURL ="ws://" +window.loca ion.hos name +"/wsCam";
Luego hay que decla a la unción con los callbacks que de inen su compo amien o:
1) Se c ea el WebSocke a pa i de la URL.
2) Se es ablece el ipo de bina ios (mensaje) a blob (un obje o de ipo bina io en Ja aSc ip , ú il
pa a maneja imágenes y ídeos).
3) Se eesc iben las unciones de compo amien o del socke . El mé odo más impo an e aquí
es onmessage, debido a que son los mensajes los que con olan oda la lógica.
a) P ime o lo que se hace es elimina el elemen o asociado al obje o c eado con el blob.
b) Despues se uel e a c ea el elemen o con la nue a in o mación
c) Po úl imo se asocia al elemen o ya is o an es “ ideoS eam”, de ipo <img=[...]>.
unc ion ini WebSockCam() {
wsCam =new WebSocke (wsCamURL);
wsCam.bina yType ='blob';
wsCam.onopen = unc ion(e en ) {
console.log(" => wsCam connec ion opened");
};
wsCam.onclose = unc ion(e en ) {
console.log(" => wsCam connec ion closed");
se Timeou (ini WebSockCam,2000);
};
wsCam.onmessage = unc ion(e en ) {
a blob =e en .da a;
i (u l) {
URL. e okeObjec URL(u l);
}
a imageID =documen .ge Elemen ById(" ideoS eam");
u l =URL.c ea eObjec URL(blob);
imageID.s c =u l;
};
wsCam.one o = unc ion(e o ) {
console.log(" => wsCam e o : " +e o .message);
};
}
Todas es as unciones con la lógica de los socke s han de se llamadas en la inicialización del
se ido , po lo que, po úl imo, se llaman cuando se ca ga la página.
unc ion ini WebSock() {
ini WebSockCam();
ini WebSockMo o ();
ini WebSockSe o();
ini WebSockLog();
}
window.onload =ini WebSock;
67
Po úl imo, a la ho a de pulsa el bo ón, se llama a la unción sendCMD() que a su ez llama a
WebSocke .send() pa a ansmi i el comando a oid MyWebSe e ::onE en Mo o () o oid
MyWebSe e ::onE en Se o().
unc ion sendCMD(command) {
[...]
swi ch (command) {
case "D":case "R":case "N":
i (wsMo o . eadyS a e === WebSocke .OPEN)
wsMo o .send(command);
b eak;
case "L":case "S":case "M":
i (wsSe o. eadyS a e === WebSocke .OPEN
wsSe o.send(command);
b eak;
[...]
}
}
68
4.3. Mon aje
Pa a el mon aje p ime o hubo que mon a la base del coche. En ese momen o no quedaba
cla o cómo se iba a in eg a el ci cui o en la es uc u a, pe o como se puede ap ecia en la Figu a 4-7,
ya se pueden e huecos en las pa es bajas ce ca de la di ección y la ansmisión. Una opción
plausible ambién se ía pone el se o pa a con ola la di ección en el mo o . Pe o es o se ino abajo
cuando, al gi a el olan e,no ansmi ía el mo imien o la e al con el o que su icien e.
Se había alo ado deja así el coche, usando solo su esquele o in e io pa a pode me e
odos los componen es a olun ad con a je as de p o o ipos soldadas, pe o ambién se desca ó po el
me o hecho de que no e a es é ico.
Ya en es a e apa su gía una duda: cómo acopla el mo o con el eng anaje del coche pa a que
el mo imien o se ansmi iese co ec amen e. Es o es algo que deja ía pa a más adelan e.
Figu a 4-7. Base del coche. T ansmisión y di ección.
69

An es de segui el mon aje, se p obó el sis ema y se hicie on múl iples comp obaciones ya
con el se ido y la página web mon ada. Tan o el mo o como el se o enían el compo amien o
espe ado:
- El mo o acele a y ena len amen e. Si, po ejemplo, se pulsa el bo ón de eno, el mo o no
ejecu a la nue a o den has a que e mina su eje cicio ac ual.
- El se o hace el oid MySe o::sweep() pa a luego queda se en el cen o y mo e se con la
o den que le llega.
Sin emba go, hubo que hace bas an es co ecciones en la cáma a. Descub í que el o ma o
con el se ido de ipo WebSe e no e a nada óp imo, ya que debía a ende demasiadas pe iciones
HTTP. Hice la p ueba y según se iban añadiendo componen es, los FPS bajaban a un e cio.
Pasaban de 10 FPS a 3 y luego a 1. Es o hizo que u ie a que cambia oda la lógica y usa el sis ema
de WebSocke .
Figu a 4-8. Sis ema mon ado en la p o oboa d.
70
Con la cons ucción a anzada se plan ea on dos opciones: usa a je as de p o o ipos o
simplemen e conec a odos los componen es con cables de p o o ipado. Las dos opciones u ie on
que se desca adas después de hace a ias p uebas po lo siguien e:
- Ta je as de p o o ipos: e a necesa io solda los componen es, lo que equie e una p ác ica que
al aba. Además, la can idad de cables y pines macho necesa ios (inse ados en los conec o es
hemb a soldados) aumen aba y no se disponía de an os pines macho de calidad. Se p oba on
a ias o mas pe o ninguna e a óp ima espec o al iempo y sob e odo man enimien o.
- Cables de p o o ipado: es a opción daba un manejo más lib e de cada componen e, pudiendo
coloca los como quisie a y haciendo p uebas más ácilmen e. Sin emba go, cada ez que
necesi aba hace una nue a conexión había que hace demasiados cambios. Es deci , no
escalaba.
Se decidió po es o usa una p o oboa d pequeña, colocándola en la zona del mo o después
de qui a el V6 de jugue e y usa sus piezas pa a ija las zonas endebles. Es o daba escalabilidad,
es abilidad yman enimien o a pa es iguales.
Figu a 4-9. Sis ema mon ado en la p o oboa d.
71
Luego se p ocedió a mon a el mo o y el SoC ESP32-CAM. El mo o es el que u o más
p oblemas, ya que p ime o u e que coloca lo y luego comp oba la di ección. E ec i amen e, como
dice la ley de Mu phy, después de coloca lo comp obé que el compo amien o e a el in e so, así que
hubo que hace malaba es pa a cambia los pines GPIO 12 yGPIO 13 median e el uso de dos
pinzas, una de cada lado. Sin emba go, es o se expone pa a e leja cómo la decisión de usa la
p o oboa d ue la co ec a. Pod ía habe cambiado la lógica del p og ama, pe o llegados a es e
pun o p e e ía modi ica el código lo menos posible.
Respec o a la ESP32-CAM, se ijó median e piezas sacadas del asien o del copilo o al asien o
p incipal, c eando una nue a pieza que se podía ap e a y desap e a pa a me e la o saca la ácilmen e
de su posición. Con es o se que ía ambién saca las posibles piezas que pudie a ene ce ca del
e e so, donde se encuen a el chip y se sob ecalien a más.
Como se puede ap ecia , hay dis in os cables de colo es. Pa a pode abaja bien, se usa on
códigos de colo es:
- Rojo: Cables de co ien e.
- Neg o: Cables a ie a.
- Ama illos: cables de di ección del mo o .
- Ve de: cable de ac i ación del mo o .
- Blanco: cable de mo imien o del se omo o .
Figu a 4-10. Sis ema con el ESP32-CAM mon ado.
72
Pa a la di ección del coche se p oba on dos opciones: conexión al olan e yconexión
di ec a a la di ección. La más di e ida (en mi opinión) e a la conexión al olan e. Sin emba go,
como se ha mencionado ya, es a conexión no ansmi ía el mo imien o de gi o co ec amen e, pues o
que las piezas que había en e el olan e y la di ección bailaban un poco. Lamen ablemen e hubo que
desecha es a idea y pasa al plan B: conexión di ec a a la di ección.
Pa a ello hubo que hace muchos cambios de piezas y desmon aje, pues había que saca odo
el salpicade o y pa e del capó, y po si no ue a poco, con las piezas sob an es mon a un sopo e
que ue a capaz de aguan a la ue za de gi o sin que el se omo o cambia a de posición. En e las
piezas del mo o , del salpicade o y del asien o del copilo o, y con ayuda de una pieza de la p o oboa d
se pudo encaja a la pe ección. Po úl imo, se pegó el eng anaje al b azo del se o con pegamen o
de con ac o.
El esul ado ue mucho mejo de lo espe ado, y la ansmisión se con i ió en la pa e con el
mejo esul ado después de es o.
Figu a 4-11. Se o conec ado a la di ección.
73
[20] Esp essi Sys ems (Shanghai) PTE LTD, Igoe, T., & Hend ik, J. “WiFi Web Se e LED Blink.”
h ps://gi hub.com/esp essi /a duino-esp32/blob/mas e /lib a ies/WiFi/examples/SimpleWiFiS
e e /SimpleWiFiSe e .ino. 2012. Accedido en 08/24.
80