Detector EMF cu Arduino Leonardo

Utilizand un LED monocrom, un Arduino Leonardo, rezistente si fire vom detecta campuri electromagnetice.

Pe scurt, teoria ne spune ca  o variatie a campului electromagnetic ne va induce un potential in antena ce va fi citit de placa Arduino.

          De ce avem nevoie:

  • placa Arduino Leonardo/sau Uno
  • o rezistenta de 3.3MOhmi sau chiar de 10MOhmi pentru o senzitivitate crescuta
  • un LED monocrom brick/sau LED normal
  • fire tata-tata

 

          Cum arata schema electrica: 

FI5OSLTG0RSH1X2.MEDIUM

Ca sa nu ne mai complicam cu breadboard, atunci legam rezistorul de ordinul MOhmilor direct la antena si apoi la masa/GND. Astfel ne putem plimba mai usor cu el prin casa.

 

           Codul Arduino: 

#define sample 300 //cate esantioane pe o citire

int inPin = 5; //analog 5
float val;
int pinled = 13;

int array1[sample]; //cream un array sa facem apoi medie artimetica de citiri

unsigned long averaging; //suma
void setup() {

Serial.begin(9600);

}

void loop() {

for(int i = 0; i < sample; i++){ //umplem arrayul cu esantioane de citire
array1[i] = analogRead(inPin); //ce potential citim pe pinul analog de la antena
averaging += array1[i];
}

val = averaging / sample; //medie aritmetica
Serial.println(val);
val = constrain(val, 0, 100); //constrangere sa fie intre 0 si 100
val = map(val, 0, 100, 0, 255); //mapam valori intre 0-100 cu cele intre 0-255
analogWrite(pinled, val); //aprindem ledul mai tare sau mai incet

averaging = 0; //resetam la 0
//delay(100); //nu o mai folosim
}

Din pacate eu nu am avut rezistenta de ordinul MOhmilor, astfel senzitivitatea mea era mica.

          Cam asa arata schema mea electrica, pozata: 

IMG_0362[1]

Eu l-am testat langa obiecte cu campuri electromagnetice puternice, ca lustra cu bec si transformator de la 220 AC la 9V DC.

Rezultat video se gaseste aici.

Advertisements

RGB LED cu Arduino Leonardo

Utilizand leduri RGB si combinand cele 3 culori, putem obtine orice culoare dorim. Marele avantaj al ledurilor, monocrome sau RGB este ca ne semnalizeaza pentru proiecte mai complexe, in ce stare se afla programul nostru, fie ca le aprindem sau stingem, fie ca le coloram intr-un anumit mod pe care il intelegem.

Asadar, sa va dau 3 exemple:

1. Avem un program arduino care prin intermediul unui senzor de temperatura ne citeste temperatura din casa. Daca este prea mica coloreaza in rosu, daca este acceptabila coloreaza in galben, daca este ok coloreaza verde, samd.

2. Avem un server definit pe o placa arduino cu un shield ethernet. De fiecare data cand un client face un GET la server sa “beculeasca”  de 2 ori (multumesc unei colege ca m-a invatat termenul).

3. Daca avem un robotel care se calibreaza (un line follower spre exemplu) vrem ca in momentul calibrarii sa “beculeasca” un LED. Sau daca avem un robot obstacle avoidance pe parcursul intoarcerii ca sa evite obstacolul sa ne aprinda un led.

Asadar LED-urile sunt folosite in folosul nostru pentru control de sanitate, sau chiar debugging.

Vom utiliza pentru acest tutorial un LED RGB cu Anod comun legat la PIN 7, pe placuta Leonardo.

Schema electrica arata in felul urmator.  Practic LEDul RGB contine 3 leduri monocrome, iar noi alegem sa aplicam diverse tensiuni pe fiecare LED/dioda.

Cablare: 

Red – PIN 9

Green – PIN 10

Blue – PIN 11

Anodul comun – PIN 7

Eu am folosit rezistente de 220 Ohmi, fata de cele din figura.

image

Sa vedem acum codul sursa. Vom obtine un set predefinit de culori trimitand prin seriala un anumit string. Arduino il va interpreta si va pune tensiunile pe fiecare dioda asa cum dorim noi.

Codul Arduino

int redPin = 9;
int greenPin = 10;
int bluePin = 11;
int startLEDpin = 7;
String color = “”;
String tmp = “”; 

void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT); 
pinMode(startLEDpin,OUTPUT);
Serial.begin(9600);
}

void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue); 
}

void loop()

if (Serial.available() > 0) {
/* read the most recent byte */
while(Serial.available() > 0) {
color+=char(Serial.read());
}
}

if (color == “red”) {
setColor(0, 255, 255); // red
delay(1000);
color=””;
Serial.write(“Red branch \n”);
digitalWrite(9, LOW);
}
else if (color == “start”) { 
digitalWrite(7, HIGH);
}
else if (color == “stop”) { 
digitalWrite(7, LOW);
}
else if (color == “green”) {
setColor(255, 0, 255); // green
delay(1000);
color=””;
Serial.write(“Green branch \n”);
digitalWrite(10, LOW);
}
else if (color == “blue”) {
setColor(255, 255, 0); // blue
delay(1000);
color=””;
Serial.write(“Blue branch \n”);
digitalWrite(11, LOW);
}
else if (color == “yellow”) {
setColor(0, 0, 255); // yellow
delay(1000);
color=””;
Serial.write(“Yellow branch \n”);
digitalWrite(10, LOW);
digitalWrite(9, LOW);

}
else if (color == “purple”) {
setColor(0, 80, 0); // purple
delay(1000);
color=””;
Serial.write(“Purple branch \n”);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
}
else if (color == “pink”) {
setColor(0, 255, 128); // pink
delay(1000);
color=””;
Serial.write(“Pink branch \n”);
digitalWrite(9, LOW);
}
else if (color == “brown”) {
setColor(40, 150, 225); // pink
delay(1000);
color=””;
Serial.write(“Brown branch \n”);
}
else if (color == “aqua”) {
setColor(255, 0, 0); // aqua
delay(1000);
color=””;
Serial.write(“Aqua branch \n”);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
else {
//Serial.write(“Else branch:”); Serial.println(color);
color=””;
delay(1000);
}
}

Rezultat video aici.

LED monocrom cu Arduino Leonardo

Prima lecție de pe blog va fi despre LED-uri monocrome.

Aici este un exemplu de schema electrica: LED

Arduino Uno R3 are protecție pe PIN-ul 13 cu o rezistenta, asadar nu este niciun pericol sa ardeti ledul.

Vom folosi pentru acest tutorial un Arduino Leonardo (orice board poate fi folosit pentru acest tutorial simplu) si un LED rosu ca acesta.

Vom conecta LED-ul la PIN-ul 13 anodul si la GND catodul.

Codul arduino

int ledpin=13; // daca vreodata modificam codul sa ne fie mult mai usor

void setup() { //rutina se executa o singura data

pinMode(ledpin, OUTPUT); //pe acest PIN vom aplica o tensiune de 5V

}

void loop() { //se executa la infinit

digitalWrite(ledpin, HIGH); //intre PIN 13 si GND vom avea o tensiune de 5V

delay(1000); //asteptam 1 secunda

digitalWrite(ledpin, LOW); //punem tensiune de 0V intre PIN 13 si GND

delay(1000);
}

Rezultat

LED-ul se va aprinde pentru 1 secunda si va sta stins pentru o secunda. Se repeta aceasta in bucla infinita.

image

Posibile probleme pentru care nu se aprinde LEDul:

1. LED-ul nu se aprinde deoarece anodul si catodul nu sunt conectate corect.

2. LED-ul nu se aprinde din cauza unui fir defect, sau ambelor. Pentru a preintampina aceasta infigeti direct LED-ul pe placa fara fire aditionale.

3. Cablarea fizica nu corespunde codului sursa (sarma sa fie conectata la PIN 12 si codul sa genereze tensiunea de lucru pe PIN 13)

4. LED-ul este nefunctional. Testarea se face punand anodul la 5V si catodul la GND. Atentie ! Puneti si o rezistenta de ordinul KOhmi sa nu ardeti LEDul.

5. Placa Arduino nu genereaza pe PINul de interes tensiunea de 5V. Puteti verifica cu un multimetru acest lucru.