ciao a tutti,
sono appena stato fiondato nel mondo di arduino causa workshop intensivo in università.
ho bisogno di aiuto riguardo a un codice.
Nel progetto che sto sviluppando utilizzo un servomotore per aprire e chiudere un ingranaggio che tiene chiusa una scatola.
il motore deve andare in posizione di chiusura quando schiaccio uno switch e deve ritornare nella posizione di apertura solamente quando un un sensore riceve un certo valore; e nel caso il suddetto valore non venisse raggiunto mi si deve accendere un led!
come posso fare??
grazie a tutti in anticipo per l'aiuto =)
qualunque informazione in più di cui abbiate bisogno per riuscire a darmi qualche consiglio più specifico sul problema chiedete pure!
purtroppo non so molto bene cosa posso aggiungere alla mia richiesta per esservi di aiuto.
grazie ancora
Ciao e benvenuto, ti consiglio di farti un giro qui http://arduino.cc/forum/index.php/topic,91560.0.html così puoi comprendere meglio cosa viene richiesto per aiutare nel miglior modo possibile qualsiasi utente.
Se inserisci tutte le info aiuti a far comprendere meglio il problema per poter trovare insieme una soluzione...
Magari informaci anche sul tuo livello di preparazione riguardo la programmazione e l'elettronica.
Ciao ![]()
=)
il mio livello è molto molto basso XD
la piattaforma che uso è una arduino uno alimentata da una batteria a 9V collegata a uno switch e a un sensore di alcol MQ-4.
il servo motore utilizzato è un hs-422.
lo switch deve fare andare il motore da posizione 100 (iniziale) a posizione 50 (chiuso), mentre il sensore quando scende sotto un certo valore deve riportare il servo nella posizione iniziale.
ho iniziato provando ad usare solo il bottone e un led, usando questo codice http://www.arduino.cc/en/Tutorial/Switch ma non capisco come farlo funzionare nella stessa maniera con un servomotore.
pensavo poi dopo questo passo di procedere con il passo successivo cioè quello che ho chiesto ma sfortunatamente sono di fronte ad un muro!
L'unica cosa che devi modificare è la parte in cui l'arduino esegue l'output, perchè l'input è dello stesso tipo. Quindi al posto dei digitalWrite e dei controlli sullo stato del led dovrai mettere un semplice servo.write(x)
Spero di essere stato d'aiuto ![]()
perfetto!
potrei chiederti un aiuto per scrivere il programmino?
Certo però se non ci dai un possibile schema non possiamo aiutarti ![]()
lo schema è il modo in cui sono collegati i vari componenti giusto?
allora i componenti sono collegati nella maniera seguente
l'alimentazione è una batteria 9V
il led è collegato sul pin 3
lo switch sul pin 4
il servo sul pin 5
e il sensore di gas sull' A0
i collegamenti sono tutti corretti sono stati controllati dal professore che stenta a darci aiuto per il codice XD
#include<Servo.h>
int reading;
Servo myservo;
void setup()
{
pinMode(inPin, INPUT);
myservo.attach(5);
}
void loop()
{
reading = digitalRead(inPin);
if (reading == HIGH ) {
myservo.write(una posizione);
}
}
Questo dovrebbe portare in posizione il servo quando premi il bottone..ma non l'ho provato e l'ho scritto qui al volo, può esserci qualche errore!
Per l'altra parte credo che sarebbe bene che te la scriva tu..infondo se il tuo prof stenta a darvi aiuto ci sarà una ragione ![]()
#include <Servo.h>
Servo myservo;
int inPin=4;
int ledPin=3;
int reading;
int valoreAlcol;
void setup()
{
pinMode(inPin, INPUT);
pinMode(ledPin, OUTPUT);
myservo.attach(5);
}
void loop()
{
reading = digitalRead(inPin);
valoreAlcol= analogRead(0);
if (reading == HIGH ) {
myservo.write(50);
}
if(valoreAlcol<=50){
myservo.write(100);
}
if(valoreAlcol>=200){
digitalWrite(ledPin, HIGH);
}
}
potrebbe funzionare??
Se nel playground dai uno sguardo a:
http://arduino.cc/it/Tutorial/Button
http://www.arduino.cc/playground/ComponentLib/Servo
e ti vedi le seguenti strutture:
http://arduino.cc/en/Reference/Else
http://arduino.cc/en/Reference/For
http://arduino.cc/en/Reference/Break
dopo aver compreso sicuramente sarai sulla buona strada per realizzare quello che chiedi, poi se hai dei dubbi o difficoltà su qualche argomento chiedi pure, il fatto è che se non hai ben chiaro gli argomenti base della programmazione o dell'elettronica non riesci a fare gran che...
lorenzo_coppola:
#include <Servo.h>Servo myservo;
int inPin=4;
int ledPin=3;
int reading;
int valoreAlcol;void setup()
{
pinMode(inPin, INPUT);
pinMode(ledPin, OUTPUT);
myservo.attach(5);
}void loop()
{
reading = digitalRead(inPin);
valoreAlcol= analogRead(0);if (reading == HIGH ) {
myservo.write(50);
}
if(valoreAlcol<=50){
myservo.write(100);
}
if(valoreAlcol>=200){
digitalWrite(ledPin, HIGH);
}
}potrebbe funzionare??
il codice compila senza errori ma adesso bisogna vedere se arduino esegue ciò che vuoi, l'unica e montare tutto su breadboard e fare delle prove, più che altro devi vedere se i valori myservo.write(50); e myservo.write(100); corrispondono alle giuste escursioni se i valori valoreAlcol<=50 e valoreAlcol>=200 corrispondono alle giuste rilevazioni di alcool...
Tieni presente che puoi usare la funzione map() http://arduino.cc/en/Reference/map per mappare i valori letti dagli ingressi analogici a 10bit in un range a te più comodo, analogRead() restituisce valori da 0 a 1023 li puoi mappare ad esempio da 0 a 100...
sisi i valori sono già testati domani provo in classe e se funziona tutto chiudo la discussione!
grazie per l'aiuto!
perfetto il programma funziona quasi perfettamente.
ho un problema con il sensore di alcol:
- come faccio a pulire il segnale? (spiego: ogni tanto il segnale arriva sballato)
- mi servirebbe un codice per tipo filtrare il segnale per eliminare gli errori di lettura!
grazie
Potresti raccogliere un certo un numero di valori e farne la media.
Me l'hanno consigliato quando ho avuto problemi con un termometro. Alla fine il problema non era quello però funziona benissimo
Prova a fare una media su 10 letture.
Ma il led , una volta acceso ,non si spegne mai?