Intel Edison — piszemy kod pod Arduino
W Intel Edison tak samo jak w Intel Galileo możemy programować Edisona za pomocą Arduino IDE. W tym celu użyję wersji Standard, która ma już wyprowadzone złącza GPIO podobnie jak w Arduino UNO. W tym wpisie pokażę jak radzi sobie Edison ze sterowaniem wyświetlaczem LCD, sterowaniem silników za pomocą PWM, sterowaniem serwami oraz świeceniem diodami.
Przygotowanie środowiska programistycznego
Arduino IDE w wersji dla Edisona możemy pobrać z działu Download projektu. Dostępne są wersje dla systemów Windows, Linux i Mac OS. Użytkownicy Windowsa powinni jeszcze zainstalować sterowniki.
Po instalacji sterowników i podłączeniu intel Edisona do komputera możemy uruchomić pobrane wcześniej Arduino IDE dedykowane dla płyt Intela.
Wybieramy z Narzędzia>Płytka>Intel Edison oraz numer portu Narzędzia>Port szeregowy. Od tej chwili możemy już programować naszego Edisona.
Sterowanie diodami
Zaczniemy od prostego sterowania pinami cyfrowymi za pomocą których będziemy sterować diodami. Wykonam prosty przykład efektu świetlnego z filmu Knight Rider (Nieustraszony) w którym samochód bohatera miał ten efekt na przedniej masce.
int i=0; void setup() { for( i = 2; i <= 6; i++) { pinMode(i, OUTPUT); } } void loop() { for(i = 2; i < 6; i++) { digitalWrite(i, HIGH); delay(50); digitalWrite(i + 1, HIGH); delay(50); digitalWrite(i, LOW); delay(50); } for(i = 6; i > 1 ; i--) { digitalWrite(i, HIGH); delay(50); digitalWrite(i - 1, HIGH); delay(50); digitalWrite(i, LOW); delay(50); } }
Efekt końcowy powyższego kodu. [youtube=https://www.youtube.com/watch?v=5BuPMtenVmQ]
Sterowanie silnikami
W tym przykładzie użyłem PWM do sterowania obrotami silnika. Silnik podłączony jest do sterownika silników. Za ustawienie prędkości odpowiada potencjometr, którym będę kręcił, aby ustawić prędkość obrotów silnika.
int silnik = 9; int potencjometr = A0; int i = 0; void setup() { pinMode(silnik, OUTPUT); pinMode(potencjometr, INPUT); } void loop() { i = analogRead(potencjometr); analogWrite(silnik, i / 4); }
Poniżej prezentuję efekt działania programu.
Sterowanie serwem
Teraz pora na sterowanie serwem. Będę obracać serwem o 180 stopni w obydwu kierunkach.
#include <Servo.h> Servo servoMain; int i = 0; void setup() { servoMain.attach(9); } void loop() { for(i = 0; i <= 180; i++) { servoMain.write(i); delay(2); } delay(1000); for(i = 180; i >= 0; i--) { servoMain.write(i); delay(2); } delay(1000); }
Po wgraniu powyższego kodu mamy taki oto efekt [youtube=https://www.youtube.com/watch?v=aUBVp__z98k]
Zabawa z wyświetlaczem LCD
Pora na test wyświetlacza LCD, którym będę sterować za pomocą biblioteki LiquidCrystal_I2C. Użyłem modułu I2C dla ekranu aby zmniejszyć ilość potrzebnych kabli połączeniowych.
//Library version:1.1 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.init(); lcd.backlight(); } void loop() { delay(2000); lcd.print("Pozdrowienia"); lcd.setCursor(0, 1); lcd.print("dla czytelnikow"); delay(4000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("dobreprogramy.pl"); delay(1000); lcd.setCursor(0, 1); lcd.print("od Cyryllo"); delay(1000); lcd.print(" ;)"); delay(6000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Intel Edison"); delay(2000); lcd.setCursor(0, 1); lcd.print("i Arduino"); delay(6000); lcd.clear(); }
Poniżej wynik działania powyższego kodu [youtube=https://www.youtube.com/watch?v=jtQbnUjLi1A]
Podsumowanie
Jak widać Intel Edison daje sobie radę przy korzystaniu z Arduino IDE. Jednak nie na tym polu Edison powinien walczyć z innymi mikrokontrolerami czy picoboardami. Porównując cenę Edisona do innych Arduino to nie ma sensu kupować Edisona jeśli chcemy używać go tylko jako Arduino. Moc tego urządzenia jest zapewne w Linuksie i jego modułach wifi i bluetooth więc w kolejnym wpisie sprawdzę co Linux potrafi zdziałać na Intel Edison.