Índice:
- Etapa 1: Comece de maneira simples: adicione um botão
- Etapa 2: modificar o código para registrar pressionamentos de botão
- Etapa 3: adicione tantos botões quantos os filhos
- Etapa 4: adicionar uma campainha
- Etapa 5: adicionar uma tela LCD
Vídeo: Modificador de comportamento infantil: 5 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-02-01 14:42
O modificador de comportamento infantil registra quantas vezes seu filho teve problemas (também conhecido como greves) e, quando ele chega aos três, uma campainha toca e uma tela LCD anuncia que ele está de castigo.
Etapa 1: Comece de maneira simples: adicione um botão
A primeira etapa deste projeto é simples. Adicionar 1 botão. Nesta etapa, você precisa de 4 fios macho para macho, 1 resistor 220 e um botão de pressão.
- Conecte o 5V no lado da alimentação para a linha positiva na placa de ensaio
-
Conecte o GND ao lado negativo da placa de ensaio
- Insira o botão na placa de ensaio
-
Conecte a força na linha positiva para a parte inferior esquerda do botão de pressão
- Aterre o botão usando um resistor na parte inferior direita do botão de pressão para a linha negativa da placa de ensaio.
- Conecte o nº 13 do lado digital do Arduino ao lado superior direito do botão.
Verifique com o seu código se o botão está sendo registrado:
int child1ButtonPin = 13; // Este é o pino ao qual nosso botão está conectado
int child1ButtonState = 0; // Lê o estado do botão (ligado / desligado)
int child1Strike = 0; // Quantos golpes a criança tem
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); pinMode (child1ButtonPin, INPUT); } // a função de loop é executada continuamente void loop () {// ler o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin); if (child1ButtonState == HIGH) // Botão pressionado {Serial.println ("HIGH"); atraso (5000); }
if (child1ButtonState == LOW)
{Serial.println ("LOW"); atraso (5000); }}
Etapa 2: modificar o código para registrar pressionamentos de botão
Modifique o código para registrar um pressionamento de botão:
int child1ButtonPin = 13; // Este é o pino que nosso botão está conectado aint child1ButtonState = 0; // Lê o estado do botão (ligado / desligado) int child1PreviousState = 0; // Estado anterior do botão int child1Strike = 0;
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); pinMode (child1ButtonPin, INPUT); } // a função de loop é executada continuamente void loop () {// ler o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin); if (child1ButtonState! = child1PreviousState) {if (child1ButtonState == HIGH) // Botão pressionado {child1Strike ++; Serial.println (child1Strike); atraso (1000); }}
}
Em seguida, modifique o código para que a criança receba três avisos, após os quais receberá uma mensagem de que está de castigo:
int child1ButtonPin = 13; // Este é o pino que nosso botão está conectado aint child1ButtonState = 0; // Lê o estado do botão (ligado / desligado) int child1PreviousState = 0; int child1Strike = 0;
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); pinMode (child1ButtonPin, INPUT); } // a função de loop é executada continuamente void loop () {// ler o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin); if (child1ButtonState! = child1PreviousState) {if (child1ButtonState == HIGH) // Botão pressionado {child1Strike ++; Serial.println (child1Strike);
if (child1Strike> = 3)
{Serial.println ("Child 1 is Grounded!"); } atraso (3000); }}
}
O Serial Moniter deve ser semelhante à imagem acima.
Nota: certifique-se de que você está confortável com o atraso. Um pequeno atraso e registrará 1 pressionamento de botão como mais de um!
Etapa 3: adicione tantos botões quantos os filhos
Nesta etapa, simplesmente copiamos as duas últimas etapas. Adicione tantos botões quanto crianças. No meu caso, adiciono quatro. Certifique-se de alterar o código do pino digital ao qual o botão está conectado. No meu caso, usei os pinos 12 a 10 para adicionar meus botões. Caso você precise ser lembrado, aqui está a Etapa 1:
- Conecte o 5V no lado da alimentação para a linha positiva na placa de ensaio
-
Conecte o GND ao lado negativo da placa de ensaio
- Insira o botão de pressão na placa de ensaio; conecte a alimentação na linha positiva à parte inferior esquerda do botão de pressão
-
Aterre o botão usando um resistor na parte inferior direita do botão de pressão para a linha negativa da placa de ensaio.
- Conecte (seu número de pin) no lado digital do Arduino ao lado superior direito do botão.
Você também precisará modificar o código para lidar com todos os seus botões. Lembre-se disso se precisar ter cuidado com as Strings que você usou. Você não pode adicionar letras minúsculas juntas. É melhor declarar 1 como um objeto String.
int child1ButtonPin = 13; // Este é o pino que nosso botão está conectado aint child2ButtonPin = 12; int child3ButtonPin = 11; int child4ButtonPin = 10; int child1ButtonState = 0; // Lê o estado do botão (ligado / desligado) int child2ButtonState = 0; int child3ButtonState = 0; int child4ButtonState = 0; int child1PreviousState = 0; int child2PreviousState = 0; int child3PreviousState = 0; int child4PreviousState = 0; int child1Strike = 0; int child2Strike = 0; int child3Strike = 0; int child4Strike = 0;
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); pinMode (child1ButtonPin, INPUT); pinMode (child2ButtonPin, INPUT); pinMode (child3ButtonPin, INPUT); pinMode (child4ButtonPin, INPUT); } // a função de loop é executada continuamente void loop () {// ler o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin);
child2ButtonState = digitalRead (child2ButtonPin);
child3ButtonState = digitalRead (child3ButtonPin);
child4ButtonState = digitalRead (child4ButtonPin);
if (child1ButtonState! = child1PreviousState)
{if (child1ButtonState == HIGH) // Botão pressionado {child1Strike ++; Serial.println (String ("Child 1 Has:") + child1Strike + "strikes");
if (child1Strike> = 3)
{Serial.println ("Child 1 is Grounded!"); } atraso (3000); }} if (child2ButtonState! = child2PreviousState) {if (child2ButtonState == HIGH) // Botão pressionado {child2Strike ++; Serial.println (String ("Child 2 has:") + child2Strike + "strikes");
if (child2Strike> = 3)
{Serial.println ("Child 2 is Grounded!"); } atraso (3000); }}
if (child3ButtonState! = child3PreviousState)
{if (child3ButtonState == HIGH) // Botão pressionado {child3Strike ++; Serial.println (String ("Child 3 has:") + child3Strike + "strikes");
if (child3Strike> = 3)
{Serial.println ("Child 3 is Grounded!"); } atraso (3000); }}
if (child4ButtonState! = child4PreviousState)
{if (child4ButtonState == HIGH) // Botão pressionado {child4Strike ++; Serial.println (String ("Child 4 has:") + child4Strike + "strikes");
if (child4Strike> = 3)
{Serial.println ("Child 4 is Grounded!"); } atraso (3000); }}}
Etapa 4: adicionar uma campainha
Agora, vamos garantir que seus filhos saibam que estão de castigo. Vamos adicionar uma campainha. Para conectar a campainha, siga estas etapas fáceis.
- Adicione uma campainha à sua placa de ensaio, planeje o espaço, já que uma tela LCD está chegando.
- Conecte o lado positivo (a campainha deve ter um + no lado positivo) ao pino de sua escolha. Eu fiz 9.
- Conecte o outro lado ao trilho aterrado de sua placa de ensaio.
Em seguida, modifique seu código para desligar a campainha quando uma criança ficar de castigo. Existem algumas maneiras diferentes de codificar sua campainha, mas eu gosto do tom (buzzerName, hertz, duração) por sua simplicidade. Portanto, um exemplo disso seria o tom (campainha, 4000, 300).
int child1ButtonPin = 13; // Este é o pino que nosso botão está conectado aint child2ButtonPin = 12; int child3ButtonPin = 11; int child4ButtonPin = 10; int child1ButtonState = 0; // Lê o estado do botão (ligado / desligado) int child2ButtonState = 0; int child3ButtonState = 0; int child4ButtonState = 0; int child1PreviousState = 0; int child2PreviousState = 0; int child3PreviousState = 0; int child4PreviousState = 0; int child1Strike = 0; int child2Strike = 0; int child3Strike = 0; int child4Strike = 0; const int buzzer = 2;
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); pinMode (child1ButtonPin, INPUT); pinMode (child2ButtonPin, INPUT); pinMode (child3ButtonPin, INPUT); pinMode (child4ButtonPin, INPUT); pinMode (campainha, OUTPUT); } // a função de loop é executada continuamente void loop () {// ler o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin);
child2ButtonState = digitalRead (child2ButtonPin);
child3ButtonState = digitalRead (child3ButtonPin);
child4ButtonState = digitalRead (child4ButtonPin);
if (child1ButtonState! = child1PreviousState)
{if (child1ButtonState == HIGH) // Botão pressionado {child1Strike ++; Serial.println (String ("Child 1 Has:") + child1Strike + "strikes");
if (child1Strike> = 3)
{Serial.println ("Child 1 is Grounded!"); tom (campainha, 5000, 500); // Envia um som de 5 hertz por 5 milissegundos
}
atraso (3000); }} if (child2ButtonState! = child2PreviousState) {if (child2ButtonState == HIGH) // Botão pressionado {child2Strike ++; Serial.println (String ("Child 2 has:") + child2Strike + "strikes");
if (child2Strike> = 3)
{Serial.println ("Child 2 is Grounded!"); tom (campainha, 5000, 500); } atraso (3000); }}
if (child3ButtonState! = child3PreviousState)
{if (child3ButtonState == HIGH) // Botão pressionado {child3Strike ++; Serial.println (String ("Child 3 has:") + child3Strike + "strikes");
if (child3Strike> = 3)
{Serial.println ("Child 3 is Grounded!"); tom (campainha, 5000, 500); } atraso (3000); }}
if (child4ButtonState! = child4PreviousState)
{if (child4ButtonState == HIGH) // Botão pressionado {child4Strike ++; Serial.println (String ("Child 4 has:") + child4Strike + "strikes");
if (child4Strike> = 3)
{Serial.println ("Child 4 is Grounded!"); tom (campainha, 5000, 500); } atraso (3000); }}}
Etapa 5: adicionar uma tela LCD
Agora permite uma tela LCD para uma leitura clara e fácil.
- Primeiro, adicione um potenciômetro à placa de ensaio para controlar a tela LCD. Tenha cuidado ao colocá-lo, pois provavelmente você está ficando sem espaço agora.
- Use a frente esquerda para conectar seu potenciômetro ao barramento de alimentação
- Use a frente direita para aterrar seu potenciômetro.
- A parte traseira será conectada à tela de lcd.
- Adicione a tela LCD à sua placa de ensaio
- Aterre o primeiro pino de tela ao trilho de aterramento
- Conecte o segundo pino ao barramento de alimentação.
- O terceiro pino LCD vai para o pino 8 no Arduino
- O quarto pino LCD vai para o pino 7 no Arduino
- O quinto vai para o pino 6 no Arduino
- O sexto pino vai para o pino 5 no Arduino
- Os pinos 7 a 10 na tela LCD estão vazios
- O pino 11 vai para o pino 5 no Arduino
- O pino 12 vai para o trilho aterrado
- O pino 13 vai para o pino 4 no Arduino
- O pino 14 vai para a parte de trás do potenciômetro
- O pino 15 vai para o barramento de alimentação
- O pino 16 vai para o trilho de aterramento.
Agora você terá que atualizar seu código para usar a tela de lcd. Para isso você usará a biblioteca Liquid Crystal. Tenha cuidado com suas declarações de impressão LCD. Lembre-se de limpar a tela quando precisar de uma nova mensagem. Lembre-se também de definir o cursor quando quiser usar duas linhas.
#incluir
LiquidCrystal lcd (3, 4, 5, 6, 7, 8); // Define a tela LCD
int child1ButtonPin = 13; // Este é o pino que nosso botão está conectado a int child2ButtonPin = 12; int child3ButtonPin = 11; int child4ButtonPin = 10; int child1ButtonState = 0; // Lê o estado do botão (ligado / desligado) int child2ButtonState = 0; int child3ButtonState = 0; int child4ButtonState = 0; int child1PreviousState = 0; // O estado anterior do botão pressionado int child2PreviousState = 0; int child3PreviousState = 0; int child4PreviousState = 0; int child1Strike = 0; // Quantos golpes uma criança possui int child2Strike = 0; int child3Strike = 0; int child4Strike = 0; const int buzzer = 9; // a campainha
// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup () {Serial.begin (9600); lcd.begin (16, 2); lcd.print ("A Criança"); lcd.setCursor (0, 1); lcd.print ("Modificador de comportamento"); pinMode (child1ButtonPin, INPUT); pinMode (child2ButtonPin, INPUT); pinMode (child3ButtonPin, INPUT); pinMode (child4ButtonPin, INPUT); pinMode (campainha, OUTPUT); } // a função de loop é executada continuamente para sempre void loop () {lcd.setCursor (0, 0); // lê o estado do botão (ligado ou desligado) child1ButtonState = digitalRead (child1ButtonPin);
child2ButtonState = digitalRead (child2ButtonPin);
child3ButtonState = digitalRead (child3ButtonPin);
child4ButtonState = digitalRead (child4ButtonPin);
if (child1ButtonState! = child1PreviousState)
{if (child1ButtonState == HIGH) // Botão pressionado {lcd.clear (); child1Strike ++; Serial.println (String ("Child 1 Has:") + child1Strike + "strikes"); lcd.print ("Criança 1 tem:"); lcd.setCursor (0, 1); lcd.print (child1Strike); lcd.print ("Strikes!");
if (child1Strike> = 3)
{Serial.println ("Child 1 is Grounded!"); lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Criança 1 é"); lcd.setCursor (0, 1); lcd.print ("Aterrado!");
tom (campainha, 5000, 500); // Envia um som de 5 hertz por 5 milissegundos
}
atraso (3000); }} if (child2ButtonState! = child2PreviousState) {lcd.clear (); if (child2ButtonState == HIGH) // Botão pressionado {child2Strike ++; Serial.println (String ("Child 2 has:") + child2Strike + "strikes"); lcd.print ("Criança 2 tem:"); lcd.setCursor (0, 1); lcd.print (child2Strike); lcd.print ("Strikes!"); if (child2Strike> = 3) {Serial.println ("Child 2 is Grounded!"); lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Criança 2 é"); lcd.setCursor (0, 1); lcd.print ("Aterrado!"); tom (campainha, 5000, 500); } atraso (3000); }}
if (child3ButtonState! = child3PreviousState)
{lcd.clear (); if (child3ButtonState == HIGH) // Botão pressionado {child3Strike ++; Serial.println (String ("Child 3 has:") + child3Strike + "strikes"); lcd.print ("Criança 3 tem:"); lcd.setCursor (0, 1); lcd.print (child3Strike); lcd.print ("Strikes!"); if (child3Strike> = 3) {Serial.println ("Child 3 is Grounded!"); lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Criança 3 é"); lcd.setCursor (0, 1); lcd.print ("Aterrado!"); tom (campainha, 5000, 500); } atraso (3000); }}
if (child4ButtonState! = child4PreviousState)
{lcd.clear (); if (child4ButtonState == HIGH) // Botão pressionado {child4Strike ++; Serial.println (String ("Child 4 has:") + child4Strike + "strikes"); lcd.print ("Criança 4 tem:"); lcd.setCursor (0, 1); lcd.print (child4Strike); lcd.print ("Strikes!");
if (child4Strike> = 3)
{Serial.println ("Child 4 is Grounded!"); lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Criança 4 é"); lcd.setCursor (0, 1); lcd.print ("Aterrado!"); tom (campainha, 5000, 500); } atraso (3000); }}} E é isso, isso é tudo que você precisa para construir seu próprio modificador de comportamento infantil
Recomendado:
Sem xixi agora, dispositivo de ajuste de comportamento de animais de estimação que impede os gatos de urinarem em sua casa: 4 etapas
Sem xixi agora, dispositivo de ajuste de comportamento do animal de estimação que impede os gatos de fazer xixi em sua casa: Fiquei tão incomodado com minha gatinha que ela gosta de fazer xixi na minha cama, verifiquei tudo que ela precisa e também a levei ao veterinário. Depois de descobrir tudo o que posso pensar e ouvir a palavra do médico, percebo que ela apenas tem um comportamento ruim. Então, o
Modificador dicóptico de oclusão alternada de transmissão estereoscópica 32 [STM32F103C8T6 + STMAV340 VGA Superimposer]: 6 etapas
Modificador dicóptico de oclusão alternada de transmissão estereoscópica 32 [STM32F103C8T6 + STMAV340 VGA Superimposer]: Há algum tempo venho trabalhando em um sucessor para o AODMoST original. O novo dispositivo usa um microcontrolador de 32 bits mais rápido e melhor e um switch de vídeo analógico mais rápido. Ele permite que o AODMoST 32 trabalhe com resoluções mais altas e implemente um novo funcional
Modificador dicóptico de oclusão alternada de transmissão estereoscópica [ATmega328P + HEF4053B VGA Superimposer]: 7 etapas
Modificador dicóptico de oclusão alternada de transmissão estereoscópica [ATmega328P + HEF4053B VGA Superimposer]: Depois de meus experimentos com óculos de cristal líquido usados para ocluir os olhos (aqui e ali), decidi construir algo que seja um pouco mais sofisticado e também não force o usuário usar PCB na testa (as pessoas às vezes podem se comportar
Caixa de interruptor de luz de brinquedo infantil + jogos Remix: 19 etapas (com imagens)
Kid's Toy Light Switch Box + Games Remix: Este é um remix que eu tinha que fazer desde que vi dois instructables incríveis e não conseguia parar de pensar em combinar os dois! Este mashup basicamente combina a interface da caixa de interruptor de luz com jogos simples (Simon, Whack-a-Mole, etc …) em t
Faça você mesmo - Reciclando um ventilador de chão em um modificador de luz fotográfica / lâmpada all-in-one: 11 etapas
DIY - Reciclando um ventilador de chão em um modificador de luz fotográfica / lâmpada all-in-one: Recentemente, eu estava limpando a primavera e me deparei com um ventilador de chão que estava com o motor queimado. E eu precisava de um abajur. 2 + 2 e eu fiz um pouco de brainstorming e tive a ideia de converter o ventilador em um modificador de luz de 20 polegadas de largura. Continue lendo para s