postou aqui, e em algumas descrições que vc também postou.
Os dois pontos fundamentais, são a grande distância entre o Arduino e o Sensor Biométrico (que vc disse precisar de até 50m), e a distribuição adequada da Alimentação sem sobrecarregar os dispositivos que fornecem essa alimentação.
Tendo estes pontos em mente, segue o Diagrama : Acesso_Bio_01.pdf
Este mesmo Diagrama, vc pode ver na figura a seguir:
(clique na figura para "zoom")
Atente para os seguintes pontos importantes:
1) a alimentação do módulo "StepDown" (desses "comuns" com LM2596), deve ser "puxada" o mais próximo possível do ponto que também alimenta o Arduino. Ou seja: a linha de 12V e a linha de GND do módulo "StepDown" devem estar conectadas o mais próximo possível do conector de alimentação do Arduino. Mas o comprimento destas linhas é flexível e pode ser até uns 50cm conforme vc precisar. (mas não "puxe" a linha de GND do módulo "StepDown", de algum ponto da placa do Arduino!!!)
2) acredito que vc saiba, mas vou esclarecer mesmo assim: o "IN-" na plaquinha do módulo "StepDown", é o próprio "OUT-" desta mesma plaquinha. Eles estão interconectados pelo próprio traçado de cobre na plaquinha. Ou seja: como o "IN-" está conectado ao GND da Fonte (e portanto ao GND do Arduino), então o "OUT-" também é uma linha de GND. Porém, observe no Diagrama que o "OUT-" (linha na cor marrom), não se conecta ao GND do Arduino. Isto é para evitar que a corrente consumida pelo seu Sistema "Remoto" (onde fica o Sensor Biométrico, Buzzer, etc), use a placa do Arduino como "caminho de retorno". Em outras palavras: não interligue a "linha marrom" ao GND do Arduino (em nenhum ponto!). Isso é muito importante, pois o seu "Remoto" estará a uma grande distância. Siga esta regra e a regra do item "1", e assim não terá problemas com instantâneos de energia que possam ocorrem devido ao grande comprimento dos cabos.
3) a linha de 5V na cor laranja no Diagrama, não pode ser ligada ao Arduino (mas veja que ela alimenta os módulos RS485, e está conectada a alguns sinais nestes módulos).
4) todos os 4 pares de fios do CAT5 foram usados. Veja que procurei usar cores realísticas para os fios do cabo CAT. Use para os sinais, os fios com as cores que eu usei no Diagrama. Isto é fundamental para que as correntes do RS485 fiquem "confinadas" aos pares trançados "próprios".
5) atenção especial aos sinais "A" e "B" dos módulos RS485. Veja que o sinal "A" de um lado deve ir ao sinal "A" do outro lado. Se trocar, os sinais estarão invertidos e não vai funcionar. Basta seguir o Digrama.
6) veja que na alimentação do Sistema Remoto, há um Capacitor Eletrolítico de 1000uF (e 25V) ligado justamente entre a linha "marrom" e "laranja". Vc pode também usar valores maiores, como 2200uF, 3300uF, 4700uF. Atenção à polaridade do eletrolítico. Não é necessário usar capacitor cerâmico em paralelo com este eletrolítico, pois todas as plaquinhas no Remoto já possuem estes capacitores (e com valores adequados).
7) ligue os sinais "DE" e "RE" dos módulos RS485, exatamente como mostrado no Diagrama.
8) o Capacitor de 470 kpF, deve ser obrigatoriamente do tipo Cerâmico.
9) os diodos 1N4148 (são 6 no total) podem até serem dispensados. Mas se eu fosse vc, montaria os mesmos. Eles protegem os pinos correspondentes aos sinais, contra spikes de alta tensão que aparecem no cabo devido ao grande comprimento destes cabos. Sem eles, em algum momentos o Arduino poderá queimar (ou começar a apresentar mal-funcionamento), o mesmo se aplicando ao sensor de obstáculo. Para o Buzzer, o Transistor existente na plaquinha, certamente suportará os skipes, mas se não quiser arriscar, pode ligar dois 1N4148 da mesma forma que está ligado para o sensor de obstáculo. Atenção: não use diodos da série 4001 (como 1N4001, 1N4002, ... 1N4007, e por aí vai), pois estes diodos não são adequados para a função necessária. E claro: atenção à polaridade desses diodos, conforme indicado no Diagrama.
10) não esqueça de ajustar a saída do módulo "StepDown" para obter os 5V para alimentar os módulos RS485 e o próprio Sistema Remoto. O ajuste deve ser feito antes de vc alimentar tudo, e uma boa forma de fazer isso é antes de montar tudo, ligando apenas o módulo "StepDown" à fonte de 12V. Porém depois que ligar tudo, pode ser que vc tenha que ajustar para algo ligeiramente acima de 5V (devido ao grande comprimento dos cabos). Mas não ultrapasse os 5.5V (é preferível fazer este ajuste com o sensor Biométrico operando).
11) e finalmente: não sei qual é o ARM usado neste sensor Biométrico, mas certamente ele é alimentado por 3.3V a partir de algum regulador existente na placa do sensor. Ou seja: os níveis lógicos para os pinos TX e RX do Sensor, são relativos a 3.3V. Normalmente, os pinos das USARTs dos Processadores ARM, são tolerantes a 5V, e portanto nenhum tratamento "especial" seria necessário. Mas caso vc descubra que este não é caso do ARM deste sensor, então um Resistor de 1K deve ser ligado entre a saída "RO" do RS485 e a entrada "RX" do sensor Biométrico (ou seja, "em série" com o sinal). Eu acredito que isto não será necessário, devido ao que relatei sobre a tolerância a 5V, mas caso vc não queira se arriscar, acrescente o Resistor. Já para o sinal "TX", nenhuma ação é necessária.
Espero não ter esquecido de nada, e espero ter ajudado.
Abrçs,
Elcids…
Adicionado por Elcids Chagas ao 9:36 em 19 março 2020
o que eu fui entendendo.
mas não consigo de jeito nenhum fazer os efeitos da fita mudarem ao pressionar o botão.
eu gostaria de saber também como posso fazer um efeito pra fita interagir com o som ambiente ou através de uma entrada de som.
se alguém souber de outros efeitos legais que eu possa usar também será bem vindo.
segue o código:
// This is a demonstration on how to use an input device to trigger changes on your neo pixels.// You should wire a momentary push button to connect from ground to a digital IO pin. When you// press the button it will change to a new pixel animation. Note that you need to press the// button once to start the first animation!#include <Adafruit_NeoPixel.h>#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be // driven with a pull-up resistor so the switch should // pull the pin to ground momentarily. On a high -> low // transition the button press logic will execute.#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels.#define PIXEL_COUNT 30// Parameter 1 = number of pixels in strip, neopixel stick has 8// Parameter 2 = pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_RGB Pixels are wired for RGB bitstream// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stickAdafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);bool oldState = HIGH;int showType = 0;void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); strip.begin(); strip.show(); // Initialize all pixels to 'off'}void loop() { // Get current button state. bool newState = digitalRead(BUTTON_PIN); // Check if state changed from high to low (button press). if (newState == LOW && oldState == HIGH) { // Short delay to debounce button. delay(20); // Check if button is still low after debounce. newState = digitalRead(BUTTON_PIN); if (newState == LOW) { showType++; if (showType > 1) showType=0; startShow(showType); } } // Set the last button state to the old state. oldState = newState;}void startShow(int i) { switch(i){ case 0: colorWipe(strip.Color(0, 0, 0), 50); // Black/off break; case 1: for(int i = 0; i < 10000; i++){ colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue colorWipe(strip.Color(0, 240, 255), 50); colorWipe(strip.Color(255, 0, 210), 50); colorWipe(strip.Color(30, 255, 0), 50); colorWipe(strip.Color(255, 144, 0), 50); colorWipe(strip.Color(192, 0, 255), 50); } break; case 2: for(int i = 0; i < 10000; i++){ theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(255, 0, 0), 50); // Red theaterChase(strip.Color(0, 0, 255), 50); // Blue theaterChase(strip.Color(0, 240, 255), 50); theaterChase(strip.Color(255, 0, 210), 50); theaterChase(strip.Color(30, 255, 0), 50); theaterChase(strip.Color(255, 144, 0), 50); theaterChase(strip.Color(192, 0, 255), 50); } break; case 3: for(int i = 0; i < 10000; i++){ theaterChase2(strip.Color(127, 127, 127), 50); // White theaterChase2(strip.Color(255, 0, 0), 50); // Red theaterChase2(strip.Color(0, 0, 255), 50); // Blue theaterChase2(strip.Color(0, 240, 255), 50); theaterChase2(strip.Color(255, 0, 210), 50); theaterChase2(strip.Color(30, 255, 0), 50); theaterChase2(strip.Color(255, 144, 0), 50); theaterChase2(strip.Color(192, 0, 255), 50); } break; case 4: for(int i = 0; i < 10000; i++){ theaterChase3(strip.Color(127, 127, 127), 50); // White theaterChase3(strip.Color(255, 0, 0), 50); // Red theaterChase3(strip.Color(0, 0, 255), 50); // Blue theaterChase3(strip.Color(0, 240, 255), 50); theaterChase3(strip.Color(255, 0, 210), 50); theaterChase3(strip.Color(30, 255, 0), 50); theaterChase3(strip.Color(255, 144, 0), 50); theaterChase3(strip.Color(192, 0, 255), 50); } break; case 5: for(int i = 0; i < 10000; i++){ rainbow(20); } break; case 6: for(int i = 0; i < 10000; i++){ rainbowCycle(20); } break; case 7: for(int i = 0; i < 10000; i++){ theaterChaseRainbow(50); } break; }}// Fill the dots one after the other with a colorvoid colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); }}void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); }}// Slightly different, this makes the rainbow equally distributed throughoutvoid rainbowCycle(uint8_t wait) { uint16_t i, j; for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel for(i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); delay(wait); }}//Theatre-style crawling lights.void theaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } }}void theaterChase2(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 5; q++) { for (int i=0; i < strip.numPixels(); i=i+10) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } }}void theaterChase3(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 10; q++) { for (int i=0; i < strip.numPixels(); i=i+20) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } }}//Theatre-style crawling lights with rainbow effectvoid theaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } }}// Input a value 0 to 255 to get a color value.// The colours are a transition r - g - b - back to r.uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }}
agradeço se puderem me ajudar.…
EFLOP - Arduino e Cia
#include <VirtualWire.h>
String mensagem;
void setup()
{
Serial.begin(9600);
//Define o pino 8 do Arduino como
//o pino de dados do transmissor
vw_set_tx_pin(8);
vw_setup(2000); // Bits per sec
Serial.println("Digite o texto e clique em ENVIAR...");
}
void loop()
{
char data[40];
int numero;
if (Serial.available() > 0)
{
numero = Serial.readBytesUntil (13,data,40);
data[numero] = 0;
Serial.print("Enviado : ");
Serial.print(data);
Serial.print(" - Caracteres : ");
Serial.println(strlen(data));
//Envia a mensagem para a rotina que
//transmite os dados via RF
send(data);
}
}
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Aguarda o envio de dados
}
…
Adicionado por augusto ao 15:30 em 25 novembro 2017
Nesta seção estão todos os tutoriais que podem ser considerados para aqueles que já tem um certo conhecimento em Arduino, eletrônica e programação. Analisamos o tempo gasto para construir o circuito (