środa, 24 sierpnia 2011

Moduł Line Follower


Moduł potrafi wykryć czarną oraz białą linię. W zależności od koloru na wyjściu "TTL signal" pojawi się stan wysoki albo niski. To chyba pierwsza funkcja dla początkujących budowniczych robotów jaką znalazłem w sieci. Produkt można kupić w SKLEPie. Myślę że można zbudować z tym czujnikiem dwie opcje... jedna to śledzenie linii a druga to poruszanie się w zamkniętym kojcu.

Właściwości :
  • napięcie zasilające 5V
  • pobór prądu <10mA
  • złącze 3pin (1-sygnał, 2- napięcie +5V, 3 - masa)
  • wyjście (czarna linia - stan niski, biała linia - stan wysoki)

Przykładowy kod dla dwóch czujników
w końcu mamy śledzić linię :), która będzie między nimi
w serial monitor możemy obserwować jak włączają się czujniki:

int stanczujnika1 = LOW;
int stanczujnika2 = LOW;
int val1 = 0;
int val2 = 0;

void setup()
{
  pinMode(12, INPUT);
  pinMode(13, INPUT);
  Serial.begin( 9600 );
}
void loop()
{
  val1 = digitalRead(12);
  val2 = digitalRead(13);

  if (val1 == HIGH) {
    if (stanczujnika1 == LOW) {
      Serial.println("czujnik 1");
      stanczujnika1 = HIGH;}
      }else {
      if (stanczujnika1 == HIGH){
      stanczujnika1 = LOW;}}
    
    if (val2 == HIGH) {
      if (stanczujnika2 == LOW) {
      Serial.println("czujnik 2");
      stanczujnika2 = HIGH;}
      }else {
      if (stanczujnika2 == HIGH){
      stanczujnika2 = LOW;}}
  }

...

poniedziałek, 22 sierpnia 2011

Serwo micro HK15178

...
SKLEP


...

Odbiornik podczerwieni 38kHz

...
SKLEP
OPIS
BIBLIOTEKA
BIBLIOTEKA 2

PRZYKŁADOWY KOD:


Piroelektryczny czujnik ruchu (IR)

...
int stanczujnika = LOW;
int val = 0;

void setup() {
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
  Serial.begin(9600);}

void loop(){
  val = digitalRead(2);
  if (val == HIGH) {
    digitalWrite(13, HIGH);
    if (stanczujnika == LOW) {
      Serial.println("Ruch wykryty!");
      stanczujnika = HIGH;}
  } else {
    digitalWrite(13, LOW);
    if (stanczujnika == HIGH){
      Serial.println("Brak ruchu!");
      stanczujnika = LOW;}
  }
}
...
SKLEP
MANUAL

...

sobota, 20 sierpnia 2011

Analogowy czujnik temperatury LM35

...
float temp;
void setup() {
  Serial.begin(9600);
};

void loop () {
  temp = analogRead(0)*500/1024.0;
  Serial.println(temp);
  delay(500);
};
...
SKLEP TROBOT
MANUAL
...

czwartek, 18 sierpnia 2011

Czujnik światła z diodą LED - kalibracja czujnika


Na stronach ARDUINO.CC znalazłem prosty kod, w którym można przeprowadzić kalibrację czujnika światła. jest to całkiem fajna opcja gdyż przy testowaniu czujnika nie zawsze mamy dostateczną ilość światła... i wtedy nie widać dobrze zmian w oświetleniu LED. A jak się czujnik przystosuje do ilości światła w pomieszczeniu to i efekt jest bardziej widoczny... Kod przerobiłem... odwróciłem jego funkcję... kod ma za zadanie rozpalanie diody LED wtedy gdy robi się ciemno. Może to być ciekawa funkcja dla przyszłego robota... Kiedy ten zapędzi się w ciemne kąty to automatycznie włączy sobie oświetlenie, będzie łatwiej go znaleźć. Ciekawostką jest kalibracja czujnika światła, która została zamieszczona w void setup()

int wartoscczujnika = 0;
int czujnikmax = 1023;
int czujnikmin = 0;

void setup() {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);
    while (millis() < 5000) {
    wartoscczujnika = analogRead(A0);
   if (wartoscczujnika > czujnikmin) {
      czujnikmin = wartoscczujnika;}
   if (wartoscczujnika < czujnikmax) {
      czujnikmax = wartoscczujnika;}
  }

  digitalWrite(13, LOW);}

void loop() {
  wartoscczujnika = analogRead(A0);
  wartoscczujnika = map(wartoscczujnika, czujnikmin, czujnikmax, 0, 255);
  wartoscczujnika = constrain(wartoscczujnika, 0, 255);
  analogWrite(9, wartoscczujnika);}


Więcej ciekawych przykładów zastosowanie czujnika światła można znaleźć pd tym LINKIEM.

Poniższy kod nie kalibruje czujnika światła... testy należy przeprowadzać przy słonecznym dniu ;) ale za to dane z czujnika są wyświetlane w serial monitor


int czujnik = 0;
int odczytczujnika;
int jasnoscLED;
void setup(void) {
   Serial.begin(9600);}

void loop(void) {
  odczytczujnika = analogRead(czujnik); 

  Serial.print("Odczyt analogowy = ");
  Serial.println(odczytczujnika);
   odczytczujnika = 1023 - odczytczujnika;
   jasnoscLED = map(odczytczujnika, 0, 1023, 0, 255);
   analogWrite(9, jasnoscLED);
   delay(100);}

Poniżej kolejny kod do odczytu samego czujnika :) Podobnie jak z czujnikiem odległości wyświetlamy tym razem różne komentarze w serial monitor.

int czujnik = 0;
int odczytczujnika;

void setup(void) {
  Serial.begin(9600);}

void loop(void) {
  odczytczujnika = analogRead(czujnik); 

  Serial.print("Analog reading = ");
  Serial.print(odczytczujnika);

  if (odczytczujnika < 10) {
    Serial.println(" - Ciemno");
  } else if (odczytczujnika < 200) {
    Serial.println(" - Raczej ciemno");
  } else if (odczytczujnika < 500) {
    Serial.println(" - Prawie jasno");
  } else if (odczytczujnika < 800) {
    Serial.println(" - Dosc jasno");
  } else {
    Serial.println(" - Bardzo jasno");
  }
  delay(1000);}

wtorek, 16 sierpnia 2011

Czujnik ultradźwiękowy odległości HC-SR04 ze wskaźnikiem led



W kolejnym projekcie wykorzystałem diody LED... każda z nich to 5cm odległości... 8 diod to jakieś 40 cm. Poniżej 5 cm wyłączają się wszystkie. skrypt pisałem sam... he he i działa... z pewnością można napisać go lepiej ale jak na moje umiejętności to i tak wydaje mi się że nieźle... jeżeli ktoś ma jakiś lepszy pomysł to proszę o sugestię. Może kiedyś jeszcze do tego wrócę :).

int impuls = 2;
int sonar = 3;
long czas, cm;

const int ledCount = 10;
int ledPins[] = { 4, 5, 6, 7, 8, 9,10,11,12,13 };

void setup() {
  pinMode(impuls, OUTPUT);
  pinMode(sonar, INPUT);
  
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
     Serial.begin(9600);}
}

void loop()
{
  digitalWrite(impuls, LOW);
  delayMicroseconds(2);
  digitalWrite(impuls, HIGH);
  delayMicroseconds(10);
  digitalWrite(impuls, LOW);
  czas = pulseIn(sonar, HIGH);
  cm = mikrosekundynacentymetry(czas);
  if (cm >= 5){on1();}else{off1();}
  if (cm >= 10){on2();}else{off2();}
  if (cm >= 15){on3();}else{off3();}
  if (cm >= 20){on4();}else{off4();}
  if (cm >= 25){on5();}else{off5();}
  if (cm >= 30){on6();}else{off6();}
  if (cm >= 35){on7();}else{off7();}
  if (cm >= 40){on8();}else{off8();}
  if (cm >= 45){on9();}else{off9();}
  if (cm >= 50){on10();}else{off10();}

  Serial.print("Distance: [");
  Serial.print(cm);
  Serial.print("]cm\n");
  delay(100);}

long mikrosekundynacentymetry(long mikrosekundy)
{return mikrosekundy / 29 / 2;}

void  on1(){ digitalWrite( 4, HIGH); }
void  on2(){ digitalWrite( 5, HIGH); }
void  on3(){ digitalWrite( 6, HIGH); }
void  on4(){ digitalWrite( 7, HIGH); }
void  on5(){ digitalWrite( 8, HIGH); }
void  on6(){ digitalWrite( 9, HIGH); }
void  on7(){ digitalWrite(10, HIGH); }
void  on8(){ digitalWrite(11, HIGH); }
void  on9(){ digitalWrite(12, HIGH); }
void on10(){ digitalWrite(13, HIGH); }

void  off1(){ digitalWrite( 4, LOW); }
void  off2(){ digitalWrite( 5, LOW); }
void  off3(){ digitalWrite( 6, LOW); }
void  off4(){ digitalWrite( 7, LOW); }
void  off5(){ digitalWrite( 8, LOW); }
void  off6(){ digitalWrite( 9, LOW); }
void  off7(){ digitalWrite(10, LOW); }
void  off8(){ digitalWrite(11, LOW); }
void  off9(){ digitalWrite(12, LOW); }
void off10(){ digitalWrite(13, LOW); }
...

środa, 10 sierpnia 2011

Czujnik ultradźwiękowy odległości HC-SR04





Ultradźwiękowy czujnik odległości to kolejny element przydatny do zbudowania robota. Sklep: ALLEGRO - Smart Elektronic

Jak już się nauczyłem przy zakupie tego rodzaju rzeczy, dostaje się element a potem "radź sobie sam" czyli szukaj w sieci...

Tu znajdziemy wstępne informacje na stronie ARDUINO SOLUTIONS, w dolnej cześci znajdziemy link do danych technicznych i do przykładu.

Co zrobić z przykładem też nie do końca znalazłem. ale po kilku nieudanych próbach... gdzie przy kodzie pojawiały się ciągle błędy... odkryłem, że podobnie zapisane pliki znajdują się w katalogu LIBRARIES w oprogramowaniu ARDUINO... skopiowałem cały przykład do tego katalogu i wszystko zaczęło działać prawidłowo :)

Niemniej jednak przykład jest przeznaczony dla osób posiadających wyświetlacz LCD. A ja go jeszcze nie posiadam :)... więc trzeba było szukać dalej. szukaj a znajdziesz...


Poniższy kod umożliwia czytanie odległości w centymetrach. A zmierzoną odległość można zaobserwować na SERIAL MONITOR.

int impuls = 13;
int sonar = 12;
long czas, cm;

void setup() {
  pinMode(impuls, OUTPUT);
  pinMode(sonar, INPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalWrite(impuls, LOW);
  delayMicroseconds(2);
  digitalWrite(impuls, HIGH);
  delayMicroseconds(10);
  digitalWrite(impuls, LOW);
  czas = pulseIn(sonar, HIGH);
  cm = microsecondsToCentimeters(czas);
  Serial.print("Distance: [");
  Serial.print(cm);
  Serial.print("]cm\n");
  delay(100);
}

long microsecondsToCentimeters(long microseconds)
{return microseconds / 29 / 2;}

centymetry liczy się przez czas jaki podróżuje dźwięk 340 m/s czyli 29 mikrosekund na każdy centymetr.

Pierwsze testy poszły pomyślnie :) Cieszę się że udało się go uruchomić.

kolejny działający kod... jest krótszy... przez co może bardziej skuteczny...

#include "Ultrasonic.h"
Ultrasonic ultrasonic( 6, 5 );

void setup()
{
  Serial.begin( 9600 );
}

void loop()
{
  Serial.print( ultrasonic.Ranging(CM) );
  Serial.println( "cm" );
   
  delay(500);
}


...