Boa tarde galera,
Estou começando agora com o Arduino, ja vi várias video aulas e artigos sobre Arduino.
Devido a gama de utilidades do Arduino resolvi usar ele para desenvolver um projeto de sensores para deficientes, tem alguns rolado por ai.
Já fiz o sensor HC-SR04 funcionar e tudo mais, mas agora não tenho ideia de como acoplar o motor vibratório junto ao sistema.
Alguém poderia me dar uma luz?
Agradecido.
Tags:
Olá diego
Cara, ninguem aqui do LDG é de entregar projetos prontos, geralmente apontamos caminhos, mas seu projeto é tão legal, e como foco tão altruista que resolvi desenvover ele pra você.
Porem, só executei no simulador, com excessão do sensor ultrasonico que não sei como simular, usei um potenciometro e depois troquei pelo sensor na montagem.
Bem, tá aqui pra você o projeto e o sketch, testa ai pra gente e vê se funciona.
A finalidade dele é toda vez que você vai se aproximando de algo ele vai aumentando a vibração, se voce se afasta a vibracao diminui.
ta aqui uma forma para motores mais potentes:
O sketch precisa ser testado montando, mas basicamente é esse aqui:
const int trigPin2 = 6;
const int eChoPin2 = 7;
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(eChoPin2, INPUT);
}
void loop() {
//###############################FUNÇÃO DE CAPTURA DA DISTANCIA -= SENSOR 2 #####
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
unsigned long duracao2 = pulseIn(eChoPin2, HIGH);
int distancia2 = duracao2 / 58;
Serial.print(" -- Distancia2 em Cm:");
Serial.println(distancia2);
delay(500);
//*******************************FIM DA FUNÇÃO DE CAPTURA DA DISTANCIA SENSOR 2 ***
int valsensor = map(distancia2, 0, 4000, 0, 255); // O sensor mede segundo o fabricante ate 4m o que significa 4000cm, como o sistema aceita ate os 255 de 1 bit então fazemos a conversao
analogWrite(9 , valsensor); // escrevemos o valor lino em uma porta PWM que ira aumentar ou baixar de acordo com o valor lido no sensor
Serial.println(valsensor); // aqui voce pode acompanhar no serial monitor a distancia
}
Meus queridos agradeço muito a ajuda, agradeço muito mesmo!! :D
Principalmente o Rafael e o Weider que me responderam.
Não tinha lembrado do transistor, vou montar hoje a noite.. (y)
Eu estava utilizando o código assim:
const int trigPin = 12;
const int echoPin = 13;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motor, OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duracao = pulseIn(echoPin, HIGH);
int distancia = duracao / 58;
Serial.print("Distancia em CM: ");
Serial.println(distancia);
delay(2000);
---------------ATÉ QUI FUNCIONA-----------------------------------
digitalWrite(motor,LOW);
if (distancia > 15);
digitalWrite(motor,HIGH);
}
Só por curiosidade, vocês poderiam me dar explicar como fazer a tensão agir diretamente com o motor a partir daí?
MUITO OBRIGADO MESMO, JA AJUDARAM DEMAIS!!!
Diego,
Provavelment eseu codigo não iria funcionar.
Pela experiencia que tenho, o que vocÊ ta fazendo é atrelando a rotação do motor aos pulsos do arduino, só que antes vocÊ coloca um delay(2000), o que ira fazer o motor travar.
seu digitalWrite(motor,LOW); ira apenas deslitar o motor simplesmente, e no caso do IF, ligar em alguma suposição.
Vai pelo codigo que te passei que deve funcionar.
veja no meu codigo como é feita a variação, não com um digitalwrite que apenas liga a desliga o motor, o que faria com que qualquer irregularidade no ciclo do microcontrolador, faria o motor ficar doido.
Ao contrario eu uso um analogwrite, que como o arduino trabalha com PWM que são pulsos digitais, não deixa de ter seus problemas, mas é a melhor solução encontrada.
aproveita que eu comentei cada linha e da uma aprendido no que ta sendo feito ok.
Muito obrigado mais uma vez Weider,
Vou fazer exatamente como esta lá, Foi simplesmente esclarecedora sua postagem...
Sou novo no forum e espero poder colaborar com algo algum dia, Muito obrigado mesmo.
Amanhã posto um FeedBack de como se comportou!!!
VALEW!
AEEEEEEEEEEEEEEEEEEEEEE, Funcionou! :D
Valew Weider funcionou!
Só uma dúvida, ele vibra a todo momento, como eu calibro para ele vibra só por exemplo a 30 cm?
Muito agradecido!
Olá Diego,
Existem trocentas maneiras e fazer o que vocë deseja, e cada um tem sua propria lógica, no meu caso quando quero fazer travamentos eu uso o lanço While, no caso ele iria prender o funcionamento do arduino até satisfeita uma condição e ai liberaria.
No exemplo abaixo, onde ta 30 voce pode mudar pra testar ok.
Tá aqui o sketch, mas lembra que tô te mandando sem testar, tô fazendo na mão grande, testa ai pra mim, se der alguma falha me comunica que eu corrijo:
const int trigPin2 = 6;
const int eChoPin2 = 7;
int distancia2 = 0;
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(eChoPin2, INPUT);
}
void capturavalor(){
//###############################FUNÇÃO DE CAPTURA DA DISTANCIA -= SENSOR 2 #####
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
unsigned long duracao2 = pulseIn(eChoPin2, HIGH);
distancia2 = duracao2 / 58;
Serial.print(" -- Distancia2 em Cm:");
Serial.println(distancia2);
delay(500);
//*******************************FIM DA FUNÇÃO DE CAPTURA DA DISTANCIA SENSOR 2 ***
}
void loop() {
capturavalor();
int valsensor = map(distancia2, 0, 4000, 0, 255); // O sensor mede segundo o fabricante ate 4m o que significa 4000cm, como o sistema aceita ate os 255 de 1 bit então fazemos a conversao
analogWrite(9 , valsensor); // escrevemos o valor lino em uma porta PWM que ira aumentar ou baixar de acordo com o valor lido no sensor
Serial.println(valsensor); // aqui voce pode acompanhar no serial monitor a distancia
while(distancia2 < 30){ // PRENDE O CIRCUITO EM UM LAÇO ENQUANTO O VALOR MEDIDO FOR MENOR QUE 30 (CM)
analogWrite(9 , 0); // Zera o valor do pino 9, ou seja, do motor
Serial.println("Sistema parado, distancia abaixo do ponto de ligamento"); // Emite um aviso no monitor serial para que se perceba que a coisa ta funcionando
Serial.println(valsensor); // aqui voce pode acompanhar no serial monitor a distancia
capturavalor();
}
}
Ola Weider, ajudando muito como sempre.
Eu havia criado um aqui também, só não tenho certeza se vai funcionar pois estou no trabalho e estou sem o arduino..rsrsrs
const int trigPin = 6;
const int echoPin = 7;
const int motor = 9;
void setup()
{
Serial.begin(9600);
pinMode(9,OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
unsigned long duracao;
int distancia;
int valsensor;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH);
distancia = duracao / 58;
Serial.print(" -- Distancia em Cm:");
Serial.println(distancia);
if (distancia <= 2000)
{
valsensor = map(distancia, 0, 2000, 0, 255);
analogWrite(motor, valsensor);
Serial.println(valsensor);
}
else
{
analogWrite(motor, 0);
}
delay(500);
}
Acha que assim vai rolar?
Cara, o que você me pediu foi pra funcionar somente acima de 30 cm, no seu codigo você tá mandando o sistema só funcionar abaixo de 2m, mas não informa o minimo.
eu já vi uma bengala de cego com esses sensores de ultrassom que fazem vibrar um motorzinho igual um vibracall de celular. Não sei exatamente a distância a partir do qual era detectado obstáculo, mas lembro que longe do obstáculo a vibração era leve, em tempo bem espaçado. Cada vez que o obstáculo se aproximava, a vibração se tornava mais intensa, em intervalo de tempo menor. Fora isso, havia padrão de tremedeira diferente, um que indicava obstáculo para joelho/canela/pé e outro que indicava obstáculo para peito/ombro/cabeça
imhugo,
É exatamente isso que o codigo que criei faz.
O que estamos fazendo agora é só filtrar o codigo pra ele só funcionar acima de 30cm e pelo que tô entendendo o pedido abaixo de 2m.
De resto isso ai que estamos criando funciona direitinho.
Weider tudo tranquilo? O código que você me mandou deixou o motor meio maluco, vibra a todo momento.
Eu tentei fazer um outro que praticamente deu certo, mas o problema é que quando o sensor desliga ele guarda a última informação coletada e fica jogando isso no motor...
Como posso fazer o motor parar toda vez que o sensor desligar???
const int trigPin = 7;
const int echoPin = 6;
const int motor = 9;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
unsigned long duracao;
float distancia;
int valsensor;
int startSensor = 70; // centimetros
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH);
distancia = (float)duracao / 58.2;
if (distancia <= startSensor)
if (distancia > 0) {
valsensor = map(distancia, 0, startSensor, 0, 255);
analogWrite(motor, valsensor);
Serial.println("Distancia: " + String(distancia) + "cm. Potencia: " + String(valsensor) + "PWM");
}
else {
digitalWrite(motor, 0);
}
delay(500);
}
Muito obrigado pela ajuda ! :D
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por