You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: modules/atomvm/pages/components.adoc
+149Lines changed: 149 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,8 +11,80 @@ y tengan una buena velocidad. Son ideales para las ruedas que dan movimiento al
11
11
12
12
=== Guía de Conexiones
13
13
14
+
Para controlar un motor DC con una ESP32 y un driver L298N, se requiere de una fuente de alimentación externa para el motor, ya que la ESP32 no puede suministrar la corriente necesaria. El L298N actúa como un "puente H" que permite a la ESP32 controlar tanto la dirección como la velocidad del motor.
15
+
16
+
* **Conexión a la ESP32**:
17
+
* `ESP32 GND` -> `L298N GND` (es importante que compartan tierra)
18
+
* `ESP32 GPIO26` -> `L298N IN1`
19
+
* `ESP32 GPIO27` -> `L298N IN2`
20
+
* `ESP32 GPIO25` -> `L298N ENA` (si se va a usar PWM)
21
+
22
+
* **Conexión de la Fuente de Alimentación Externa**:
23
+
* `Fuente Externa Positivo (+) ` -> `L298N V12`
24
+
* `Fuente Externa Negativo (-) ` -> `L298N GND`
25
+
26
+
* **Conexión del Motor DC**:
27
+
* `Motor Terminal 1` -> `L298N OUT1`
28
+
* `Motor Terminal 2` -> `L298N OUT2`
29
+
30
+
**Notas sobre el pin `ENA` y el control de velocidad (PWM):**
31
+
32
+
* El módulo L298N suele venir con un jumper de plástico preinstalado en el pin `ENA` (y `ENB`).
33
+
* Si este jumper está puesto, el motor estará siempre habilitado a máxima potencia y no podrás controlar su velocidad mediante software.
34
+
* Para poder controlar la velocidad del motor con la ESP32, se debe retirar el jumper del pin `ENA` y conectar un pin GPIO de la ESP32 (como `GPIO25`) a `ENA`.
35
+
* La ESP32 enviará una señal PWM (Pulse Width Modulation) a este pin `ENA`. El PWM permite simular un voltaje variable controlando el "tiempo de encendido" de la señal, lo que a su vez controla la velocidad efectiva del motor. En AtomVM, esto se gestiona mediante el módulo `LEDC`.
36
+
14
37
=== Código de Ejemplo
15
38
39
+
[source, elixir]
40
+
----
41
+
defmodule MotorTest do
42
+
@left_motor_pin_1 26
43
+
@left_motor_pin_2 27
44
+
45
+
def start() do
46
+
:gpio.set_pin_mode(@left_motor_pin_1, :output)
47
+
:gpio.set_pin_mode(@left_motor_pin_2, :output)
48
+
49
+
:io.format('Setup de motor finalizado~n')
50
+
51
+
loop()
52
+
end
53
+
54
+
defp loop() do
55
+
:io.format('Moviendo hacia adelante~n')
56
+
set_motor_direction(:forward)
57
+
Process.sleep(3000)
58
+
59
+
:io.format('Deteniendo motor~n')
60
+
set_motor_direction(:stop)
61
+
Process.sleep(2000)
62
+
63
+
:io.format('Moviendo hacia atrás~n')
64
+
set_motor_direction(:reverse)
65
+
Process.sleep(3000)
66
+
67
+
loop()
68
+
end
69
+
70
+
defp set_motor_direction(direction) do
71
+
case direction do
72
+
:forward ->
73
+
:gpio.digital_write(@left_motor_pin_1, :high)
74
+
:gpio.digital_write(@left_motor_pin_2, :low)
75
+
:reverse ->
76
+
:gpio.digital_write(@left_motor_pin_1, :low)
77
+
:gpio.digital_write(@left_motor_pin_2, :high)
78
+
:stop ->
79
+
:gpio.digital_write(@left_motor_pin_1, :low)
80
+
:gpio.digital_write(@left_motor_pin_2, :low)
81
+
_ ->
82
+
:io.format('Dirección de motor inválida: ~p~n', [direction])
83
+
end
84
+
end
85
+
end
86
+
----
87
+
16
88
=== Ejemplo de Funcionamiento
17
89
18
90
== Servomotor
@@ -22,8 +94,85 @@ En este caso se utilizará un https://mcielectronics.cl/shop/product/micro-servo
22
94
23
95
=== Guía de Conexiones
24
96
97
+
Para conectar un servomotor SG90 a la ESP32:
98
+
99
+
* **Pines del servomotor SG90**:
100
+
* `Cable Rojo`: VCC
101
+
* `Cable Marrón`: GND
102
+
* `Cable Naranja`: Señal PWM
103
+
104
+
* **Conexión a la ESP32**:
105
+
* `VCC` (Servo) -> `ESP32 3v3`
106
+
* `GND` (Servo) -> `ESP32 GND`
107
+
* `Signal` (Servo) -> `ESP32 GPIO` (Ej: `GPIO13`)
108
+
25
109
=== Código de Ejemplo
26
110
111
+
[source, elixir]
112
+
----
113
+
defmodule ServoTest do
114
+
@servomotor_pin 13
115
+
@servo_pwm_channel 0 # canal LEDC a usar para el servo
116
+
@servo_pwm_timer 0 # timer LEDC a usar para el servo
117
+
118
+
@servo_pwm_freq 50 # servos usan 50Hz
119
+
@servo_pwm_resolution 10 # 10 bits de resolución (0-1023)
120
+
121
+
# valores de duty cycle para ángulos comunes del SG90
122
+
# calculados para 10 bits de resolución (máx 1023) y 50Hz (periodo 20ms):
123
+
# 1ms (0 grados) -> (1/20) * 1023 = ~51
124
+
# 1.5ms (90 grados) -> (1.5/20) * 1023 = ~77
125
+
# 2ms (180 grados) -> (2/20) * 1023 = ~102
126
+
@duty_0_degrees 51
127
+
@duty_90_degrees 77
128
+
@duty_180_degrees 100
129
+
130
+
def start() do
131
+
set_up_servo()
132
+
133
+
:io.format('Servo setup finished. Starting movement sequence...~n')
0 commit comments