Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
guias:mbot_con_ide_arduino [2017/05/09 16:22] – [La primera librería] Manuel Miramontes | guias:mbot_con_ide_arduino [2021/04/16 20:41] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 10: | Línea 10: | ||
===== Instalación del Driver de comunicación en el ordenador ===== | ===== Instalación del Driver de comunicación en el ordenador ===== | ||
- | < | + | Hay muchas referencias de problemas con el chip de comunicación CH340g |
+ | Pero si tienes problemas, o prefieres probar a instalar la última versión, que en algunos casos funciona mejor, una buena idea para empezar es buscar en internet " | ||
+ | Si prefieres empezar por lo más fácil, basta con que en el programa mBlock selecciones en el menú **Conectar> | ||
+ | |||
+ | |||
+ | Debes tener en cuenta que cuando abriste el Ranger por primera vez, la placa Auriga trae cargado un programa que incluye varias funciones para poder usarla con el mBlock, o conectarte por Bluetooth. Cuando subas un nuevo programa desde el IDE de arduino ese programa se sustituye por el que estás subiendo, y pierdes esas funciones. Siempre puedes recuperar las funciones que venían de fábrica volviendo a cargar el programa original en el menú **Conectar> | ||
- | Debes tener en cuenta que cuando abriste el Ranger por primera vez, la placa Auriga trae cargado un programa que incluye varias funciones, como usarla con el mBlock, o conectarte por Bluetooth. Cuando subas un nuevo programa desde el IDE de arduino ese programa se sustituye por el que estás subiendo, y pierdes esas funciones. Siempre puedes recuperar las funciones que venían de fábrica volviendo a cargar el programa original en el menú **Conectar> | ||
- | ====== | ||
- | </ | ||
====== La primera librería ====== | ====== La primera librería ====== | ||
Línea 23: | Línea 25: | ||
Para instalar esta librería y las otras que iremos necesitando lo primero es descargarla del repositorio que os indicamos en el párrafo anterior y descomprimirla. La librería que nos interesa es **mobilerobot**, | Para instalar esta librería y las otras que iremos necesitando lo primero es descargarla del repositorio que os indicamos en el párrafo anterior y descomprimirla. La librería que nos interesa es **mobilerobot**, | ||
- | {{ : | + | {{ : |
Para comprobar si la librería está bien instalada podéis entrar en el programa arduino, el IDE de arduino (si ya lo teníais abierto es necesario salir y volver a entrar cada vez que instaléis nuevas librerías). Luego, en el menú **Archivo> | Para comprobar si la librería está bien instalada podéis entrar en el programa arduino, el IDE de arduino (si ya lo teníais abierto es necesario salir y volver a entrar cada vez que instaléis nuevas librerías). Luego, en el menú **Archivo> | ||
Línea 30: | Línea 32: | ||
Recordad que si queréis modificar y guardar el ejemplo deberéis guardar una copia (Guardar como…). | Recordad que si queréis modificar y guardar el ejemplo deberéis guardar una copia (Guardar como…). | ||
+ | |||
+ | |||
====== Nos movemos ====== | ====== Nos movemos ====== | ||
En el ejemplo se muestra cómo crear un objeto del tipo Robot que sea compatible con el Ranger, y cómo usar las cuatro funciones que acabamos de incluir: | En el ejemplo se muestra cómo crear un objeto del tipo Robot que sea compatible con el Ranger, y cómo usar las cuatro funciones que acabamos de incluir: | ||
- | * **fordward | + | * **forward |
* **reverse (velocidad_L, | * **reverse (velocidad_L, | ||
* **rotate (tiempo_giro)**: | * **rotate (tiempo_giro)**: | ||
Línea 59: | Línea 63: | ||
====== | ====== | ||
+ | |||
====== Explorando el mundo ====== | ====== Explorando el mundo ====== | ||
Línea 66: | Línea 71: | ||
* **Sensor de luz izquierdo** | * **Sensor de luz izquierdo** | ||
* **Sensor de luz derecho**.. A2 → analogRead(A2) | * **Sensor de luz derecho**.. A2 → analogRead(A2) | ||
- | * **Sensor de temperatura**.. A0 → analogRead(A0) | + | * **Sensor de temperatura**.. A0 → analogRead(A0) |
- | * **Sensor de sonido**……. A1 → analogRead(A1). En el sensor de sonido, la salida del micrófono integrado se conecta directamente a la entrada analógica A1, por lo que la lectura cambia continuamente en función del valor instantáneo de la onda de sonido | + | * **Sensor de sonido**……. A1 → analogRead(A1). |
- | ====== | + | |
+ | El sensor de temperatura es una NTC (resistencia con coeficiente de temperatura negativa) que tiene un comportamiento exponencial. Sin entrar en más detalles, este es un código de ejemplo para leer el valor de la temperatura. Si necesitáis hacer alguna lectura, podéis copiar la fórmula que está dentro de loop. | ||
+ | |||
+ | Este y otros tipo de sensores de temperatura tienen un comportamiento bueno cuando se trata de medir variaciones de temperatura, | ||
+ | |||
+ | <code c_mac> | ||
+ | int PIN_temperatura = A0; | ||
+ | float temperatura; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | // Abre a comunicación serie (para o monitor serie) | ||
+ | Serial.begin (9600); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | // Le o valor da tensión no pin A0 | ||
+ | float v_temperatura = analogRead (PIN_temperatura); | ||
+ | |||
+ | // Calcula o valor da temperatura | ||
+ | temperatura = 1.0 / (log(v_temperatura/ | ||
+ | |||
+ | Serial.print (" | ||
+ | |||
+ | delay (500); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | En el sensor de sonido, la salida del micrófono integrado se conecta directamente a la entrada analógica A1, por lo que mide el valor instantáneo de la onda de sonido, y no de su amplitud. Un buen truco para conseguir un valor proporcional a la intensidad del ruido ambiente es realizar varias medidas seguidas y quedarse con el máximo. En este ejemplo tomamos 100 medidas, que parecen muchas, pero llevan muy poco tiempo. | ||
+ | |||
+ | <code c_mac> | ||
+ | int PIN_sonido | ||
+ | int intensidad_sonido; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | // Abre a comunicación serie (para o monitor serie) | ||
+ | Serial.begin (9600); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | intensidad_sonido | ||
+ | |||
+ | for (int i=0; i<100; i++) | ||
+ | { | ||
+ | // Le o valor da tensión no pin A1 e queda co máximo das medidas tomadas | ||
+ | intensidad_sonido | ||
+ | } | ||
+ | Serial.print (" | ||
+ | |||
+ | delay (500); | ||
+ | } | ||
+ | </ | ||
====== Haciendo ruido ====== | ====== Haciendo ruido ====== | ||
Línea 130: | Línea 191: | ||
* **Valor del sensor izquierdo** | * **Valor del sensor izquierdo** | ||
* **Valor del sensor derecho ** digitalRead(A12) | * **Valor del sensor derecho ** digitalRead(A12) | ||
- | ====== | ||
+ | Este es el código para siguelínes básico: | ||
+ | |||
+ | <code c_mac> | ||
+ | #include < | ||
+ | RobotMovil robot(46, | ||
+ | |||
+ | bool linea_dcha; | ||
+ | bool linea_izqda; | ||
+ | | ||
+ | |||
+ | void setup() { | ||
+ | pinMode (A7, INPUT); | ||
+ | pinMode (A12, INPUT); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | linea_dcha | ||
+ | linea_izqda = ! digitalRead (A12); | ||
+ | | ||
+ | // Os dous sensores están sobre a liña | ||
+ | if ( linea_dcha | ||
+ | | ||
+ | // O sensor dereito saíuse da liña | ||
+ | else if (! linea_dcha | ||
+ | |||
+ | // O sensor esquerdo saíuse da liña | ||
+ | else if ( linea_dcha | ||
+ | | ||
+ | // Falta programar o que pasa cando os dous sensores saen la liña | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== | ||
====== Sensor de ULTRA SONIDOS ====== | ====== Sensor de ULTRA SONIDOS ====== | ||
Línea 150: | Línea 243: | ||
==== El LED del mítico blink está demasiado escondido ==== | ==== El LED del mítico blink está demasiado escondido ==== | ||
- | Para muchos de nosotros el primer programa que hicimos en arduino es el blink que está en **Archivo> | + | Para muchos de nosotros el primer programa que hicimos en arduino es el blink que está en **Archivo> |
- | ==== Manejar | + | ==== Vamos a hacer un blink con los Neopixel ==== |
El círculo de luces que tiene la placa Auriga del Ranger está formado por un tipo de LED un tanto especial: los NEOPIXEL. Para manejarlos también hay una librería, en este caso de Adafruit: [[https:// | El círculo de luces que tiene la placa Auriga del Ranger está formado por un tipo de LED un tanto especial: los NEOPIXEL. Para manejarlos también hay una librería, en este caso de Adafruit: [[https:// | ||
- | {{ : | + | En nuestro caso tenemos un anillo formado por 12 Neopixel que están conectados al pin 44. Para que el ejemplo funcione con el Ranger debemos |
- | + | ||
- | En nuestro caso tenemos un anillo formado por 12 Neopixel que están conectados al pin 44. Para que el ejemplo funcione con el Ranger debemos | + | |
**#define PIN 44 ** | **#define PIN 44 ** | ||
Línea 168: | Línea 259: | ||
<code c_mac> | <code c_mac> | ||
#include < | #include < | ||
+ | |||
+ | int PIN = 44; // Pin no que están conectados os Neopixels | ||
+ | int NUMPIXELS = 12; // Número de Neopixels | ||
- | int PIN_Neopixels = 44; | + | Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); |
- | Adafruit_NeoPixel pixels = Adafruit_NeoPixel(12, PIN_Neopixels, NEO_GRB + NEO_KHZ800); | + | |
void setup() { | void setup() { | ||
- | pixels.begin (); | + | pixels.begin (); // Esta instrucción inicializa a librería |
} | } | ||
+ | |||
void loop (){ | void loop (){ | ||
+ | // Con este código encendemos o pixel 8 | ||
pixels.setPixelColor(8, | pixels.setPixelColor(8, | ||
pixels.show(); | pixels.show(); | ||
delay (500); | delay (500); | ||
+ | |||
pixels.setPixelColor(8, | pixels.setPixelColor(8, | ||
pixels.show(); | pixels.show(); | ||
Línea 188: | Línea 282: | ||
Debemos tener en cuenta que el anillo de Neopixels está muy cerca de los sensores de luz, por lo que interfieren mucho con ellos cuando algún LED está encendido. | Debemos tener en cuenta que el anillo de Neopixels está muy cerca de los sensores de luz, por lo que interfieren mucho con ellos cuando algún LED está encendido. | ||
- | |||