Software pentru masini cu control numeric (CNC)

Controlul numeric (eng. NC – Numerical Control) reprezinta un mod de operare al unor masini-unelte sau roboti industriali, prin automatizarea intregului proces cu ajutorul unui set de instructiuni ce controleaza miscarile masinii. In mod frecvent, setul de instructiuni este interpretat de un computer, de unde si denumirea de CNC (Computer Numerically Controlled).
Sarcinile masinilor-unelte sunt foarte variate, de taiere, gaurire, frezare etc., totul facandu-se automat, dupa o schema (model) prestabilita si incarcata in software-ul de pe computerul care comanda.
Masina dispune de obicei de 2 axe de deplasare (XY) pe care se deplaseaza un cursor (care reprezinta unealta ce indeplineste sarcina efectiva (taiere, decupare etc). Cursorul poate avea 2 stari (sus/jos sau activ/inactiv): in starea activa se produce operatia efectiva asupra materialului, pe cand starea inactiva reprezinta doar o stare de tranzitie intre doua stari active (cursorul este deplasat catre urmatoarea pozitie utila).
Controlul cursorului se face in mod riguros, cu o viteza precisa de inaintare si pe un anumit traseu. Deasemenea, miscarile individuale ale cursorului sunt controlate precis. De exemplu, in cazul in care cursorul reprezinta o scula de gaurire sau frezare, viteza sa de rotatie este deasemena controlata; daca in schimb, taierea se face prin laser, jet de apa sau termic, se va controla intensitatea jetului.
Mai multe despre masinile CNC, aici.

Detalii de implementare
Proiectul este inca in faza de dezvoltare, implementarea a fost facuta in C++ (Microsoft Visual Studio 2010)  si contine doar partea de incarcare de fisiere PLT (generate din Corel Draw) si modulul de randare si afisare a modelului incarcat.

Pentru randarea (desenarea) modelului am folosit un engine grafic minimal (pe care l-am implementat separat, ca librarie DLL), ce suporta operatii de transformare de baza: trasare model, translatie, zoom.
Pentru mecanica si deplasarea efectiva a cursorului masinii, programul trimite serial comenzi catre un cip ce comanda doua motoare tip stepper (unul pentru fiecare din cele doua axe). Comanda facandu-se la nivel de pas, fiecare directie de deplasare (la nivel de model, directia de deplasare reprezinta o linie dreapta intre doua puncte) trebuie descompusa in punctele componente. Pentru asta, am utilizat algoritmul Bresenham.
Totodata, pe langa informatiile despre deplasarea celor doua steppere, programul trimite si informatia despre pozitia cursorului (sus/jos sau activ/inactiv) in timpul deplasarii (liniile rosii care se observa in filmulet reprezinta starea inactiva iar cele albastre, starea activa).

In loc de nota de subsol

Pendulul invers. Roata de reactie

In domeniul spatial, rotile volante (roti de reactie sau in engleza “reaction wheels“) sunt dispozitive de stabilizare si orientare atasate vehiculelor spatiale (nave spatiale, sateliti etc) folosite la pozitionarea acestora in conditii de mediu speciale (cum ar fi lipsa gravitatiei). In componenta rotii volante intra un motor electric, a carui variatie de viteza produce momentul dorit (cauzand nava sa se miste in contra-rotatie, pentru conservarea momentului unghiular), rezultand in final deplasarea (rotirea) ansamblului pe o anumita directie, cu o anumita velocitate si sub un anumit unghi. Intregul sistem e controlat de un microprocesor (printre care viteza motorului), incat scopul final sa fie indeplinit (rotatia navei, mentinerea navei orientata intr-o anumita directie etc). Mai multe detalii despre reaction wheel aici.

Pendulul invers (“inverted pendulum” in engleza) este una dintre aplicatiile rotii de reactie. Avand centrul de masa deasupra punctului de rotatie (pivot), acesta se gaseste intr-o continua stare de instabilitate. Asadar, pentru mentinerea pozitiei verticale, e necesara folosirea unui sistem cu feedback ajustat continuu (roata de reactie). Un exemplu de pendul invers este chiar omul (si mentinerea sa in pozitie verticala).

La constructia unui astfel de pendul am participat (impreuna cu Vali), sistem pe care vi-l prezint in filmuletul de mai jos.

Componente
Motor:     1 x 50:1 Metal Gearmotor 37Dx54L (controlat de driverul in punte H L298N)
Senzori:   2 x HEDL 5540 encoder de rotatie optic (unul pentru determinarea vitezei motorului si altul pentru bratul pendulului)
Schelet:    Suport din platbanda de aluminiu, lingouri de plumb pentru contragreutatile rotii, plexiglas pentru suportul modulului electronic.
Control:   Arduino Duemilanove (microcontroller ATmega168)

Magia Numerelor

Magia Numerelor te ajuta sa inveti lucruri uimitoare despre numere. Impresioneaza-ti prietenii ghicindu-le varsta, data nasterii, sau chiar “citindu-le” gandurile! Totul doar facand cateva calcule. Jocul exploreaza cateva dintre cele mai frumoase proprietati matematice din viata de zi cu zi.


Cerinte:    Smartphone/Tableta cu cel putin Android 2.1 (Eclair – API Level 7)

Screenshots:

 mainscreen_ro    phone1_ro    phone2_ro

mainscreentab_ro    tab2_ro

Download:

Get it on Google Play
qrfree.kaywa.com

Sistem controlat la distanta prin tonuri multifrecventa (DTMF)

Tonurile multifrecventa (dual tone multi-frequency sau DTMF) reprezinta un mijloc de semnalizare in banda de voce a retelelor de telefonie analogice, fiind foarte des utilizate in sistemele tip IVR (interactive voice response) pentru transmiterea de comenzi dinspre terminale catre centralele de telefonie. Cu alte cuvinte, centrala este capabila ca in timpul unui apel telefonic de voce sa recunoasca tonuri ce se regasesc in anumite intervale de frecventa. De exemplu, in retelele GSM de azi, un apel catre numarul de relatii cu clientii al retelei rezulta intr-o comunicatie cu un astfel de sistem IVR automat: “discutia” cu robotul de la celalalt capat se face prin apasarea tastelor corespunzatoare meniului oferit. Apasarea tastelor are ca efect generarea de tonuri DTMF, ce vor fi interpetate de catre robot ca si comenzi, si va raspunde in consecinta.

In articolul de fata va prezint un sistem capabil de interpretarea tonurilor DTMF transmise intre doua terminale mobile. Pentru constructie aveti nevoie de doua telefoane (in acest caz mobile, dar sistemul se adapteaza usor si pentru retelele fixe): un telefon are rolul de apelant si celalat rolul de apelat. Telefonul apelat va raspunde apelului de voce initiat de apelant si va transmite semnalul catre sistemul de decodificare a tonurilor multifrecventa.

SMS control cu Arduino via PC

Proiectul face parte din categoria “Smart-Home” sau “Home-Automation” si va prezinta o solutie simpla si ieftina de a controla la distanta deschiderea/inchiderea usilor casei dvs, aprinderea/stingerea luminilor, in general controlul oricarui fel de dispozitive, la cerere, cu ajutorul telefonului mobiul personal.
Intregul sistem este compus din:
– Un PC
– Un microcontroller (de exemplu Arduino)
– Un telefon mobil cu suport de modem (majoritatea terminalelor actuale corespund)
– O cartela/abonament valabil intr-o retea GSM (pentru a putea primi/trimite mesaje SMS)

Mod de functionare

Telefonul mobil se va conecta la PC in modul modem/dial-up si reprezinta sistemul de comanda. La conectarea la calculator, modemului i se va atribui automat – de catre sistemul de operare – a un port serial virtual (COMx) care poate fi folosit pentru initierea conexiunii/ transmiterea de comenzi. Setul de instructiuni acceptate este cunoscut ca set de comenzi AT (compatibil Hayes). Detalii aici.

Softul pentru PC in principiu va ‘asculta’ primirea de SMS-uri cu ajutorul telefonului. Interogarea se poate face in bucla/pooling – la intervale de timp (pop),sau printr-un sistem de evenimente (push). Pentru a testa capabilitatile modemului/telefonului, acesta se poate testa prin crearea unei conexiuni seriale cu ajutorul unui client ce permite acest lucru (precum PuTTY sau HyperTerminal in Windows). De exemplu, trimiterea
instructiunii “ATI” pe un device Sony Ericsson k310 va avea ca raspuns un text de identificare a modelului, tipului, reviziei telefonului. Setul de instructiuni AT poate fi gasit aici.

Prin rutarea mesajelor sosite direct catre terminal (AT+CNMI), ele vor putea fi parsate/interpretate direct. Atentie insa ca mesajul nu este in cleartext, ci se prezinta codificat in formatul PDU, continand, pe langa informatia utila si un header pentru metadate precum centrul de servicii al retelei GSM, stampa de timp, expeditor etc. De asemenea, reprezentarea caracterelor se poate face pe 7, 8 sau 16 biti (mesajele SMS clasice sunt de obicei reprezentate pe caractere de 7 biti, mesajele EMS – imagini sau sunete prin SMS – pe 8 biti, iar mesajele cu caractere internationale, pe 16 biti). Mai multe despre formatul PDU, aici.

Scenariul clasic de utilizare a sistemului de control este urmatorul: posesorul/persoana avizata in sistem detine un telefon mobil pe care compune un mesaj scurt SMS, continand o comanda simpla, pre-stabilita in sistem (de exemplu: “Aprinde lumina”). Mesajul il va trimite catre numarul de telefon asociat cartelei SIM existente in modemul sistemului. Conectat la PC, telefonul/modemul se asigura de rutarea mesajului catre terminal (sau va fi citit in bucla de catre programul instalat pe PC). In continuare, programul va decodifica mesajul din format PDU in cleartext si va extrage informatia utila, anume textul mesajului si expeditorul. Textul mesajului reprezinta comanda in sine iar de expeditor avem nevoie pentru a permite blocarea expeditorilor falsi sau fraudulosi. Avand o mica baza de date cu lista de comenzi permise si actiunile asociate, programul va efectua in continuare o cerere catre microcontrollerul conectat.

Sistemul de actiune este reprezentat de un microcontroller (in cazul de fata Arduino), care, pe baza unor comenzi este capabil sa execute anumite actiuni (care se reduc la actionarea LOW/HIGH a anumitor iesiri). Asadar, dupa primirea si interpretarea mesajului SMS, programul instalat pe PC trimite mai departe catre Arduino o anumita cerere (care in memoria microcontrollerului are o anumita semnificatie, in speta actionarea anumitor iesiri). Detalii despre Arduino si modalitati de comunicare seriala cu acesta se gasesc pe pagina sa oficiala.