Índice:
- Etapa 1: Sensores de efeito Hall
- Etapa 2: Hardware eletrônico
- Etapa 3: App Inventor
- Etapa 4: Código Arduino
- Etapa 5: Alojamento
- Etapa 6: Montagem / Conclusão
Vídeo: Arduino / luz de mesa controlada por aplicativo: 6 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
Para este projeto, eu queria algo que me permitisse aprender mais sobre eletrônica / software, algo que ainda não entendi. Decidi que uma luz seria uma boa plataforma para isso.
O design que eu fiz foi para um uplighter que apresenta ajuste de cor e brilho. No produto, a temperatura e o brilho da cor branca quente a fria são controlados por meio do 'disco', sua posição e orientação alterando-os independentemente - uma interação única / divertida.
Eu também acabei criando um aplicativo (pode muito bem me desafiar) para ajustá-los, bem como adicionar funcionalidades adicionais para controlar alguns LEDs RGB e definir um alarme de nascer do sol. O alarme do nascer do sol aumenta gradualmente o brilho ao longo de 30 minutos para ajudá-lo a acordar.
Como este é meu primeiro projeto Arduino / App, estou assumindo que definitivamente haverá maneiras melhores de fazer o código, então vá com calma! Funciona, então estou feliz. Se você tiver sugestões de melhorias etc, seria bom ouvir..
Todos os arquivos para este projeto (código do arduino / app inventor, gráficos do app etc.) e o apk do app. pode ser encontrado neste link.
Eu participei dos concursos Raspberry Pi e FULL SPECTRUM LASER, então se você acha que vale a pena uma votação seria muito apreciada!
O que você precisa….
Elec. Componentes:
- Arduino Micro
- 12 sensores de efeito Hall radiométrico linear
- DC Jack
- Fonte de alimentação 12V
- 2 LEDs brancos frios de 1W (6000K)
- 2 LEDs brancos quentes de 1W (2800K)
- 4x Adafruit RGB Neopixels
- Driver de corrente constante Sparkfun Picobuck 350mA
- Módulo HC06 Bluetooth
- Placa de protótipo
- Blocos de terminais
- Fios
Materiais:
- Materiais de fabricação de moldes (papelão ou silicone, etc.)
- Resina fundida de poliuretano
- Madeira compensada
Consumíveis:
- Solda
- Tinta spray
- Lixa
- Copos / agitadores de mistura
Ferramentas:
- Ferro de solda
- Pistola de cola
- Alicates / chaves de fenda / facas etc.
- Cortador a laser
Programas:
- Arduino
- MIT App Inventor (gratuito baseado na web)
- Photoshop ou algo para criar gráficos de aplicativos
Etapa 1: Sensores de efeito Hall
Para o controle / interação do produto, eu estava procurando algo um pouco diferente, não apenas um dial ou algo assim.
Depois de um pouco de pesquisa em diferentes tipos de componentes eletrônicos, encontrei sensores de efeito Hall radiométricos lineares. Basicamente, trata-se de um sensor cuja saída é afetada por campos magnéticos. Normalmente, a saída dos sensores é a metade da tensão de entrada. No entanto, quando um ímã é aproximado dele, a saída aumentará para a tensão de entrada ou cairá para 0 V (limites de saturação), dependendo se é o pólo norte ou sul do ímã.
Percebi que poderia utilizar isso para me permitir controlar duas configurações diferentes em um único sensor Hall - a ideia do 'disco' nasceu. Um ímã está escondido no disco de corte a laser e controlaria o brilho ou a temperatura da cor, dependendo de qual extremidade estivesse voltada para os sensores. Eu entro no código do Arduino mais tarde, mas essencialmente leio esses sensores e procuro se a saída subiu acima de um 'gatilho alto' ou caiu abaixo do 'gatilho baixo'. Eu uso vários sensores de efeito Hall para me permitir mapear uma temperatura de cor específica e valor de brilho em cada um, que são acionados conforme você desliza o disco ao redor do arco.
Etapa 2: Hardware eletrônico
A primeira etapa deste projeto foi conectar o hardware eletrônico. Eu escolhi usar um Arduino Micro porque ele tem um bom número de pinos de leitura analógica - o que me permite usar vários sensores de efeito Hall para dar resolução suficiente para o ajuste de configuração. Uma fonte de alimentação de 12 Vcc é dividida entre alimentar o Arduino e o driver LED.
O arco de controle usa 11 sensores hall, com outro 1 usado para desligar a luz. Eles foram conectados aos pinos A0-> A5 e 4, 6, 8, 9, 10, 12. Eles compartilham um trilho / pino de aterramento comum.
Os LEDs que usei têm 1W e requerem um driver de corrente constante. O Sparkfun PicoBuck foi usado porque fornece 350mA constantes para até 3 canais de saída. A fonte de 12 V é conectada aos pinos Vin dos drivers. O driver possui pinos de entrada para controlar o PWM das saídas, estes foram conectados aos pinos 3 e 5 do Arduino.
O módulo bluetooth foi então conectado. Bluetooth Rx-> Arduino Tx, Tx-> Rx e 5v.ground.
Os LEDs foram montados em uma placa separada. Dois LEDs brancos frios são conectados em série, assim como os quentes. Eles se conectam às saídas 1 e 2 do driver. Os LEDs RGB são Adafruit Neopixels; esses são módulos encadeados dos quais você pode controlar a cor e o brilho individualmente a partir de um pino do Arduino. Eles se conectam ao pino 11 e aos pinos de 5 V / terra.
Etapa 3: App Inventor
Para criar o aplicativo, usei o MIT App Inventor, é gratuito e muito fácil de aprender / usar. Eu primeiro tive que criar as telas / gráficos do aplicativo - isso pode ser feito no photoshop etc. Isso torna mais fácil no App Inventor se você tiver todos os componentes que compõem as telas como imagens / arquivos separados.
O App Inventor tem duas visualizações, há a guia 'Designer' para o material visual do front end e a guia 'Blocos' para o código.
Usando a guia 'Designer', criei as telas do aplicativo. Um problema que descobri é que o componente bluetooth não funciona em várias telas, portanto, após a tela de "boas-vindas", todas as outras (conexão, RGB, temperatura de cor, alarme) são criadas na mesma tela - camadas efetivamente ativas /desligado.
As principais ferramentas que usei são para 'layout / alinhamento' e 'tela'. Uma tela é uma área sensível ao toque que você pode mostrar como uma imagem.
Assim que os visuais estiverem configurados, é hora de mudar para a guia 'Blocos' e escrever o código. Vou descrevê-lo resumidamente, mas provavelmente será mais fácil se você importar meu arquivo para o App Inventor e brincar com você …
Esses primeiros blocos são para as telas de conexão. Para permitir que o aplicativo tente se conectar automaticamente ao módulo bluetooth do Arduinos, eu crio e defino uma variável para o endereço do meu HC06. Eu uso um cronômetro para mudar a imagem de fundo enquanto ele está conectando. Se a conexão for bem-sucedida, a tela de temperatura colorida será carregada. Se o bluetooth não conseguir se conectar automaticamente, você precisa pressionar o botão "conectar ao dispositivo". Isso abrirá uma lista de todos os dispositivos bluetooth que seu telefone pode ver. O comando 'bluetoothclient1.connect' usa o endereço do dispositivo selecionado nessa lista para se conectar.
Esses blocos controlam o que acontece quando você toca em cada um dos botões do menu - muda entre RGB, temperatura de cor e alarme. À medida que são tocados, as camadas visuais aplicáveis são ativadas e desativadas. Ou seja, quando você toca no botão de menu RGB, ele muda a imagem de fundo da tela dos botões para o ícone escuro, liga a tela RGB e a outra desliga.
O controle de energia e brilho é compartilhado entre as telas RGB e de temperatura em cores. Para que o Arduino saiba quais LEDs controlar, preciso informar qual tela está carregada. Uma string de texto no formato (tela)? é enviado pelo bluetooth do seu telefone usando o comando BluetoothClient1. SendText.
Este bloco envia a string (Power)? sempre que o botão liga / desliga é pressionado.
Esses blocos controlam o ajuste da temperatura da cor. Quando você toca na tela, a coordenada Y do seu ponto de toque é usada para definir a variável 'legal'. O valor Y é determinado pelo tamanho do pixel da tela, portanto, no meu caso, um valor entre 0 e 450. Eu uso o multiplicador para converter isso em um valor PWM utilizável (0-255). Em seguida, envio uma string com esse valor e um identificador no formato (Tempvalue) ?.
Blocos semelhantes aos acima, mas para o controle de brilho. Usando a coordenada X desta vez e diferentes multiplicadores para definir a variável 'Bright' para um valor entre 10 e 100.
Esses blocos são para o controle RGB. Existe um comando chamado 'GetPixelColor' que pode ser usado para obter um valor RGB do pixel que seu dedo está tocando. Ele produz o valor com 255 extras no final por algum motivo, então eu trabalho um pouco para colocar o valor no formato (RGBredvalue.greenvalue.bluevalue.)? Novamente, isso é enviado para o Arduino, mas com RGB como um identificador na string.
A próxima seção de blocos é para as configurações de alarme. O primeiro bloco controla o que acontece quando você toca / arrasta o sol para cima e para baixo. Novamente, os comandos 'obter X e Y atuais' são usados para obter um valor de onde seu dedo está e alterar a imagem de fundo dependendo da altura do sol. A posição do sol também determina se o alarme está habilitado ou desabilitado, isso é enviado por bluetooth.
Quando você toca ou termina de mover o sol, ele abre o seletor de hora para permitir que você defina uma hora para o alarme. A parte principal deste próximo bloco é usar o tempo atual para calcular quantos milissegundos faltam até a configuração do alarme. Este valor é então enviado para o Arduino
Na próxima etapa, abordarei como o Arduino lê e usa as strings …
Etapa 4: Código Arduino
Tal como acontece com o código do aplicativo, irei abordá-lo brevemente….
Primeiro eu configurei todas as minhas variáveis, atribuindo os sensores e LEDs aos pinos corretos. A saída dos sensores de efeito Hall será lida usando a função analogRead, dando um valor entre 0 e 1023. Conforme descrito anteriormente, ela produz metade quando não há ímãs presentes, então cerca de 500. Eu uso as variáveis de gatilho Low e High para me permitir facilmente ajuste quando souber que o disco está sobre o sensor.
Os neopixels requerem uma biblioteca, então isso é definido aqui..
A configuração void inicia os seriais, para o Micro os pinos Rx / Tx (bluetooth) usam Serial1.. Os pinos são então definidos como entradas ou saídas e os LEDs desligados.
Agora é o loop principal …
Esta primeira seção verifica se algum dado está sendo recebido do aplicativo. Serial1.available () está lendo o serial e obtendo o número de bytes na string. Se for> 0, conheço os dados recebidos.
Se você se lembra, todas as strings que envio do aplicativo terminam com um ponto de interrogação…. ou seja (Bright100)?
Eu uso a função.readStringUntil para ler os dados seriais até o ponto de interrogação (Bright100) e definir a variável BTstring para isso. Eu verifico se BTstring termina com ')' para ter certeza de que os comandos completos estão sendo recebidos. Se forem, o loop do programa Bluetooth é chamado … isso é descrito mais adiante.
Este próximo bit controla o alarme do nascer do sol. Basicamente, se o alarme estiver habilitado e a hora estiver correta, ele começará a diminuir o brilho dos LEDs. Devido ao olho humano perceber a luz logaritmicamente, é melhor fazer qualquer tipo de aumento / redução do LED com uma curva exponencial em vez de linear. Portanto, uma equação está conduzindo os valores PWM …
Para evitar que o disco interfira com o controle do aplicativo, ele é desativado quando você usa o aplicativo. Para reativar o disco, você precisa movê-lo para fora do produto por 5 segundos. Este bit de código primeiro verifica se todos os sensores estão emitindo um valor de estado estacionário (sem ímã) e, em seguida, inicia um cronômetro. Quando 5 segundos são concluídos, a variável BTinControl é definida novamente como falsa.
O código do disco agora. Primeiro, os sensores precisam ser lidos.
Se a luz estiver desligada, ele irá verificar se algum dos sensores está acima ou abaixo dos pontos de gatilho, ou seja, o disco foi colocado no arco. Se estiver, os LEDs brancos desaparecerão até a última configuração, não importa onde você os posicione.
Para manter os LEDs definidos com sua última configuração em vez de atualizar para os valores associados a quaisquer sensores que estejam acionando, a variável MovedSinceStandby é definida como falsa. Este próximo trecho de código basicamente verifica se você moveu o disco de sua posição inicial em uma determinada quantidade….
Se você estiver movendo o disco, o 'MainProgram' é chamado para atualizar a temperatura de brilho / cor. Isso é descrito mais adiante.
O último bit neste loop principal verifica se o disco foi colocado de volta no dock de espera - é o sensor 12 lendo um valor acima / abaixo de um ponto de acionamento. Em caso afirmativo, o LED diminui novamente.
O loop bluetooth:
Conforme descrito acima, quando os dados são recebidos via bluetooth, a string é lida. Agora precisamos verificar o que essa string diz …
Todas as strings, exceto brilho, temperatura de cor e RGB, são bastante fáceis de lidar. Você verifica se BTstring é igual ao texto enviado do aplicativo.
Se você se lembrar, sempre que você mudar de tela no aplicativo, ele enviará um comando bluetooth. Aqui, questionamos isso e definimos algumas variáveis como verdadeiras ou falsas para sabermos em qual tela você está.
Observe que no final de cada seção eu defino a variável BTinControl como true e apago o valor BTstring.
Quando você pressiona o botão liga / desliga no aplicativo, os LEDs aumentam ou diminuem gradualmente. As variáveis definidas acima para a tela em que você está são usadas para decidir se é RGB ou LED branco para controlar.
Para brilho, temperatura de cor e RGB, preciso ler as cordas de uma maneira ligeiramente diferente. Como a parte do número da string mudará, eu questiono se a string começa com um dos identificadores e não a string inteira, então apenas (claro aqui..
Agora preciso separar o valor de brilho real da string. O formato da string enviada do aplicativo é (Brightvalue), portanto, sei que o valor do brilho estará entre o 't' e o ')'. A posição do 't' permanecerá constante, será sempre o 7º caractere da string. Mas, como o valor do brilho pode estar entre 10 e 100, a posição de ')' mudará. Eu uso o comando.indexOf para descobrir onde está o ')', que caractere é, e posso então usar o comando.substring para ler a string entre o sétimo caractere e a posição do caractere ')'. Isso me deixa apenas com o valor de brilho que posso usar para ajustar o RGB ou LEDs brancos dependendo da tela.
O ajuste da temperatura da cor é um processo semelhante ao anterior, mas o valor estará entre o 'p' e o ')' desta vez …
Para o ajuste RGB, temos três valores para extrair da string, mas é um processo semelhante novamente. Do aplicativo, recebemos strings na forma (RGBvalue.value.value)
Portanto, eu sei que o valor vermelho estará entre o 'B' e o primeiro ponto final. O valor verde está entre o 1º / 2º ponto final e o valor azul está entre o 2º ponto final e ')'.
Assim que tivermos os valores, os neopixles serão configurados com a nova cor …
Aqui verificamos se o alarme está sendo habilitado ou desabilitado. Se a hora do alarme for alterada, receberemos uma string com o número de milissegundos a partir de agora até o alarme. Novamente este valor é extraído da string e para poder verificar se é hora de iniciar o nascer do sol precisamos definir uma variável para a hora atual (milis).
Controles de disco:
Conforme descrito antes, se o disco (ímã) estiver em uma direção para cima, ele conduzirá a saída do sensor Hall abaixo do gatilho baixo e se estiver de outra forma acima do gatilho alto.
Isso permite o controle do brilho e da temperatura da cor no mesmo arco.
Os valores dos sensores são lidos. Se algum deles for menor que o valor de acionamento baixo, então estamos ajustando a temperatura da cor. Existem 11 sensores sob a área do arco, cujas saídas irão, por sua vez, ficar abaixo do ponto de acionamento conforme o disco é movido sobre eles. Cada sensor tem um valor PWM para os LEDs frios e quentes contra ele, começando com o sensor 1 em 100% morno, 0% frio e trabalhando até o dia 11 a 0% morno, 100% frio.
O controle de brilho é feito da mesma forma.. verificando se as saídas dos sensores estão acima do gatilho alto desta vez e dando a cada sensor um valor de ponderação de brilho.
Essa ponderação de brilho é então multiplicada pelo valor da temperatura da cor para fornecer o valor geral de saída. Permitindo que você defina qualquer temperatura de cor para qualquer brilho …
Etapa 5: Alojamento
- Comecei fazendo um molde de papelão para a parte inferior da caixa. Para criar os recessos para a área de controle, usei um pedaço de madeira compensada cortado a laser em forma de arco e usei uma moeda de 5 centavos para a doca de 'espera'. Eles foram colados no molde de papelão, prestando atenção para colocá-los na posição correta que se alinhasse com os sensores de efeito Hall.
- A seguir foi misturar a resina de poliuretano. O que eu uso tem uma proporção simples de 1: 1 e cura em cerca de 20 minutos … então preciso trabalhar bem rápido!
- O vazamento inicial era para preencher o fundo do molde. Após este conjunto, adicionei uma parede interna de papelão para permitir que eu despeje as paredes laterais.
- Para criar a seção superior, onde os LEDs se encaixariam, cortei e colei um tubo / copo de plástico em ângulo. E novamente a resina foi derramada e endurecida.
- Agora que a carcaça estava pronta, precisei fazer alguns furos e dar uma boa lixa.
- O primer foi aplicado e, em seguida, pulverizado com a camada superior final de tinta.
Etapa 6: Montagem / Conclusão
- Um slot para o conector DC foi cortado da caixa. O macaco é então colado.
- A placa de LED pode então ser aparafusada na parte superior, com os fios passando para a parte inferior.
- Os fios dos LEDs e do conector DC foram parafusados nos blocos de terminais corretos.
- A placa principal é então aparafusada na caixa
- Um pedaço de madeira compensada é então aparafusado para cobrir a parte inferior da caixa.
- A última coisa é colar o 'disco', certificando-se de orientar os pólos do ímã com a tampa de extremidade correta de 'brilho' ou 'temperatura de cor'.
No geral, a luz funciona muito bem! Existem alguns bugs no software para resolver e os LEDs RGB podem ser mais brilhantes. Também posso adicionar um sensor de luz ambiente para alterar automaticamente a temperatura da cor, começando com 'frio' durante o dia e mudando para 'quente' à noite.
Parabéns pela leitura!
Recomendado:
Luz do relógio com tela de matriz de tira LED controlada por Wi-Fi: 3 etapas (com imagens)
Luz de relógio com tela de matriz de tira de LED controlada por WiFi: Tiras de LED programáveis, por ex. com base no WS2812, são fascinantes. As aplicações são múltiplas e você pode obter resultados impressionantes rapidamente. E de alguma forma construir relógios parece ser outro domínio no qual penso muito. Começando com alguma experiência em
Nuvem de cores controlada por aplicativo: 7 etapas (com imagens)
App Controlled Color Cloud: Olá, neste instrutível, mostro como construir uma iluminação ambiente a partir de uma grade de caminho de cascalho. Tudo pode ser controlado via WLAN com um app.https: //youtu.be/NQPSnQKSuoUTHavia alguns problemas com o projeto. Mas no final você pode fazer sagacidade
Luz ambiente controlada por WIFI: 4 etapas (com imagens)
Luz ambiente controlada por WIFI: Esta é uma luz ambiente controlada por WIFI que eu projetei e fiz! O diâmetro é de 10 cm e a altura é de 19 cm. Eu o projetei para o " desafio de velocidade do LED STRIP ". Este moodlight pode ser controlado via Internet em qualquer dispositivo em sua rede local! I
Luz RGB controlada por Bluetooth com aplicativo Android: 4 etapas
Luz RGB controlada por Bluetooth com aplicativo Android: Olá fabricantes, hoje vamos aprender a fazer uma faixa RGB controlada por Bluetooth que é controlada a partir de nosso smartphone. A ideia básica por trás deste projeto é criar luz de fundo / mesa que adiciona uma sensação de calor aos olhos do observador. Sim, esta luz
Mesa de centro LED Arduino controlada por Bluetooth: 10 etapas (com imagens)
Mesa de centro LED Arduino controlada por Bluetooth: Este foi meu primeiro projeto Arduino real e também é meu primeiro instrutível, então seja gentil nos comentários :) Eu queria tentar responder às perguntas que levei algum tempo para descobrir e fornecer instruções detalhadas, então se você está muito familiarizado com ho