Author: CCHIU

  • Actividad 8 Robot controlado por IR

    El control de Infrarojo

    Hoy en día el control remoto por infrarrojos es omnipresente en la vida cotidiana. Se utiliza para controlar varios electrodomésticos, como televisores, equipos de música, grabadoras de video, equipos de refrigeración, receptores de señal satelital, etc.

    El sistema de comunicación IR consta de un dispositivo de transmisión por infrarrojos, en este caso el mando a distancia, y un módulo de recepción por infrarrojos.

    El sistema de mando tiene las siguientes características

    CONTROL REMOTO INFRARROJO 38KHZ

    • 17 teclas de función
    • Protocolo NEC 38KHz
    • Distancia de transmisión: hasta 8 metros (en función del entorno circundante, la sensibilidad del receptor, etc.)
    • Ángulo de operación: 60 °
    • Batería de botón CR2025
    • Corriente estática: 3 ~ 5uA, dinámica actual: 3 ~ 5 mA
    • Dimensiones: 85*40*6,5 mm (L*W*H)
    • Peso: 12 gramos

    Una señal infrarroja de 38K emitida por el mando a distancia es codificada por el chip de codificación del mando a distancia. Esta señal suele estar formada por una sección de código piloto, un código de usuario, un código de usuario inverso, un código de datos y un código de datos inverso. El intervalo de tiempo de pulso se utiliza para distinguir si se trata de una señal 0 o 1, y la codificación se compone de la combinación de esta señal binaria (0 y 1).

    Si bien el código de usuario del mismo control remoto permanece sin cambios, el código de datos varía con cada tecla. Cuando se pulsa el botón del mando a distancia, el mando a distancia envía una señal infrarroja. Cuando el receptor IR recibe la señal, el programa decodifica la señal para determinar qué tecla se presionó.

    En este caso los botones y los códigos son:

    TeclaCódigo
    10x16
    20x19
    30xD
    40xC
    50x18
    60x5E
    70x7
    80x1C
    90x5A
    00x52
    Flecha arriba0x46
    Flecha abajo0x15
    Flecha izquierda0x44
    Flecha derecha0x43
    OK0x40
    *0x42
    #0x4A


    Las especificaciones del control de mando son:

    CONTROL REMOTO INFRARROJO 38KHZ

    17 teclas de función

    Protocolo NEC 38KHz

    Distancia de transmisión: hasta 8 metros (en función del entorno circundante, la sensibilidad del receptor, etc.)

    Ángulo de operación: 60 °

    Batería de botón CR2025

    Corriente estática: 3 ~ 5uA, dinámica actual: 3 ~ 5 mA

    Dimensiones: 85*40*6,5 mm (L*W*H)

    Peso: 12 gramos

    En resumen, la MCU decodifica las señales recibidas, juzgando así qué tecla fue presionada por el control remoto.

    El receptor de infrarrojos es un módulo que cuenta con un sensor receptor de infrarrojos, y un dispositivo que integra la recepción, amplificación y modulación de la señal. El módulo receptor de infrarrojos tiene solo tres pines: línea de señal, VCC y GND.En el caso particular De esta forma, es muy conveniente comunicarse con el Arduino y otros microcontroladores a través del receptor IR.

    En el caso particular tiene 3 pines GRY donde G es el negativo otierra (Ground), R (Red) es el +5V y Y es donde se lee la señál.

    https://naylampmechatronics.com/blog/36_tutorial-arduino-y-control-remoto-infrarrojo.html

    Se instala la librería IRRemote by shirriff, z3t0,ArminJo v. 4.5.0 cuya referencia se encuentra en el enlace siguiente:

    https://github.com/Arduino-IRremote/Arduino-IRremote

    El código es el siguiente:

    #define DECODE_NEC            

    #include <IRremote.hpp>      

    constexpr uint8_t RECV_PIN {2};

    constexpr uint8_t LED {13};

    constexpr uint16_t S1 = 0x18;  // Tecla 5

    uint16_t irReceive() {

      uint16_t received{0};

      if (IrReceiver.decode()) {

        IrReceiver.printIRResultShort(&Serial);

        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {

               IrReceiver.printIRResultRawFormatted(&Serial, true);

        }

        if (IrReceiver.decodedIRData.protocol == NEC) {

          received = IrReceiver.decodedIRData.command;

          Serial.print(“Command: 0x”);

          Serial.println(received, HEX);

        }

        IrReceiver.resume();

      }

      return received;

    }

    void setup()

    {

      Serial.begin(9600);

      pinMode (LED, OUTPUT);

      digitalWrite (LED, HIGH);

      IrReceiver.begin(RECV_PIN);

      Serial.print(F(“Ready to receive IR signals at pin “));

      Serial.println(RECV_PIN);

    }

    void loop()

    {

       if (irReceive() == S1) { digitalWrite(LED,!digitalRead(LED)); }

    }

    Protocol=NEC Address=0x0, Command=0x18, Raw-Data=0xE718FF00, 32 bits, LSB first, Gap=3276750us, Duration=72500us
    Command: 0x18
    
    Protocol=NEC Address=0x0, Command=0x18, Repeat, Gap=95400us, Duration=13400us
    
    Command: 0x18
  • Actividad 7 Sensores de proximidad y distancia

    Sensores ultrasonicos

    Descripción

    Al igual que los murciélagos, el sensor ultrasónico HC-SR04 utiliza un sonar para determinar la distancia a un objeto. Este sensor ofrece una excelente detección y alcance con alta precisión y lecturas estables en un paquete simple y fácil de usar. Viene completo con un módulo transmisor y un receptor ultrasónico.

    El HC-SR04 o sensor ultrasónico se utiliza en una amplia gama de proyectos electrónicos, para la creación de robots de detección de obstáculos, medición de distancias, así como en otras aplicaciones. En este módulo, se presentará un método simple para medir distancias con un Arduino y un sensor ultrasónico.

    Especificación

    ·       Fuente de alimentación: + 5V DC.

    ·       Corriente de reposo: <2mA.

    ·       Corriente de trabajo: 15mA.

    ·       Ángulo efectivo: <15°.

    ·       Distancia de alcance: 2cm – 400 cm.

    ·       Resolución: 0,3 cm.

    ·       Ángulo de medición: 30 grados.

    ·       • Ancho de pulso de entrada del disparador: 10uS.

    Equipo

    El Principio De Funcionamiento Del Sensor Ultrasónico

    Como se presentó anteriormente, el sensor ultrasónico tiene dos “ojos”. Uno es el extremo transmisor y el otro es el extremo receptor.

    El módulo ultrasónico emitirá ondas ultrasónicas después de la señal de activación. Cuando las ondas ultrasónicas encuentran un obstáculo delante de ellas, se reflejan hacia atrás. Luego, el módulo genera una señal de eco, por lo que puede determinar la distancia al objeto a partir de la diferencia de tiempo entre la señal de disparo y la señal de eco.

    t es el tiempo total desde que se emite la señal hasta que encuentra un obstáculo y regresa al receptor. La velocidad de propagación del sonido en el aire es de aproximadamente 343 m/s, por lo tanto, distancia = velocidad * tiempo. A medida que la onda ultrasónica emitida va y viene, tenemos 2 veces la distancia. Por lo tanto, el resultado debe dividirse por 2, siendo la distancia medida por la onda ultrasónica = (velocidad * tiempo)/2.

    Así, el funcionamiento del sensor ultrasónico es el siguiente:

    1. El módulo ultrasónico establece el tiempo de retardo del pin trigonométrico del SR04 en 10 μs, que se puede activar al comienzo de la detección de la distancia de obstáculos.

    2. Después de la activación, el módulo enviará automáticamente ocho pulsos ultrasónicos de 40 KHz y detectará si hay retorno de señal. Este paso será completado automáticamente por el módulo.

    3. Si la señal regresa, el pin Echo emitirá un nivel alto y la duración del nivel alto será el tiempo desde la transmisión de la onda ultrasónica hasta su regreso.

    Las conexiones a hacer son:

    Sensor ultrasónico Arduino

    Vcc +5V

    Trig 10

    Echo 9

    Gnd Gnd

    El código es:

    int i =1;

    int trigPin =10;

    int echoPin = 9;

    float duracion, cm;

    void setup() {

    pinMode (trigPin, OUTPUT);

    pinMode (echoPin, INPUT);

    Serial.begin (9600);

    delay (10);

    }

    // El sensor se activa mediante un pulso ALTO de 10 o más milisegundos que da un pulso PEQUEÑO antes de comenzar para garantizar un pulso ALTO limpio

    void loop(){

    digitalWrite (trigPin, LOW);

    delayMicroseconds(20);

    digitalWrite (trigPin, HIGH);

    delayMicroseconds(20);

    digitalWrite(trigPin,LOW);

    duracion = pulseIn (echoPin,HIGH);

    cm = (duracion/2) / 29.1;

    Serial.print(” Midiendo “);

    Serial.print(i);

    Serial.print (” vez “);

    Serial.print(cm);

    Serial.print(” centimetros “);

    Serial.println();

    delay (150);

    i = i+1;

    }

    El sensor de infrarojos

    El FC-51 es un sensor de obstáculos reflectivo infrarrojo diseñado para detectar la presencia de objetos cercanos sin contacto físico, utilizando un sistema emisor-receptor basado en luz infrarroja. El módulo incorpora un LED infrarrojo (IR) que emite un haz de luz invisible, y un fototransistor receptor que detecta la luz reflejada por objetos próximos. Cuando un objeto entra en el rango de detección (ajustable mediante un potenciómetro integrado), parte de la luz infrarroja se refleja hacia el fototransistor, lo que cambia su estado de conducción y activa la salida digital del sensor (normalmente LOW cuando detecta un obstáculo).

    ESPECIFICACIONES Y CARACTERÍSTICAS

    • Modelo: FC-51.
    • Chip de funcionamiento: LM393.
    • Voltajes:
      • Alimentación: 3.3 – 5 VDC.
      • Salida Digital: 5 VDC.
    • Distancia de detección: 20 mm – 300 mm (ajustable).
    • Angulo de detección: 35°.
    • Pines:
      • VCC: Voltaje de alimentación.
      • OUT: Salida de tensión digital (0,1).
      • GND: Tierra.
    • Dimensiones: 30 mm  x 15 mm x 7 mm.

    El código es:

    const int IR_Sensor = 7; //Salida del Sensor IR FC-51

    void setup()

    {

      pinMode(13, OUTPUT); // LED en el ARDUINO UNO

      pinMode(IR_Sensor, INPUT);

      Serial.begin (9600);

    }

    void loop()

    {

      if (digitalRead(IR_Sensor) == HIGH) // si no hay obstaculo

        {

        digitalWrite(13, LOW); // Se apaga sin obstaculo

        Serial.println (“BAJO”);

      }

      else

      {

        digitalWrite(13, HIGH); // Se enciendo cuando hay un obstaculo

         Serial.println (“ALTO”);

      }

    }

    El sensor IR agudo (SHARP)

    Un sensor SHARP es un sensor óptico capaz de medir la distancia entre él y un objeto, para esto el sensor con la ayuda de un emisor infrarrojo y un receptor miden la distancia usando triangulación.

    El método de triangulación consiste en medir uno de los ángulos que forma el  triángulo emisor-objeto-receptor, el Receptor es un PSD (Position Sensitive Detector) que detecta el punto de incidencia el cual depende del ángulo y a su vez de la distancia del objeto.

    Metodo de triangulacion SHARP

    La geometría del sensor y de su óptica es el que limita el rango del sensor.

    El termino SHARP (Agudo) es porque tiene un rango de visión muy reducido, esto porque la luz que emite es puntual,  lo que permite usar el sensor para escanear o mapear áreas, pero teniendo en cuenta que objetos pequeños serán difíciles de detectar.

    También podemos usar varios sensores SAHRP para ampliar el rango de visión estos se pueden poner en diferente dirección e incluso  en la misma dirección siempre y cuando las líneas de visión no queden muy cercanas.

    Una ventaja adicional es que no son sensibles a la luz ambiental o el Sol, enemigo de los sensores infrarrojos, un SHARP usa una luz infrarroja intermitente  con una frecuencia determinada, que en el receptor es filtrada y elimina cualquier otra fuente de luz diferente a la frecuencia emitida.

    Y el código así como varios otros experimentos puede ser encontrado en:

    https://naylampmechatronics.com/blog/55_tutorial-sensor-de-distancia-sharp.html

  • Actividad 6 Los motores del Robot

    Los motores que se utilizan en el robot son de corriente continua.

    Estos motores normalmente funcionan con voltajes de 5 a 12 V si se invierte la polaridad cambia el sentido de rotación. Es importante anotar la corriente que necesitan operar, en la mayoría de casos son mayores a los que puede proporcionar el Arduino por lo que es necesario utilizar un controlados de motores.

    El controlador de motores L298N.

    El modulo L298N es mostrado en la siguiente imagen

    Y la vista desde arriba

    El controlador posee una bornera de tres pines para la alimentación, y dos borneras de 2 pines para la salida a los motores.

    Los pines ENA, IN1, IN2 correspondes a las entradas para controlar el MOTOR A (OUT1 y OUT2), y los pines ENB, IN3, IN4 permiten controlar el MOTOR B (OUT3 y OUT4)

    ENA y ENB, sirven para habilitar o deshabilitar sus respectivos motores, generalmente se utilizan para controlar la velocidad, ingresando una señal de PWM por estos pines. Si no se usan se deben de conectar los Jumper para que siempre estén habilitados. La imagen muestra los pines conectados.

    Tenemos además otro jumper que está mostrado como Enable Regulator, este se utiliza para definir la forma de alimentar el módulo. De acuerdo a si está o nó el jumper tenemos dos formas de hacer esto:

    1. Utilizando una sola fuente, conectada a la entrada de 12V y con el Jumper para habilitar el regulador, aclarando que el voltaje de la fuente es el que soporta el motor. De esta forma la entrada de 5V no debe estar conectada a ninguna fuente, ya que en este pin están presentes 5V  a través del  regulador interno; pero puedes utilizar este pin como una salida de 5V, pero sin exceder los 500mA de consumo. Se recomienda hacer esta conexión para voltajes menores de 12V para no sobrecalentar el regulador

    2. Utilizando dos fuentes, una de 5V conectada a la entrada de 5V (puede ser los 5V de un Arduino) y otra fuente con el valor del  voltaje que trabaja el motor, conectada al pin de 12V. Para esto se tiene que desconectar  el Jumper lo que deshabilitará al regulador.

    ¿Cuál de las dos formas es la que vamos a utilizar? Depende de la forma en que se alimenta el Arduino.

    La placa Arduino Uno se puede alimentar por dos métodos:

    1. A través de la conexión USB como se hace cuando se conecta a una computadora para programarla o simplemente para ejecutar el programa. Se puede usar cualquier adaptador USB conectado a la red.
    2. Con una fuente de alimentación externa. La fuente de alimentación se selecciona automáticamente. La alimentación externa (no USB) puede provenir de un adaptador de corriente de pared o de una batería. El adaptador se puede conectar con un enchufe de centro positivo de 2,1 mm de diámetro en el conector Jack de alimentación de la placa (Marcado como Barrel Jack). Los cables de una batería se pueden insertar en los cabezales de los pines GND y VIN del conector POWER. La placa puede funcionar con una fuente externa de 6 a 20 voltios. Sin embargo, si se alimenta con menos de 7 V, el pin de 5 V puede suministrar menos de cinco voltios y la placa puede volverse inestable. Si usas más de 12V, el regulador de voltaje puede sobrecalentarse y dañar la placa. El rango recomendado es de 7 a 12 voltios.

    Desglose de pines de alimentación:

    • VIN: El voltaje de entrada a la placa Arduino cuando está usando una fuente de alimentación externa (a diferencia de los 5 voltios de la conexión USB u otra fuente de alimentación regulada). Puedes suministrar voltaje a través de este pin o, si suministras voltaje a través del conector de alimentación, acceder a él a través de este pin.
    • 5V: Este pin proporciona 5V regulados desde el regulador interno de la placa. La placa puede recibir alimentación desde el conector de alimentación DC (7 a 12 V), el conector USB (5 V) o el pin VIN de la placa (7-12 V). El suministro de voltaje a través de los pines de 5 V o 3,3 V puentea el regulador y puede dañar la placa si lo haces mal. Por lo tanto ese método alimentación no es recomendable
    • 3V3: Proporciona 3.3 Voltios generado por el regulador integrado. El consumo máximo de corriente es 50 mA.
    • GND: Pines negativos (masa)
    • IOREF: Este pin en la placa Arduino proporciona la referencia de voltaje con la que opera el microcontrolador. Una shield configurada correctamente puede leer el voltaje del pin IOREF y seleccionar la fuente de alimentación adecuada o permitir que los conversores de voltaje (ADC) en las salidas funcionen con 5V o 3.3V.

    Ahora usaremos el controlador para alimentar a los motores sin usar el Arduino.

    Los jumpers de control de velocidad

    El modulo viene con dos jumpers en ENA y en ENB. Cuando los jumpers se encuentran colocados los motores giraran a máxima velocidad, si se retira los motores pueden ser controlados con modulación de ancho de pulso.

    Los pines de control de dirección

    Los pines IN1 y IN2 sirven para controlar la dirección de giro del motor A en tanto que los pines IN3 e IN4 sirven para controlar la dirección de giro del motor B.

    Input1Input2Direction de giro
    Low(0)Low(0)Motor OFF
    High(1)Low(0)Adelante
    Low(0)High(1)Retrocede
    High(1)High(1)Motor OFF

    Instalación y código

    Es tomado de:

    https://lastminuteengineers.com/l298n-dc-stepper-driver-arduino-tutorial

    El código es:

    // Motor A connections

    int enA = 9;

    int in1 = 8;

    int in2 = 7;

    // Motor B connections

    int enB = 3;

    int in3 = 5;

    int in4 = 4;

    void setup() {

      // Set all the motor control pins to outputs

      pinMode(enA, OUTPUT);

      pinMode(enB, OUTPUT);

      pinMode(in1, OUTPUT);

      pinMode(in2, OUTPUT);

      pinMode(in3, OUTPUT);

      pinMode(in4, OUTPUT);

      // Turn off motors – Initial state

      digitalWrite(in1, LOW);

      digitalWrite(in2, LOW);

      digitalWrite(in3, LOW);

      digitalWrite(in4, LOW);

      }

    void loop() {

      directionControl();

      delay(1000);

      speedControl();

      delay(1000);

    }

    void directionControl() {

      // Set motors to maximum speed

      // For PWM maximum possible values are 0 to 255

      analogWrite(enA, 255);

      analogWrite(enB, 255);

      // Turn on motor A & B

      digitalWrite(in1, HIGH);

      digitalWrite(in2, LOW);

      digitalWrite(in3, HIGH);

      digitalWrite(in4, LOW);

      delay(2000);

        // Now change motor directions

      digitalWrite(in1, LOW);

      digitalWrite(in2, HIGH);

      digitalWrite(in3, LOW);

      digitalWrite(in4, HIGH);

      delay(2000);

      // Turn off motors

      digitalWrite(in1, LOW);

      digitalWrite(in2, LOW);

      digitalWrite(in3, LOW);

      digitalWrite(in4, LOW);

    }

    // This function lets you control speed of the motors

    void speedControl() {

      // Turn on motors

      digitalWrite(in1, LOW);

      digitalWrite(in2, HIGH);

      digitalWrite(in3, LOW);

      digitalWrite(in4, HIGH);

      // Accelerate from zero to maximum speed

      for (int i = 0; i < 256; i++) {

        analogWrite(enA, i);

        analogWrite(enB, i);

        delay(20);

      }

      // Decelerate from maximum speed to zero

      for (int i = 255; i >= 0; –i) {

        analogWrite(enA, i);

        analogWrite(enB, i);

        delay(20);

      }

      // Now turn off motors

      digitalWrite(in1, LOW);

      digitalWrite(in2, LOW);

      digitalWrite(in3, LOW);

      digitalWrite(in4, LOW);

    }

    TAREA

    Mover el robot combinando los movimientos elementales, cuya estructura del código es:

    void setup(){

    }

    void loop(){

    }

    void car_front() // hacer que el coche avance hacia adelante

    {

    }

    void car_back() // hacer que el coche retrocedea{

    }

    void car_left() // el coche gira a la izquierda

    {

    }

    void car_right() // el coche gira a la derecha

    {

    }

    void car_Stop() // el coche se detiene

    {

    }

  • Actividad 5 Funciones

    Los pines digitales del Arduino

    En la imagen los pines digitales se encuentran en el lado derecho con numeris D1 al D13,

    pinMode()

    [Digital I/O]

    Descripción

    Los pines digitales tienen una característica especial, la que es que se pueden usar como entrada (lectura) o salida (escritura)

    Syntaxis

    pinMode(pin, mode)

    Parameters

    pin: es el número del pin al cual se desea definir el modo en que trabaja.

    mode: INPUT, OUTPUT, or INPUT_PULLUP.

    Regresa

    Nada

    Ejemplo

    El codigo pone al pin 13 en el modo de OUTPUT y puede darle los valores de HIGH y LOW

    void setup()
    {
    pinMode(13, OUTPUT);

    }

    digitalWrite()

    [Digital I/O]

    Descripción

    Write a HIGH or a LOW value to a digital pin.

    Si el pin ha sido configurado como OUTPUT con pinMode(), su voltaje será 5V para HIGH, 0V (tierra) para LOW.

    Cada pin que ha sido configurado como OUTPUT puede proporcionar hasta 20 mA. de corriente y en ningun caso debe excederse los 40 mA.

    Si se utilizan varios pines degitales la corriente total no deben en total exceder de 200 mA .

    Syntaxis

    digitalWrite(pin, value)

    Parameters

    pin: numero de pin

    value: HIGH or LOW

    Retorna

    Nada

    Ejemplo

    void setup() { pinMode(13, OUTPUT);

    // selecciona al pin digital 13 como output }

    void loop() { digitalWrite(13, HIGH);

    // enciendo el pin digital 13 on

    delay(1000); // espera un segundo

    digitalWrite(13, LOW);

    // apaga el pin digital 13

    delay(1000);

    // espera por un segundo

    }


    delay

    delay()

    [Time]

    Descripción

    Pausa el programa por le cantidad de tiempo en milisegundos especificado como parametro.

    Syntaxis

    delay(ms)

    Parametros

    ms: el número de milisegundos para parar (unsigned long)

    Retorna

    Nada

  • Actividad 4 – Tipos de datos y estructuras

    En las actividades anteriores hemos visto varios temas que se necesitan en la programación del Arduino.

    Tipo de dato

    int

    [Data Types]

    Descripción

    Las variables del tipo int están almacenados en 16 bits o su equivalente 2 bytes y puede tener valor desde -32,768 hasta 32,767

    Syntaxis

    int var = val;

    var – your int variable name
    val – the value you assign to that variable

    Ejemplo usado:

    int ledPin = 9;

    int value;

    long

    [Data Types]

    Description

    Las variables del tipo long están almacenados en 32 bits o su equivalente 4 bytes y puede tener valor desde -2,147,483,648 hasta 2,147,483,647.

    Syntaxis

    long var = val;

    var – nombre de la variable

    val – El valor asignado a la variable

    Ejemplo usado

    long value_on = 1000;
    long value_off = 1000;

    Los números binarios y decimales

    El sistema de numeración binario

    Convertir decimales a binario

    Patrones en numeración binaria

    Y en el sistema hexadecimal

    Cuando se define a un entero en notación decimal se usa en forma normal al número. Por ejemplo en el programa fade se ha usado el tipo de dato int ledPin = 9, pero el número 9 en binario es 1001, para indicarle al Arduino se usa el prefijo 0b al numero es decir para indicarle al Arduino que se le esta dando un valor binario equivalente al 9 decimal, se tiene que escribir 0b01001

    En forma similar para usar un número hexadecimal se usa el prefijo 0x . El número 9 en decimal es así 0x11.

    Ejercicio reemplaza en el programa fade los número enteros utilizados en decimal por sus equivalentes binarios o headecimales y observa si funcional igual

    ¿Cuándo usas un tipo de dato int y cuando long?

    Estructuras

    for

    Description

    El enunciado for es usado para repetir un bloque de enunciados que están dentro de las llaves.

    La inicialización sucede una sola vez y es la condición para que se ejecute el enunciado for. Cada ciclo la condición es probada y si es cierta se ejecuta y dentro de esa ejecución se ejecuta el incremento.

    Normalmente hay un contador de incrementos que ayuda a terminar los ciclos. El enunciado for se usa para hace operaciones repetitivas.

    Syntaxis

    for (inicialización; condición; incremento) {
    	//enunciados(s);
    }

    Ejemplo:

      for (value = 255; value> 0; value = value-1) {

        analogWrite (ledPin, value); // LED se apaga gradualmente

        delay(5); // delay 5MS

  • Actividad 3 – Variando el brillo de un LED


    En el proyecto anterior un LED era encendido y apagado de forma intermitente. Ahora bien como podemos variar el brillo de un LED. Una forma análoga de hacerlo era aumentando o disminuyendo la corriente eléctrica a través de el. Para ello usamos la ley de Ohm I=V/R , es decir si disminuimos la resistencia aumentamos la corriente. Por ello podemos probar con diferentes resistencias.

    Sin embargo hay otro método de hacerlo y este es una variación del programa Blink. El principio a utilizar es llamado Modulación por ancho de pulso o (PWM Pulse Width Modulation en ingles). Este principio nos dice que el brillo de un LED está dado por el valor promedio de la corriente que atraviesa un LED, es decir si yo tengo un voltaje de 5 V y hago circular una corriente a través de una resistencia de 1 Kohm., circula una corriente de 5 mA. Pero que sucede si se prende y apaga el LED varias veces por segundo, el promedio sería de 2.5 mA, si lo prendo y apago dos veces por segundo tendré el caso del LED intermitente, pero si aumento por ejm. A 50 veces por segundo el ojo no es capaz de seguir esta variación rápida y el ojo lo tomará como que el LED emite un brillo menor.

    Bajo este principio es que el cine no es más que una sucesión de fotografías.


    y su esquema:

    Empecemos con el último sketch blink .

    Para entender las funciones usadas, hay que usar la documentación del Arduino:

    https://www.arduino.cc/reference/es

    hemos usado la función delay(), el manual nos dice:

    Descripción

    La documentación solo está disponible en 3 idiomas , Ingles, Alemán y Portugues. Cada vez que no entiendas como se usa una función , allí es el lugar para buscar como usarla.

    Reescribimos el sketch blink

    long value_on = 1000;

    long value_off = 1000;

    void setup() {

      // initialize digital pin LED_BUILTIN as an output.

      pinMode(LED_BUILTIN, OUTPUT);

    }

    // the loop function runs over and over again forever

    void loop() {

      digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)

      delay(value_on);                      // wait for a second

      digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW

      delay(value_off);                      // wait for a second

    }

    Y ahora cambiamos los valores

    long value_on = 10;

    long value_off = 10;

    observamos que la intensidad del LED permanece constante pero su intensidad era menor que cuando era intermitente. Es decir a 50 veces por segundo el ojo no puede distinguir los cambios tal rápidos, luego pruebe con valores como:

    long value_on = 15;

    long value_off = 5;

    long value_on = 5;

    long value_off = 15;

    y puede ver los cambios de intensidad.

    Arduino introduce la función “analogWrite()”. Sabemos que una puerta digital solo tiene estados de 0 y 1. Entonces, ¿cómo se envía un valor analógico a un puerto digital? En este caso, se requiere la función analogWrite().

    Al mirar la placa Arduino puedes encontrar 6 pines marcados con el símbolo “~”, lo que representa que pueden emitir señales PWM.

    El formato de la función es el siguiente: analogWrite(pin, value), Esto se utiliza para enviar un valor analógico de 0~255 a un puerto PWM. Presta atención, ya que sólo es posible utilizar pines digitales que tengan la función PWM, como los pines 3, 5, 6, 9, 10 y 11.

    PWM es una tecnología para obtener cantidades analógicas mediante un método digital. El control digital forma una onda cuadrada, y la señal de onda cuadrada tiene sólo dos estados de encendido y apagado (es decir, niveles alto o bajo). Al controlar la relación entre el tiempo de encendido y apagado, se puede simular un voltaje que oscila entre 0 y 5 V. El tiempo de activación (comúnmente denominado nivel alto) se denomina ancho de pulso, por lo que PWM también se denomina modulación de ancho de pulso.


    En la figura anterior, la línea verde representa un período, y el valor de analogWrite() corresponde a un porcentaje que también se denomina ciclo de trabajo. El ciclo de trabajo implica que la duración de alto nivel se divide por la duración de bajo nivel en un ciclo. De arriba a abajo, el ciclo de trabajo de la primera onda cuadrada es 0% y su valor correspondiente es 0. El brillo del LED es menor, es decir, apagado.

    Cuanto más dure el nivel alto, más brillante será el LED.
    Por lo tanto, el último ciclo de trabajo es del 100%, que corresponde a 255, donde el LED es más brillante. PWM se utiliza principalmente para ajustar el brillo del LED o la velocidad de rotación de un motor, y desempeña un papel vital en el control de los coches robot inteligentes.

    El programa usado es una variación del programa Fade

    El código del programa es:

    int ledPin = 9; // establece el pin LED en D9

    int value;

    void setup () {

      pinMode (ledPin, OUTPUT); // inicializa ledPin como salida.

    }

    void loop () {

      for (value = 0; value <255; value = value + 1) {

        analogWrite (ledPin, value); // las luces LED se encienden gradualmente

        delay(5); // delay 5MS

    }

      for (value = 255; value> 0; value = value-1) {

        analogWrite (ledPin, value); // LED se apaga gradualmente

        delay(5); // delay 5MS

    }

    }

  • Actividad 2 Programación básica con hardware


    Pagina principal

    https://docs.arduino.cc/built-in-examples

    Esta es una lista de programas que nos presentan los fundamentos para programar el Arduino. Los programas pueden encontrarse en:

    Archivos → Ejemplos

    El orden que vamos a seguir es el siguiente:

    1.- Basics – Bare minimum code needed

    En Arduino es un programa o conjunto de instrucciones que se carga en una placa Arduino para controlar los elementos conectados a ella.

    El sketch tiene dos secciones formadas por dos funciones que no devuelven ningún valor.

    El ejemplo mostrado es solo de lectura

    La función

    setup()

    tiene el nombren void porque no devuelve nada y es llamada cuando se inicia el sketch y se usa para inicializar variables, modos, librerías, librerias, etc. La función setup solo se ejecuta una vez cuando se prende el circuito.

    La función

    loop()

    se ejecuta después de la función setup() y se ejecuta indefinidamente y es aquí donde ocurre toda la acción.

    La doble barra oblicua se usa para indicar que lo que sigue en la línea son comentarios y no se ejecutan

    2.- Conceptos básicos de electricidad

    Los conceptos básicos a ver ahora son :

    2.1 Voltaje

    2.2 Corriente o intensidad de corriente

    2.3 Resistencia

    2.4 Ley de Ohm I=V/R o V=IR

    2.5 Potencia P = VI

    3.- Dispositivos electrónicos

    Uso del protoboard y LEDs.

    3.1 Circuito básicos

    Se requieren resistencias de 1 KOhm y 1 LED

    Circuitos serie y paralelo.

    4.- El primer programa en Arduino es el programa Blink

    y su esquema:

    El código del programa es:

  • Actividad 1 Instalar

    Pagina principal

    https://www.arduino.cc

    Para comprender bien al Arduino

    Ver el siguiente video, con la opción CC se puede escoger los subtítulos en castellano.


    con la opción Settings se puede escoger los subtítulos en castellano.

    Instalación

    Puedes seguir las instrucciones o si prefieres ver un video de como instalar.


    Puedes descargar el IDE de Arduino en tu site oficial: https://www.arduino.cc. Haga clic en Products en la barra de navegación y, a continuación, haga clic en All Software luego ingrese a la página de downloads como se muestra a continuación:

    Descargar el instalador. La última versión es arduino IDE 1.8.19-windows

    Escoger todas

    Al ejecutar por primera vez

    Escoger esta opción.

    Nos lleva a la primera pantalla de programación

    El Arduino .- el microcontrolador que vamos a utilizar es el Arduino UNO.

    l

    El Arduino viene con un cable que conecta el conector a el USB de la computadora, al conectarla a la computadora debemos primero configurar al Arduino al microcontrolador.

    Vemos en Herramientas las opciones que vamos a utilizar:

    Placa

    Procesador

    Puerto

    Obtén información de la placa

    En la información de la placa escogemos Arduino Uno, cuando detecta al Arduino UNO desaparece la opción del Procesador.

    En la opción Puerto escogemos el que está conectado al Arduino UNO. Si no indica tenemos que buscar al puerto. El puerto correcto se obtiene cuando se usa la opción Obtén información de la placa.

    Si da información de la placa esto significa que es el puerto correcto.

    Con esto estamos listos para la programación, este programa puede ser compilado y cargado a la placa de Arduino, pero antes se tiene que hacer otras configuraciones.

    En la opción Archivo → Preferencias se obtiene la siguiente pantalla

    Aquí se tiene que escoger a la carpeta donde se quiere trabajar. En nuestro caso se escogió una carpeta Arduino dentro de documentos. Si quiere ponerla en otro directorio búsquelo con Explorar.

    Ref.

    https://techexplorations.com/blog/arduino/guide-to-arduino-uno-r3-power

    Si prefieres ver un video de como hacer la instalación