Translate

Se afișează postările cu eticheta Shield. Afișați toate postările
Se afișează postările cu eticheta Shield. Afișați toate postările

duminică, 11 decembrie 2011

"Semafor" Shield for Arduino

Proiectul urmator este un mic upgrade al ultimului proiect prezentat, respectiv este un semafor cu perechea sa pentru pietoni; unul conceput pentru treceri de pietoni; are un buton push; cand este apasat declanseaza secventa de oprire a masinilor(rosu pentru masini) si de liber pentru pietoni (verde pentru pietoni). Scopul acestui proiectel este exemplificarea utilizarii unui buton push, a posibilitatii de creere de functii si a functiei de timp predefinita millis().
Schema generala a conexiunilor shield-ului
Am realizat o schema a shield-ului; conexiunile sunt asemanatoare, dar pentru a putea fi vazut mai usor, schema nu este chiar shield.
Voi prezenta modul de lucru al semaforului. In conditii normale, semaforul va fi verde pentru masini si rosu pentru pietoni. In momentul in care este apasat butonul, dupa 10 (10000ms) secunde se stinge becul verde si se aprinde galbenul pentru masini timp de 4 secunde apoi rosu pentru masini; in tot acest timp pentru pietoni este rosu. Din motive de siguranta, verdele pentru pietoni se va aprinde la 3 secunde dupa rosul pentru masini; dupa 20 de secunde verdele pietonilor va incepe sa lumineze intermitent si se stinge becul verde si se aprinde becul rosu; peste 2 secunde se da liber masinilor. Din motive practice, trebuie sa adaugam o functie care sa impiedice schimbarea semaforului pentru fiecare pieton care doreste sa traverseze; asa ca vom adauga in program o conditie care sa contorizeze timpul trecut de la ultima declansare; astfel timp de 2 minute nu se va mai da liber pentru pietoni de oricate ori este apasat butonul.
 In timp ce scriam postul, mi-am dat seama ca am omis sa introduc pposibilitatea de a memora apasarea butonului in cele 2 minute si la scuregerea lor sa apeleze functia de schimbare a semaforului.
Rezumatul Proiectului
 Daca realizam lipiturile conform cu schema de mai sus; evident avand grija sa punem pinii pe sheld in asa fel incat atunci cand vom dori sa il conectam cu Arduino, pinii de pe shield sa intre in pinii corespunzatori de pe Arduino; pini pe care i-am folosit in sketch.
Shield-ul pe care l-am construit este conectat la pinii digitali 13, 12, 11, 10, 9, 8 si la pinii de alimentare 5V si GND. Am ales acest layout pentru o fixare mai buna. Desigur, se poate folosi si pin-ul GND de langa pin-ul 13. Pentru buton, alegerea pinului 13 nu este intamplatoare( rol de control); acesta avand un led pe placuta Arduino; astfel pot vedea un efect atunci cand apas butonul din circuit. Voi pune acum si codul complet pe care l-am folosit la realizarea proiectului:

Arduino cu "semafor" shield atasat


//Interactive Traffic Lights
/*
Author:
  THE ARDUINO BLOG
http://thearduinoblog.blogspot.com
*/  

// assign the car lights
 int carRed = 12;
int carYellow = 11;
int carGreen = 10;


// assign the pedestrian lights
int pedRed = 8;
int pedGreen = 9;
int button = 13; // button pin
int crossTime = 20000; // time allowed to cross
unsigned long changeTime; // time since button pressed
void setup() {

Arduino si "Semafor" Shield

  pinMode(carRed, OUTPUT);
  pinMode(carYellow, OUTPUT);
  pinMode(carGreen, OUTPUT);
  pinMode(pedRed, OUTPUT);
  pinMode(pedGreen, OUTPUT);
  pinMode(button, INPUT); // button
  // turn on the green light
  digitalWrite(carGreen, HIGH);
  digitalWrite(pedRed, HIGH);
}
void loop() {
  int state = digitalRead(button);
  /* check if button is pressed and it is
  over 2 minutes since last button press */
  if (state == HIGH && (millis() - changeTime) > 120000) {
    // Call the function to change the lights
    delay(10000);
    changeLights();
  }
}
void changeLights() {
  digitalWrite(carGreen, LOW); // carGreen off
  digitalWrite(carYellow, HIGH); // carYellow on
  delay(4000); // wait 4 seconds
  digitalWrite(carYellow, LOW); // carYellow off
  digitalWrite(carRed, HIGH); // carRed on
  delay(3000); // wait till its safe
  digitalWrite(pedRed, LOW); // pedRed off
  digitalWrite(pedGreen, HIGH); // pedGreen on
  delay(crossTime); // wait for preset time period
  // flash the ped green
  for (int x=0; x<5; x++) {
    digitalWrite(pedGreen, HIGH);
    delay(250);
    digitalWrite(pedGreen, LOW);
    delay(250);
  }
  // turn pedRed on
  digitalWrite(pedRed, HIGH);
  delay(2000);
  digitalWrite(carYellow, HIGH); // carYellow on
 
  delay(2000);
  digitalWrite(carRed, LOW); // carRed off
  digitalWrite(carGreen, HIGH); //carGreen on
  digitalWrite(carYellow, LOW); // carYellow off
  // record the time since last change of lights
  changeTime = millis();

}
Conexiunea shield - board

Fiecare linie de program are un comentariu care arata ce face linia respectiva. Un exercitiu de aplicare a ceea ce a fost prezentat este adaugarea memorarii apasarii butonului in intervalul de 2 minute.

luni, 14 noiembrie 2011

Arduino Shield

Este o perioada aglomerata asa ca astazi voi trata un subiect mai putin comun; voi vorbi despre shielduri. Acestea pot fi de multe feluri si cu diferite functii. Un shield este o placuta care se introduce in toti pinii controllerului Arduino. Acesta utilizeaza o parte din pini pentru a-si atinge scopul propriu; restul sunt pur si simplu mutati pe noua placuta.

1.Sensor Shield
Arduino Sensor Shield
Acest Shield nu este mare lucru. La el se pot conecta diferiti senzori printr-un cablu cu 3 fire. De fapt, Shield-ul reuneste trei pini - alimentare 2 pini si semnal un pin. Toate mufele pe care le gasim sunt, de fapt cate un port de pe Arduino-ul original. Un Sensor Shield are si un port de comunicatii, pe care se pot folosi comunicatii I2C - pentru un ecran LCD sau un senzor de temperatura digital.
Intrucat acesta se pune peste controllerul Arduino, nu mai avem acces la ledurile sau switchurile de pe controller; asadar pe orice shield gasim si butonul reset si cel putin ledul power.
Arduino Sensor Shield a aparut in mai multe variante, de obicei create pentru diferite scopuri (senzori I2C, servomotoare sau senzori analogici).

2.Ethernet Shield

Arduino Ethernet Shield
Acest shield este inca un mister si pentru mine, asadar pana cand voi lucra cu el il voi mentiona ca fapt divers (sa stim de existenta lui). Acesta permite unui Arduino sa acceseze o retea locala. Are un port de retea cu 8 fire, RJ-45 care se poate conecta la un router. Acesta exista sub multe forme cu diferite facilitati. Exista Ethernet Shield care poate alimenta un Arduino. Spre exemplu, folosind un astfel de shield, se poate crea o conexine catre un site care ofera informatii despre vreme si se pot afiza prognozele pe un ecran. Dupa cum se poate vedea in poza, acest ethernet shield are si un cititor de carduri microSD.

3.Prototyping Shield
Prototyping Shield
Acest shield se utilizeaza pentru ca ofera un acces foarte facil la un breadboard. Desi se poate pune breadboardul langa arduino, folosind acest shield, mutarea proiectelor se poate face mai usor. Cred ca stim cu totii cand aveam un proiect pe breadboard si arduino-ul langa si am vrut sa mergem sa-l aratam si in timpul transportului a iesit fie si un singur fir si s-a dus naiba totul.










Shieldurile enumerate mai sus sunt cele mai folosite si ,exceptand ethernet shield, cele mai simple. Trebuie sa mai mentionam existenta unor shielduri complicate, cum ar fi GSM shield sau X-Bee Shield sau LCD shield. Probabil va intrebati care este rolul acestui post; ideea a fost de a explica putin conceptul de Arduino Shield, deoarece urmatorul proiect este un mic upgrade la semaforul prezentat in postul anterior; proiect pe care il voi prezenta sub forma unui shield.