×

ARDUINO

Control d’accés amb contrasenya. Orgue de llums. Comparativa de editors Arduino. Projecte bon Nadal. Sensor de gas i de fums. Control de la qualitat del aire interior (CO2) amb semàfor LED.

NodeMCU

NodeMCU-ThingSpeak. ThingSpeak. NodeMCU com AccessPoint. Control de la llum de casa per web. Control de un led per el mòbil. Sistema de fitxers en ESP8266. Altura del nivell d'aigua. Avis d’alarma a Telegram. Control de la llum de casa des de Telegram. Control de la intensitat de llum de un LED per Internet. Magatzematge de temperatura i humitat en Thinger. Publicar temperatura i humitat en Google Sheets. ESP8266 i Firebase. ESP8266-BME280 Firebase. La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega..

ESP32

ESP32-CAM, exemple de prova. Esp32-Cam captura fotos per ser vistes en la WEB. Pujar fotos a un servidor FTP amb ESP32-CAM. Foto amb ESP32-CAM i Telegram. Alarma amb avis a Telegram, utilitzant la placa ESP32-CAM.

PROGRAMACIÓ

Matemàtiques. App Inventor tutorial. MicroPython en ESP8266. Visual Estudio Code per Arduino

Intel·ligència artificial

Classificador d’imatges.

SERVIDORS

Instal·lar i configurar Apache en Ubuntu. Accés a un servidor Linux remotament. Client i Servidor FTP.

MÀQUINES VIRTUALS

Màquina virtual UBUNTU. WindowsXP en Virtualbox.

ELECTRÒNICA

Simulador Multisim. Simulador Proteus.

BASE DE DADES

MySQL. Instal·lació. MySQL. Aplicacions.

JAVA

Netbeans Maven MySQL. Java+Netbeans+Maven+EclipseLink+MySQL Aplicació d’escriptori JavaFX App JavaFX amb SceneBuilder App Java-Swing
favicon
logo

Tresavis

Benvinguts al blog de tresavis de noves tecnologies i més.

Correu : tresavis3@gmail.com

facebook   Instagram   youtube   x   tiktok

☰ Pràctiques   ☰ Articles

Descripció.

Son dos projectes diferents, simultanis en el temps en la construcció.

El arbre de nadal.

La joguina de nadal.

Arbre de Nadal.

Descripció.

S'ha muntat un kit de AZDelivery nomenat DIY LED Arbre de Nadal Kit.

despeces

El treball per soldar tots els leds, resistències, condensadors, transistors, etc, es una feinada molt considerable.

Resultat final.


Joguina de Nadal.

Descripció.

Volem dinenyar un dispositiu per una joguina, per exemple un avió o un cotxe, millor un cotxe.

Al apropar-se el nen a la joguina a una distancia establerta, s'activa el dispositiu i al separar-se se desactiva.

Al activar-se ha de fer musica i llums, també en una segona fase, moviment, la hèlice del avió o les rodes del cotxe. Quan el nen es separa de la joguina el dispositiu es des activa.

Components.

Placa Arduino Uno.

Sensor de moviment HC-SR04.

Led Martix V1.0

Reproductor, gravador de musica ISD1820, en una segona fase un reproductor de mp3.

Altaveu.

Bateria de 9 V.

IDE de Arduino.

Esquema elèctric.

Fet amb la aplicació de circuito.io

circuit

Hardware.

hardware

Codi.

/*
 * PROJECTE BON NADAL
 * Joguina que al aproparse el nen fa musica i llums.
 * Si el detector de moviment detecta un objecte entre 0.5 m i 1 metre
 * sona musica i s'encen la matriu de leds, altrament no fa res.
 * componets: reproductor_grabador, detector de moviment i matriu de leds
 */
 //// llibreries /////////
#include "LedControl.h"
#include "Arduino.h"
#include "NewPing.h"
#include <SPI.h>

//pins del sensor de moviment
#define HCSR04_PIN_TRIG  3
#define HCSR04_PIN_ECHO 2
//pin del grabador reproductor de musica
#define VOICERECORDER_PIN_SIG 5
//constructor del sensor
NewPing hcsr04(HCSR04_PIN_TRIG,HCSR04_PIN_ECHO);
//matriu de leds
/*
 *pins
 *mosiPin 11 lila
 *clkPin 13 grog
 *cePin 10 dades blau
 */
static uint8_t data[4] = {0x0, 0x0, 0x0, 0x0};  // matriu de dades inicialitzat a 0
const int CE = 10;                           // pin per la funció CE

////////////////////  setup  /////////////////////////////////
void setup() {  
  pinMode(VOICERECORDER_PIN_SIG, OUTPUT);
  Serial.begin(9600);
  pinMode(CE, OUTPUT);       
  SPI.begin();           
}

//////////////////////  loop  /////////////////////////////////
void loop(){
  // distancia al objecte en moviment en cm
  int distancia = hcsr04.ping_cm();
  Serial.print("distancia: ");Serial.println(distancia);
  //si la distancia está en el interval de 0.5 a 1 metres, musica i llum
  if( distancia>50 && distancia<100 ){
    Serial.println("Comença la musica i les llums ");
    possarMusica();
    encentMatriuLeds();   
  }
  else{
    Serial.println("distancia fora de limits, silenci i foscor ");
  }
  delay(3000);
  
}
//la matriu de leds ilumina tres cors de mes gran a mes petit i s'apaga al acabar
void encentMatriuLeds(){
  //primer for es per els tres cors
  //i el segon per el temps  de iluminació de cada cor
  // el switch, quan i=0, executa corGran(),quan i=1 corMig() i i=2 corPetit()  
   for (int i = 0; i < 3; i++) {
    for (int m = 100; m > 0; m--) {  // make a for loop to let the data displayed on the matrix.
      switch (i) {
        case 0:
          corGran();  
          break;
        case 1:
          corMig(); 
          break;
        case 2:
          corPetit();
          break;  
        default:
          break;
      }
    }  
    matrixoff();               // s'apaga la maatriu de leds
    delay(100);                // delay 100 ms
  }
}
void corGran()
{
  int j;
  int temps = 2;
  static uint8_t cor[8] = {0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};
  // you need to calculate which led should be light up by this array,
  // it defined line by line on your matrix,
  // for example,
  // 0x00 means the led of the first line is off,
  // and the 0x66 means the second line's first led will go off
  // and the 0xFF means th fourth led will go off
  // and 0xFF fifth led will go off
  // and 0x18 eight led will go off.
  // others will turn on....and so on.

  for (j = 0; j < 8; j++)
  {
    data[0] = ~cor[j];     // color red
    data[1] = 0xFF;         // color green
    data[2] = 0xFF;         // color blue
    data[3] = 0x01 << j;   // display the data on matrix.
    digitalWrite(CE, LOW);   // when CE is low, it begin to receive data.
    SPI.transfer(data[0]);   // transfer data[0] to the matrix(red)
    SPI.transfer(data[1]);   // transfer data[2] to the matrix(green)
    SPI.transfer(data[2]);   // transfer data[1] to the matrix(blue)
    SPI.transfer(data[3]);   // tansfer data[3] to the matrix(scanning and display the data on matrix)
    digitalWrite(CE, HIGH);  // when CE is High, means that matrix begin to display the array's information to the matrix.
    delay(temps);                // a little bit delay, let the led light up and stay for a while so that it looks like it brightness.
  }
};

void corMig()
{
  int j;
  int x = 2;
  static uint8_t cor[8] = {0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00};  // change the hard to be the smaller one, all you need to do is change this parameter.
  for (j = 0; j < 8; j++)
  {
    data[0] = 0xFF;       // color red
    data[1] = ~cor[j];  // color green
    data[2] = 0xFF;       // color blue
    data[3] = 0x01 << j;
    digitalWrite(CE, LOW);
    SPI.transfer(data[0]);
    SPI.transfer(data[1]);
    SPI.transfer(data[2]);
    SPI.transfer(data[3]);
    digitalWrite(CE, HIGH);
    delay(x);
  }
};

void corPetit()
{
  int j;
  int x = 2;
  static uint8_t cor[8] = {0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00};  // change the hard to be the smaller one, all you need to do is change this parameter.
  for (j = 0; j < 8; j++)
  {
    data[0] = 0xFF;       // color red
    data[1] = 0xFF;       // color green
    data[2] = ~cor[j];  // color blue
    data[3] = 0x01 << j;
    digitalWrite(CE, LOW);
    SPI.transfer(data[0]);
    SPI.transfer(data[1]);
    SPI.transfer(data[2]);
    SPI.transfer(data[3]);
    digitalWrite(CE, HIGH);
    delay(x);
  }
};
// apaga la matriu de llums
void matrixoff()
{
  int j;
  int x = 2;
  static uint8_t cor[8] = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11};  // you can see, all of the led will go off here.
  for (j = 0; j < 8; j++)
  {
    data[0] = ~cor[j];  // color red
    data[1] = ~cor[j];  // color green
    data[2] = ~cor[j];  // color blue
    data[3] = 0x01 << j;
    digitalWrite(CE, LOW);
    SPI.transfer(data[0]);
    SPI.transfer(data[1]);
    SPI.transfer(data[2]);
    SPI.transfer(data[3]);
    digitalWrite(CE, HIGH);
    delay(x);
  }
};
// possa la senyal del pin PE del reproductor-grabador en HIGH i al acabar en LOW
void possarMusica(){
  // Voice Recorder
    digitalWrite(VOICERECORDER_PIN_SIG, HIGH);  
    delay(1000);  //short signal is enough.
    digitalWrite(VOICERECORDER_PIN_SIG, LOW);  

}

Explicació del codi.

La part principal del codi es el loop. La distancia del sensor la don el mètode ping_cm() de la classe NewPing.

Si la distancia està en el interval de 0.5 a 1 m, llavors s'executen els mètodes possarMusica() i encentMatriuLeds(), altrament no fa res.

//////////////////////  loop  /////////////////////////////////
void loop(){
  // distancia al objecte en moviment en cm
  int distancia = hcsr04.ping_cm();
  Serial.print("distancia: ");Serial.println(distancia);
  //si la distancia está en el interval de 0.5 a 1 metres, musica i llum
  if( distancia>50 && distancia<100 ){
    Serial.println("Comença la musica i les llums ");
    possarMusica();
    encentMatriuLeds();   
  }
  else{
    Serial.println("distancia fora de limits, silenci i foscor ");
  }
  delay(3000);
  
}

El mètode encentMatriuLeds().

Son dos bucles un a dins del altre, el primer bucle fa tres iteracions, una per cada cor, el segon bucle serveix per fer un retard per cada cor.

A dins del segon bucle hi ha un switch de i, en la primera iteració cas 0 executa el mètode corGran(), en la segona corMig() i en la tercera corPetit(). Entre cor i cor el mètode matrixoff() apaga els leds.

//la matriu de leds ilumina tres cors de mes gran a mes petit i s'apaga al acabar
void encentMatriuLeds(){
  //primer for es per els tres cors
  //i el segon per el temps  de iluminació de cada cor
  // el switch, quan i=0, executa corGran(),quan i=1 corMig() i i=2 corPetit()  
   for (int i = 0; i < 3; i++) {
    for (int m = 100; m > 0; m--) {  // make a for loop to let the data displayed on the matrix.
      switch (i) {
        case 0:
          corGran();  
          break;
        case 1:
          corMig(); 
          break;
        case 2:
          corPetit();
          break;  
        default:
          break;
      }
    }  
    matrixoff();               // s'apaga la maatriu de leds
    delay(100);                // delay 100 ms
  }
}

El mètode possaMusica().

El que fa es posar el pin del reproductor gravador en HIGH i una vegada reproduïda la musica el torna en LOW.

// possa la senyal del pin PE del reproductor-grabador en HIGH i al acabar en LOW
void possarMusica(){
  // Voice Recorder
    digitalWrite(VOICERECORDER_PIN_SIG, HIGH);  
    delay(1000);  //short signal is enough.
    digitalWrite(VOICERECORDER_PIN_SIG, LOW);  

}

Muntatge de la joguina.

Preparem la caixa per el muntatge.

muntatge

Posem tot la electrònica a dins i a fora de una caixa de plàstic.

La part de la matriu de leds, l'altaveu, el sensor de moviment i la pila, a fora.

La part de la placa de Arduino i el reproductor gravador de musica a dins.

Encolem les peces amb silicona.

muntatge2

Resultat final.

joguina1
regal

Contingut.


Nosaltres

canserra1
cansaragoza
quino
mates

Roca grossa.

rocagrosa

Turó del mongrós.

mongros
factorial
electronica
canserra2
wifi

Tags

Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client