Posts tagged Servo

Piccola realizzazione con LED RGB Slow Flashing

2

Sono finalmente arrivati i 100 LED RGB Slow Flashing che avevo ordinato su eBay (da Hong Kong) per poco più di 6€, così ho deciso di realizzare un piccolo progettino tanto per passarmi il tempo, niente di particolare!

Un semplice servomotore con attaccati due di questi led. E’ abbastanza semplice il progetto perchè i LED non hanno bisogno di microcontrollore per cambiare colore, fanno tutto da sè!

Ecco un video della realizzazione:

 

 

Questi LED operano con una tensione di 3,2V-3,4V e una corrente di 20 mA e proprio per queste caratteristiche li ho alimentati con Arduino (che controlla anche il servomotore) prelevando la tensione 3,3V presente sulla board. Il motivo per cui ho scelto di mettere due soli LED è semplice, l’uscita di 3,3V dalla board Arduino può erogare un massimo di 50 mA quindi è impossibile inserirne più di due.

 

Arduino UNO – Inseguitore di luce

2

Ecco il mio primo progetto Arduino con ServoMotore. :D

Inseguitore di luce, è questo il nome della mia nuova creazione, in sostanza, due fotoresistenze mi rilevano i valori di luce e ne fanno la media, se la media è inferiore ad un certo valore (dipende dall’ambiente in cui si utilizza) ed il valore di differenza fra i due sensori di luce (fotoresistenze) è maggiore a 150, il servomotore si sposta dalla parte più luminosa.

Ecco il link del video:

Arduino UNO – Inseguitore di luce

Di seguito il codice:

//Inseguitore di luce by Xfox
#include <Servo.h> //Includo libreria per i servomotori
Servo myservo; //Creo oggetto myservo
//Pin di ingresso
const int sensore_l = A0;
const int sensore_r = A1;
//Variabili di lavoro
int valore_l = 0;
int valore_r = 0;
int pos = 90;
int passo = 10;
int media = 0;
int tempo_azionamento = 50;
//Variabili temporali
int tempo = 0;
int ritardo = 0;
void setup(){
Serial.begin(9600); //Inizializzazione seriale
//Definizione dei pin
pinMode(sensore_l, INPUT);
pinMode(sensore_r, INPUT);
//Inizializzazione servomotore
myservo.attach(3);
myservo.write(pos);
}
void loop(){
//Lettura sensori e calcolo media
valore_l = analogRead(sensore_l);
valore_r = analogRead(sensore_r);
media = (valore_l + valore_r) / 2;
mostra_seriale();
if (media > 200){
if (((valore_l – valore_r) > 150) || ((valore_l – valore_r) < -150)){
if (valore_l < valore_r){ //più luce sul sensore sinistro
pos = pos + passo;
myservo.write(pos);
delay(tempo_azionamento);
if (pos > 180){
pos = 180;
}
}
else{                     //più luce sul sensore destro
pos = pos – passo;
myservo.write(pos);
delay(tempo_azionamento);
if (pos < 0){
pos = 0;
}
}
}
}
}
void mostra_seriale(){
tempo = millis();
if (tempo > ritardo){
ritardo = millis() + 1000;
Serial.print(“Sensore sinistro: “);
Serial.print(valore_l);
Serial.print(”          Sensore destro: “);
Serial.print(valore_r);
Serial.print(”          Media valori: “);
Serial.print(media);
Serial.print(”          Servo in posizione: “);
Serial.println(pos);
}
}
Go to Top