poniedziałek, 5 października 2015

Programowanie Arduino Pro Mini za pomocą USBasp

W celu zaprogramowania arduino mini ja korzystam z programatora USBasp. Poniżej schemacik programowania mikrokontrolera. Istotny dla nas jest opis wyjść z programatora.

Cały artykuł dostępny na majsterkowo.pl.

A tutaj opis które piny i jak z arduino mini trzeba podłączyć do programatora.
Cały artykuł dostępny na instructables.

Po poprawnym podłączeniu uruchamiamy np Arduino IDE. Zmieniamy typ płytki na Arduino Pro or Pro Mini 5v / Atmega 328. Nastepnie ustawiamy jaki posiadamy programator. W moim przypadku: Tools -> Programmer -> UsbAsp. Na koniec zostało wrzucenie sketchu na arduino. Aby to zrobić wybieramy opcję: File -> Upload using programmer.

A tutaj link do artykułu gdzie pokazane jest jak programować arduino mini za pomocą większego brata Arduino Uno.

Oświetlenie LED w kuchni

Ostatnio postanowiłem zrobić dla ukochanej żony oświetlenie pod szafkowe, aby nie musiała zmywać w ciemnościach ;).
Do zrobienia projektu wykorzystałem następujące części:
* Taśma LED 12V biała ciepła
* Zasilacz wodoodporny IP67 (ja miałem 50W)
* Arduino Pro Mini
* Tip31C
* Czujnik odległości HC-SR04
* Wtyk DC Power Jack męski i damski

Poniżej mini-schemat:


Wszystko zamknąłem w obudowę:


Pomocne przy lutowaniu wtyków do zasilania okazały się poniższe zdjęcia:
Tu warto zwrócić uwagę, że należy oba piny GND podłączyć do masy.
I drugie zdjęcie:



Program został napisany z wykorzystaniem Arduino IDE. Jak załadować projekt na arduino mini opiszę w osobnym poście. Poniżej kod programu. Ma on za zadanie włączać oświetlenie gdy zbliżymy rękę do czujnika na max 20cm. Odczyt sygnału ustawiłem na 1,2sekundy. Kolejne zbliżenie ręki ma wyłączyć taśmę LED.
Wszystkie odwołania do Serial można wyrzucić - były tylko pomocne na etapie projektowania i debugowania.
/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v; GND to arduino GND
Echo to Arduino pin 7; Trig to Arduino pin 8
*/

#define echoPin 7
#define trigPin 8
#define dioda 9
int isEnable = 0;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(dioda, OUTPUT);
}

void loop() {
  // send a pulse on the trigger pin to initiate measurement
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // the length of the pulse on the echo pin is proportional to the distance
  long duration = pulseIn(echoPin, HIGH);
  long distance = (duration/2) / 29.1;

  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
    digitalWrite(dioda, HIGH);
      delay(1200);
      digitalWrite(dioda, LOW);
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
    if(distance < 20) {
      if(isEnable == 0) {
        isEnable = 1;
        digitalWrite(dioda, HIGH);
      }
      else if(isEnable == 1) {
        isEnable = 0;
        digitalWrite(dioda, LOW);
      } 
    }
  }
  delay(1200);
 
}

Całość prezentuje się jak na filmiku poniżej. Zostało podłączenie docelowego zasilacza oraz zamaskowanie kabli.