Divertido dispensador de caramelos o lo que se tercie


A veces para hacer realidad ideas , actualmente no hace falta grandes desarrollos o un despliegue de recursos desorbitado, porque como vamos a ver, realizar un dispensador de caramelos , una hucha o incluso un alimentador para animales puede ser realmente casi una tarea relativamente sencilla.

En Internet, se pueden ver dispensadores de caramelos con un motor lineal y piezas de la impresora 3D. En muchas paginas también se muestra una colección de chatarra con viejas unidades de CD/DVD donde tanto el cajón como el cabezal de lectura se mueven de esta manera. Así que diseccionar una unidad antigua puede ser emocionante, pero al final no parece adecuado para los nuevos tiempos, por lo que la alternativa es un servomotor.

En efecto para llevar a cabo el nuevo proyecto con tecnología actual , todo lo que necesita es un microcontrolador, LED y botones, así como un potente servomotor, además de algunos retoques y muchas dosis de creatividad.

Hardware

1Microcontrolador Uno
1Prototyping Shield, alternativamente Mini Breadboard
2RGB LEDs
1Servo de engranajes metálicos MG90S, MG995, MG996R
1Botón (aquí botón arcade con LED)
Optar.Zumbador activo (zumbador)
Cable de puente y fuente de alimentación: 4 pilas AA
aprox. 1 mCanal de cables 60x40mm de la ferretería, cinta adhesiva

En primer lugar, aquí está el componente más importante, el

Dispensador de caramelos

Quizas la tarea mas compleja es la caja donde ira el dispensador de caramelos que queremos qeu se pueda abrir o cerrar automaticamente

El dispensador de caramelos se puede realizar con un canal de cables 60×40 mm y el servobrazo extendido con tubo retráctil unido al baston del servo.

Desafortunadamente, no está en la gama AZ-Delivery el botón iluminado, ya que se usa en las consolas arcade. Por supuesto, también puedes usar otros botones.

Li dea es sencilla: los niños presionan la nariz roja de una cara de payaso ligeramente espeluznante, los ojos rojos se vuelven verdes, después de 2,5 segundos los ojos parpadean dos veces y el servomotor gira 90° para empujar un pequeño paquete de dulces.

Se puede pintar el cuadro, imprimirlo o pegarlo como un patchwork.

Toda la configuración no está pensada para durar para siempre, por lo que los componentes electrónicos y las baterías están en una caja de cartón.

Se utilizan LEDs RGB con un cátodo común. Este tiene la pata más larga del LED RGB, la pata única de un lado es para el componente rojo, las dos patas del otro lado son para el verde y el azul.

Se utilizan los pines del microcontrolador Arduino usando el GPIO 3 para el rojo, el GPIO 4 para GND, el GPIO 5 para el verde y el GPIO 6 para el azul, en primer lugar para poder atenuar opcionalmente los LED (3, 5 y 6 tienen PWM) y en segundo lugar para activar tanto el guiño como el zumbador opcional ajustando brevemente el GPIO 4 a HIGH. 

Se conectan los dos «ojos» (LED RGB) en paralelo. Opcionalmente, se podrían controlar individualmente usando un pin adicional del GPIO .

Todo el conjunto cabe en una caja de cartón que podemos cerrar para que no se vea el mecanismo. En la imagen , a la derecha vemos el aspecto del Arduino Uno con Escudo de Prototipos ( para el buzzer ). En la parte de la derecha vemos los 2 LED RGB y el botón iluminado (igual que los usados en consolas de juegos)

Esquemático

El circuito como vemos en la imagen es bastante simple usando sólo pines digitales :

  • El GPIO 8 lo conectamos al pulsador ( y el otro a masa)
  • El GPIO 3 lo conectamos al pin rojo de cada led RGB.
  • El GPIO 4 lo conectamos a la masa de cada led
  • El GPIO 5 lo conectamos al pin verde de cada led RGB.
  • El GPIO 9 lo conectamos al led interno del pulsador
  • El GPIO 10 conectamos al pin de datos del servo ( también necesitará 5v DC para los otros dos terminales)
  • El GPIO 5 también lo conectamos al zumbador.

Este es el aspecto del conjunto al que ha añadido la alimentación consistente en 4 pilas AA que nos dan una tensión final de unos 6 Voltios.

Código Arduino

El código controla un rostro de payaso con LEDs RGB como ojos y un botón grande con un LED como nariz. El comportamiento es el siguiente:

  1. Operación normal: Los ojos (LEDs) están en rojo y el botón tiene un LED rojo encendido.
  2. Cuando se presiona el botón:
    • Los ojos se vuelven verdes y el LED del botón se apaga durante 6 segundos.
    • Después de 2.5 segundos, los ojos verdes parpadean y suena un zumbador dos veces.
    • Un servo se activa para empujar dulces.

Explicación del código:


Inclusión de la librería Servo:

#include <Servo.h>
Servo myservo;  // Crear objeto servo para controlar un servo
int pos = 0;    // Variable para almacenar la posición del servo


Definición de pines:

const int buttonPin = 8; // Pin del botón
const int redledPin = 3; // Pin del LED rojo
const int gndledPin = 4; // Pin de tierra común para LEDs
const int greenledPin = 5; // Pin del LED verde
const int blueledPin = 6; // Pin del LED azul
const int ledPin = 9; // Pin del LED en el botón


Variables:

int buttonState = 0; // Variable para leer el estado del botón


Configuración inicial:

void setup() {
 pinMode(redledPin, OUTPUT);
 pinMode(gndledPin, OUTPUT);
 digitalWrite(gndledPin, LOW);
 pinMode(greenledPin, OUTPUT);
 pinMode(blueledPin, OUTPUT);
 pinMode(ledPin, OUTPUT);
 pinMode(buttonPin, INPUT_PULLUP);
 myservo.attach(10); // Conectar el servo al pin 10
 myservo.write(130);
 delay(500);
}


Función para mover el servo:

void servoturn() {
 for (pos = 130; pos >= 20; pos -= 1)
 {myservo.write(pos);
  delay(10);
 }
 for (pos = 20; pos <= 130; pos += 1) 
  { myservo.write(pos);
  delay(10); 
  }
}


Bucle principal:

void loop() {
 buttonState = digitalRead(buttonPin);
 if (buttonState == LOW) {
  digitalWrite(redledPin, LOW);
  digitalWrite(ledPin, LOW);
  digitalWrite(greenledPin, HIGH);
  delay(2500);
  digitalWrite(gndledPin, HIGH);
  delay(250);
  digitalWrite(gndledPin, LOW);
  delay(250);
  digitalWrite(gndledPin, HIGH);
  delay(250);
  digitalWrite(gndledPin, LOW);
  servoturn();
  delay(2500);
 } else {
  digitalWrite(greenledPin, LOW);
  digitalWrite(ledPin, HIGH);
  digitalWrite(redledPin, HIGH);
 }
}

Por cierto , en la secuencia descrita en el código, el zumbador se activa después de que los ojos (LEDs verdes) han estado encendidos durante 2.5 segundos. Aquí está el detalle:

  1. Después de 2.5 segundos de que los ojos se vuelven verdes, el zumbador suena brevemente dos veces.
  2. Esto se logra mediante el parpadeo del LED común a tierra (gndledPin), que simula el sonido del zumbador.

El código para esto es:

delay(2500);  // Espera 2.5 segundos
digitalWrite(gndledPin, HIGH);  // Activa el zumbador (simulado)
delay(250);  // Espera 0.25 segundos
digitalWrite(gndledPin, LOW);  // Desactiva el zumbador
delay(250);  // Espera 0.25 segundos
digitalWrite(gndledPin, HIGH);  // Activa el zumbador nuevamente
delay(250);  // Espera 0.25 segundos
digitalWrite(gndledPin, LOW);  // Desactiva el zumbador

Este parpadeo del LED común a tierra (gndledPin) simula el sonido del zumbador, creando un efecto de sonido breve dos veces.

Funcionamiento general

  • Estado normal: Los ojos (LEDs) están en rojo y el LED del botón está encendido.
  • Al presionar el botón:
    1. Los ojos se vuelven verdes y el LED del botón se apaga.
    2. Después de 2.5 segundos, los ojos verdes parpadean y el zumbador suena brevemente dos veces.
    3. El servo motor se activa para empujar dulces.

RESUMEN Y CODIGO COMPLETO

En resumen, el código controla LEDs y un servo para crear un efecto de cara de payaso interactiva para Halloween o lo que se quiera.

En las siguientes líneas podemos ver el código completo Arduino para probar el montaje anterior.

<Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position

// constants won’t change. They’re used here to set pin numbers:
const int buttonPin = 8;      // the number of the pushbutton pin
const int redledPin =  3;     // the number of the red LED pin
const int gndledPin =  4;     // the number of the common ground LED pin
const int greenledPin =  5;   // the number of the green LED pin
const int blueledPin =  6;    // the number of the blue LED pin
const int ledPin =  9;       // the number of the LED pin in button

// variables will change:
int buttonState = 0;          // variable for reading the pushbutton status

void setup() {
 // initialize the LED pin as an output:
 pinMode(redledPin, OUTPUT);
 pinMode(gndledPin, OUTPUT);
 digitalWrite(gndledPin, LOW);    
 pinMode(greenledPin, OUTPUT);
 pinMode(blueledPin, OUTPUT);
 pinMode(ledPin, OUTPUT);  
 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT_PULLUP);
 myservo.attach(10); // attaches the servo on Pin 10 to the servo object
 myservo.write(130);
 delay(500);  
}  // end setup

void servoturn()   {    // adjust angles acc. to your setup
   for (pos = 130; pos >= 20; pos -= 1) {
   // goes from 120 degrees to 20 degrees
   // in steps of 1 degree
   Serial.println(pos);
   myservo.write(pos);
   delay(10);
   }
 for (pos = 20; pos <= 130; pos += 1) {
   // goes from 20 degrees to 120 degrees
   Serial.println(pos);  
   myservo.write(pos);
   delay(10);
   }
}  // end servoturn

void loop() {
 // read the state of the pushbutton value:
 buttonState = digitalRead(buttonPin);
 // check if the pushbutton is pressed. If it is, the buttonState is LOW:
 if (buttonState == LOW) {
   // turn green LED on, red LED off:
   digitalWrite(redledPin, LOW);
   digitalWrite(ledPin, LOW);    
   digitalWrite(greenledPin, HIGH);
   delay(2500);
   digitalWrite(gndledPin, HIGH);     
   delay(250);
   digitalWrite(gndledPin, LOW);
   delay(250);
   digitalWrite(gndledPin, HIGH);     
   delay(250);
   digitalWrite(gndledPin, LOW);
   servoturn();      
   delay(2500);        
 } else {
   // turn green LED off red LED on:
   digitalWrite(greenledPin, LOW);
   digitalWrite(ledPin, HIGH);      
   digitalWrite(redledPin, HIGH);    
 }
}  // end loop

Servos y sensores climáticos


Se trata de un proyecto sencillo realizado por Miguel Torres Gordo donde nos muestra como mostrar la hora, la temperatura y la humedad en una habitación con pocos módulos. El diseño muestra solo la hora y los minutos, porque los segundos no son relevantes y obviamente encarecen el proyecto.

La foto muestra una posible distribución de la pantalla, pero se deja a la imaginación del lector cómo podrían usarse, por ejemplo, en una caja hecha con una impresora 3D.

Proyecto finalizado

Materiales necesarios

  • Chip Nano V3.0 CH340 presoldado, versión mejorada con cable USB
  • MAX7219 Módulo de pantalla LED de matriz de puntos 8×32 4 en 1
  • KY-015 DHT 11 Módulo de sensor de temperatura ( del que por cierto hemos tratado en numerosos proyectos en este blog)
  • Reloj en tiempo real DS3231 I2C (idéntico al DS1307).Alternativamente con modificaciones DS1302 Serial Real Time Clock RTC Real Time Clock Module. Este tipo de módulos lo hemos tratado tambien en numerosos ejemplos en este blog
  • Micro servomotor digital MG995 o micro servomotor SG90 Micro servomotor 9G o micro servomotor MG90S
  • MB 102 Kit de placa de pruebas – 830 Breadboard, adaptador de fuente de alimentación 3.3V 5V, 65pcs Jumpers
  • Fuente de alimentación externa (9V – 12V)

Software requerido

IMPORTANTE: Encuentre las bibliotecas que faltan en el IDE de Arduino a través de «Herramientas -> Administrar bibliotecas…»

Circuito y descripción de su funcionamiento

El módulo DS1302 RTC( que hemos tratado tambien en numerosos ejemplos en este blog )es responsable de proporcionar la hora en el microcontrolador, mientras que el módulo DHT-11 mide la temperatura y la humedad ( del que por cierto hemos usado tratado en este blog). A continuación, el microcontrolador utiliza la información para controlar el grupo de módulos LED de 8×8 para la hora y los servomotores para mostrar la temperatura y la humedad.

Es muy importante que introduzcamos una batería adecuada, ya que aunque este módulo funcionará correctamente sin ella, si desconectamos el módulo del circuito, se reiniciará la hora.

Para establecer la fecha y la hora actuales, debemos configurar el siguiente circuito usando los pines SDA/SCL de nuestra placa Arduino o compatible:

Configuración de RTC
RTC (I2C)Nano V3
VCC5V
GNDGND
CLKA5 (SCL)
DATA4 (SDA)
RST

A continuación, ejecutamos el sketch DS1307_setup.ino, abrimos el Monitor Serie y podemos ver tanto la fecha como la hora en que se ha guardado el módulo. Estos datos son los datos que proporciona el sistema operativo del PC en el momento en que se ejecuta el boceto. Si nos fijamos en el boceto, podemos ver que la línea de código

clock.setDateTime(__DATE__, __TIME__);

es el que carga el módulo con los dos datos del sistema. A partir de ese momento, hemos configurado el módulo con la hora y la fecha y gracias a la batería, estos datos no se eliminarán del módulo cuando se corte el voltaje.

Además en el diseño tenemos dos servos , un sensor dht11 y 4 Display que completen el total de conexiones junto a los hilos de alimentación de 5v DC correspondientes para cada módulo:

  • GND y VIN para alimentación de todos los dispositivos.
  • A4 y A5 para la conexión del DS1302.
  • D13, D11 y D10 para los 4 displays (MAX7219).
  • D3 y D4 para los dos servos.
  • D2 para el DHT11.

Después de configurar la hora y la fecha, unto con los otros módulos en el circuito y ejecutamos el boceto clock_temperature_humidity.ino. Cuando hayamos terminado de cargar, deberíamos ver la hora exacta en la matriz de LED y los dos servomotores deberían moverse hasta que se posicionen en el valor de la temperatura y la humedad en el ambiente.

Circuito

Para cargar el boceto en el microcontrolador, elimine la línea entre +5V y Vin.

Ampliada

Tenemos la fuente de alimentación de 5V DC, el microcontrolador, el módulo RTC DS1302, DHT-11, el array de LED y los 2 servomotores.

Foto de la construcción

Analicemos el código:

En primer lugar, cargamos las librerías que son necesarias para la ejecución del boceto. Los tres primeros son para la matriz LED, los dos siguientes son para usar el módulo DS1307, el penúltimo es la biblioteca para el módulo DHT-11 y el último es para usar los servomotores:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h>
#include <DS3231.h>
#include <DHT.h>
#include <Servo.h>

Después de las librerías, tenemos que configurar las conexiones de los módulos con los pines del microcontrolador. Luego el tipo de controlador y el número de módulos LED de la matriz (4 en nuestro caso). A continuación, el tipo de módulo DHT. Creamos las instancias de cada módulo y las variables necesarias para almacenar los datos de las mismas:

// Define hardware type, size, and output pins MAX7219 8x32 4 in 1 Dot Matrix LED Display Module
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 10

// Define hardware type andi pins DHT-11
#define DHTPIN 2
#define DHTTYPE DHT11

// Create a new instance of the MD_Parola class with hardware SPI connection:
MD_Parola reloj = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// Create a instance of DHT-11 sensor and variables for temperature and humidity
DHT dht(DHTPIN, DHTTYPE);
float t, hu;

// Instances of the servos for humidity and temperature
Servo servoTemperature;
Servo servoHumidity;

// Instance for the DS3231 clock
DS3231 clock;
RTCDateTime dt;

Después de configurar los parámetros del módulo, inicializamos los módulos en la función setup() del boceto:

      // Initialization of Monitor Serial
      Serial.begin(9600);
      Serial.println("Initialize RTC module");
  
      // Initialization of DS3231 Module
      clock.begin();

      // Initialization MAX7219 LED Matrix Display
      reloj.begin();                // Intialize the object
      reloj.setIntensity(0);        // Set the intensity (brightness) of the display (0-15)
      reloj.displayClear();         // Clear the display

      // Initialization DHT-11 module
      dht.begin();

      // Servo pins connections
      servoTemperature.attach(3);
      servoHumidity.attach(4);

La función loop() genera los valores medidos y los cálculos necesarios para la visualización.

En primer lugar, analizaremos los datos de temperatura y humedad. Asignamos el valor de temperatura a la variable t y el valor de humedad a la variable hu. Si no recibimos ningún dato, lo comunicamos a través del monitor de serie. Los rangos de valores con los que trabajaremos van de 0 a 50 grados centígrados de temperatura y de 0% a 100% de humedad. Sabemos que los servomotores suelen tener un rango de ángulo de 180 grados. Para que los servomotores marquen los datos correctamente, realizamos una sencilla operación matemática para asignar los valores máximos de los rangos a los 180 grados del ángulo de los servomotores.

     // Temperature and humidity reading
      t = dht.readTemperature();
      hu = dht.readHumidity();
      if (isnan(hu) || isnan(t)) {
              Serial.println("DHT sensor reading failure !!!");
      }

...
      servoTemperature.write((t*180)/50);   // Move the servos to value
      servoHumidity.write((hu*180)/100);

Como alternativa, puede utilizar la función map().

El procedimiento para registrar y mostrar las horas y los minutos es muy sencillo. Solo una nota: cuando el módulo DS1302 envía las horas y los minutos, envía los dígitos mínimos necesarios, es decir, del 0 al 9 solo un dígito. Entonces, si obtenemos menos de 10 horas o 10 minutos, solo veremos un dígito a la vez. Esto daría la impresión de un mal funcionamiento o no se ve bien. Así que siempre tenemos que mostrar dos dígitos en las horas y los minutos.

Con la primera línea, pedimos al módulo DS1302 que recupere los datos de fecha y hora. A continuación, creamos dos variables (h y m) para almacenar los datos en el formato de cadena de la hora y los minutos. Si los valores son menores que 10, la instrucción if va precedida de un 0 como carácter, no como un dígito, con concat. Ahora solo tenemos que mostrar estos datos en la matriz LED. Para mostrar que el reloj está corriendo, mostramos dos cadenas muy similares. Uno con la separación entre horas y minutos con dos puntos y otro sin dos puntos. La visualización se realiza en incrementos de 500 ms, lo que corresponde a medio segundo. Por lo tanto, los dos puntos parpadean.

La función delay() bloquea el flujo del programa, lo que no es relevante en este caso, ya que hay tiempo suficiente para leer y mostrar los datos.

      dt = clock.getDateTime();               // Reading data from the RTC module

      String h;                               // Variable for the hours
      String m;                               // Variable for the minutes
  
      int hora = (dt.hour);                   // The variable "hora" is used 
      if (dt.hour<10) {                       // to set the time to always show two digits 
	            h = "0";                        // two digits in the clock hours.
	            h.concat((String) hora);
      } else {
	            h = (String) hora;
      }

      int minuto = (dt.minute);               // The variable "minuto" is used
      if (dt.minute<10) {                     // to set the minutes to always
	            m ="0";                         // two digits en the clock minutes
	            m.concat((String) minuto);
      } else {
	            m = (String) minuto;
      }
      
      String r = h + ":" + m;                 // Hour and minutes with colon separation
      String q = h + " " + m;                 // Hour and minutes without colon separation

      Serial.print("Hora: ");
      Serial.print(dt.hour);   	Serial.print(":");
      Serial.print(dt.minute); 	Serial.print(":");
      Serial.print(dt.second); 	Serial.println("");
      Serial.print( "T = " );
      Serial.print(t);
      Serial.print(" ºC, H = ");
      Serial.print(hu);
      Serial.print( "%, " );

      reloj.setTextAlignment(PA_CENTER);    // Configuration the text centered
      reloj.print(r);                       // We change the text showing the separation
      delay(500);                           // and without it every half second for the
      reloj.print(q);                       // sensation of movement.
      delay(500);

A continuación el código completo:

/**************************************************************************************
 *   Easy Arduino project with clock, temperature and humidity measurement            *
 *   Last revisión 10-12-2021 - Getafe (Madrid) - España                              
 *   Miguel Torres Gordo                                                              
*************************************************************************************/

// Required Arduino libraries
#include <MD_Parola.h>                          // Matrix LED Display Module
#include <MD_MAX72xx.h>                         // MAX7219
#include <SPI.h>                                // SPI Communications

#include <Wire.h>                               // I2C communications protocol
#include <DS3231.h>                             // Real Time Clock Module

#include <DHT.h>                                // Temperature and Humidity module

#include <Servo.h>                              // Servomotors

// Define hardware type, size, and output pins MAX7219 8x32 4 in 1 Dot Matrix LED Display Module
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 10

// Define hardware type andi pins DHT-11
#define DHTPIN 2
#define DHTTYPE DHT11

// Create a new instance of the MD_Parola class with hardware SPI connection:
MD_Parola reloj = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// Create a instance of DHT-11 sensor and variables for temperature and humidity
DHT dht(DHTPIN, DHTTYPE);
float t, hu;

// Instances of the servos for humidity and temperature
Servo servoTemperature;
Servo servoHumidity;

// Instance for the DS3231 clock
DS3231 clock;
RTCDateTime dt;


void setup() {

      // Initialization of Monitor Serial
      Serial.begin(9600);
      Serial.println("Initialize RTC module");
  
      // Initialization of DS3231 Module
      clock.begin();

      // Initialization MAX7219 LED Matrix Display
      reloj.begin();                // Intialize the object
      reloj.setIntensity(0);        // Set the intensity (brightness) of the display (0-15)
      reloj.displayClear();         // Clear the display

      // Initialization DHT-11 module
      dht.begin();

      // Servo pins connections
      servoTemperature.attach(3);
      servoHumidity.attach(4);

}

void loop() {

      // Temperature and humidity reading
      t = dht.readTemperature();
      hu = dht.readHumidity();
      if (isnan(hu) || isnan(t)) {
              Serial.println("DHT sensor reading failure !!!");
      }
     
      dt = clock.getDateTime();               // Reading data from the RTC module

      String h;                               // Variable for the hours
      String m;                               // Variable for the minutes
  
      int hora = (dt.hour);                   // The variable "hora" is used 
      if (dt.hour<10) {                       // to set the time to always show two digits 
	            h = "0";                        // two digits in the clock hours.
	            h.concat((String) hora);
      } else {
	            h = (String) hora;
      }

      int minuto = (dt.minute);               // The variable "minuto" is used
      if (dt.minute<10) {                     // to set the minutes to always
	            m ="0";                         // two digits en the clock minutes
	            m.concat((String) minuto);
      } else {
	            m = (String) minuto;
      }
      
      String r = h + ":" + m;                 // Hour and minutes with colon separation
      String q = h + " " + m;                 // Hour and minutes without colon separation

      Serial.print("Hora: ");
      Serial.print(dt.hour);   	Serial.print(":");
      Serial.print(dt.minute); 	Serial.print(":");
      Serial.print(dt.second); 	Serial.println("");
      Serial.print( "T = " );
      Serial.print(t);
      Serial.print(" ºC, H = ");
      Serial.print(hu);
      Serial.print( "%, " );

      reloj.setTextAlignment(PA_CENTER);    // Configuration the text centered
      reloj.print(r);                       // We change the text showing the separation
      delay(500);                           // and without it every half second for the
      reloj.print(q);                       // sensation of movement.
      delay(500);

      // To display the value of temperature and humidity we assign
      // a maximum value (50ºC and 100% of humidity) to the 180 degrees of the servomotor and
      // by means of a rule of three we display the actual values.
      
      servoTemperature.write((t*180)/50);   // Move the servos to value
      servoHumidity.write((hu*180)/100);
            
}