Arduino es una placa de microcontrolador que puede programar para controlar dispositivos externos. Interactúa con el mundo exterior a través de sensores, motores, LED, altavoces ... e incluso Internet, por lo que es una plataforma flexible para diversos proyectos. Hay bastantes microcontroladores, pero Arduino es popular debido al hecho de que varios proyectos se presentan y discuten de manera muy activa en Internet. Si busca en google o youtube, encontrará millones de ideas e información para comenzar a explorar Arduino usted mismo.
Incluso si no tiene experiencia en la programación de microcontroladores, con Arduino aprenderá rápidamente y aprenderá algo sobre electrónica utilizando experimentos.
¿Qué necesitas para comenzar?
Arduino Uno- 1pc
Cable usb-1pcs
Jumpers 1pc
Tablero de desarrollo 1pcs
LED rojo 4 piezas
Resistencia de 220 ohmios 4 piezas
Resistor 10 room 1 pc
Botón sin fijar
Potenciómetro
LED RGB con cátodo común
Todo esto puede comprarse en una tienda de radio local o solicitarse en Internet.
Se usó un simulador en línea para demostrar y simular circuitos eléctricos.
Este simulador funciona mejor en el navegador Chrome.
Echemos un vistazo más de cerca al Arduino.
Arduino no es una computadora grande a la que se puedan conectar circuitos externos. Arduino Uno usa Atmega 328P
Este es el chip más grande en el tablero. Este chip ejecuta programas almacenados en su memoria. Puede descargar el programa a través de usb utilizando el IDE de Arduino. El puerto usb también proporciona energía al arduino.
Hay un conector de alimentación separado. Hay dos salidas en la placa, etiquetadas 5v y 3.3v, que son necesarias para alimentar varios dispositivos. También encontrará pines marcados como GND, estos son cables de tierra (tierra es 0V). La plataforma Arduino también tiene 14 salidas digitales (pines), marcadas con números del 0 al 13, que están conectadas a nodos externos y tienen dos estados, alto o bajo (encendido o apagado). Estos contactos pueden funcionar como salidas o como entradas, es decir pueden transmitir algunos datos y controlar dispositivos externos, o recibir datos de dispositivos. Las siguientes conclusiones en el tablero se designan A0-A5. Estas son entradas analógicas que pueden recibir datos de varios sensores. Esto es especialmente conveniente cuando necesita medir un rango, como la temperatura. Las entradas analógicas tienen funciones adicionales que se pueden activar por separado.
Cómo usar una placa de pruebas.
Se necesita una placa de prueba para conectar temporalmente las piezas, para verificar cómo funciona el dispositivo, antes de soldar todo.
Todos los siguientes ejemplos se recopilan en una placa de pruebas para que pueda realizar cambios rápidamente en el circuito y reutilizar las piezas sin molestarse en soldar.
El tablero tiene filas de agujeros en los que puede insertar piezas y cables. Algunos de estos agujeros están conectados eléctricamente entre sí.
Las dos filas superior e inferior están conectadas en serie a lo largo de toda la placa. Estas filas se utilizan para alimentar el circuito. Puede ser 5v o 3.3v, pero en cualquier caso, lo primero que debe hacer es conectar 5v y GND a la placa, como se muestra en la figura. A veces, estas conexiones de fila se pueden interrumpir en el medio del tablero, luego, si es necesario, puede conectarlas, como se muestra en la figura.
Los agujeros restantes ubicados en el medio del tablero se agrupan en cinco agujeros. Se utilizan para conectar partes del circuito.
Lo primero que conectamos a nuestro microcontrolador es el LED. El diagrama de conexión eléctrica se muestra en la imagen.
¿Por qué necesito una resistencia en el circuito? En este caso, limita la corriente que pasa a través del LED. Cada LED está diseñado para una corriente específica, y si esta corriente es mayor, entonces el LED fallará. Averigüe qué valor debe usar la resistencia usando la ley de Ohm. Para aquellos que no saben o han olvidado, la ley de Ohm dice que existe una dependencia lineal de la corriente con el voltaje. Es decir, cuanto más apliquemos voltaje a la resistencia, más corriente fluirá a través de ella.
V = I * R
Donde V-voltaje a través de la resistencia
Yo- corriente a través de la resistencia
R- resistencia a ser encontrada.
Primero, necesitamos encontrar el voltaje a través de la resistencia. La mayoría de los LED de 3 mm o 5 mm que usará tienen un voltaje de funcionamiento de 3V. Entonces, en la resistencia tenemos que pagar 5-3 = 2v.
Luego calculamos la corriente que pasa a través de la resistencia.
La mayoría de los LED de 3 y 5 mm brillan a pleno brillo a una corriente de 20 mA. Una corriente más que esto puede deshabilitarlos, y una corriente de menor fuerza reducirá su brillo, sin causar ningún daño.
Por lo tanto, queremos encender el LED en el circuito de 5v para que tenga una corriente de 20 mA. Como todas las partes están incluidas en un circuito, la resistencia también tendrá una corriente de 20 mA.
Nosotros obtenemos
2V = 20 mA * R
2V = 0.02A * R
R = 100 ohmios
100 ohmios es la resistencia mínima, es mejor usar un poco más, porque los LED tienen alguna variación en las características.
En este ejemplo, se usa una resistencia de 220 ohmios. Solo porque el autor tiene muchos de ellos: guiño:
Inserte el LED en los orificios en el medio de la placa para que su terminal largo esté conectado a uno de los terminales de la resistencia. Conecte el segundo extremo de la resistencia a 5V y conecte la segunda salida del LED a GND. El LED debería encenderse.
Tenga en cuenta que hay una diferencia en cómo conectar el LED. La corriente fluye de un terminal más largo a uno más corto. En el diagrama se puede imaginar que la corriente fluye en la dirección donde se dirige el triángulo. Intente voltear el LED y verá que no se enciende.
Pero cómo se conecta la resistencia, no hay ninguna diferencia. Puede darle la vuelta o intentar conectarlo a la otra salida del LED, esto no afectará el funcionamiento del circuito. Todavía limitará la corriente a través del LED.
Anatomía de un dibujo de Arduino.
Los programas para Arduino se llaman bocetos. Consisten en dos funciones principales. Función configuración y función bucle
dentro de esta función establecerá todas las configuraciones básicas. Qué conclusiones funcionarán en la entrada o salida, qué bibliotecas conectar, inicializarán las variables. Función Configurar () Se inicia solo una vez durante el boceto, cuando se inicia el programa.
esta es la función principal que se ejecuta después de configuración (). De hecho, este es el programa en sí. Esta función se ejecutará indefinidamente hasta que apague la alimentación.
LED parpadeante Arduino
En este ejemplo, conectaremos un circuito con un LED a uno de los pines digitales de Arduino y lo activaremos y desactivaremos utilizando el programa, y también aprenderá varias funciones útiles.
- esta función se usa en configuración () partes del programa y sirve para inicializar las conclusiones que utilizará como entrada (ENTRADA) o salir (SALIDA). No puede leer ni escribir datos desde el pin hasta que lo configure en consecuencia pinMode. Esta función tiene dos argumentos: pinNumber- Este es el número de pin que usará.
El modo- establece cómo funcionará el pin. En la entrada (ENTRADA) o salir (SALIDA). Para encender el LED debemos dar una señal De Arduino Para hacer esto, configuramos el pin para salir.
- esta función sirve para establecer el estado (estado) piña (pinNumber). Hay dos estados principales (en general hay 3), uno es Alta, el pin será de 5v, otro es Bajo y el pin será 0v. Entonces, para encender el LED, necesitamos establecer un alto nivel en el pin conectado al LED Alta.
- retraso. Sirve para retrasar el programa durante un período específico en ms.
A continuación se muestra el código que hace que el LED parpadee.
// LED parpadea
int ledPin = 7; // pin Arduino al que está conectado el LED
configuración nula () {
pinMode (ledPin, OUTPUT); // establece el pin como EXIT
}
bucle vacío () {
digitalWrite (ledPin, HIGH); // enciende el LED
delay (1000); // delay 1000 ms (1 sec)
digitalWrite (ledPin, LOW); // Apaga el LED
retraso (1000); // espera 1 segundo
}
Una pequeña explicación sobre el código.
Las líneas que comienzan con "//" son comentarios de Arduino que las ignoran.
Todos los comandos terminan con un punto y coma; si los olvida, recibirá un mensaje de error.
ledpines una variable Las variables se usan en programas para almacenar valores. En este ejemplo, la variable ledpin asignado un valor de 7, este es el número de pin del Arduino. Cuando el Arduino en el programa encuentra una cadena con una variable ledpin , usará el valor que especificamos anteriormente.
Entonces grabar pinMode (ledPin, OUTPUT) similar al registro pinMode (7, SALIDA).
Pero en el primer caso, es suficiente que cambie la variable y cambiará en cada línea donde se usa, y en el segundo caso, para cambiar la variable, debe hacer cambios en los lápices en cada comando.
en la primera línea indica el tipo de variable. Al programar Arduino, es importante declarar siempre el tipo de variables. Por ahora, es suficiente que sepas que INT anuncia números negativos y positivos.
A continuación se presenta modelado boceto Presione inicio para ver el funcionamiento del circuito.
Como se esperaba, el LED se apaga y se ilumina después de un segundo. Intenta cambiar el retraso para ver cómo funciona.
Gestión de varios LED.
En este ejemplo, aprenderá a controlar varios LED. Para hacer esto, instale 3 LED más en la placa y conéctelos a los pines y resistencias Arduino, como se muestra a continuación.
Para encender y apagar los LED, debe escribir un programa como este:
// Parpadeo LED múltiple
int led1Pin = 4;
int led2Pin = 5;
int led3Pin = 6;
int led4Pin = 7;
configuración nula () {
// establecer pines como EXIT
pinMode (led1Pin, OUTPUT);
pinMode (led2Pin, SALIDA);
pinMode (led3Pin, OUTPUT);
pinMode (led4Pin, SALIDA);
}
bucle vacío () {
digitalWrite (led1Pin, HIGH); // enciende el LED
delay (1000); // delay 1 sec
digitalWrite (led1Pin, LOW); // apaga el LED
delay (1000); // delay 1 sec
// haz lo mismo con los otros 3 LED
digitalWrite (led2Pin, HIGH); // enciende el LED
delay (1000); // delay 1 sec
digitalWrite (led2Pin, LOW); // apaga el LED
delay (1000); // delay 1 sec
digitalWrite (led3Pin, HIGH); // enciende el LED
delay (1000); // delay 1 sec
digitalWrite (led3Pin, LOW); // apaga el LED
delay (1000); // delay 1 sec
digitalWrite (led4Pin, HIGH); // enciende el LED
delay (1000); // delay 1 sec
digitalWrite (led4Pin, LOW); // apaga el LED
delay (1000); // delay 1 sec
}
Este programa funcionará bien, pero esta no es la solución más racional. El código necesita ser cambiado. Para que el programa funcione una y otra vez, utilizaremos la construcción llamada.
Los ciclos son convenientes cuando necesita repetir la misma acción varias veces. En el código anterior, repetimos las líneas.
digitalWrite (led4Pin, HIGH);
retraso (1000);
digitalWrite (led4Pin, LOW);
retraso (1000);
código de boceto completo en el archivo adjunto
Ajuste de brillo LED
A veces necesitará cambiar el brillo de los LED en el programa. Esto se puede hacer usando el comando analogWrite (). Este comando enciende y apaga el LED tan rápido que el ojo no ve este parpadeo. Si el LED se enciende la mitad del tiempo y la otra mitad, aparecerá visualmente que está iluminado a la mitad de su brillo. Esto se llama modulación de ancho de pulso (PWM o PWM en inglés). PWM se usa con bastante frecuencia, ya que puede usarse para controlar el componente "analógico" usando un código digital. No todos los pines Arduino son adecuados para estos fines. Solo aquellas conclusiones en torno a las cuales se extrae dicha designación "~"Lo verás junto a los pines 3,5,6,9,10,11.
Conecte uno de sus LED a una de las salidas PWM (para el autor, este es el pin 9). Ahora ejecute el LED intermitente del boceto, pero primero cambie el comando digitalWrite () en analogWrite (). analogWrite () Tiene dos argumentos: el primero es el número de pin, y el segundo es el valor PWM (0-255), tal como se aplica a los LED, este será su brillo, y para los motores eléctricos, la velocidad de rotación. A continuación se muestra un código de ejemplo para diferentes brillos LED.
// Cambia el brillo del LED
int ledPin = 9; // LED conectado a este pin
configuración nula () {
pinMode (ledPin, OUTPUT); // inicializa el pin a la salida
}
bucle vacío () {
analogWrite (ledPin, 255); // brillo completo (255/255 = 1)
retraso (1000); // pausa 1 seg
digitalWrite (ledPin, LOW); // apaga el LED
retraso (1000); // pausa 1 seg
analogWrite (ledPin, 191); // brillo a 3/4 (191/255 ~ = 0.75)
retraso (1000); // pausa 1 seg
digitalWrite (ledPin, LOW); // apaga el LED
retraso (1000); // pausa 1 seg
analogWrite (ledPin, 127); // brillo medio (127/255 ~ = 0.5)
retraso (1000); // pausa 1 seg
digitalWrite (ledPin, LOW); // apaga el LED
retraso (1000); // pausa 1 seg
analogWrite (ledPin, 63); // cuarto de brillo (63/255 ~ = 0.25)
retraso (1000); // pausa 1 seg
digitalWrite (ledPin, LOW); // apaga el LED
retraso (1000); // pausa 1 seg
}
Intente cambiar el valor PWM en el comando analogWrite ()para ver cómo afecta el brillo.
A continuación, aprenderá a ajustar el brillo suavemente de cero a completo. Puede, por supuesto, copiar un código 255 veces
analogWrite (ledPin, brillo);
delay (5); // breve retraso
brillo = brillo + 1;
Pero, entiendes, no será práctico. Para hacer esto, es mejor usar el bucle FOR que se usó anteriormente.
El siguiente ejemplo usa dos ciclos, uno para reducir el brillo de 255 a 0
para (int brillo = 0; brillo = 0; brillo -) {
analogWrite (ledPin, brillo);
retraso (5);
}
retraso (5) se usa para reducir la velocidad de subida y bajada de brillo 5 * 256 = 1280 ms = 1.28 seg.)
La primera línea usa "brillo"para que el valor de brillo disminuya en 1, cada vez que se repita el ciclo. Tenga en cuenta que el ciclo funcionará mientras brillo> = 0Sustitución de la señal > en el letrero >= Incluimos 0 en el rango de brillo. Este boceto se modela a continuación.
// cambia suavemente el brillo
int ledPin = 9; // El LED está conectado a este pin
configuración nula () {
pinMode (ledPin, OUTPUT); // inicializa el pin para salir
}
bucle vacío () {
// aumenta gradualmente el brillo (0 a 255)
para (int brillo = 0; brillo = 0; brillo -) {
analogWrite (ledPin, brillo);
retraso (5);
}
retraso (1000); // espera 1 segundo
// disminuye suavemente el brillo (255 a 0)
for (int brillo = 255; brillo> = 0; brillo -) {
analogWrite (ledPin, brillo);
retraso (5);
}
retraso (1000); // espera 1 segundo
}
}
Esto no es muy visible, pero la idea es clara.
LED RGB y Arduino
El LED RGB es en realidad tres LED de diferentes colores en una carcasa.
Incluyendo diferentes LED con diferente brillo, puede combinar y obtener diferentes colores. Para Arduino, donde el número de gradaciones de brillo es 256, obtienes 256 ^ 3 = 16581375 colores posibles. En realidad, por supuesto, habrá menos de ellos.
El LED que usaremos es el cátodo común. Es decir Los tres LED están estructuralmente conectados por cátodos a un terminal. Conectaremos este pin al pin GND. Los terminales restantes, a través de las resistencias limitantes, deben conectarse a los terminales PWM. El autor utilizó las conclusiones del 9 al 11. Por lo tanto, será posible controlar cada LED por separado. El primer boceto muestra cómo encender cada LED por separado.
// LED RGB - prueba
// conexiones de pin
int rojo = 9;
int verde = 10;
int azul = 11;
configuración nula () {
pinMode (rojo, SALIDA);
pinMode (azul, SALIDA);
pinMode (verde, SALIDA);
}
bucle vacío () {
// enciende / apaga el LED rojo
digitalWrite (rojo, ALTO);
retraso (500);
digitalWrite (rojo, BAJO);
retraso (500);
// enciende / apaga el LED verde
digitalWrite (verde, ALTO);
retraso (500);
digitalWrite (verde, BAJO);
retraso (500);
// enciende / apaga el LED azul
digitalWrite (azul, ALTO);
retraso (500);
digitalWrite (azul, BAJO);
retraso (500);
}
El siguiente ejemplo usa los comandos analogWrite () y para obtener varios valores de brillo aleatorio para LED. Verá diferentes colores cambiando al azar.
// LED RGB - colores aleatorios
// conexiones de pin
int rojo = 9;
int verde = 10;
int azul = 11;
configuración nula () {
pinMode (rojo, SALIDA);
pinMode (azul, SALIDA);
pinMode (verde, SALIDA);
}
bucle vacío () {
// elige un color aleatorio
analogWrite (rojo, aleatorio (256));
analogWrite (azul, aleatorio (256));
analogWrite (verde, aleatorio (256));
delay (1000); // espera un segundo
}
Aleatorio (256)-Vuelve un número aleatorio en el rango de 0 a 255.
En el archivo adjunto hay un boceto que muestra transiciones suaves de colores de rojo a verde, luego a azul, rojo, verde, etc.
Un boceto de ejemplo funciona, pero hay mucho código duplicado. Puede simplificar el código escribiendo su propia función auxiliar, que cambiará suavemente un color a otro.
Así es como se verá:
Veamos la definición de una función en partes. Función llamada fader y tiene dos argumentos. Cada argumento está separado por una coma y tiene un tipo declarado en la primera línea de la definición de la función: fader vacío (int color1, int color2). Usted ve que ambos argumentos se declaran como inty se les da nombres color1 y color2 como variables condicionales para definir una función. Nulo significa que la función no devuelve ningún valor, simplemente ejecuta comandos. Si fuera necesario escribir una función que devolviera el resultado de la multiplicación, se vería así:
multiplicador int (int número1, int número2) {
int producto = número1 * número2;
producto devuelto;
}
Observe cómo declaramos tipo int como tipo de retorno
nulo.
Dentro de la función hay comandos que ya usó en el boceto anterior, solo los números de pin fueron reemplazados por color1 y color2. Función llamada fader, sus argumentos se calculan como color1 = rojo y color2 = verde. El boceto completo del archivo usando funciones
Botón
En el siguiente boceto, se usará un botón con contactos normalmente abiertos, sin arreglarlo.
Esto significa que mientras no se presiona el botón, la corriente no fluye a través de él y, después de soltarlo, el botón vuelve a su posición original.
En el circuito, además del botón, se usa una resistencia. En este caso, no limita la corriente, pero "tira" el botón a 0v (GND). Es decir hasta que se presione el botón en el pin del Arduino al que está conectado, el nivel será bajo. La resistencia utilizada en el circuito de 10 kΩ.
// define el clic del botón
int buttonPin = 7;
configuración nula () {
pinMode (buttonPin, INPUT); // inicializa el pin de entrada
Serial.begin (9600); // inicializa el puerto serie
}
bucle vacío () {
if (digitalRead (buttonPin) == HIGH) {// si se presiona el botón
Serial.println ("presionado"); // imprimir "presionado"
} más {
Serial.println ("no comprimido"); de lo contrario, "no comprimido"
}
}
Hay varios equipos nuevos en este boceto.
-Este comando toma el valor Alto (nivel alto) y bajo (nivel bajo) de la salida que estamos verificando. Anteriormente, en setup (), esta salida debe configurarse para entrada.
; // donde buttonPin es el número de pin donde está conectado el botón.
El puerto serie le permite enviar mensajes de Arduino a la computadora, mientras que el controlador mismo ejecuta el programa. Esto es útil para depurar un programa y enviar mensajes a otros dispositivos o aplicaciones. Para habilitar la transferencia de datos a través del puerto serie (también conocido como UART o USART), debe inicializarlo en la configuración ()
Serial.begin () solo tiene un argumento es la velocidad de transferencia de datos entre el Arduino y la computadora.
boceto, se utiliza un comando para mostrar un mensaje en la pantalla en el IDE de Arduino (Herramientas >> Monitor de serie).
- el diseño le permite controlar el progreso del programa combinando varias comprobaciones en un solo lugar.
Si (si) digitalRead devuelve ALTO, la palabra "presionado" se muestra en el monitor. De lo contrario (de lo contrario), la palabra "apretada" se muestra en el monitor. Ahora puede intentar encender y apagar el LED con solo tocar un botón.
// detección de pulsación de botón con salida LED
int buttonPin = 7;
int ledPin = 8;
configuración nula () {
pinMode (buttonPin, INPUT); // esta vez configuraremos el pin del botón como INPUT
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
bucle vacío () {
if (digitalRead (buttonPin) == HIGH) {
digitalWrite (ledPin, HIGH);
Serial.println ("presionado");
} más {
digitalWrite (ledPin, LOW);
Serial.println ("sin comprimir");
}
}
Entrada analógica.
analogRead le permite leer datos de uno de los pines analógicos de Arduino y muestra un valor en el rango de 0 (0V) a 1023 (5V). Si el voltaje en la entrada analógica es 2.5V, entonces se imprimirá 2.5 / 5 * 1023 = 512
analogRead solo tiene un argumento: este es el número de entrada analógica (A0-A5). El siguiente bosquejo proporciona un código para leer el voltaje de un potenciómetro. Para hacer esto, conecte una resistencia variable, los pines extremos a los pines 5V y GND, y el pin central a la entrada A0.
Ejecute el siguiente código y observe en el monitor en serie cómo cambian los valores según la rotación de la perilla de la resistencia.
// entrada analógica
int potPin = A0; // la salida central del potenciómetro está conectada a este pin
configuración nula () {
// el pin analógico está habilitado por entrada de forma predeterminada, por lo que no es necesaria la inicialización
Serial.begin (9600);
}
bucle vacío () {
int potVal = analogRead (potPin); // potVal es un número entre 0 y 1023
Serial.println (potVal);
}
El siguiente boceto combina un boceto de clic de botón y un boceto de control de brillo LED. El LED se encenderá desde el botón, y el potenciómetro controlará el brillo del brillo.
// detección de pulsación de botón con salida de LED e intensidad variable
int buttonPin = 7;
int ledPin = 9;
int potPin = A0;
configuración nula () {
pinMode (buttonPin, INPUT);
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
bucle vacío () {
if (digitalRead (buttonPin) == HIGH) {// si se presiona el botón
int analogVal = analogRead (potPin);
int scaledVal = map (analogVal, 0, 1023, 0, 255);
analogWrite (ledPin, scaledVal); // enciende el led con la intensidad establecida por pot
Serial.println ("presionado");
} más {
digitalWrite (ledPin, LOW); // apague si no se presiona el botón
Serial.println ("sin comprimir");
}
}