lunes, 4 de agosto de 2014

Cos de un programa en Arduino

Es programa en el llenguatge d’alt nivell i generalment té els següents components per elaborar l’algoritme:
  • Estructures
  • Variables
  • Operadors matemàtics, lògics i booleans (variable que només pot obtenir dos resultats: sí/no, 1/0...)
  • Estructures de control (condicionals i cicles)
  • Funcions

Estructures:

Són dos les funcions principals que deu tenir tot programa en Arduino.
setup(){
}
És el codi de configuració inicial, només s’executa un cop
loop(){
}
Aquesta funció s’executa després del setup(), es manté executant-se fins que es desconnecta l’Arduino.

Variables:

Es u conjunt de dades que canvien el seu valor amb l’executació del programa
Boolean, true ó false: Boolean encendido=true;
Enter, valor sencer: int conta=5;
Caràcter, enmagatzema un ASCII: char letra=’a’;

Operadors booleans:

Utilitzats generalment dins del condicional If
  • && (i)
  • || (o)
  • ! (negació)
Per exemple If (a || b)

Operadors de comparació:

Utilitzats generalment dins del condicional If i sobre el For i While
  • == (igual a)
  • != (diferent de)
  • < (menor que)
  • > (major que)
  • <= (menor o igual)
  • >= (major o igual)
Per exemple If (a == b)

miércoles, 9 de julio de 2014

Muntatge del quadricòpter

Muntatge connexions ESC

Primer es comença soldant els tres cables grocs que surten dels ESC a uns connectors femelles, després els tres cables que surten dels motors es solden a uns connectors mascles, ambdós casos s’envolta la soldadura amb tubs termoretràctils.
Es solden els cables vermells i negres dels ESC a la estructura del frame, els vermells al positiu, i els negres al negatiu, es farà el mateix amb un parell de cables en els que s’endollarà la bateria, com que als ESC els hi hem tret els UBEC (Universal Battery Elimination Circuit), es tindrà que connectar un d’extern soldant-lo al circuit, aquest anirà connectat, per una banda a la bateria i per l’altre amb el receptor de l’emissora, que s’explicarà més endavant.


Muntatge de l'estructura (frame) i dels motors

Després es cargolen les potes del quadricòpter a la planxa inferior, i amb unes brides es col·loquen els ESC un a cada pota, també es cargolaran els quatre motors als extrems de les potes i es connectaran amb els ESC de dos maneres diferents, depenent cap a on es vol que girin els motors, en la següent imatge es mostra el sentiti de la rotació dels motors:


Quadricòpter disposició en X

Cadascun d’aquest números (foto anterior) representa el pin en el que anirà connectat cada ESC, que a la vegada serà el motor d’aquella pota. Per exemple la pota de davant a la dreta anirà connectada al pin 10.

Muntatge placa CRIUS

Es cargola la placa CRIUS a la base de l’estructura (preferiblement amb cargols de plàstic, ja que uns de ferro podrien produir curtcircuits), i es connecta el grup de tres cables petits dels ESC a la CRIUS.


Muntatge de l'UBEC comú

Com ja s’ha anomenat abans no s’utilitzarà el UBEC de cadascú dels ESC, per tant traurem el cable del mig dels petits que surten del ESC, que correspon a la connexió del UBEC, i s’aïllarà amb en tub termoretràctil.


Muntatge del receptor de l'emissora

Amb una brida s’incorporarà a la base de la estructura un receptor de la emissora de la que li sortiran 6 canals, que aniran connectats a la CRIUS de la següent manera



Finalització del muntatge de l'estructura

Se li col·loca la xapa superior cargolant-la a les potes per a protegir la placa CRIUS i per posar la bateria a sobre.

Muntatge de la bateria

La bateria ja ve amb el cablejat fet. Porta un connector per a la càrrega i l'avisador de càrrega i un altre per connectar-la als motors. Ja s'han explicat abans les conexions amb els ESC i la planxa de l'estructura



Connexió USB

Es fan les conexions de la placa USB a la placa CRIUS de la següent manera:



L'equilibrat de les hèlix

S’equilibren les hèlix per a evitar vibració de la manera següent:


Si cau cap a un costat se li afegeix “celo” per l’altre costat, també es pot llimar, però és més laboriós.
Finalment es col·loquen les aspes en els motors, tenint en compte el sentit de gir.

Quadricòpter muntat


lunes, 7 de julio de 2014

Introducció curs quadricòpters

Estructura general:

  • Estructura de suport.
  • Hélix: 4 en sentit de rotació alternatiu (2 levo, 2 dextro). Duran el muntatge s’han d’equilibrar per tal de que el quadricòpter sigui estable
  • Motors brussless: sense escombretes. Rendiment 100 vegades superior. No hi contacte físic entre els element mòbils. La seva regulació es electrònica mitjançant els ESC (electronical speed control), que porten un limitador de voltatge incorporat que no es farà servir en el projecte ja que s’utilitzarà un limitador extern. La intensitat màxima suportable per l’ESC ha de esser superior a la del motor.
    Iesc > Imotor
    La nomenclatura es amb 4 dígits, els dos primers son el diàmetre (mm) i els 2 últims l’alçada(mm). Kv = número de voltes per volt.
  • La bateria està construïda amb 3 en sèrie de 3,7 v. cadascuna que fan un total de 11,1 v. Duració (h) = Capacitat(Ah)/Consum(A) La bateria té la inscripció 25C i alimenta els motors i el processador de control. Càrrega estàndard: es carrega en comú i la primera de les tres que arriba al màxim para la càrrega. Es més ràpida però no es completa. Càrrega balanç: carrega d’una en una. És més lenta però es carreguen completament totes 3 bateries.
  • CRIUS
    Targeta controladora de vol que inclou:
    • 3 giroscopis: mesuren la inclinació
    • 3 acceleròmetres: mesuren la velocitat
    • 3 magnetòmetres: mesuren la direcció
    • 1 baròmetre: mesura l’alçada.
    • Pins de connexió per actuadors (4 ESC), canals de comandament, entrada de dades de l’ordinador, alimentació...
  • Controladors de la velocitat dels motors (ESC) es basene en el PwM (Pulse wide modulation) Serveix per simular una senyal analògica i es fa modulant el temps de la ona ON/OFF

Sensibilitat del comandament a distància

Tipus de vol:

  • Stable: quan es deixa el joystick en posició neutra el quadricòpter resta en posició estable (equilibrat i sense moviment). En vol no s’inclina més de 45º.
  • Acrobàtic: es tot manual sense límit d’inclinació.
  • Alt Hold: vol a una alçada estable.
  • GPS  hold: vola a una ubicació determinada.

domingo, 29 de junio de 2014

Crius SE V2.0 MultiWii Board (MWB) Informació general y configuració

Font: Painless360



En aquest vídeo es describeix MultiWiiBoard i es compara amb les altres dues que utilitza l'autor en els seus models (Arduino Mega-APM 2.5 i KK2.0) en la forma d'instal·lació, cablejat i configuració de principi a fi.

Es por veure aquest mateix CRIUS SE V2 Multiwii control board (MWC) board al següent link:

http://www.banggood.com/buy/crius-se-v2.html?utm_source=youtube&utm_medium=youtube_review&utm_campaign=youtubereview&utm_content=sami?p=1!24200740132012086@

Per descarregar el software i els fitxers de configuració:
  1. http://code.google.com/p/multiwii/source/browse/#svn%2Ftags
  2. http://arduino.cc/en/Main/Software
  3. https://dl.dropboxusercontent.com/u/67301981/MW-download.zip

Detalls del Quad:
  • Clone F330 frame
  • 4 x 20A Simon K flashed ESCs
  • 4 x Tunigy D2822/14 1450KV motors
  • 300mAh 45c 3S LIPO battery
  • AR6100 Rx

lunes, 9 de junio de 2014

Coursera: el pensamiento algorítmico

La web coursera és un projecte de cursos online, m'he inscrit en el curs "pensamiento algorítmico", que m'ajudarà a les tasques d'elaboració del meu projecte de recerca





El programa Progranimate és gratuït i es pot descarregar en el següent enllaç:
PROGRANIMATE

lunes, 26 de mayo de 2014

Objectius del projecte de recerca: Disseny i construcció d'un quadricòpter controlat a distància

Motivació personal


L'idea va sorgir d'un primer contacte amb la tecnologia Arduino que vaig trobar cercant projectes d'electrònica assequibles pel meu nivell. El que volia era fer un projecte que pogués portar físicament a la presentació del treball, cercant vídeos d'Arduino per YouTube vaig veure un que tractava sobre quadricòpters, la idea em va atreure, tot i que semblava molt difícil a primera vista.

Objectius del projecte


Objectiu principal: El projecte consisteix en el disseny i implementació d'un cuadricòpter, sistema físic d'experimentació que consta de quatre rotors que estaran controlats per un microcontrolador Arduino que, a més ha de rebre informació dels sensors necessari per a controlar el vol. L'aparell haurà de ser capaç de comunicar-se remotament perquè sigui possible controlar la seva direcció i moviment. Per a això, s'hauran d'analitzar quines són les alternatives existents, tant pel que fa al maquinari com al programari.

Objectius específics:
  • Generar la plataforma quadricòpter, fent us de un microcontrolador i sensors adequats.
  • El quadricòpter ha de ser capaç de comunicar-se amb una aplicació que corri en el sistema operatiu Android, o amb control de comandaments.
  • Experimentar diferents algoritmes de control de l'equilibri i vol.
  • El estudi físic del vol (la força necessària per a elevar el dron i desplaçar-se)

Objetius personals


Aquest repte me'l plantejo perquè vull aprendre en els següents camps:
  • Programació i sistemes algorítmics.
  • Entorn Arduino i electrònica bàsica: Afrontar un problema que combini hardware + software.
  • Llenguatge de programació Arduino (basat en Wiring)
  • Funcionament bàsic de diferents elements electrònics i específicament de aceleròmetres i giroscòpis.
  • Control remot de vehicles.
  • Programació a l'entorn Android.

sábado, 1 de marzo de 2014

Voltatges analògics i PWM

En aquest circuit s'experimenta com Arduino simula les senyals analògiques. Els processadors digitals com és el cas d'Arduino treballen amb informació que té 2 estats: 0 que equival a terra i 1 que son 5 volts. Per simular una senyal analògica que te un ventall de possibilitats entre 0 i 5 volts el que fa Arduino es modular el temps en el que està a 0 i a 5, com es veu a la imatge:


Materials necessaris

  • Placa arduino uno
  • Protoboard
  • Led monocromo
  • Resistència 10KΩ ±5%
  • Potenciòmetre
  • Cablejat

Circuit

S'han fet 2 circuits, en el primer comprovem com varia la intensitat d'un led dissenyant un programa en el que mitjançant un bucle FOR es varia la intensitat del led. En el segon circuit fem lo mateix però mitjançant un potenciòmetre.

Circuit 01


Circuit 02


Programa

El primer programa té un element nou: fem servir el bucle FOR per modificar progressivament la intensitat de la variable "brillo" entre un rang de 0 a 256 que és amb el que treballa Arduino.



Veure resultat:



En el segon programa canviem la intensitat de manera manual amb un potenciòmetre. Hem de transformar les unitats de sortida analògica entre 0 i 255 a les unitats en les que treballa el potenciòmetre: entre 0 i 1023. Es fa de manera aproximada dividint per 4.



Aquest es el resultat:


miércoles, 15 de enero de 2014

Proposta de treball de recerca batxillerat

Vull fer un treball de recerca dins l'àrea de tecnologia. Es tractarà de desenvolupar un projecte d'aplicació pràctica fent servir eines de tecnologia actual. Avui en dia estem acostumats a utilitzar objectes d'alta tecnologia sense ser conscients de la complexitat d'aquestes eines per exemple un mòbil, Internet... Fins i tot una simple bàscula de cuina té uns sensors de pressió, un circuït imprès i un microprocessador.


He pensat utilitzar la tecnologia d'Arduino; es tracta d'un dispositiu de hardware basat en la filosofia de programari lliure, està composat d'un processador, una connexió USB i un conjunt de sortides a les que es poden diferents tipus d'elements electrònics.

En els darrers mesos he anat fent petites instal·lacions electròniques per familiaritzar-me amb Arduino. He fet servir com arxiu d'aquestes experiències aquest blog.

Les possibilitats que dona Arduino són gairebé infinites, a continuació explicaré unes quantes:
  • Jocs: Diana electrònica, roda de la fortuna automàtica...
  • Música: Sintetitzador musical, arpa sense cordes, bateria automàtica, pedal per guitarra elèctrica...
  • Muntatges audiovisuals: Cub de LED, expositors lluminosos.
  • Sistemes automàtics: Reg automàtic, dispensador d'aliments per a mascotes
  • Robots i drons: per realitzar tasques específiques.
  • Sistemes de control: Reguladors de temperatura, velocitat, brúixoles i compassos, enllumenat dels carrers, domòtica...
  • Impressores 3D

En el proper mes triaré algun tema en concret, amb l'ajuda del professor de tecnologia; mentrestant practicaré amb Arduino per conèixer millor el seu funcionament.

lunes, 6 de enero de 2014

Encendre un LED amb un botó

Materials necessaris

  • Placa arduino uno
  • Protoboard
  • Led monocromo
  • Resistència 220Ω ±5%
  • Botó
  • Resistència 10KΩ ±5%
  • Cablejat

Circuit

El circuit té dues parts:
  • LED amb resistència, igual a l'entrada anterior
  • Botó: d'una banda està conectat a la font de 5v. i per altra a terra mitjançant una resistència. D'aquesta manera l'Arduino llegeix 5v quan el botó està pressionat i llegeix terra al soltar-lo

Esquema del circuit fet amb Fritzi:


Programa

El programa presenta dos novetats respecte a l'anterior, d'una banda definirem variables abans del void setup. D'altra part farem servir el comando IF per fer accions si es compleixen determinades condicions.

En primer lloc fem un programa que encén el LED quan el botó està pressionat:

const int LED = 12; // el pin del LED
const int BUTTON = 7; // el pin d'entrada on es conecta el botó
int estat = 0; // valor per a quardar l'estat del pin d'entrada

void setup()
{
  pinMode(LED, OUTPUT); // LED-----> sortida
  pinMode(BUTTON, INPUT); // BUTTON--> entrada
}

void loop()
{
  estat = digitalRead(BUTTON); // llegir el valor d'entrada
  if (val == HIGH)
  {
    digitalWrite(LED, HIGH); // encendre el LED
  }
  else
  {
    digitalWrite(LED, LOW); // apaga el LED
  }
}




Veiem que el circuit funciona però es poc pràctic. Per això modifiquem el programa per tal de que al prémer el botó encenem el LED i al tornar-lo a pressionar s'apaga.
Hem d'introduir una nova variable ESTAT que "recorda" si el LED està apagat o encès per tal de poder canviar-lo al prémer el botó:

const int LED = 12; // el pin del LED
const int BUTTON = 7; // el pin d'entrada on es conecta el botó
int estat = 0; // valor per a quardar l'estat del
pin d'entrada
int sortida = 0; // 0 = LED apagat y 1=LED ences

void setup()
{
  pinMode(LED, OUTPUT);      // LED-----> salida
  pinMode(BUTTON, INPUT);    // BUTTON--> entrada
}

void loop()
{
  estat = digitalRead(BUTTON); // llegir el valor d'entrada 


// comprobar si l'entrada es HIGH (botó pulsat)  
if (estat == HIGH)
  {
    sortida = 1 - sortida;
  }


if (sortida == 1) {
    digitalWrite(LED, HIGH); // encender el LED
  } else {
    digitalWrite(LED, LOW);
  }
}



Es pot observar que funciona a vegades. Això està en relació amb el fet de que el LOOP s'executa a molta velocitat i es canvia la variable ESTAT moltes vegades mentre mantenim el botó pressionat. Per aixó hem de modificar el programa per tal de millorar-lo.
Afegim una altra variable per comparar si l'estat del botó canvia respecte a l'anterior.

const int LED = 12;// el pin del LED
const int BUTTON = 7;// el pin de entrada on es conecta el botó

int estat = 0; // guarda l'estat del botó          
int EstatPrevi = 0; // guardar el estado anterior del botón
int sortida = 0; // 0 = LED apagado y 1=LED encendido

void setup() {
  pinMode(LED, OUTPUT);      // LED-----> salida
  pinMode(BUTTON, INPUT);    // BUTTON--> entrada
}
void loop(){
  estat = digitalRead(BUTTON); // llegir el valor d'entrada


  // comprobar si la entrada es HIGH (botó apretat)i es diferent
  if ((estat == HIGH) && (EstatPrevi == LOW))
  {
    sortida = 1 - sortida;
  }
  EstatPrevi = estat;    // guarda el valor actual
  if (sortida == 1) {
    digitalWrite(LED, HIGH); // encendre el LED
  } else {
    digitalWrite(LED, LOW);
  }
}




Veiem que funciona millor però a vegades falla. Això es degut al rebot que es produeix en els botons, ja que son elements mecànics amb una certa imprecisió, com es veu a la figura:



Solucionarem el problema d'una manera senzilla afegint un retard d'uns microsegons. Existeixen sistemes més complexes però aquest, de moment, ens funciona:

const int LED = 12; // el pin del LED
const int BUTTON = 7; // el pin d'entrada on es conecta el botó

int estat = 0; // guarda l'estat del botó         
int EstatPrevi = 0; // guarda l'estat anterior del botó
int sortida = 0; // 0 = LED apagat i 1=LED encès

void setup() {
  pinMode(LED, OUTPUT);      // LED-----> sortida
  pinMode(BUTTON, INPUT);    // BUTTON--> entrada
}
void loop(){
  estat = digitalRead(BUTTON); // llegir el valor d'entrada


  // comprovar si l'entrada es HIGH (botó apretat)
  if ((estat == HIGH) && (EstatPrevi == LOW))
  {
    sortida = 1 - sortida;
    delay(20);
  }
  EstatPrevi = estat;    // guarda el valor actual
  if (sortida == 1) {
    digitalWrite(LED, HIGH); // encender el LED
  } else {
    digitalWrite(LED, LOW);
  }
}