Lo Último en IP@P
- Stellar Data Recovery revoluciona la recuperación de archivos perdidos en discos duros externos
- Goblin Mine: La Estrategia Económica Detrás del Juego de Minería que está Fascinando a Todos
- Estos son los nuevos Cargadores UGREEN: potencia y portabilidad en dos versiones que no te puedes perder
- UGREEN Nexode Pro: El Cargador Ultradelgado que revoluciona la carga de dispositivos móviles
- La computación en la nube está transformando los juegos Online y estas son sus grandes ventajas
Arduino es muy bien conocida por ser una plataforma que puede ser utilizada por cualquier persona para desarrollar hardware y software de código abierto. El objetivo de esta compañía es crear dispositivos digitales o interactivos por medio de placas de hardware.
Una placa Arduino sirve para una gran variedad de tareas. Funciona a través de Arduino IDE, en donde puedes utilizar su lenguaje de programación para escribir instrucciones en los circuitos que abarca dicha placa.
El motivo por el cual realizamos este post, puede variar de acuerdo con las necesidades y usos que le quieras otorgar. A continuación, te presentamos los proyectos con Arduino más destacados y factibles que podrás usar.
Lista de los mejores proyectos Arduino para principiantes que puedes hacer tu mismo
Con estos proyectos, aprenderás algunos de los conceptos más básicos respecto a la creación de programas y dispositivos de interacción, así como el uso de diferentes componentes, para que puedas comenzar a diseñar sistemas excepcionales para tu propio beneficio.
Vamos a ello:
Haz un probador de baterías
Si deseas ver cuánta energía queda en una de tus baterías, puedes realizar este proyecto para que construyas tu probador de batería ideal. Por medio de algunos elementos como una placa Arduino UNO y algunos LEDs, tendrás el beneficio de construir y probar la vida útil de una batería que tengas por debajo de 5 watts.
Vas a necesitar para este proyecto una placa Arduino UNO, un sensor de temperatura; humedad y presión; Adafruit BME680, una placa de monitor Adafruit INA169, una resistencia de 1k ohmio, un capacitor, una ficha sparkfun y un kit de cables para unir todos los elementos a la placa.
Una vez que tengas todos estos productos y hayas ensamblado como lo muestra la imagen, tendrás que ingresar al entorno de programación de Arduino y registrar estas instrucciones:
#include "Arduino.h" #include "Board.h" #include "Helium.h" #include "HeliumUtil.h" #include "TimeLib.h" #include "BlueDot_BME680.h" #include "TimerSupport.h" #define CHANNEL_NAME "GCIoTCore" #define XMIT_PERIOD_MS 20000 #define VOLTS_SAMPLE_RATE_MS 250 Helium helium(&atom_serial); Channel channel(&helium); BlueDot_BME680 bme680 = BlueDot_BME680(); #define TS_BUF_SIZE 40 char TSbuf[TS_BUF_SIZE]; char *TSbuf_ptr = TSbuf; char buffer[HELIUM_MAX_DATA_SIZE]; #define ADC_VOLTS_PER_BIT 0.00488 int ADCValue = 0; struct helium_info info; time_t timestamp; TimeElements tm; long highCurrentSamples = 0; long lowCurrentSamples = 0; float peakCurrent = 0; float peakVoltage = 0; #define MAX_JSON_FORMAT_STR 7 char JSON_FORMATS[][MAX_JSON_FORMAT_STR] = { "{\"i\":", ",\"T\":", ",\"H\":", ",\"DT\":", ",\"V\":", ",\"IP\":", ",\"IA\":", "}" }; int addToBuffer(char *insertionPoint, int maxLen, char *src) { snprintf(insertionPoint, maxLen, src); return strlen(insertionPoint); } void sendInfoViaHelium() { static unsigned long i = 0; float t = 0; float h = 0; float v = 0; float ip = 0; float ia = 0; char *buf_ptr = buffer; char tmpBuf[11]; long totalSamples = highCurrentSamples + lowCurrentSamples; i++; print(F("i = ")); println(i); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[0]); snprintf(tmpBuf, 11, "%lu", i); buf_ptr += addToBuffer(buf_ptr, sizeof(tmpBuf), tmpBuf); writeCTRLMeas(); t = bme680.readTempC(); print(F("Temp = " )); print(t); println(F(" degrees C")); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[1]); dtostrf(t, 3, 2, tmpBuf); buf_ptr += addToBuffer(buf_ptr, 6, tmpBuf); h = bme680.readHumidity(); print(F("Humidity = " )); print(h); println(F(" %")); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[2]); dtostrf(h, 3, 2, tmpBuf); buf_ptr += addToBuffer(buf_ptr, 6, tmpBuf); info(&info); timestamp = info.time; print(F("timestamp = ")); println(timestamp); breakTime(timestamp, tm); snprintf(TSbuf_ptr, TS_BUF_SIZE, "\"%d-%d-%d %d:%d:%d\"", tm.Year + 1970, tm.Month, tm.Day, tm.Hour, tm.Minute, tm.Second); print(F("TSbuf is ")); println(TSbuf); print(F("TSbuf length is ")); println(strlen(TSbuf)); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[3]); buf_ptr += addToBuffer(buf_ptr, TS_BUF_SIZE, TSbuf); v = peakVoltage; print(F("Voltage = ")); print(v); println(F(" Volts")); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[4]); dtostrf(v, 3, 2, tmpBuf); buf_ptr += addToBuffer(buf_ptr, 6, tmpBuf); ip = peakCurrent; print(F("Curr pk = ")); print(ip); println(F(" Amps")); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[5]); dtostrf(ip, 4, 3, tmpBuf); buf_ptr += addToBuffer(buf_ptr, 6, tmpBuf); ia = peakCurrent * highCurrentSamples / totalSamples; print(F("Curr avg = ")); print(ia); println(F(" Amps")); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[6]); dtostrf(ia, 8, 6, tmpBuf); buf_ptr += addToBuffer(buf_ptr, 9, tmpBuf); buf_ptr += addToBuffer(buf_ptr, MAX_JSON_FORMAT_STR, JSON_FORMATS[7]); println(buffer); print(F("buffer length is ")); println(strlen(buffer)); channel_send(&channel, CHANNEL_NAME, buffer, strlen(buffer)); } void measureBattery() { float val = 0; float threshold = 0; ADCValue = analogRead(A1); val = ADCValue * ADC_VOLTS_PER_BIT; if (val > peakCurrent) { peakCurrent = val; } if (peakCurrent > 0) { threshold = peakCurrent / 4.0; if (val > threshold) { highCurrentSamples++; } if (val <= threshold) { lowCurrentSamples++; } } else { lowCurrentSamples++; } if (!down_timer_running(READ_VOLTS_timer)) { init_down_timer(READ_VOLTS_timer, VOLTS_SAMPLE_RATE_MS); ADCValue = analogRead(A0); val = ADCValue * (ADC_VOLTS_PER_BIT * 4); if (val > peakVoltage) { peakVoltage = val; } } } void resetBatteryVars() { highCurrentSamples = 0; lowCurrentSamples = 0; peakCurrent = 0; peakVoltage = 0; } void setup() { int retVal; int i; begin(9600); DBG_PRINTLN(F("Starting")); begin(HELIUM_BAUD_RATE); helium_connect(&helium); channel_create(&channel, CHANNEL_NAME); parameter.I2CAddress = 0x77; parameter.sensorMode = 0b01; parameter.IIRfilter = 0b100; parameter.humidOversampling = 0b101; parameter.tempOversampling = 0b101; parameter.pressOversampling = 0b000; retVal = bme680.init(); if (retVal != 0x61) { DBG_PRINT(F("BME680 could not be found... Chip ID was 0x")); DBG_PRINT(retVal, HEX); DBG_PRINTLN(F(" instead of 0x61")); } init_down_timer(SEND_timer, XMIT_PERIOD_MS); init_down_timer(READ_VOLTS_timer, VOLTS_SAMPLE_RATE_MS); resetBatteryVars(); } void loop() { measureBattery(); if (!down_timer_running(SEND_timer)) { init_down_timer(SEND_timer, XMIT_PERIOD_MS); DBG_PRINT(F("highCurrentSamples = ")); DBG_PRINTLN(highCurrentSamples); DBG_PRINT(F("lowCurrentSamples = ")); DBG_PRINTLN(lowCurrentSamples); sendInfoViaHelium(); resetBatteryVars(); } }
Construye un Reloj
Con el uso de un Arduino puedes diseñar diferentes tipos de relojes, que se adpaten de acuerdo con la necesidad que tengas. Por ejemplo, un reloj despertador muy simple que puedes hacer con componentes básicos. Para unir todos los componentes será necesario que te guíes del diagrama del circuito de la imagen.
Luego, vas a tener que entrar al entorno de IDE e ingresar estos comandos:
#include <LiquidCrystal.h> // #include <Button.h> // #include <DS3231.h> // RTC int zumbador = 13 ; uint8_t hh = 0 , mm = 0 , ss = 0 ; uint8_t timerMode = 0 , setMode = 0 , setAlarm = 0 , alarmMode = 0 ; uint8_t alarmaHH = 0 , alarmaMM = 0 , alarmaSS = 0 ; uint8_t timerhh = 0 , timermm = 0 , timerss = 0 ; LiquidCrystal lcd ( 12 , 11 , 5 , 4 , 3 , 2 ); DS3231 rtc ( SDA , SCL ); Tiempo t ; #define DN_PIN 7 #define UP_PIN 8 #define SET_PIN 9 #define ALR_PIN 10 #define PULLUP true #define INVERT true #define DEBOUNCE_MS 20 #define REPEAT_FIRST 500 #define REPEAT_INCR 100 //Declare push buttons Button btnDN(DN_PIN, PULLUP, INVERT, DEBOUNCE_MS); Button btnUP(UP_PIN, PULLUP, INVERT, DEBOUNCE_MS); Button btnSET(SET_PIN, PULLUP, INVERT, DEBOUNCE_MS); Button btnALR(ALR_PIN, PULLUP, INVERT, DEBOUNCE_MS); enum {WAIT, INCR, DECR}; uint8_t STATE; int count; int lastCount = -1; unsigned long rpt = REPEAT_FIRST; void setup() { begin(9600); begin(16,2); pinMode(buzzer,OUTPUT); begin(); setCursor(0,0); print("Welcome Shaqib!"); delay(2000); clear(); } void loop() { t=rtc.getTime(); hh=t.hour,DEC; mm=t.min,DEC; ss=t.sec,DEC; read(); read(); read(); read(); if(setMode==0 && setAlarm==0 ){ tunjukJamTemp(); tunjukTimer();} if(setMode!=0 && setAlarm==0 && alarmMode==0 ){delay(100);} if(setMode==1 && setAlarm==0 && alarmMode==0 ){lcd.setCursor(7,1);lcd.print(" ");delay(100);tunjukJamTemp();tunjukTimer();} if(setMode==2 && setAlarm==0 && alarmMode==0 ){lcd.setCursor(10,1);lcd.print(" ");delay(100);tunjukJamTemp();tunjukTimer();} if(setMode==3 && setAlarm==0 && alarmMode==0 ){lcd.setCursor(13,1);lcd.print(" ");delay(100);tunjukJamTemp();tunjukTimer();} if(setMode==4 && setAlarm==0 && alarmMode==0 ){tunjukJamTemp();tunjukTimer();stepDown();delay(1000);} if(setMode==0 && setAlarm!=0 && alarmMode==0 ){delay(100);} if(setMode==0 && setAlarm==2 && alarmMode==0 ){lcd.setCursor(0,0);lcd.print(" ");delay(100); setCursor(0,0); if(alarmHH<10){lcd.print("0");} print(alarmHH);lcd.print(":"); if(alarmMM<10){lcd.print("0");} print(alarmMM);lcd.print(":"); if(alarmSS<10){lcd.print("0");} print(alarmSS);lcd.setCursor(0,1); print("Set Your Alarm");} if(setMode==0 && setAlarm==3 && alarmMode==0 ){lcd.setCursor(3,0);lcd.print(" ");delay(100); setCursor(0,0); if(alarmHH<10){lcd.print("0");} print(alarmHH);lcd.print(":"); if(alarmMM<10){lcd.print("0");} print(alarmMM);lcd.print(":"); if(alarmSS<10){lcd.print("0");} print(alarmSS);lcd.setCursor(0,1); print("Set Your Alarm");} if(setMode==0 && setAlarm==4 && alarmMode==0 ){lcd.setCursor(6,0);lcd.print(" ");delay(100); setCursor(0,0); if(alarmHH<10){lcd.print("0");} print(alarmHH);lcd.print(":"); if(alarmMM<10){lcd.print("0");} print(alarmMM);lcd.print(":"); if(alarmSS<10){lcd.print("0");} print(alarmSS);lcd.setCursor(0,1); print("Set Your Alarm");} if(setMode==0 && setAlarm==5 && alarmMode==0 ){alarmMode=1;setAlarm=0;} setupAlarm(); Alarm(alarmHH,alarmMM); read(); read(); read(); read(); switch (STATE) { case WAIT: if (btnSET.wasPressed()) { setMode = setMode+1;} if (btnALR.wasPressed()) { setAlarm = setAlarm+1;} if (btnUP.wasPressed()) STATE = INCR; else if (btnDN.wasPressed()) STATE = DECR; else if (btnUP.wasReleased()) rpt = REPEAT_FIRST; else if (btnDN.wasReleased()) rpt = REPEAT_FIRST; else if (btnUP.pressedFor(rpt)) { rpt += REPEAT_INCR; STATE = INCR; } else if (btnDN.pressedFor(rpt)) { rpt += REPEAT_INCR; STATE = DECR; } break; case INCR: if (setMode==1 && setAlarm==0 && alarmMode==0 && timerhh<23)timerhh=timerhh+1; if (setMode==2 && setAlarm==0 && alarmMode==0 && timermm<59)timermm=timermm+1; if (setMode==3 && setAlarm==0 && alarmMode==0 && timerss<59)timerss=timerss+1; if (setMode==0 && setAlarm==2 && alarmMode==0 && alarmHH<23)alarmHH=alarmHH+1; if (setMode==0 && setAlarm==3 && alarmMode==0 && alarmMM<59)alarmMM=alarmMM+1; if (setMode==0 && setAlarm==4 && alarmMode==0 && alarmSS<59)alarmSS=alarmSS+1; STATE = WAIT; break; case DECR: if (setMode==1 && setAlarm==0 && alarmMode==0 && timerhh>0)timerhh=timerhh-1; if (setMode==2 && setAlarm==0 && alarmMode==0 && timermm>0)timermm=timermm-1; if (setMode==3 && setAlarm==0 && alarmMode==0 && timerss>0)timerss=timerss-1; if (setMode==0 && setAlarm==2 && alarmMode==0 && alarmHH>0)alarmHH=alarmHH-1; if (setMode==0 && setAlarm==3 && alarmMode==0 && alarmMM>0)alarmMM=alarmMM-1; if (setMode==0 && setAlarm==4 && alarmMode==0 && alarmSS>0)alarmSS=alarmSS-1; STATE = WAIT; break; } } void stepDown() { if (timerss > 0) { timerss -= 1; } else { if (timermm > 0) { timerss = 59; timermm -= 1; } else { if (timerhh > 0) { timerss = 59; timermm = 59; timerhh -= 1; } else { for(int i=0;i<30;i++){ setCursor(0,0); print(rtc.getTimeStr()); setCursor(10,0); print(rtc.getTemp()); print("C"); read(); if(btnSET.wasPressed()){digitalWrite(buzzer,LOW);i=30;}else{ digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(500);} } setMode=0; } } } } void tunjukTimer(){ setCursor(0, 1); print("Timer:"); print(" "); (timerhh < 10) ? lcd.print("0") : NULL; print(timerhh); print(":"); (timermm < 10) ? lcd.print("0") : NULL; print(timermm); print(":"); (timerss < 10) ? lcd.print("0") : NULL; print(timerss); } void tunjukJamTemp(){ setCursor(0,0); print(rtc.getTimeStr()); setCursor(10,0); print(rtc.getTemp()); print("C"); } void Alarm(uint8_t alarmHH,uint8_t alarmMM){ if(alarmMode==1 && alarmHH==hh && alarmMM==mm){ for(int i=0;i<30;i++){ setCursor(0,0); print(rtc.getTimeStr()); setCursor(10,0); print(rtc.getTemp()); print("C"); setCursor(0, 1); print("Timer:"); print(" "); (timerhh < 10) ? lcd.print("0") : NULL; print(timerhh); print(":"); (timermm < 10) ? lcd.print("0") : NULL; print(timermm); print(":"); (timerss < 10) ? lcd.print("0") : NULL; print(timerss); read(); if(btnALR.wasPressed()){digitalWrite(buzzer,LOW);i=30;}else{ digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(500);} } alarmMode=0; setAlarm=0; }} void setupAlarm(){ if(setMode==0 && setAlarm==1 && alarmMode==0 ){ clear(); setCursor(0,1); print("Set Your Alarm"); setCursor(0,0); if(alarmHH<10){lcd.print("0");} print(alarmHH);lcd.print(":"); if(alarmMM<10){lcd.print("0");} print(alarmMM);lcd.print(":"); if(alarmSS<10){lcd.print("0");} print(alarmSS); } }
Semáforo Arduino
A través de este proyecto, podemos usar Arduino para construir un semáforo. Con el uso de algunos componentes, podremos observar los colores rojo, amarillo y verde para los coches en direcciones de tráfico que se aproximen. Esto puede funcionar, con el uso de dos pulsadores para construir un sensor que se activa y se desactiva indicando si algún automóvil está acercándose. De modo, que cuando haya tráfico el semáforo este en rojo, y cuando no, en verde.
Alarma para Mochilas
Si quieres evitar que ladrones roben tu mochila, puedes hacer el uso de esta alarma. Su construcción está realizada con una placa Arduino, una alarma de 80 decibelios y un acelerómetro de tres ejes. La alarma sonará en el momento en que alguien quiera abrir la mochila sin tu autorización. Utiliza la imagen para ensamblar la placa de Arduino UNO, el acelerómetro de triple eje, la alarma piezoeléctrica, el conector de audio, la batería de 9v los cables de puente y el conector Jack de 9 voltios.
Una vez que tengas este paso realizado vas a tener que escribir en el IDE lo siguiente:
include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_LSM303_U.h> #include <Adafruit_LSM303.h> const int sens = 10; Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345); void setup(void) { pinMode(13, OUTPUT); if(!mag.begin()) { // There was a problem detecting the LSM303 ... check your connections digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); while(1); } // Wait 5 seconds delay(5000); // Alert when started digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); } // function for getting the sensor value int getDeg(void){ // Get a new sensor event sensors_event_t event; getEvent(&event); float Pi = 3.14159; float heading = int((atan2(event.magnetic.y,event.magnetic.x) * 180) / Pi); if (heading < 0) { heading = 360 + heading; } return heading; } void loop(void) { int oldDeg = getDeg(); delay(1000); int newDeg = getDeg(); if (newDeg < (oldDeg-sens) && oldDeg != 0 && newDeg != 0) { // sound the alarm digitalWrite(13, HIGH); // Just for debugging //Serial.println("Triggered"); //Serial.println(""); }else if (newDeg > (oldDeg+sens) && oldDeg!= 0 && newDeg != 0) { // sound the alarm digitalWrite(13, HIGH); } }
Persianas Arduino controladas por voz
También puedes usar una placa de Arduino para mover las persianas de tu habitación o negocio. En tan poco tiempo y con la correcta programación insertada, tendrás la facultad de abrir y cerrar tus persianas con un sistema de control de voz por medio de Bluetooth. Vas a necesitar una placa Nano R3 de Arduino y todos los componentes que ves en la imagen.
Luego ingresa en el IDE este programa:
int brillo = 0 ; int fadeAmount = 5 ; int led = 3 ; int inPin = 4 ; int inPin2 = 7 ; int val2 = 0 ; int val = 0 ; const int motorPin1 = 11 ; const int motorPin2 = 10 ; const int motorPin3 = 8 ; const int motorPin4 = 9 ; int estado ; int bandera = 0 ; configuración vacía () { pinMode ( motorPin1 , SALIDA ); pinMode ( motorPin2 , SALIDA ); pinMode ( motorPin3 , SALIDA ); pinMode ( motorPin4 , SALIDA ); pinMode ( inPin , INPUT ); pinMode ( inPin2 , ENTRADA ); pinMode ( led , SALIDA ); begin(9600); delay(1000); } void loop(){ analogWrite(led, brightness); brightness = brightness + fadeAmount; if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } delay(30); val = digitalRead(inPin); val2 = digitalRead(inPin2); if(Serial.available() > 0) { state = Serial.read(); flag=0; } if (state == 'U' || val == LOW) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(2000); digitalWrite(motorPin1, 0); digitalWrite(motorPin2, 0); digitalWrite(motorPin3, 0); digitalWrite(motorPin4, 0); println("Both Up"); state = 0; } else if (state == 'D' || val2 == LOW) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, 0); digitalWrite(motorPin3, 0); digitalWrite(motorPin4, HIGH); delay(2000); digitalWrite(motorPin1, 0); digitalWrite(motorPin2, 0); digitalWrite(motorPin3, 0); digitalWrite(motorPin4, 0); println("Both Down"); state = 0; } if (state == 'W') { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); delay(2000); digitalWrite(motorPin1, 0); digitalWrite(motorPin2, 0); println("Right Up"); state = 0; } else if (state == 'L') { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, 0); delay(2000); digitalWrite(motorPin1, 0); digitalWrite(motorPin2, 0); println("Right Down"); state = 0; } if (state == 'K') { digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(2000); digitalWrite(motorPin3, 0); digitalWrite(motorPin4, 0); println("Left Up"); state = 0; } else if (state == 'I') { digitalWrite(motorPin3, 0); digitalWrite(motorPin4, HIGH); delay(2000); escritura digital(motorPin3, 0); digitalWrite (motorPin4, 0); Serial . println ( "Izquierda abajo" ); estado = 0 ; } }
Cronómetro
Puedes convertir la placa Arduino en un simple cronómetro con el uso de pocos materiales. Para ello, se requiere dos pulsadores, algunas resistencias, una placa y cables; de esta forma, podrás construir esta útil herramienta para contar el tiempo.
Arma las conexiones de acuerdo con el diagrama que te mostramos y luego escribe estos códigos de programación en el entorno de Arduino:
#include <EEPROM.h> #define interruptPin 2 #define eeAddress 0 hora de inicio flotante = 0 ; float endtime = 0 ; flotador resulttime = 0 , oldresulttime = 0 ; configuración vacía () { Serial . comenzar ( 9600 ); while ( ! Serial ) { ; } Serial . println ( "¡Las comunicaciones en serie están listas, señor!: .. bip bip" ); attachInterrupt ( digitalPinToInterrupt ( interruptPin ), refreshTime , CHANGE ); } bucle vacío () { } void refreshTime () { if ( digitalRead ( interruptPin )) { hora de inicio = milis (); print("Start time: "); Serial.println(starttime); }else if(digitalRead(interruptPin)==LOW){ endtime=millis(); resulttime=endtime-starttime; print("End time: "); Serial.println(endtime); print("Result time: "); Serial.println(resulttime); WhatsNewEeprom(); } } void WhatsNewEeprom(){ println("-----------checking eeprom"); get( eeAddress, oldresulttime ); print("oldresulttime");Serial.println(oldresulttime); Serial . print ( "tiempo de resultado" ); Serial . println (tiempo de resultado ); if ( resulttime ! = oldresulttime ) { EEPROM . put ( eeAddress , resulttime ); Serial . print ( "----- ¡Ding! Nuevo tiempo registrado en eeprom:" ); Serial . println (tiempo de resultado ); } más { Serial . println ( "No se encontró una nueva hora, eeprom no fue perturbado" ); } }
Tweet con Arduino
Con Arduino puedes aplicarles nuevos e increíbles usos a muchas cosas e incluso a tu cuenta de Twitter. Si programas de forma correcta, podrás habilitar está función conectando un interruptor y un relé a una placa. Tendrás que disponer de un modelo UNO, una resistencia de 330 Ohm, un pulsador sparkfun, una placa 1Sheeld y cables. Para unir todos estos componentes será necesario que tengas en cuenta la imagen que te mostramos.
A continuación, ingresa estas secuencias de programación en IDE:
#define CUSTOM_SETTINGS #define INCLUDE_TWITTER_SHIELD #include <OneSheeld.h> int buttonPin = 12; int ledPin = 13; void setup() { /* Start communication. */ begin(); /* Set the button pin as input. */ pinMode(buttonPin,INPUT); /* Set the LED pin as output. */ pinMode(ledPin,OUTPUT); } void loop() { /* Always check the button state. */ if(digitalRead(buttonPin) == HIGH) { /* Turn on the LED. */ digitalWrite(ledPin,HIGH); /* Tweet. */ tweet("Uso IPAP como plataforma para aprender"); /* Wait for 300 ms. */ delay(300); } else { /* Turn off the LED. */ digitalWrite(ledPin,LOW); } }
Sistema para bombillas
Existen algunos elementos más avanzados que puedes utilizar para apagar y encender las bombillas de tu casa. Se necesitan pocos materiales para que puedas crear tu propio sistema de luces y controlarlo con tus manos. Para ello, vas a tener que unir a la placa las resistencias y los relés, tal como te mostramos en la ilustración. También deberás hacer lo mismo con los demás componentes.
Una vez que tengas todo listo, escribe los códigos:
#define CUSTOM_SETTINGS #define INCLUDE_GPS_SHIELD #define INCLUDE_TEXT_TO_SPEECH_SHIELD #define INCLUDE_ORIENTATION_SENSOR_SHIELD #define INCLUDE_VOICE_RECOGNIZER_SHIELD #define INCLUDE_MIC_SHIELD #define INCLUDE_DATA_LOGGER_SHIELD #define INCLUDE_CAMERA_SHIELD #include <OneSheeld.h> String openpass = "contraseña" ; String lockpass = "bien entonces" ; String lighton = "luz encendida" ; String lightoff = "luz apagada" ; String picture = "selfie" ; int Light = 22 ; int LockMotor1 = 24 ; int LockMotor2 = 25 ; longitud flotante , latitud ; int lock = 0 ; // 0 = cerrado, 1 = abierto int orientación = 0 ; // Verifique la orientación del teléfono. 1 = orientación confirmada. configuración vacía () { OneSheeld . comenzar (); pinMode ( Luz , SALIDA ); digitalWrite ( Ligero , ALTO ); // El relé está activo BAJO (ALTO = La luz está apagada inicialmente) pinMode ( LockMotor1 , SALIDA ); pinMode ( LockMotor2 , SALIDA ); digitalWrite ( LockMotor1 , LOW ); digitalWrite ( LockMotor2 , LOW ); retraso ( 2000 ); Logger . detener (); } bucle vacío () { while ( 1 ) { longitud = GPS . getLongitude (); latitud = GPS . getLatitude (); if ( longitud > = 78.05 && longitud <= 87.09 && latitud > = 88.60 && latitud <= 88.684 ) goto getpass ; demás TextToSpeech . say ( "Para habilitar" ); OneSheeld . retraso ( 5000 ); } conseguir pase : TextToSpeech . decir ( "Do the Secret Twist" ); while ( orientación == 0 ) { if (( OrientationSensor . getX () > 120 ) && ( OrientationSensor . getY () > 0 )) { orientación = 1 ; romper ;} demás OneSheeld . retraso ( 2000 ); } TextToSpeech . say ( "Bloqueo de apertura" ); digitalWrite ( LockMotor1 , LOW ); digitalWrite ( LockMotor2 , HIGH ); retraso ( 5000 ); // Se necesitan aproximadamente 5 segundos para que la cerradura se abra por completo digitalWrite ( LockMotor1 , LOW ); digitalWrite ( LockMotor2 , LOW ); retraso ( 1000 ); bloqueo = 1 ; LogData (); TextToSpeech . say ( "Bienvenido a IPAP" ); retraso ( 5000 ); OneSheeld . retraso ( 5000 ); while ( 1 ) { VoiceRecognition . inicio (); if ( VoiceRecognition . isNewCommandReceived () && VoiceRecognition . getCommandAsString () == lighton ) { // Luces encendidas TextToSpeech . say ( "Encendido de las luces" ); retraso ( 1000 ); digitalWrite ( Ligero , BAJO ); VoiceRecognition . clearCommand (); OneSheeld . retraso ( 5000 ); // Este retraso se puede aumentar según sus propios requisitos } if ( VoiceRecognition . isNewCommandReceived () && VoiceRecognition . getCommandAsString () == lightoff ) { // Luz apagada TextToSpeech . say ( "Apagar las luces" ); retraso ( 1000 ); digitalWrite ( Ligero , ALTO ); VoiceRecognition . clearCommand (); OneSheeld . retraso ( 5000 ); } if ( VoiceRecognition . isNewCommandReceived () && VoiceRecognition . getCommandAsString () == lockpass ) { // Bloquear IPAP TextToSpeech . decir ( "Luces apagadas" ); OneSheeld . retraso ( 2000 ); digitalWrite ( Ligero , ALTO ); OneSheeld . retraso ( 2000 ); // Cerrar cerradura lineal electrónica TextToSpeech . say ( "Bloqueando" ); digitalWrite ( LockMotor1 , HIGH ); digitalWrite ( LockMotor2 , LOW ); retraso ( 5000 ); // Se necesitan aproximadamente 5 segundos para que la cerradura se cierre por completo digitalWrite ( LockMotor1 , LOW ); digitalWrite ( LockMotor2 , LOW ); retraso ( 1000 ); bloqueo = 0 ; LogData (); OneSheeld . retraso ( 2000 ); TextToSpeech . say ( "Bloqueo completo. ¡Adiós!" ); VoiceRecognition . clearCommand (); orientación = 0 ; goto getpass ; OneSheeld . retraso ( 5000 ); } if ( Mic . getValue () > = 80 ) { TextToSpeech . decir ( "No molestar a los demás" ); retraso ( 2000 ); OneSheeld . retraso ( 5000 ); } if ( VoiceRecognition . isNewCommandReceived () && VoiceRecognition . getCommandAsString () == imagen ) { Cámara . setFlash ( ENCENDIDO ); TextToSpeech . diga ( "Cámara trasera encendida" ); Cámara . rearCapture (); OneSheeld . retraso ( 1000 ); TextToSpeech . diga ( "Cámara frontal encendida" ); Cámara . frontCapture (); retraso ( 2000 ); VoiceRecognition . clearCommand (); OneSheeld . retraso ( 5000 ); // Este retraso se puede aumentar según sus propios requisitos } else { retraso ( 100 ); OneSheeld . retraso ( 5000 ); } } } else { OneSheeld . retraso ( 5000 ); goto getpass ; } } // Fin del ciclo () void logdata () { Logger . detener (); OneSheeld . retraso ( 500 ); Logger . inicio ( "Entrada y Salida" ); if ( lock == 1 ) { // La cerradura se ha abierto Logger . agregar ( "Entrada / Salida" , "Entrada" ); Logger . log (); } else { // El bloqueo se ha cerrado Logger . agregar ( "Entrada / Salida" , "Salida" ); Logger . log (); } Logger . detener (); }
Emisor Morse
Puedes utilizar tu placa de desarrollo Arduino para convertirla en un transmisor morse. Al unir una tarjeta Arduino con un LED y una resistencia 22 Ohm, se puede enviar un mensaje SOS mediante un lenguaje morse. Para ello necesitarás una placa Arduino UNO, un led genérico, una fotocélula y un zumbador. Además deberás incluir conectores y cables para unir los elementos.
Cuando tengas todo listo, mira la imagen para unir los componentes y abre el entorno de programación de Arduino para ingresar lo siguiente:
const char* MorseTable[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // space, !, ", #, $, %, &, ' NULL, "-.-.--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", "-.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-..-.", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", // 8 9 : ; < = > ? "---..", "----.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ A B C D E F G ".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // H I J K L M N O "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // P Q R S T U V W ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // X Y Z [ \ ] ^ _ "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-", // ' a b c d e f g NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // h i j k l m n o "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // p q r s t u v w ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // x y z { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, }; int dotLength = 50; int dashLength = dotLength*3; void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); begin(9600); } void loop() { char ch; if(Serial.available()){ ch = Serial.read(); flashDashDot(MorseTable[ch]); delay(dotLength*2); } } void flashDashDot(const char * morseCode) { int i = 0; while(morseCode[i] != 0) { if(morseCode[i] == '.'){ dot(); } else if (morseCode[i] == '-'){ dash(); } i++; } } void dot() { digitalWrite(13, HIGH); delay(dotLength); digitalWrite(13, LOW); delay(dotLength); } void dash() { digitalWrite(13, HIGH); delay(dashLength); digitalWrite(13, LOW); delay(dotLength); }
Bloqueador de teclado
Más en Hardware
- RetroPie para Raspberry Pi: ¿Qué es, para qué sirve y cómo usarlo para convertir tu mini ordenador en una máquina retro arcade?
- ¿Cómo conectar un pendrive USB 2.0 en un puerto USB 3.0? Guía paso a paso
- ¿Cuáles son las diferencias entre los discos duros HDD y SDD y cuál es mejor para tu ordenador?
- ¿Cuáles son las diferencias entre el teléfono Samsung Galaxy S9 y el Samsung Galaxy S9 Plus? ¿Cuál es el mejor?
- Google Cast ¿Qué es, para qué sirve y cómo utilizarlo de forma correcta?
SÍGUENOS EN 👉 YOUTUBE TV
Como hemos podido observar antes, Arduino puede ser utilizado como un sistema para proteger diferentes tipos de cosas, tal como bloquear el teclado de tu ordenador. También podrás integrar un teclado a tu placa para trabajar más cómodo y aprovechar más funciones. En este proyecto necesitarás un Arduino UNO, un semiconductor 1N4148, pines, registro para cambios 74HC595, interruptor y cables. Para unir todos estos componentes serán necesarios que mires la imagen que te presentamos.
Luego de esto podrás escribir las instrucciones en el programa IDE:
int rowData = 2; // shift register Data pin for rows int rowLatch = 3; // shift register Latch pin for rows int rowClock = 4; // shift register Clock pin for rows int colA = A0; int colB = A1; int colC = A2; int colD = A3; int colE = A4; int colF = A5; int colG = 5; int colH = 6; byte shiftRows = B11111111; long previousMillis = 0; long interval = 5; int lastKey = 0; int keyReset = 0; int keysPressed = 0; bool caps = false; bool rShift = false; bool lShift = false; bool shift = false; bool ctrl = false; bool spcl = false; bool alt = false; bool fn = false; void setup() { begin(9600); pinMode(colA, INPUT_PULLUP); pinMode(colB, INPUT_PULLUP); pinMode(colC, INPUT_PULLUP); pinMode(colD, INPUT_PULLUP); pinMode(colE, INPUT_PULLUP); pinMode(colF, INPUT_PULLUP); pinMode(colG, INPUT_PULLUP); pinMode(colH, INPUT_PULLUP); // the outputs needed to control the 74HC595 shift register pinMode(rowLatch, OUTPUT); pinMode(rowClock, OUTPUT); pinMode(rowData, OUTPUT); updateShiftRegister(B11111111); } void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; checkKeyboard(); } } void updateShiftRegister(byte rows) { digitalWrite(rowLatch, LOW); shiftOut(rowData, rowClock, MSBFIRST, rows); digitalWrite(rowLatch, HIGH); } void checkKeyboard() { keysPressed = 0; updateShiftRegister(B11111110); if (digitalRead(colA) == LOW) { keysPressed = keysPressed + 1; if (lastKey != 1) { if (fn == true) { // no fn definition } else if (spcl == true) { // no spcl definition } else if (alt == true) { print(" "); } else if (ctrl == true) { print(" "); } else if ((caps == true) && (shift == true)){ print(" "); // if shift is pressed while caps lock is active } else if ((caps == true) || (shift == true)){ print(" "); // if either shift or caps lock are active, but not both } else { print(" "); // if no modifiers are active } lastKey = 1; keyReset = 0; } } if (digitalRead(colB) == LOW) { } if (digitalRead(colC) == LOW) { } if (digitalRead(colD) == LOW) { } if (digitalRead(colE) == LOW) { fn = true; } else { fn = false; } if (digitalRead(colF) == LOW) { } if (digitalRead(colG) == LOW) { } if (digitalRead(colH) == LOW) { } //realiza el mismo procedimiento hasta el lastKey31 o hasta el que tú prefieras programa keyReset = 0; } } if ((lShift) || (rShift)) { shift = true; } else { shift = false; } updateShiftRegister(B11111111); keyReset = keyReset + 1; if (keyReset > 60) { lastKey = 0; keyReset = 0; } if (keysPressed == 0) { lastKey = 0; } }
Sensor de estacionamiento
El objetivo de este proyecto, es desarrollar con ayuda de los LEDs, un mecanismo de sonido y luces que detecte la cercanía o lejanía de un coche cuando quiere aparcar. Deberás contar con un modelo UNO de Arduino, un zumbador, un sensor ultrasónico HC-SR04 y cables que permitan la unión de los componentes de acuerdo con el diagrama que te mostramos.
Luego, tendrás que escribir estas secuencias para programar tu placa:
#include <Ultrasonic.h> Ultrasonic ultrasonic(6,5); // pin 6 trig , pin 5 echo const int buzzer = 7; void setup(){ pinMode(buzzer,OUTPUT); // pin buzzer } void loop(){ int dist = ultrasonic.Ranging(CM); if (dist < 100) { distance tone(buzzer,1000); delay(40); noTone(buzzer); delay(dist*4); } delay(100); }
Simulador de un dado
Si quieres jugar algún juego de mesa, pero no tienes un dado para ello, puedes crear el tuyo con un Arduino. Con un display de 7 segmentos, una placa, un pulsador, resistencias 220 y 10 k podrás hacer un cubo que proporcione números aleatorios del 1 al 6.
Brazo robótico
Puedes realizar un brazo robótico que tenga la capacidad de recoger objetos con unas pinzas, además, puedes agregarle sensores ultrasónicos para evitar colisiones con obstáculos. Crear un brazo robotico con Arduino es un proyecto no tan complicado pero efectivo.
Parpadeo de luces
Con una placa Arduino podrás crear un programa muy sencillo para que parpadee un LED. Vas a necesitar una resistencia de 10k ohmios, cables de puente macho a macho y un led genérico. Luego tendrás que unir los componentes como lo muestra la imagen y, por último, abrir la plataforma de programación.
En este software vas a tener que escribir:
configuración vacía () { pinMode ( 13 , SALIDA ) ; } bucle vacío () { escritura digital ( 13 , ALTA ) ; retraso ( 1000 ) ; digitalWrite ( 13 , BAJO ) ; retraso ( 1000 ) ;
Repetidor de movimientos
Este proyecto te permitirá practicar las conexiones que puedes realizar entre la placa Arduino y otros componentes. De esta manera tendrás un dispositivo que reproduzca tus movimientos y gestos pudiendo aumentar o disminuir el volumen del altavoz.
Tras que conseguir un modelo Nano R3, un sensor de matriz térmica de 8 píxeles TPA81, un sensor para que detecte las acciones de tipo PIR infrarrojo HC-SR505, una protoboard genérica, una pantalla OLED de 0,96 pulgadas y cables puentes macho a hembra. Para ensamblar todos estos elementos tendrás que guiarte de la imagen que te mostramos.
Cuando tengas todo listo, tendrás que escribir las siguientes secuencias en el entorno de programación de Arduino:
#include <Wire.h> #include <TPA81.h> // Create new TPA81 instance TPA81 tpa; void setup() { begin(9600); // You need to begin the Wire library to use TPA81 library begin(); } void loop() { // Print temperature light print(tpa.getAmbient()); print(" "); // Print all temperature point for (int i = 1; i <= 8; i++) { print(tpa.getPoint(i)); print(" "); } println("\n"); delay(500); }
Los Kits Arduino más esenciales para aprender a desarrollar Hardware desde cero
Si buscas realizar cualquier tipo de proyecto, primero deberás contar con un equipo que puedas usar como soporte para tu trabajo.
Por esta razón, te presentaremos una lista de los Kits Arduino más utilizados de forma que puedas hacer tus diseños con gran facilidad:
Arduino Starter Kit para principiantes K030007
Estos elementos te ayudarán para comprender mejor los conceptos básicos y técnicos para que logres adentrarte en el mundo electrónico, con este kit comenzarás a diseñar tus proyectos sin errores.
Entre los componentes que encontrarás dentro del kit está una placa Arduino UNO Rev3, diversas resistencias, un conjunto de pulsadores, cables conectores, luces de diversos colores de LEDs y sensores, entre muchos más. Su manual está en español y lo podrás conseguir por un precio aproximado de 95 €.
ELEGOO ES-EL-KIT-008
La empresa ELEGOO, basada en la comercialización de hardware libre, se dedicó a crear un kit de inicio de Arduino para que sean usados por cualquier tipo de desarrollador, sin importar su nivel ni de qué parte del mundo se encuentre.
Habitualmente, se considera uno de los más completos y eficientes de la compañía, y cuenta con un aproximado de 200 materiales para trabajar en cualquier proyecto. Si no sabes con qué empezar ¡no te preocupes!, porque también incluye una lista con más de 30 trabajos para realizar. Lo podrás conseguir por 30 a 55 €, dependiendo de la cantidad de elementos que incluya el kit.
Mega 2560 Starter Kit Ultra
Otra opción interesante para iniciar un proyecto es el kit Arduino Mega 2560 Starter Kit Ultra. Se destaca por contar con una gama de elementos muy provechosos, tiene herramientas adicionales para emplearlas en circuitos básicos y en trabajos fáciles. Al igual que los dos anteriores, incluye una guía de ayuda de paso a paso en español, así como tutoriales específicos dentro de un CD para el desarrollo de cualquier proyecto. Sus 220 elementos los podrás comprar por alrededor de 50 €.