Proiect Închisoarea lui Bachus

De cele mai multe ori consumul de alcool afectează capacitatea de a evalua cantitatea de băutură consumată deja dar deschide apetitul pentru a bea din ce în ce mai mult.

1

”Personal nu beau niciodată mai mult de un pahar dar după un pahar devin cu totul și cu totul alt om. Acel om bea enorm de mult… ”

Având în vedere efectele negative grave cauzate de consumul excesiv de alcool proiectul de față își propune să construiască un sistem de protecție care să țină seama de cantitatea de alcool consumată deja – o încuietoare care nu se va deschide dacă persoana este în stare de ebrietate. Această încuietoare poate fi instalată la dulapul sau barul în care sunt depozitate băuturile alcoolice și va încerca să împiedice o persoană să consume mai mult decât este cazul. Bineînțeles, proiectul are un caracter strict demonstrativ – nu există nici o garanție că poate opri o persoană să consume prea mult alcool, fiecare persoană are responsabilitatea să consume băuturi alcoolice cu moderație.

Sistemul se va baza pe o placă de dezvoltare Arduino Uno și va include următoarele componente: un senzor brick alcool MQ-3, o placă releu SPDT 5V, o încuietoare solenoid, un brick buton și două brick-uri led.

2

https://www.robofun.ro/bricks/senzor-alcool-brick

3

https://www.robofun.ro/module/module-releu/releu-spdt-5V

4

https://www.robofun.ro/mecanice/mecanice-altele/incuietoare-solenoid-12vdc

Modul de funcționarea a sistemului va fi următorul: la pornirea sistemului încuietoarea este închisă și ledul roșu este aprins; pentru deblocare se apasă butonul și se suflă în senzor timp de 10 secunde – interval semnalizat de clipirea ledului roșu; dacă proba este negativă, nu există alcool în respirația celui testat, ledul roșu se va stinge, se va aprinde ledul verde și se va comanda de deschidere a încuietorii pentru 10 secunde.

Cele două leduri vor fi conectate pe pinii 5 și 6 ai plăcii de dezvoltare. Pinul 2 al plăcii de dezvoltare va fi utilizat pentru conectarea butonului (INT0) iar pinul 3 pentru comanda către încuietoare. Senzorul de alcool se va conecta pe pinul analogic A0.

#define led_verde 5

#define led_rosu 6

#define pin_releu 3

#define int_buton 0

Schema de interconectare între componentele utilizate este:

5

Chiar dacă senzorii de gaz din familia MQ sunt în general mari consumatori de curent și nu se recomandă alimentarea directă din placa de dezvoltare ci utilizarea unui surse externe de alimentare – senzorul de alcool MQ-3 nu consumă mai mult de 200mA deci poate fi alimentat direct și în cazul alimentării plăcii prin intermediul cablului USB și în cazul utilizării unui alimentator extern.

Comanda încuietorii se va realiza prin intermediul unui releu deoarece funcționează la o altă tensiune (12V) decât restul montajului. Având în vedere faptul că placa de dezvoltare Arduino Uno poate fi alimentată, prin intermediul regulatorului intern de tensiune, la tensiuni între 6V și 12V, sistemul poate fi alimentat în ansamblu de la o singură sursă de tensiune. Nu se recomandă utilizarea de baterii deoarece consumul este destul de mare și nu se va asigura o autonomie prea mare a sistemului.

În cadrul programului se vor utiliza următoarele variabile globale: unlockme – semnalizează apăsarea butonului de deschidere; alcool – conține valoarea citită de la senzor în mod curent; alcool_test – conține valoarea citită în urma testării. Comparația dintre cele două valori va sta la baza de deschidere sau nu a încuietorii.

volatile boolean unlockme = false;

int alcool, alcool_test;

În cadrul secțiunii setup() se realizează inițializarea pinilor de comandă și a procedurii  (unlock()) de tratare a evenimentului de apăsare a butonului.

void setup() {               

    attachInterrupt(int_buton,unlock,RISING);

    pinMode(pin_releu,OUTPUT);

    pinMode(led_rosu,OUTPUT);

    pinMode(led_verde,OUTPUT);

    digitalWrite(pin_releu,LOW);

    digitalWrite(led_verde,LOW);

    digitalWrite(led_rosu,HIGH);

}

void unlock() {  unlockme = true; }

Secțiunea loop() va implementa mecanismul de testare și de comandă a încuietorii. Funcționarea încuietorii se bazează pe un mecanism extrem de simplu: se compară valoarea de test (alcool_test) cu valoarea achiziționată chiar înainte de efectuarea testului (alcool). În cazul în care valoarea este mai mare (detecție alcool) sau egală (nu s-a suflat deloc în senzor) încuietoarea nu se va deschide. Comportamentul senzorului face ca în momentul unui test negativ (se suflă în senzor de către o persoană care nu a consumat alcool) valoarea raportată să fie mai mică decât valoarea citită în gol – acesta este cazul în care încuietoarea se va deschide. Cu alte cuvinte nu se poate păcăli senzorul și să se deschidă încuietoarea fără ca o persoană să efectueze testul.

void loop() {

    alcool = analogRead(0);

    if (unlockme) {

      for (int i=0; i<10; i++) {

        digitalWrite(led_rosu,LOW);

        delay(500);

        digitalWrite(led_rosu,HIGH);

        delay(500);

      }

      unlockme = false;

      alcool_test = analogRead(0);

      if (alcool_test < alcool) {

        digitalWrite(led_rosu,LOW);

        digitalWrite(led_verde,HIGH);

        digitalWrite(pin_releu,HIGH);

        delay(10000);

        digitalWrite(led_rosu,HIGH);

        digitalWrite(led_verde,LOW);

        digitalWrite(pin_releu,LOW);

      }

      unlockme = false;

    }

    delay(1000);

}

În cazul în care doriți să implementați sisteme de testare mai sofisticate decât cel prezentat în această lecție vă recomandăm și următorul proiect:

The Droidalyzer – An open source, Bluetooth alcohol detector accessory for Android Phones

http://www.instructables.com/id/The-Android-Breathalyzer/

Proiect Instalație de Crăciun WiFi

Instalațiile de lumini pentru crăciun sunt printre cele mai distractive montaje care se pot realiza cu ajutorul plăcii de dezvoltare Arduino Uno. În cadrul proiectului de față vom realiza o instalație de lumini pentru crăciun conectată prin WiFi și controlabilă prin intermediul telefonului mobil.

1

Pe lângă placa de dezvoltare Arduino Uno vom utiliza shield-ul Sparkfun WiFi CC3000 ce va permite conectarea la rețeaua Internet și recepționarea comenzilor transmise de pe telefonul mobil inteligent.

2

https://www.robofun.ro/wireless/wireless-wifi/cc3000-wifi-shield

Pentru informații legate de utilizarea shield-ului Sparkfun WiFi CC3000 puteți consulta și următorul tutorial:

CC3000 Hookup Guide

https://learn.sparkfun.com/tutorials/cc3000-hookup-guide

Pentru partea de lumini vom utiliza un șir de leduri RGB de 12mm de la Adafruit (se pot utiliza mai multe seturi înseriate atâta timp cât se respectă puterea sursei de alimentare):

3

https://www.robofun.ro/electronice/led/led-uri-pixeli-rgb-de-12mm

Se recomandă citirea cu atenție a informațiilor de utilizare furnizate de producător:

12mm LED Pixels

https://learn.adafruit.com/12mm-led-pixels

Pentru a realiza conexiunea între sistemul de lumini și telefonul mobil, fără a fi nevoie să scriem o aplicație mobilă personalizată, vom utiliza platforma IoT Blynk:

First drag-n-drop IoT app builder for Arduino, Raspberry Pi, ESP8266, SparkFun

boards, and others

http://www.blynk.cc/

Pentru o mai bună înțelegere a lecției de față se poate vedea și proiectul:

Cum să realizăm un sistem IoT fără să scriem nici o linie de cod?

Cea mai importantă grijă în realizarea montajului este alimentarea corectă a acestuia. Trebuie avut în vedere că sistemul va necesita o sursă externă de tensiune de 5V, minim 2A. Schema de interconectare este următoarea:

4

Chiar dacă schema nu prezintă shield-ul WiFi se presupune că acesta este instalat deasupra plăcii Arduino Uno utilizând un set de conectori Arduino R3.

Sursa de tensiune externă va alimenta atât ansamblul placă de dezvoltare Arduino Uno + shield WiFi cât și șirul de 25 de leduri RGB. Comanda de la placa de dezvoltare se va transmite către șirul de leduri pe două fire: pinul 5 – fir galben – date și pinul 6 – fir verde – semnal de ceas.

În cadrul programului Arduino se vor utiliza următoarele biblioteci externe mediului Arduino IDE:

Blynk Library

https://github.com/blynkkk/blynk-library

Adafruit WS2801 Library

https://github.com/adafruit/Adafruit-WS2801-Library

Adafruit CC3000 Library

https://github.com/adafruit/Adafruit_CC3000_Library

#include <Adafruit_WS2801.h>

#define ADAFRUIT_CC3000_IRQ   2

#define ADAFRUIT_CC3000_VBAT  7

#define ADAFRUIT_CC3000_CS    10

#include <SPI.h>

#include <Adafruit_CC3000.h>

#include <BlynkSimpleCC3000.h>

int dataPin = 5;

int clockPin = 6;

Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin);

În program se va personaliza AUTH TOKEN furnizat de aplicația mobilă Blynk la crearea aplicației de comandă:

char auth[] = „AUTH TOKEN„;

și datele de conectarea la rețeaua WiFi locală:

char ssid[] = „„;

char pass[] = „„;

int wifi_sec = WLAN_SEC_WPA2;

Dacă se dorește urmărirea mesajelor de control ale sistemului Blynk în consola serială se va lăsa următoarea linie necomentată:

#define BLYNK_PRINT Serial 

Următoarele variabile globale permit controlul funcționării sistemului de lumini. Variabila mode reține comportamentul de funcționare, există 5 moduri de funcționare: modul 0 – toate ledurile sunt stinse, modul 1 – toate ledurile sunt aprinse având aceiași culoare dictată de aplicația de comandă, modul 2 – toate ledurile sunt aprinse având culori diferite, modul 3 – este aprins un singur led care se plimbă de la un capăt la altul al șirului de leduri și modul 4 – sunt aprinse toate ledurile iar culoarea este dată de accelerometrul telefonului mobil de pe care se face comanda. Variabila shift va reține comanda de culoare dată de aplicația mobilă. Variabila automat indică declanșarea unui interval de funcționare automată la oră fixă stabilită în aplicația mobilă de comandă. Variabilele lastmode și lastshift conțin ultimele valori ale variabilelor corespondente pentru ca sistemul să poată să răspundă la modificarea acestora.

byte mode = 0;

byte lastmode = 255;

int shift = 0;

int lastshift = -1;

byte automat = 0;

În cadrul secțiunii setup() se va inițializa conexiunea cu platforma Blynk și obiectul de comandă al șirului de leduri.

void setup()

{ Serial.begin(9600);

  Blynk.begin(auth, ssid, pass, wifi_sec);

  strip.begin();

  strip.show(); }

Procedurile BLYNK_WRITE preiau comenzile primite de la aplicația mobilă prin intermediul unor pini virtuali: pinul V1 va transmite comanda de culoare, pinul V2 va transmite comanda de mod de funcționare, pinul V3 va transmite comanda de funcționare automată și pinul V4 va transmite valorile primite de la accelerometrul telefonului mobil.

BLYNK_WRITE(V4) {

  if (mode==4) {

    int r = param[0].asFloat();

    int g = param[1].asFloat();

    int b = param[2].asFloat();

    shift = Color(r,g,b); }

}

BLYNK_WRITE(V3) {

  automat = param.asInt();

  mode = 3; }

BLYNK_WRITE(V2) { mode = param.asInt(); }

BLYNK_WRITE(V1) { shift = param.asInt(); }

În cadrul secțiunii loop() este implementat algoritmul de funcționare propriu-zisă a instalației de lumini – cele 5 moduri de funcționare.

void loop()

{ Blynk.run();

  if ((lastmode!=mode) || (lastshift!=shift) || automat) {

  switch (mode) {

    case 0:

      for (int i = 0; i < strip.numPixels(); i++)

        strip.setPixelColor(i, 0);

      strip.show();

      break;

    case 1:

      for (int i = 0; i < strip.numPixels(); i++)

        strip.setPixelColor(i, Wheel(shift & 255));

      strip.show();

      break;

    case 2:

      for (int i = 0; i < strip.numPixels(); i++)

        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + shift) & 255));

      strip.show();

      break;

    case 3:

      for (int i = 0; i < strip.numPixels(); i++) {

        if(i>0) strip.setPixelColor(i-1, 0);     

        strip.setPixelColor(i, Wheel(shift & 255));

        strip.show();

        delay(200);

      }     

      strip.setPixelColor(strip.numPixels()-1, 0);

      strip.show();

      break;

    case 4:

      for (int i = 0; i < strip.numPixels(); i++)

        strip.setPixelColor(i, shift);

      strip.show();

      break;

  }

  lastmode = mode;

  lastshift = shift;

  }

}

Funcțiile Wheel și Color sunt folosite pentru prelucrarea comenzilor de culoare.

uint32_t Wheel(byte WheelPos) {

  if (WheelPos < 85) {

    return Color(WheelPos * 3, 255 – WheelPos * 3, 0);

  } else if (WheelPos < 170) {

    WheelPos -= 85;

    return Color(255 – WheelPos * 3, 0, WheelPos * 3);

  } else {

    WheelPos -= 170;

    return Color(0, WheelPos * 3, 255 – WheelPos * 3);

  }

}

uint32_t Color(byte r, byte g, byte b) {

  uint32_t c;

  c = r;

  c <<= 8;

  c |= g;

  c <<= 8;

  c |= b;

  return c;

}

Programul a fost dezvoltat și testat utilizând Arduino IDE 1.6.12, Arduino AVR Boards 1.6.15, Blynk Library 0.4.0, Adafruit CC3000 Library 1.0.3 și Adafruit WS2801 Library 1.0.0.

Bineînțeles, după realizarea și programarea sistemului de lumini este necesară generarea aplicației mobile utilizând aplicația Blynk:

https://play.google.com/store/apps/details?id=cc.blynk

https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt=8

Se generează o aplicație nouă, putem să o botezăm ”cristmas wifi” de exemplu.

5

Este important să notăm AUTH TOKEN furnizat la crearea aplicației pentru a putea să-l trecem în program.

Aplicația va include 4 controale (Widget Box):

  • Un Slider S (200 de credite) conectat la pinul virtual V2 ce va stabili modul de funcționare a sistemului, variază între 0 și 4;

6

  • Un Slider L (200 de credite) conectat la pinul virtual V1 ce va stabili comanda de culoare, variază între 0 și 500;

7

  • Un Timer (200 de credite) conectat la pinul virtual V3 ce va declanșa funcționarea automată la oră fixă;

8

  • Un Accelerometer (400 de credite) conectat la pinul virtual V4 ce va transmite valorile pe cele 3 axe ale accelerometrului telefonului mobil.

9

În final aplicația va arăta în acest fel. Costul total al aplicație 1000 de credite.

10

La final obținem o instalație de lumini de crăciun la care putem să stabilim culoarea de aprindere, tiparul de aprindere, putem să o programăm să lumineze la oră fixă sau putem pur și simplu să ne facem de cap comandând-o prin intermediul accelerometrului din telefonul mobil. Puteți explora și alte facilități ale platformei Blynk pentru a vă personaliza instalația așa cum doriți.

Se pot consulta și alte metode de comandă WiFi pentru o instalație de lumini dar soluția propusă este una dintre cele mai simple și mai flexibile:

WiFi Controlled LED Christmahanukwanzaa Tree

https://learn.adafruit.com/wifi-controlled-led-christmahanukwanzaa-tree

ESP8266 controlling WS2812 Neopixel LEDs using Arduino IDE – A Tutorial

http://www.instructables.com/id/ESP8266-controlling-Neopixel-LEDs-using-Arduino-ID/

Arduino NeoPixel Wifi

https://create.arduino.cc/projecthub/andres-santos/arduino-neopixel-wifi-d1a93c

Controlling Neopixels with processing via wifi to nodeMCU

http://fablab.ruc.dk/controlling-neopixels-with-processing-via-wifi-to-nodemcu/

Proiect Termometru/Higrometru Color

În cadrul proiectului de față ne propunem să explorăm interfețe utilizator alternative. În ciuda ecranelor din ce în mai performante există o tendință clară de a afișa informația altfel, de a distruge monotonia cifrelor și a alfabetului obișnuit – putem aici să dăm exemplu moda ceasurilor binare dar și o serie de dispozitive exotice precum dispozitive de afișare bazate exclusiv pe ”smiley faces” sau dispozitive care indică o anumită stare de funcționare prin schimbarea culorii.

1

Termometru/Higrometru Color este un sistem de măsurare a temperaturii și umidității ambientale dar care spre deosebire de sistemele clasice va indica valoarea parametrilor măsurați prin intermediul unui șir de led-uri RGB.

Există mai multe proiecte ce abordează acest subiect dar într-un mod destul de simplist:

Color Thermometer, powered by Arduino

https://youtu.be/EBrK2lqup-c

Trinket LED Thermometer

https://hackaday.io/project/3440-trinket-led-thermometer

Tutorials with Arduino: Temperature by colors.

http://arduinoarts.com/2011/08/arduino-tutorial-temperature-by-colors/

Temperature-controlled RGB LED

https://www.hackster.io/ben/temperature-controlled-rgb-led-6c8cdf

Visualizing temperature as color using an RGB led, a LM35 sensor and Arduino

https://sjackm.wordpress.com/2012/03/26/visualizing-temperature-as-color-using-an-rgb-led-a-lm35-sensor-and-arduino/

(acest proiect a inspirat și formula de calcul utilizată în programul din această lecție)

Pentru măsurarea temperaturii și umidității vom utiliza un senzor digital I2C Si7021:

2

https://www.robofun.ro/senzori/vreme/enzor-umiditate-si-temperatura-si7021

Pentru afișare vom utiliza un modul Adafruit NeoPixel Ring cu 16 leduri RGB adresabile individual WS2812 5050 (bineîțeles se poate utiliza și varianta cu 24 de leduri fără a modifica schema electrică sau programul, doar numărul de leduri: constanta din program NUMPIXELS) – culoarea va fi dictată de temperatura măsurată iar numărul / poziția ledurilor aprinse vor fi influențate de umiditatea măsurată:

3

https://www.robofun.ro/electronice/led/neopixel-ring-16-x-ws2812-5050-rgb-led

În cadrul programului vom utiliza două biblioteci externe mediului Arduino IDE:

Adafruit Si7021 – pentru a interacționa cu senzorul Si7021

https://github.com/adafruit/Adafruit_Si7021

Adafruit NeoPixel – pentru comanda ledurilor NeoPixel

https://github.com/adafruit/Adafruit_NeoPixel

#include <Adafruit_Si7021.h>

#include <Adafruit_NeoPixel.h>

Adafruit_Si7021 sensor = Adafruit_Si7021();

#define PIN            6

#define NUMPIXELS      16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

Una din problemele majore ale sistemului propus este consumul destul de mare pentru cele 16 leduri ale modulului NeoPixel – fiecare led poate ajunge la un curent maxim de 60mA adică consumul total al modulului poate ajunge la 0.06A*16=0.96A … aproape 1A. Din acest motiv vom propune două scheme electrice și două moduri de funcționare ale programului. Primul mod de funcționare (LOW_POWER) va aprinde un singur led din cele 16 – culoarea acestuia va fi dictată de temperatură iar poziția de umiditate. Acest mod de funcționare va fi semnalizat în program prin următoarea declarație:

#define LOW_POWER

și va permite alimentarea modulului NeoPixel direct din placa de dezvoltare Arduino Uno:

4Pentru a lucra cu (a aprinde) mai multe leduri simultan este necesară utilizarea unei surse de alimentare externă. Prin comentarea (ștergerea) declarației de LOW_POWER din program, sistemul va aprinde toate ledurile până la poziția dictată de umiditate (variabila max_pixel) generând un efect luminos mult mai puternic. Având în vedere faptul că sistemul se pretează foarte bine la integrarea într-un alt obiect (sub o vază de sticlă sau într-un obiect decorativ transparent) cea de a doua schemă propusă (cu alimentare suplimentară externă) utilizează placa de dezvoltare Arduino Nano pentru o dimensiune mai mică a sistemului:

5

Secțiunea setup() se va ocupa cu inițializarea celor două obiecte de lucru sensor și pixels. Secțiunea loop() va realiza partea de achiziție (sensor.read…) și partea de comandă  (pixels.setPixelColor…) a ledurilor RGB.

void setup() {

  sensor.begin();

  pixels.begin(); }

void loop() {

  float temperature, humidity;

  temperature = sensor.readTemperature();

 humidity = sensor.readHumidity();

Poziționarea ledului aprins sau a numărului de leduri aprinse până la o anumită poziție se va face printr-o corelație umiditate (0%-100%) și numărului de leduri din modulul NeoPixel (0-NUMPIXELS).

  byte max_pixel;

 max_pixel = map(humidity, 0, 100, 0, NUMPIXELS);

Corelarea între temperatură și culoare ledului / ledurilor aprinse se face după următoarele reguli:

  • Componenta roșie (Red) va fi aprinsă la maxim peste 35 de grade, gradual între 18 și 35, deloc sub 18 grade;
  • Componenta verde (Green) va fi aprinsă crescător în intervalul 25 – 28 de grade, descrescător în intervalul 28 – 35 de grade și deloc în afara celor două intervale;
  • Componenta albastră (Blue) va fi aprinsă la maxim sub 18 grade, deloc peste 25 grade iar între cele două valori va descrește gradual.

Bineînțeles, plajele de corelație pot fi modificate în funcție de temperatura ambientală a mediului în care va funcționa sistemul.

byte r = 0, g = 0, b = 0;

 if(temperature<18) r = 0;

 else if (temperature>=18)

r = map(temperature, 18, 35, 1, 254);

 else if (temperature>35) r = 255;

if(temperature<25) g = 0;

 else if ((temperature>25)&&(temperature<=28))

g = map(temperature, 25, 28, 1, 254);

 else if ((temperature>28)&&(temperature<=35))

g = map(temperature, 28, 35, 255,1);

 else if (temperature>35) g = 0;

 if(temperature<18) b = 255;

 else if ((temperature>=18)&&(temperature<=25))

b = map(temperature, 18, 25, 255, 0);

 else if (temperature>25) b = 0;

 pixels.setPixelColor(0, pixels.Color(r,g,b));

 pixels.show();

 delay(500);

 for(int i=1;i<max_pixel;i++){

    #ifdef LOW_POWER

      pixels.setPixelColor(i-1, pixels.Color(0,0,0));

    #endif

    pixels.setPixelColor(i, pixels.Color(r,g,b));

    pixels.show();

    delay(500);

  }

 delay(5000);

 for (int i=0;i<max_pixel;i++) {

    pixels.setPixelColor(i, pixels.Color(0,0,0));

  }

 pixels.show();

}

Programul a fost realizat și testat cu Arduino IDE 1.6.12, Arduino AVR Boards 1.6.15, Adafruit NeoPixel 1.0.6 și Adafruit Si7021 1.0.0.

gsm & 3G shield breadboard tutorial

Pin to pin compatible, compact and light weight modules and having embedded USB ports, c-uGSM and d-u3G shields (micro) are itbrainpower.net latest GSM / 3G-UMTS shields compatible with Arduino, Raspeberry PI, Raspberry PI2 or with any other 2.8-5V micro-controller board. gSPS adapter it is a „plug and run” SWITCHING POWER SUPPLY companion for c-uGSM and d-u3G shields.
Next, I will show to you how to speed up your GSM / 3G projects prototyping.

What you will need

c-uGSM, d-u3G shields and gSPS hardware references

All examples bellow are demonstrated based on c-uGSM and gSPS 4V [DDRV] (used for direct 3G-GSM shield powering in „NO Lithium Polymer” powering schema).
NO breadboard differences for gSPS 5V [LiPOL] usage (used in „WITH Lithium Polymer” powering), but you will need to connect one Lithium Polymer battery to the CSM or 3G shield.
d-u3G differences – will be revealed later.

3G/GSM shields reference can be seen here. gSPS switching power supply reference may be found here.

GSM 3G shield breadboard prototyping

Solder the strait row headers to the boards.  Solder the barrel connector to the gSPS power supply, if needed.

GSM-3G-shield-breadboard-mount-what-u-need

Hint: 2×10 pin headers can be used for all examples provided and for 99.99% of your projects. In this case, in picture up here, start from right for c-uGSM / left for g-SPS (RX)  to the left for c-uGSM / right for g-SPS and stop at the 10’th pin (STS).

 

Insert the power supply and the GSM shield in the breadboard as bellow pictures. SIM must be installed to the GSM shield, first. 😉


GSM-3G-shield-breadboard-mount-2

GSM-3G-shield-breadboard-mount-1

GSM-3G-shield-breadboard-mount-3

Between boards, a gap of minimum 5 rows it is required. Insulation separator (foam, cardboard,..) must be inserted between boards in order to prevent the SHORT CIRCUITS!

WARNING:
BOARDS MAY BEND WHEN INSERTED AND CAN CAUSE A SHORT CIRCUITS!!! TAKE ALL NECESSARY STEPS TO PREVENT THIS HAPPEN! YOU ARE THE ONLY RESPONSIBLE FOR HARDWARE HANDLING, USAGE AND WIRING!!!

3G shield (d-u3G shield) difference: at insertion moment, ALIGN both sides (TX 2 TX and SLP 2 SLP).

READY! Now you may continue to wire your project connecting other boards, starting from the breadboard contacts.

Credits

published by Dragos Iosub & itbrainpower.net team on http://itbrainpower.net/ projects and how to section

Cursuri de electronica si robotica pentru copii

Academia Micilor Developeri organizează începând cu 13 octombrie cursuri de robotică pentru copii între 10 și 15 ani la sediul său din București, Bdul Hristo Botev nr.1 (zona piața Rosetti). Cursurile se întind pe o perioadă de 5 saptămâni și au loc în fiecare zi de marți între 18:30 și 20:00. Costul cursului este de 300RON (toate cele 5 ședințe). Organizatorii pun la dispoziție, în cadrul cursului, calculator și componente electronice pentru fiecare copil in parte (acestea reprezintă material didactic și nu rămân în posesia cursanților).

Cursul își propune să familiarizeze copiii cu noțiuni de bază ale electronicii, programării și roboticii prin intermediul lucrului cu placa de dezvoltare Arduino Uno. Printre lucrările practice realizate în cadrul cursului se pot enumera: joc de lumini cu leduri RGB, tonomat electronic, termometru digital, mașină telecomandată prin infraroșu.

Pentru înscrieri:
http://www.miciideveloperi.ro/robotica-pentru-copii/
Pentru mai multe informatii:
http://www.miciideveloperi.ro
Telefon: 0724 571 217
Email: cursuri@miciideveloperi.ro

RoboRemo – aplicatie Android pentru controlul robotilor

[guest post scris de Victor Berzan]

In anul 2 de facultate am construit primul line follower. Bineinteles ca n-a mers perfect din prima. Cea mai mare bataie de cap era cu algoritmul de ocolire a obstacolului, unde aveam o valoare de prag pentru senzorul Sharp, apoi un delay cat timp sa faca stanga, apoi cat sa mearga inainte, apoi dreapta, inainte, dreapta, inainte si stanga.

Pentru fiecare miscare aveam cate o constanta in cod, si toate constantele trebuiau ajustate. Fiecare ajustare insemna conectarea robotului la laptop pentru upload-area codului (ce bine ca microcontroller-ul permite 100.000 de scrieri in memoria Flash). Ca sa nu mai pierd atata timp, m-am gandit sa pastrez constantele in EEPROM si sa le modific dintr-un terminal serial.

Apoi am montat un modul Bluetooth pe robot, si modificam parametrii de la distanta, dar umblam cu laptop-ul dupa mine. Era mai ok sa folosesc un terminal serial pe telefon. Nu aveam telefon cu Android pe atunci, asa ca mi-am facut un terminal pentru Nokia e61 🙂 Acum era mult mai simplu sa „tunez” robotul. Daca vroiam ca viteza maxima sa fie 100, tastam M100 si enter, si nu mai era nevoie sa ridic robotul de pe traseu. Cand am trecut la Android, am facut cate un slider pentru fiecare parametru. Dar cand adaugam un parametru nou in cod, trebuia sa mai adaug si un slider, adica sa recompilez aplicatia si sa o instalez pe telefon. Asa a aparut ideea de aplicatie cu interfata configurabila. Acum daca mai vreau un slider – il adaug direct din aplicatie, il mut unde vreau pe ecran, ii modific dimensiunea, valoarea minima / maxima, culoarea, etc.

Robotul pe care il am acum are 30 de parametri:

‘M’ – viteza maxima
‘m’ – viteza minima
‘p’ – coeficientul proportional
‘d’ – coeficientul diferential

‘Z’ – distanta de la care sa incetineasca inainte de obstacol
‘z’ – distanta de la care sa inceapa ocolirea
‘O’ – de cate ori sa verifice daca intr-adevar l-a vazut
‘o’ – viteza cu care ocoleste

‘L’ – prin ce parte sa ocoleasca (1 = stanga, 0 = dreapta)

‘q’ – cate grade sa intoarca la stanga(dreapta) (robotul are giroscop 🙂 )
‘Q’ – cate ms sa mearga inainte
‘w’ – cate grade sa intoarca la dreapta(stanga)
‘W’ – cate ms sa mearga inainte
‘e’ – cate grade sa intoarca la dreapta(stanga)

‘t’ – pragul de culoare pentru a reveni pe linie

‘s’ – viteza de start
‘S’ – ms pana creste viteza de la s la M

‘R’ – pragul de eroare peste care franeaza daca pierde linia
‘k’ – viteza cu care franeaza
‘K’ – cate ms sa franeze

‘h’ – numarul de masurari pentru care face media erorii

‘Y’ – pragul de unghi pentru detectia podului
‘b’ – viteza maxima pe pod
‘F’ – peste cate ms sa inceapa sa verifice daca se inclina podul
‘y’ – pragul de unghi pentru detectia inclinarii podului
‘v’ – viteza cu care franeaza cand podul incepe sa se incline
‘V’ – cate ms franeaza
‘D’ – cate ms asteapta dupa ce a pus frana
‘B’ – peste cate ms incepe iar sa verifice daca da de pod

‘c’ – culoarea liniei, 0 = neagra, 1 = alba, 2 = auto

Si interfetele arata asa:

RoboRemo - interfata 1 lifo

 

 

RoboRemo - interfata 2 lifo

 

 

RoboRemo - interfata 3 lifo

 

Da, sunt 3 interfete, pentru ca nu a incaput totul pe ecranul telefonului. Poate pe o tableta ar incapea.

In afara de slidere si butoane, aplicatia permite sa adaugi si alte obiecte pe ecran:
led-uri, indicatoare de nivel, accelerometru, text, grafice, etc.

Aplicatia se poate conecta prin Bluetooth, WiFi sau internet mobil. Ca sa controlezi un (orice) cu aplicatia RoboRemo, iti trebuie un microcontroller cu port serial / uart (majoritatea au), si un modul Bluetooth sau WiFi.

Cateva exemple:

Controlez un servo prin Bluetooth:

https://www.youtube.com/watch?v=9y7STayMUHE

Controlez un led RGB prin Bluetooth:

https://www.youtube.com/watch?v=2kne9jRlN4E

Masor distanta cu un senzor Sharp:

https://www.youtube.com/watch?v=qmUQjJoCb3k

Controlez o masinuta prin WiFi:

https://www.youtube.com/watch?v=nz7vJ0woE0Y

Manualul utilizatorului (in limba engleza) se gaseste aici: http://www.roboremo.com/downloads.html
Aplicatia RoboRemoFree: https://play.google.com/store/apps/details?id=com.hardcodedjoy.roboremofree

Versiunea Free e limitata la 5 obiecte pe ecran (in afara de butonul de meniu si obiecte de tip text). Nu necesita conexiune la Internet (decat daca vrei sa controlezi ceva prin Internet).

Versiunea Full (costa cam cat o roata de robot) https://play.google.com/store/apps/details?id=com.hardcodedjoy.roboremo

Curs Arduino inceput februarie Brasov

 

 

Laborazon vă invită la cursul de introducere în Arduino, unul din cele mai flexibile şi accesibile medii de dezvoltare a instalaţiilor interactive.

Arduino este un mediu de dezvoltare pentru electronică, automatizări, robotică. Este open source și a fost conceput într-o universitate. Practic, Arduino este un mic calculator programabil, care poate comanda leduri, becuri, motoare, ecrane digitale. El poate interpreta informațiile primite de la butoane, senzori precum giroscopul, accelerometrul, o telecomandă, senzori de lumină, de temperatură, de distanță, de mișcare. În proiectele complexe poate fi comandat prin recunoaștere vocala, bluetooth, se poate conecta la internet și poate fi creierul roboților industriali sau de hobby.

Cursul se recomandă persoanelor peste 12 de ani, tuturor celor curioși să dezvolte obiecte sau medii interactive (artiști, designeri, pasionați de electronică și programare). Cunoștințele de programare nu sunt obligatorii.

Participanții trebuie să vină la curs cu laptopul personal. Kitul Arduino cuprinzând placă Arduino, breadboard, leduri, conectori, rezistente, tranzistori, condensatori, diode, etc sunt puse la dispoziția cursanților de către Laborazon ca material didactic. Fiecare participant va primi cadou o carte despre Arduino din partea Robofun.ro.

 

–––––––––––––––––––––––-

Îndrumător: Alexandru Manolescu – inginer proiectant pasionat de electronică. Alex are o abordare practică a problemelor care îi ies în cale. O instalaţie făcută de el are totdeauna cea mai simplă rezolvare, fie că e vorba de o bucată de cod sau de rotiţe zimţate pe care le reciclează de la o imprimantă. Alex a obţinut titlul de doctor în tehnologie industrială în 2012 şi e pasionat de ski şi de mersul cu bicicleta.

Asistent: Ionuţ Rozmarin – Ionuţ “Rozu” lucrează la una din firmele proeminente din Braşov şi este membru susţinător al clubului de electronică. Este abil şi în programare, şi în hardware.

–––––––––––––––––––––––-

Desfășurare: 7 februarie, durata 4 ore, program de la 10.30 la 14.30, cu pauze incluse.

Loc desfăşurare: Atelierul de Serigrafie, str. Traian Grozavescu, nr. 11

Partener: RoboFun.ro

Cost curs: 100 de lei. Înscrieri la alina@laborazon.ro. Plata se face în avans, detalii pe mail după înscriere. Locurile se ocupă în funcţie de confirmarea plăţii.

Haideți să ne jucăm în viitor!

Despre Laborazon Maker Space+++

Scopul nostru este de a sprijini mințile creative în a construi și a experimenta cu tehnologie, artă, și inovare într-un mediu colaborativ.

Atelierul nostru este un spațiu de creatie, bricolaj și incubator de idei pentru persoane creative care doresc să-și pună proiectele în realitate sau să colaboreze. La noi oamenii vin pentru a construi, pentru a crea, pentru a inventa și pentru a învața.

www.laborazon.ro