Durante a preparação do artigo sobre o reconhecimento de microcontroladores usando TensorFlow e OpenCV, Craftduino, Canny 3 tiny e Raspberry PI chamaram minha atenção ao mesmo tempo, após o que decidi que seria ótimo combiná-los novamente em um artigo. Pensei durante muito tempo sobre o que escrever e, depois, tenho vergonha de admitir, lembrei-me de que era um tio saudável e nunca tinha conectado nada via UART ainda. "Tudo precisa ser tentado na vida", pensei. Mas escrever apenas sobre conectar-se ao UART é chato, então todos os tipos de "brinquedos" foram encomendados imediatamente, entre os quais o novíssimo Arduino e alguns sensores.Então, hoje vamos criar um sistema de segurança para a minha caneta favorita. Você está surpreso por que uma caneta? O segredo é simples, eu sou muito inexperiente em todos os tipos de questões eletrônicas e, portanto, quando pedi um sensor de pressão, pensei que ele funcionaria em toda a área, mas descobriu-se que funciona apenas para uma área de contato específica. Curiosamente, mas em toda a casa não havia nada de peso suficiente, estável e de tamanho adequado, exceto por esta caneta. Bem, exceto pelo meu dedo, mas eu não estava pronto para experimentar .Neste artigo, compartilharei minha experiência de conectar um sensor de pressão e um sensor de movimento Doppler aos microcontroladores. Vamos conectar os controladores via interface UART com fio ao GPIO Raspberry PI 3. Em seguida, escreveremos um programa simples no Python para exibir o status do sistema de segurança e, no final, conectaremos o smartphone ao "raspberry" usando o VNC para monitorar o sistema de segurança à distância do computador.Deseja deixar Indiana Jones fora do trabalho? Então você é bem-vindo sob gato.
Como sempre, no começo explicarei que sou novo na eletrônica DIY e estou aprendendo lentamente de um artigo para outro. Portanto, não perceba o que vou escrever como a verdade suprema. Certamente tudo pode ser feito melhor.Aqui está o que falaremos hoje:Parte I: IntroduçãoParte II: Conectando o circuito e o programa para o Canny 3 tinyParte III: Conectando o circuito e o programa para o Arduino UnoParte IV: Raspberry PI e o programa de monitoramento em PythonParte V: ConclusãoParte I: Introdução
Um leitor atento pode perguntar: "Por que você comprou o Arduino se você mencionou o CraftDuino antes?", Tudo é muito comum. CraftDuino quebrou novamente. Uma vezDrzugrikEu consertei e agora é "auto-isolamento", e não queria incomodar uma pessoa por nada.Então, nós nos aproximamos suavemente da base do material. Para este artigo, eu usei:- Resistor de pressão FSR402:
- Sensor de movimento Doppler RCWL-0516:
Na loja onde comprei os dois sensores na descrição do site, estava escrito que eles eram para o Arduino, mas, na prática, verificou-se que não eram necessárias bibliotecas especiais e tudo começou sem problemas no Canny.
- Microcontrolador Arduino Uno:
- Microcontrolador Canny 3 Tiny - versão com bloco de terminais e chicote de cabos:
- Computador de placa única Raspberry PI 3 Modelo B:
- Outros: Tábuas de pão Breboard, fios e clipes de crocodilo, adaptador de energia para framboesa
Vamos ao que interessa.Parte II: Conectando o circuito e o programa para Canny 3 tiny
Existem muitos exemplos na Internet de como conectar o Arduino via UART, há muito menos exemplos sobre o Canny, então vamos começar com ele.Para não aumentar o tamanho do artigo e não me repetir, lembro que considerei os problemas mais básicos de como trabalhar com o Canny e o ambiente de desenvolvimento do CannyLab neste artigo , e um exemplo de conexão de sensores a um conversor analógico-digital (ADC) e transmissão de uma mensagem via Virtual COM porta, eu fiz neste artigo .Para quem não lê isso, mas tenta conectar imediatamente os sensores ao ADC, há um ponto importante. Não repita meu erro. Para que as saídas dos controladores 5 e 6 funcionem no modo ADC, é necessário configurar os jumpers, como na figura abaixo. Não é difícil, até eu fiz.E outro ponto importante nas saídas do controlador será a tensão de alimentação, ou seja, se você se conectar a partir de uma fonte de energia externa em vez de USB, verifique se a tensão de saída não excede a tensão permitida para sensores e UART.Para este artigo, um jumper seria suficiente para nós, mas se obtivemos um ferro de soldar, por que deveríamos perder tempo com ninharias?Preste atenção ao bloco de terminais, o chicote de cabos nativo é padrão para esta versão do controlador, é resistente e provavelmente conveniente se usado dentro do carro, mas não para experimentos na mesa. Eu inventei o know-how, substituí o chicote nativo por chicotes que geralmente são fornecidos com equipamentos de computador, bem ou vendidos em lojas que vendem eletrônicos DIY, e isso se mostrou muito conveniente. Eles não se sentam mal no quarteirão, macios e ao mesmo tempo dão alongamentos adicionais.Vamos seguir para o diagrama de conexão:Tudo é bem simples e não requer nenhuma habilidade especial, acho que quase qualquer um pode lidar com isso.Primeiro, vamos lidar com o poder do conselho. Vamos usar o "ground" da saída "-" do controlador, mas com o plus, tudo não está tão claro. À primeira vista, parece lógico conectar-se ao terminal “+”, mas, na prática, aparentemente é um terminal para + 5V INPUT. Portanto, em vez disso, configuraremos uma das saídas como uma saída de + 5V, fornecendo uma unidade lógica e puxando-a para o "mais". Decidi pegar a saída número 3.O sensor de pressão está conectado de maneira muito simples. De fato, este é um resistor. Trazemos energia para uma de suas "pernas" e, a partir das segundas "pernas", enrolamos o fio na entrada do controlador conectada ao ADC (No. 5 ou No. 6). Eu escolhi o número 6.A propósito, perdi o sensor de pressão duas vezes. Meu segundo erro foi conectar o sensor. Ele não se encaixa na placa de ensaio, mas deve ser conectado a um bloco de terminais parafusados ou algo semelhante. Eu tive que sair com os "crocodilos".O sensor de movimento não é conectado muito mais complicado, colocamos + 5V da placa no conector Vin, conectamos ao conector GND na placa de ensaio e conectamos o conector OUT a qualquer entrada digital do controlador, conectei à saída n ° 5 (nós não o mudaremos para o modo ADC).Resta conectar o controlador ao "Raspberry" através do UART. Para fazer isso, a saída do controlador nº 2, que em nosso modo UART se torna a saída “TX”, deve ser conectada à entrada Raspberry GPIO RX, e o terra na placa e o Raspberry PI GPIO GND também devem ser conectados.Muitas pessoas aconselham coordenar o nível de tensão para 3,3 V, e eu até tentei conectar o Canny através de um divisor de tensão, mas funciona pior do que sem ele (ou não funciona), por isso, neste caso, conectei-me diretamente ao Raspberry UART. Parece que nada queimou. Tudo está funcionando.Talvez você tenha pensado: "Por que ele está conectado" aos fios do UART, quando possível via Bluetooth? " De fato, existem muitos exemplos de conexão do Arduino através do UART ao módulo HC-06 na rede. Se você acredita no fórum , o Canny também se conecta a ele sem problemas. Mas eu não tentei eu mesmo. Queria conectar usando fios e decidi adiar a conexão Bluetooth até a próxima vez.Aqui está a aparência do circuito:Vamos para o programa do controlador (diagrama):No bloco “Parameter Setting” , ativamos o modo ADC para o canal (entrada) nº 6, transferimos o canal nº 3 para o modo de saída discreta e alimentamos uma unidade lógica (+ 5V no nosso caso), quase tudo foi analisado neste artigo .Apenas as configurações do UART não nos são familiares. Felizmente, tudo é simples. O Canny 3 tiny possui apenas 1 interface UART (por exemplo, o Canny 7 possui dois). Quando o modo UART é ativado, a saída nº 1 se torna RX, a saída nº 2 TX. Vamos escolher a taxa de 9600 bauds usual, mas o modo de transferência de dados é limitado. O número disponível de bits de dados é de apenas 8 bytes e 1 bit de parada (para modelos de controlador “mais antigos”, há mais opções) .Para habilitar o UART, é necessário inserir o registro de configuração do UART1 no registro correspondente. escreva uma constante predefinida:De fato, no nosso caso, foi possível escolher uma constante que incluísse apenas o modo de transmissão UART, porque não planejamos recuperar nada. Mas eu decidi mostrar um exemplo mais geral.Se você selecionou o controlador correto ao criar o diagrama, o CannyLab não permitirá que você escolha a constante que não combina com ele. Portanto, a escolha de um modo conscientemente perigoso não funciona. A verdade é sempre a oportunidade de inserir uma constante manualmente, mas é melhor não fazer isso.Enviaremos 10 caracteres na mensagem (incluindo 2 problemas), portanto, escreveremos uma constante igual a 10 no registro de mensagens.Não tenho certeza sobre o aumento de 1 TX para um, mas, caso ative esse item, como o entendo, preciso dele Não aperte com um resistor.No bloco“Envio periódico via UART e VCP”Usamos o gerador PWM para enviar 1 vez em 2 segundos, para que o controlador não obstrua o canal por um segundo enviando constantemente uma mensagem, usamos o “Trailing Edge Detector”. Que funcionará apenas uma vez no momento de alternar de um para zero, se o controlador estiver pronto neste momento para enviar uma mensagem via UART, duas unidades chegarão à entrada do bloco de multiplicação lógica, respectivamente, também "1", que instruirá o controlador a enviar uma mensagem via UART , e também no caso de depuração em uma porta USB-COM (escrevi sobre isso em detalhes em um artigo anterior ).No bloco "Display"tudo é bastante simples, se os valores do sensor de pressão forem menores que um determinado limite e, ao mesmo tempo, o sensor de movimento foi acionado (ele dará "1" à saída), então acenderemos o LED verde do controlador como um sinal de alarme.Seria legal se o sistema funcionasse como em um filme:
mas nos limitaremos a ligar o LED.Aqui está uma demonstração visual:Restou o último bloco “Message Formation”.Recebemos dados do ADC, a resolução do ADC é de 0 a 1023. Enviamos caracteres para o UART, o que significa que as leituras do sensor de pressão devem ser convertidas em uma string. Como o número máximo é 1023 (4 dígitos), precisamos de 4 bytes. “Number to String Converter” gera dois caracteres nas saídas; teremos 2 pares de caracteres; cada um deles enviará mensagens UART e VCP aos registros de instalação. Em seguida, precisamos escrever um separador para que as leituras não se mesclem, já que o CannyLab usa dois caracteres e, em seguida, usamos dois caracteres "espaço" como separador. Da mesma forma, convertemos as leituras do sensor de movimento, fornecendo um discreto 00 ou 01, o que significa que precisamos apenas de um par de caracteres. No final da mensagem, escreva os caracteres de retorno de carro e nova linha.Como já escrevi no artigo sobre o fotorresistor, o Canny não possui seu próprio monitor de porta COM, mas você pode usar qualquer monitor de terceiros e, como usaremos o Arduino IDE um pouco mais tarde, usaremos o monitor de porta COM integrado.Então, eu coloco um dedo no sensor de pressão e me movo pelo caminho:O diagrama, como todo o código abaixo, pode ser baixado no GitHub .Agora vamos para o Arduino.Parte III: Diagrama de fiação e programa para o Arduino Uno
Não falarei sobre o Arduino com tanto detalhe, porque tudo é bastante trivial.Diagrama de fiação:Nota! Como a saída do Arduino RX / TX opera a uma tensão de 5 V e o Raspberry PI possui 3,3 V, as pessoas aconselham a conexão do Arduino ao Raspberry UART usando módulos especiais ou pelo menos usando um divisor de tensão. Eu não tenho um módulo especial, mas o divisor de tensão é sempre bem-vindo. Tomei 3 resistores com um valor nominal de 1000 ohms. E ele fez um tap após o segundo resistor, no qual 2/3 da tensão cairá. Se você arredondar a energia via USB para 5 V, isso acontece 5*0.66=3.3
.Embora eu também tenha conectado o Arduino diretamente ao UART Raspberry PI e tudo pareça funcionar.Conectamos o sensor de pressão a “+” e à entrada analógica “A1”. O sensor de movimento para entrada de potência e digital n ° 5.É assim que o circuito se parece quando montado:Aqui está o código de rascunho para Ardino: O código é simples, a única coisa que vale a pena explicar é a variável "ajuste". O fato é que, quando conectado ao Arduino, o sensor de pressão às vezes mostrava valores diferentes de zero, mesmo sem carga, e eu não pensava em nada melhor do que subtrair o valor médio do "ruído" para unificar as leituras com Canny. Além disso, como no caso anterior, implementamos a tela com um LED embutido, caso os sensores funcionassem:byte photoPin = A0;
void setup() {
Serial.begin(9600);
pinMode(photoPin, INPUT);
pinMode(5, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
int adjustment = 250;
int pressure_sensor = analogRead(A1) - adjustment;
int motion_sensor = digitalRead(5);
Serial.print(pressure_sensor);
Serial.print(" ");
Serial.println(motion_sensor);
if ((pressure_sensor<380) && (motion_sensor==1))
{
digitalWrite(LED_BUILTIN, HIGH);
}
else {
digitalWrite(LED_BUILTIN, LOW);
}
delay(1000);
}
Parte IV: Raspberry PI e o programa de monitoramento em Python
Primeiro, você precisa habilitar o UART, bem como o SSH e o VNC, e depois conectar-se ao Raspberry usando um smartphone.Vápara as configurações do Raspberry PI e ative o SSH, VNC, UART, como na figura:Por precaução, desliguei o Bluetooth.Vamos escrever um programa Python simples, usei o IDE embutido e não instalei nenhum módulo Python adicional. Eu tinha um Raspbian com imagem de desktop, de tamanho médio, que ocupa aproximadamente 1,1 GB.Em nosso programa de monitoramento, usaremos o console e a interface gráfica para exibir informações. Para implementar a GUI, decidi usar o Tkinter. Eu realmente o uso pela segunda vez na minha vida, mas eu só precisava de alguns campos de texto e uma caixa de diálogo.Aqui está o código do programa:import serial
import time
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0)
window = Tk()
window.title("Security system for my pen")
window.geometry('400x170')
lbl_ps = ttk.Label(window, text="Pressure sensor", font=("Arial Bold", 20))
lbl_ps.grid(column=0, row=0)
lbl_ps_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ps_status.grid(column=1, row=0)
lbl_ms = ttk.Label(window, text="Motion sensor", font=("Arial Bold", 20))
lbl_ms.grid(column=0, row=1)
lbl_ms_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ms_status.grid(column=1, row=1)
while True:
counter = 0
rcv = serialport.readline().decode('utf-8').replace("\r\n","").split(' ')
if (len(rcv)==2):
ps=rcv[0]
ms=rcv[1]
print (ps+ " " +ms)
if (int(ps)<380):
lbl_ps_status.config(text = " Warning!")
counter += 1
else:
lbl_ps_status.config(text = " Ok")
if (int(ms)>0):
lbl_ms_status['text']=" Warning!"
counter += 1
else:
lbl_ms_status['text']=" Ok"
window.update_idletasks()
window.update()
if (counter == 2):
messagebox.showinfo("Alarm!", "heck your pen!")
time.sleep(1)
Provavelmente vou pular a importação de bibliotecas.Após a importação, definimos as configurações do UART, a própria porta, velocidade e tempo limite.serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0)
Em seguida, colocamos os campos de texto (Etiqueta) no layout da tabela (na grade).Teremos 4 campos, dos quais 2 não são alterados, e o status do sensor será exibido nos outros dois.window.title("Security system for my pen")
window.geometry('400x170')
lbl_ps = ttk.Label(window, text="Pressure sensor", font=("Arial Bold", 20))
lbl_ps.grid(column=0, row=0)
lbl_ps_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ps_status.grid(column=1, row=0)
lbl_ms = ttk.Label(window, text="Motion sensor", font=("Arial Bold", 20))
lbl_ms.grid(column=0, row=1)
lbl_ms_status = ttk.Label(window, text=" ", font=("Arial Bold", 20))
lbl_ms_status.grid(column=1, row=1)
Em seguida, crie um loop sem fim.No início do ciclo, redefiniremos o rótulo do alarme counter
.Em seguida, leia os dados da porta serial.Para não olhar para todas as entradas como "\ x00", recodificamos a mensagem em UTF-8.Em seguida, removemos o início e o fim da linha para que apenas os números permaneçam.Em seguida, dividimos a linha, preste atenção aos espaços 2 do separador, e não 1.Para que o programa não falhe quando a mensagem estiver incorreta, o código adicional vinculado ao recebimento da mensagem será amontoado em uma estrutura condicional que funcionará apenas se a mensagem puder ser dividida em duas partes.Bem, exiba o sensor de pressão e o sensor de movimento no console.while True:
counter = 0
rcv = serialport.readline().decode('utf-8').replace("\r\n","").split(' ')
if (len(rcv)==2):
ps=rcv[0]
ms=rcv[1]
print (ps+ " " +ms)
Verifique se os sensores funcionaram, se está tudo bem, o sistema escreve "OK"; se um dos sensores funcionar, o contador aumenta em 1 e é emitido um aviso.
if (int(ps)<380):
lbl_ps_status.config(text = " Warning!")
counter += 1
else:
lbl_ps_status.config(text = " Ok")
if (int(ms)>0):
lbl_ms_status['text']=" Warning!"
counter += 1
else:
lbl_ms_status['text']=" Ok"
No último bloco, atualizamos os elementos do formulário Tkinter, após o qual verificamos quantos sensores funcionaram. Se os dois sensores funcionaram no ciclo, uma janela modal aparece com uma mensagem de alarme.
window.update_idletasks()
window.update()
if (counter == 2):
messagebox.showinfo("Alarm!", "heck your pen!")
time.sleep(1)
É importante observar aqui que o sensor de movimento mantém a saída "1" por dois segundos a partir do momento em que o movimento é detectado. Então, como regra, o sistema consegue funcionar.Abaixo estão as capturas de tela mostrando o funcionamento do programa:Todos os sensores estão calmos:Uma das duas coisas funcionou:Ambos funcionaram, o sistema espera que o operador reconheça:Parece que tudo estava como planejado.Conclusão
Em conclusão, considere conectar-se a um Raspberry PI a partir de um smartphone. Em princípio, não há nada complicado, se você pode se conectar a partir de um computador, pode fazer a partir de um telefone. Tudo o que você precisa saber é o IP, nome de usuário e senha do Raspberry. Instalei o VNC Viewer no meu smartphone Android, mas você certamente pode ter outro cliente.Não é muito conveniente de usar, mas funciona:Deixe-me lembrá-lo mais uma vez que todo o código pode ser baixado do GitHub .Cada vez que prometo a mim mesmo que não vou escrever um artigo longo, mas aqui novamente o rascunho ultrapassou 10 páginas impressas. O artigo mostra um exemplo fácil de implementar de um sistema de segurança caseiro, a capacidade de imaginação é enorme.Se eu entendo que o artigo foi interessante para você, descreverei mais adiante sobre como conectar-se através de um adaptador Bluetooth.UPD:
Parece que recebi uma pequena série de artigos, portanto, para sua conveniência, deixarei links para outros artigos relacionados:- "Um, dois, três - queime a árvore de Natal!" ou meu primeiro olhar para o pequeno controlador CANNY 3 .
- “O destino tem muitas formas ...” ou automatizamos o controle de um autolamp usando CANNY 3 tiny e um fotorresistor .
- "Quais marinas?" ou controlamos o controlador via bluetooth usando um aplicativo móvel no Xamarin (Android) .