miercuri, 14 noiembrie 2018

Black Friday la eMAG 2018





Mi-am făcut o listă cu electronice (am o banuială că vor avea reduceri substațiale):

Pentru a susține acest site vă rog sa folosiți linkurile de mai sus pentru cumpărăturile de pe emag.ro.

Mulțumesc și spor la cumpărături !

TED - Discutii despre open source

Open source este o revolutie in sine care urmează să schimbe structura economica, modul in care lucram, gandim si actionăm. Deja multe din companiile mari au adopatat modul acesta de a coopera si de a actiona. Eu cred ca lumea open source va evolua si mai mult in anii urmatori. Linux e deja peste tot ... si e definitia open source-ului.


“Open Source software operates in a multiverse, where everything is possible and everyone is welcome to do their own thing. Microsoft operates in a top-down, dogmatic, Flat Earth digital Universe, where as far as they are concerned, everything revolves around them, and everything else is considered unenlightened and sinful.” — Yasha Harari

luni, 12 noiembrie 2018

Editoare simple de cod și text

1. Notepad++ este extrem de popular, parțial pentru că este gratuit și licențiat cu licență GPL. Și mai mult decât atât, este simplu. Începătorii și veteranii pot obține tot ce au nevoie de la el. Este adesea menționat în postările blogărilor ca o opțiune excelentă pentru cineva care tocmai a intrat în editare de cod și ar putea fi copleșit de mediul oferit de Sublime sau Atom. Notepad++ este o opțiune minunată, simplă, nu doar pentru începători, ci pentru dezvoltatori la orice nivel. O mulțime de profesioniști care utilizează Notepad++ zilnic, deoarece este ușor de folosit, eficienț și face ceea ce trebuie să facă.

2. Atom, un proiect inițiat de Github, este unul dintre editoarele de cod si text premium. Atom este complet gratuit, open source și foarte personalizabil. Construit în jurul unui nucleu minim de bază, Atom vine cu mai multe pachete specifice limbajului, iar pachetele de extensie au explodat de-a lungul anilor de când editorul a fost lansat pentru prima dată. Atom este la fel de robust pe cât trebuie să fie, iar dacă editorul nu face ceva de care aveți nevoie, puteți crea această caracteristică.

3. Nano e un editor ultra light si foarte eficient. Se foloseste mai mult in Unix si Linux, dar se poate utiliza si in Windows.

4.GNU Emacs Un editor extensibil, personalizabil, open source - și multe altele.
Caracteristicile GNU Emacs includ:
- Moduri de editare bazate pe conținut, inclusiv colorarea sintaxelor, pentru multe tipuri de fișiere.
- Documentație completă integrată, inclusiv un tutorial pentru utilizatorii noi.
- Suport complet Unicode pentru aproape toate caracterele și limbile Pământului.
- Foarte personalizabil, folosind codul Emacs Lisp sau o interfață grafică.
- Un ecosistem complet de funcționalități, dincolo de editarea textului, inclusiv un planificator de proiect, poștă și cititor de știri, interfață de depanare, calendar și multe altele.

- Un packaging system pentru descărcarea și instalarea extensiilor.
EmacsHumor

5. Vim - editorul de text omniprezent. Vim este un editor de text extrem de configurabil pentru crearea și modificarea eficientă a oricărui tip de text. Acesta este inclus ca "vi" cu majoritatea sistemelor UNIX și cu sistemul de operare Apple OS X. Vim este stabil ca o rocă și este în continuă dezvoltat pentru a deveni și mai bun. Printre caracteristicile sale se numără:
- Persistent si multi-nivel
- Sistem extensiv de pluginuri
- Suport pentru sute de limbaje de programare și formate de fișiere
- căutare puternică și înlocuire
- se integrează cu multe instrumente
ViHumor

6. Notepad - Aplicație simplă Notepad pentru editarea simpla de text si cod.

7. PSPad este un editor de cod freeware pentru sistemele de operare Microsoft Windows, util pentru persoanele care:
- lucrați cu diverse limbaje programare
- sintaxa evidențiată în codul sursă
- au nevoie de un instrument mic, cu comenzi simple și capabilitățile unui editor de cod puternic
- caută un instrument care să se ocupe de textul simplu
- doriți să economisiți timp - PSPad oferă funcții de formatare a textului
- aveți nevoie de un instrument care oferă capabilități de extensie a utilizatorului
- doresc să economisiți bani și să aveți în continuare funcționalitatea produselor profesionale, deoarece PSPad este gratuit în scopuri comerciale și guvernamentale

8. Komodo Edit este un editor simplu dar în același timp puternic.
Dacă aveți nevoie de mai multe funcții profesionale, cum ar fi depanarea, testarea unității, refactorizarea codului, profilarea codului și integrarea cu alte tehnologii (sisteme de control al versiunilor, Gulp, Grunt, PhoneGap, Docker, Vagrant etc.) atunci Komodo IDE este soluția pentru dvs.

9. SciTE este un Editor de text bazat pe SCIntilla. Inițial a fost construit pentru a demonstra Scintilla, dar a devenit un editor de text foarte simplu si util, cu facilități pentru construirea și editarea codului sursa. Este folosit pentru joburi simple.

10. Brackets este un editor de text ușor, dar puternic și modern care se poate folosi pentru editarea codului html , css si java script.

Lista completă de editoare o găsiți pe wiki

miercuri, 7 noiembrie 2018

TED - discutii si idei despre economia capitalistă



Un tanar fotbalist, foarte talentat, il intreaba pe patronul clubului:
- Cat de mare va fi salariul meu?
- La inceput 10.000 de euro pe luna, iar mai tarziu mai mare.
- Bine, atunci vin mai tarziu.


Un american isi face vacanta in Romania. Merge el ce merge si ajunge la o stană din Ardeal, unde e foarte impresionat de caine.
– Bade, cat ceri pe cainele asta? As vrea sa-l cumpăr.
– Nu e de vanzare.
– Iti dau 500 de dolari.
– Nu e de vanzare.
– Iti dau 1.000.
– Nu e de vanzare.
– Iti dau 2.000 de dolari pentru el.
– Nu e de vanzare si pace.
Americanul se vede nevoit sa renunte si sa isi vada de drum.
In aceeasi zi, un roman de la oras trece pe la stana si ii place cainele.
– Bade, e de vanzare cainele? Cat iti dau pe el?
– 50 de lei, spune ciobanul.
Cel de la oras da banii si pleaca cu cainele.
Dupa ce pleaca, un baiat de la stana il intreaba pe cioban:
– Pai bine, nene, americanul ti-a oferit 2.000 de dolari si matale ai vandut cainele pe 50 de lei?
– Apai ma, tu ma crezi pe mine prost? De la oras, se intoarce pana diseara. Dar din America?


marți, 6 noiembrie 2018

Mersul pe jos - plimbări lungi :)


La o clinica de tratament pentru batrâni, înainte de a se interna, batrânii trebuiau sa treaca pe la un medic, care le dadea sfaturi în functie de boala si buzunar. Intra primul batrân.
 - Ce pensie ai?
 - 3000 de lei.
 - De la masa sa nu-ti lipseasca friptura, sticla de vin si fructele tropicale.
 Al doilea batrân avea o pensie mai modesta, de 1000 de lei.
 - De la masa sa nu-ti lipseasca legumele, îi spune doctorul.
 Al treilea batrân avea o pensie de doar 300 de lei.
 - Tataie, aer, cât mai mult aer si plimbari lungi, lungi!


 

Până la urmă  plimbările lungi se pare că sunt chiar bune ... :) Ultimul pensionar o să fie cel mai sănătos dintre toți.
De vreo două luni am început să o duc pe fiică-mea la școală, și am de mers vreo 40 de minute în fiecare zi. Vreau să vă spun că a început sa-mi placă să merg pe jos.



marți, 30 octombrie 2018

Bec inteligent TP-Link LB100, LED, Wi-Fi, cu lumina reglabila - review

Descriere produs: Bec inteligent TP-Link LB100, LED, Wi-Fi, cu lumina reglabila
Automatizarea casei mele avansează cu încă o componentă inteligentă, un bec LED inteligent controlat prin WiFi. Becul a fost foarte usor de instalat. Aplicația Kasa l-a identificat foarte repede, și în nu mai mult de 60 sec am reușit sa folosesc becul. Intensitea luminoasa se poate controla foarte usor pentru a induce o atmosfera mai romantica :D . Acest bec se poate și programa să se aprindă sau să se stingă la ore prestabilite, si cred că această funcționalitate este foarte utilă dacă plec de acasă vreo cateva zile. Este un produs foarte bun și fiabil. Probabil o să încerc să controlez becul cu Amazon Alexa sau Google Assistant, dar asta în viitor. Utilizarea becului LB100 este ușoară și simplă. Un lucru care îmi place foarte mult este capacitatea de a adăuga widget-ul pe ecranul de start. Cu widget-ul de pe ecranul de start, am putut accesa butoanele On / Off fără a lansa aplicația. Deși este banal, acest lucru duce mult la eficientizarea utilizării. În ceea ce privește răspunsul, pornirea / oprirea becului prin widget durează aproximativ 1-2 secunde. Nimic mai important, dar mi-aș fi dorit să fie mai rapid. Cu toate acestea, dacă ați făcut-o prin aplicația în sine, răspunsul a fost instantaneu.

In lista din aplicația Kasa am acum și becul din camera mare, pe lângă cafetiera din bucatarie :
Se poate controla luminozitate,și se poate activa sau dezactiva la ore fixe:
Becul calculează și consumul de energie:

Documentatie:
Manual LB100(E26)_V2_Quick Installation Guide
User guide

Componente:
Bec inteligent TP-Link LB100, LED, Wi-Fi, cu lumina reglabila


Specificatii tehnice:

  • Tip soclu E27 (dulie normală)
  • Conectivitate Wireless (wifi)
  • Forma bec Glob Utilizat pentru Interior
  • Durata de viata 15000 h
  • Putere 8 W
  • Tensiune alimentare 220 V
  • Putere echivalenta 50 W
  • Tip lumina Calda Temperatura culoare 2700 k
  • Flux luminos 600 lm

Recomand ! O seară plăcută tuturor !

joi, 25 octombrie 2018

The Story of Mel, a Real Programmer

The story was copied from https://www.cs.utah.edu/~elb/folklore/mel.html

         Real Programmers write in FORTRAN.

     Maybe they do now,
     in this decadent era of
     Lite beer, hand calculators, and "user-friendly" software
     but back in the Good Old Days,
     when the term "software" sounded funny
     and Real Computers were made out of drums and vacuum tubes,
     Real Programmers wrote in machine code.
     Not FORTRAN.  Not RATFOR.  Not, even, assembly language.
     Machine Code.
     Raw, unadorned, inscrutable hexadecimal numbers.
     Directly.

     Lest a whole new generation of programmers
     grow up in ignorance of this glorious past,
     I feel duty-bound to describe,
     as best I can through the generation gap,
     how a Real Programmer wrote code.
     I'll call him Mel,
     because that was his name.

     I first met Mel when I went to work for Royal McBee Computer Corp.,
     a now-defunct subsidiary of the typewriter company.
     The firm manufactured the LGP-30,
     a small, cheap (by the standards of the day)
     drum-memory computer,
     and had just started to manufacture
     the RPC-4000, a much-improved,
     bigger, better, faster --- drum-memory computer.
     Cores cost too much,
     and weren't here to stay, anyway.
     (That's why you haven't heard of the company,
     or the computer.)

     I had been hired to write a FORTRAN compiler
     for this new marvel and Mel was my guide to its wonders.
     Mel didn't approve of compilers.

     "If a program can't rewrite its own code",
     he asked, "what good is it?"

     Mel had written,
     in hexadecimal,
     the most popular computer program the company owned.
     It ran on the LGP-30
     and played blackjack with potential customers
     at computer shows.
     Its effect was always dramatic.
     The LGP-30 booth was packed at every show,
     and the IBM salesmen stood around
     talking to each other.
     Whether or not this actually sold computers
     was a question we never discussed.

     Mel's job was to re-write
     the blackjack program for the RPC-4000.
     (Port?  What does that mean?)
     The new computer had a one-plus-one
     addressing scheme,
     in which each machine instruction,
     in addition to the operation code
     and the address of the needed operand,
     had a second address that indicated where, on the revolving drum,
     the next instruction was located.

     In modern parlance,
     every single instruction was followed by a GO TO!
     Put *that* in Pascal's pipe and smoke it.

     Mel loved the RPC-4000
     because he could optimize his code:
     that is, locate instructions on the drum
     so that just as one finished its job,
     the next would be just arriving at the "read head"
     and available for immediate execution.
     There was a program to do that job,
     an "optimizing assembler",
     but Mel refused to use it.

     "You never know where it's going to put things",
     he explained, "so you'd have to use separate constants".

     It was a long time before I understood that remark.
     Since Mel knew the numerical value
     of every operation code,
     and assigned his own drum addresses,
     every instruction he wrote could also be considered
     a numerical constant.
     He could pick up an earlier "add" instruction, say,
     and multiply by it,
     if it had the right numeric value.
     His code was not easy for someone else to modify.

     I compared Mel's hand-optimized programs
     with the same code massaged by the optimizing assembler program,
     and Mel's always ran faster.
     That was because the "top-down" method of program design
     hadn't been invented yet,
     and Mel wouldn't have used it anyway.
     He wrote the innermost parts of his program loops first,
     so they would get first choice
     of the optimum address locations on the drum.
     The optimizing assembler wasn't smart enough to do it that way.

     Mel never wrote time-delay loops, either,
     even when the balky Flexowriter
     required a delay between output characters to work right.
     He just located instructions on the drum
     so each successive one was just *past* the read head
     when it was needed;
     the drum had to execute another complete revolution
     to find the next instruction.
     He coined an unforgettable term for this procedure.
     Although "optimum" is an absolute term,
     like "unique", it became common verbal practice
     to make it relative:
     "not quite optimum" or "less optimum"
     or "not very optimum".
     Mel called the maximum time-delay locations
     the "most pessimum".

     After he finished the blackjack program
     and got it to run
     ("Even the initializer is optimized",
     he said proudly),
     he got a Change Request from the sales department.
     The program used an elegant (optimized)
     random number generator
     to shuffle the "cards" and deal from the "deck",
     and some of the salesmen felt it was too fair,
     since sometimes the customers lost.
     They wanted Mel to modify the program
     so, at the setting of a sense switch on the console,
     they could change the odds and let the customer win.

     Mel balked.
     He felt this was patently dishonest,
     which it was,
     and that it impinged on his personal integrity as a programmer,
     which it did,
     so he refused to do it.
     The Head Salesman talked to Mel,
     as did the Big Boss and, at the boss's urging,
     a few Fellow Programmers.
     Mel finally gave in and wrote the code,
     but he got the test backwards,
     and, when the sense switch was turned on,
     the program would cheat, winning every time.
     Mel was delighted with this,
     claiming his subconscious was uncontrollably ethical,
     and adamantly refused to fix it.

     After Mel had left the company for greener pa$ture$,
     the Big Boss asked me to look at the code
     and see if I could find the test and reverse it.
     Somewhat reluctantly, I agreed to look.
     Tracking Mel's code was a real adventure.

     I have often felt that programming is an art form,
     whose real value can only be appreciated
     by another versed in the same arcane art;
     there are lovely gems and brilliant coups
     hidden from human view and admiration, sometimes forever,
     by the very nature of the process.
     You can learn a lot about an individual
     just by reading through his code,
     even in hexadecimal.
     Mel was, I think, an unsung genius.

     Perhaps my greatest shock came
     when I found an innocent loop that had no test in it.
     No test.  *None*.
     Common sense said it had to be a closed loop,
     where the program would circle, forever, endlessly.
     Program control passed right through it, however,
     and safely out the other side.
     It took me two weeks to figure it out.

     The RPC-4000 computer had a really modern facility
     called an index register.
     It allowed the programmer to write a program loop
     that used an indexed instruction inside;
     each time through,
     the number in the index register
     was added to the address of that instruction,
     so it would refer
     to the next datum in a series.
     He had only to increment the index register
     each time through.
     Mel never used it.

     Instead, he would pull the instruction into a machine register,
     add one to its address,
     and store it back.
     He would then execute the modified instruction
     right from the register.
     The loop was written so this additional execution time
     was taken into account ---
     just as this instruction finished,
     the next one was right under the drum's read head,
     ready to go.
     But the loop had no test in it.

     The vital clue came when I noticed
     the index register bit,
     the bit that lay between the address
     and the operation code in the instruction word,
     was turned on ---
     yet Mel never used the index register,
     leaving it zero all the time.
     When the light went on it nearly blinded me.

     He had located the data he was working on
     near the top of memory ---
     the largest locations the instructions could address ---
     so, after the last datum was handled,
     incrementing the instruction address
     would make it overflow.
     The carry would add one to the
     operation code, changing it to the next one in the instruction set:
     a jump instruction.
     Sure enough, the next program instruction was
     in address location zero,
     and the program went happily on its way.

     I haven't kept in touch with Mel,
     so I don't know if he ever gave in to the flood of
     change that has washed over programming techniques
     since those long-gone days.
     I like to think he didn't.
     In any event,
     I was impressed enough that I quit looking for the
     offending test,
     telling the Big Boss I couldn't find it.
     He didn't seem surprised.

     When I left the company,
     the blackjack program would still cheat
     if you turned on the right sense switch,
     and I think that's how it should be.
     I didn't feel comfortable
     hacking up the code of a Real Programmer.

marți, 23 octombrie 2018

Programe si applicatii web pentru planificarea proiectelor

Am făcut o listă cu cele mai folosite și mai performante programe pentru planificarea  si controlul proiectelor:

1. GanttProject: instrument pentru crearea planului unui proiect
Fondată în 2003, GanttProject este unul dintre instrumentele cele mai  folosite de pe lista noastra. A trecut prin multe lansări în ultimii 15 ani, cel mai recent fiind în mai 2018 (GanttProject 2.8.8).

Puteți descărca GanttProject de la furnizor sau GitHub și SourceForge.

Este ideal pentru întreprinderile mici care au nevoie de capacități de planificare a proiectelor, de gestionare a resurselor și de gestionare a sarcinilor, dar care au, de asemenea, un personal IT care poate supraveghea punerea în aplicare și rezolvarea problemelor.

GanttProject este scris în Java (necesită Java RunTime) și este compatibil cu sistemele de operare Windows, OSX și Linux.

Capacitățile sale includ gestionarea sarcinilor, gestionarea resurselor și planificarea proiectelor, utilizând diagrame Gantt și diagrame PERT. Utilizatorii pot exporta date în .csv și pot genera rapoarte PDF sumare.

2. OpenProject: soluție robustă pentru managementul de proiectelor
OpenProject Community este o soluție robustă de management de proiect scrisă în Ruby on Rails și compatibilă cu sistemele de operare Linux.

Capabilitățile gratuite în comunitatea OpenProject includ gestionarea sarcinilor, urmărirea timpului, colaborarea în echipă, planificarea proiectelor utilizând diagramele Gantt, bugetarea și raportarea. De asemenea, sprijină managementul proiectelor Agile și oferă panouri de sarcini, backlog-uri, urmărirea bug-urilor și roadmapping.

Utilizatorii pot face upgrade la o licență plătită dacă doresc să utilizeze OpenProject în cloud sau ca o întreprindere. Planurile plătite oferă capacități suplimentare, inclusiv personalizarea, securitatea și suportul.

OpenProject a fost înființat în 2012 și pune în circulație noile versiuni cel puțin o dată pe lună, cel mai recent fiind în mai 2018 (OpenProject 7.4.5).

Puteți descărca sau achiziționa OpenProject direct de la furnizor sau descărcați și instalați de pe GitHub și SourceForge.

3.Asana este platforma de management a proiectelor pe care echipele o folosesc pentru a se concentra pe obiectivele, proiectele și sarcinile zilnice care îți dezvoltă afacerea.

4. Jira Software - Planificați, urmăriți și lansați software de clasă mondială cu instrumentul # 1 de dezvoltare software utilizat de echipe care folosesc conceptul Agile.

5. Microsoft Project - Simplificați managementul proiectelor, resurselor și portofoliului cu Microsoft Project, care va ajuta sa urmariți proiectele cu succes.

6. TeamGantt este soluția foarte faină care aduce software-ul de planificare a proiectului online. Acum puteți planifica și gestiona proiectele dvs. cu acest software de gantt ușor de utilizat. Invită colegii, colegii și prietenii să vă vadă și să editeze graficul dvs. TeamGantt este simplu și distractiv.

7. Redmine este o aplicație web flexibilă de gestionare a proiectelor. Scrisă utilizând cadrul Ruby on Rails, este o bază de date cross-platform și cross-database.

8. Wrike - Programul de colaborare bazat pe cloud și software-ul de management al proiectelor care se scaleaza pentru întreaga echipă în orice afacere.

9. Bitrix24 - Soluție intranet la cheie pentru companii mici și mijlocii, proiectată pentru o colaborare eficientă, comunicare, rețele sociale, proces de afaceri și managementul cunoștințelor. Permite o mai bună continuitate a cunoștințelor prin mutarea datelor din silozuri de rețea și unități locale într-un depozit centralizat bine protejat. Wikis, blogurile și forumurile asigură baze de cunoștințe bazate pe socialitate pentru îmbunătățirea muncii în echipă.

10. Targetprocess - este un instrument specializat de management al proiectelor care se pretează bine cadrelor de management agile de proiecte, cum ar fi panourile Kanban și Scrum. Instrumentul oferă funcționalități cum ar fi fluxurile de lucru personalizate, planificarea capacității echipei, urmărirea timpului și gestionarea problemelor.
Versiunea gratuită vă permite să creați până la 1.000 de proiecte și oferă suport de bază care include chat live și o bază de cunoștințe.







Programe si applicatii web pentru versionare

Am facut o lista cu cele mai folosite si mai performante programe pentru versionare si managementul proiectelor:

1. Git este un sistem de control al versiunii distribuit gratuit și open source proiectat să gestioneze totul, de la proiecte mici până la foarte mari, cu viteză și eficiență. Git este ușor de învățat și are o amprentă minusculă, cu performanță fulger. Acesta scoate în evidență instrumentele SCM precum Subversion, CVS, Perforce și ClearCase cu funcții cum ar fi ramificația locală ieftină, zonele de așteptare convenabile și mai multe fluxuri de lucru.

2. Mercurial SCM - Mercurial este un instrument gratuit de gestionare a sursei de control al surselor. Efectuează eficient proiecte de orice dimensiune și oferă o interfață ușoară și intuitivă.

3. Plastic SCM  este un sistem de control al versiunilor care vă va ajuta să dezvoltați noi caracteristici în paralel, să vă distribuiți, să îmbinați în timp și să nu stricati niciodată vreun build. Ideal pentru proiecte mari distribuite.

4. Helix Core este o platformă de control și colaborare pentru versiunea industrială care suportă fluxuri flexibile de lucru. Helix Core elimină complexitatea dezvoltării de produse pe scară largă și distribuită - permițându-vă să construiți mai rapid produse protejând în același timp IP-ul dvs.

5. Subversion este un sistem de control al versiunii open source. Fondată în 2000 de CollabNet, Inc., proiectul Subversion și software-ul au cunoscut un succes incredibil în ultimul deceniu. Subversion s-a bucurat și continuă să se bucure de adoptarea pe scară largă atât în arena open source, cât și în lumea corporațiilor.

6. AWS CodeCommit este un serviciu de control al surselor complet gestionat care găzduiește repositories securizate bazate pe Git. Ea facilitează colaborarea echipelor într-un ecosistem sigur și foarte scalabil. CodeCommit elimină necesitatea de a utiliza propriul sistem de control al surselor sau vă faceți griji în legătură cu scalarea infrastructurii sale. Aveți posibilitatea să utilizați CodeCommit pentru a stoca în siguranță orice de la codul sursă la fișiere binare și funcționează perfect cu instrumentele existente Git.

7. Kiln e un sistem de control al versiunilor bazat pe Git și Mercurial, care ofera găzduirea codului sursă utilizate de peste 20.000 de echipe de dezvoltare software pentru a-și gestiona codul, a îmbunătăți calitatea cu recenzii de cod, a organiza proiecte, a urmări schimbările și a colabora.

8. IBM Rational ClearCase este o soluție profesionala de gestionare a configurației software care oferă control al versiunii, gestionarea spațiului de lucru, suport pentru dezvoltare paralelă și construirea auditului.

9. AccuRev este un instrument de gestionare a configurației software care abordează medii complexe de dezvoltare paralelă și distribuită cu arhitectura bazată pe flux, pentru a accelera procesul de dezvoltare și pentru a îmbunătăți reutilizarea surselor.

10. ArX este un sistem de control al versiunii (VCS), cum ar fi CVS, Subversion sau arc GNU. Administrează "arhive" (colecții de fișiere), cum ar fi fișiere de cod sursă pentru un proiect software. Acesta urmărește istoricul fiecărui fișier, împreună cu schimbarea comentariilor, etichetelor de versiune, forks și sucursale etc. Poate stoca fișiere și documente de orice fel, dar cele mai mari beneficii sunt cu fișiere text, mai degrabă decât fișiere binare.


luni, 22 octombrie 2018

Casti bluetooth Sennheiser HD 4.50 BTNC cu Noise cancellation review

Descriere: Casti bluetooth Sennheiser HD 4.50 BTNC cu Active Noise-cancelling (tehnologia NoiseGard).
Mi-am cumpărat mai deunăzi niște căști super meseriașe facute de Sennheiser. Cred ca firma asta devine una din favoritele mele. Vreau să vă aduc la cunoștință că sunt geniale :D. Imaginează-ți gălăgie, hărmălaie, sunet de motoare de avion etc.., și le pui pe urechi și se face liniște. Sunetul este clar și puternic, si fara distorsiuni. Butoanele de control nu sunt prea inspirat pozitionate, dar dupa un timp te obisnuiesti cu ele. Conectarea cu smartphone-ul , laptopul si alte device-uri a fost foarte simplă (vezi in manual - primul link de mai jos). De exemplu pentru smartphone conectarea este super rapidă datorita tehnologiei NFC, doar le apropii să se cunoască și se împerechează instant :D. Căștile vin din fabrică cu un cablu audio, un cablu de încărcare și o borsetă foarte utilă. Sunt prevăzute cu pernițe foarte moi și confortabile, de fapt nici nu le simti pe urechi pentru că sunt si foarte ușoare, doar 238 g. Din punctul meu de vedere sunt o achiziție foarte bună și din perspectiva preț calitate. Recomand!

Documentatie:
Casti bluetooth Sennheiser HD 4.50 BTNC cu Noise-cancelling
Manual HD450 BTNC
Noise-cancelling_headphones
Active_noise_control
Ambient_noise_reduction


Sumarul specificațiilor tehnice:
Baterie: Li-ion Polymer
Codecs: AptX
Design pliabil
Functie Active Noise Cancelling (tehnologia NoiseGard)
Functie NFC pentru conectarea facila
Controlul pieselor si al apelurilor prin butonul de pe casti
Durata de viata a bateriei: pana la 25 de ore
Posibilitatea conectarii unui cablu
Doua Microfoane Omnidirectionale


Contact cu urechea: over ear
Impedanta nominala: 18 ohm
Raspuns in frecventa: 18 - 22,000 Hz
SPL: 113dB (Pasiv: 1kHz/1Vrms)
THD: <0.5% (1kHz/100dB)
Greutate: 238 g

Cum arată căștile pliate, nu cred ca au cel mai bun design de pliere , dar se potrivesc perfect in borsetă , iar borseta îi asigura o compactare și implicit intră foarte simplu in orice rucsac:
O descriere din avion despre tehnologia Noise-cancelling:
Cum se activeaza Noise Cancelling:

vineri, 28 septembrie 2018

vineri, 24 august 2018

Mini proiectul de vineri (8) - Evitarea de obstacole folosind senzorul FC-51 IR infrarosu

Descriere proiect: Evitarea de obstacole folosind senzorul FC-51 IR infraroșu
Senzorul IR FC-51 este capabil să distingă obiecte obstacol la o distanta de minim 2 cm si maxim 30 cm, deci este perfect pentru roboti. Dacă de exemplu acest robot ar trebui să ajungă din punctul A in punctul B, pentru orientarea la distante foarte mici pentru evitarea obiectelor de pana la 30 cm, atunci acest senzor seteaza semnalul obiect detectat si aprinde LED-ul (vezi imaginea de mai jos). Este foarte ușor de folosit, pentru ca are nevoie doar de VCC (+5v), GND si un port digital de la Arduino. Mai mult pentru o finețe și mai bună această placă are încorporat un potentiometru care poate regla distanta maxim la care se seteaza semnalul.
In imaginea de mai jos se observa emițătorul IR activ. Această fotografie a fost realizată cu telefonul mobil a cărei cameră nu dispune de filtru infrared, din această cauză se observa o lumina slaba violeta. In mod normal ochiul uman nu distinge nimic din spectrul infraroșu, dar cu ajutorul camerei de luat vederi se pot vizualiza pulsurile infraroșii.


Documentație proiect:
senzorul IR FC-51

Componente:
Senzor infrarosu IR FC-51:
-Operation Voltage - 3.3V - 5V
-Detection Angle -35 degrees
-Active Output level - Outputs Low logic level when obstacle is detected
-Detection range: 2cm – 30cm (Adjustable using potentiometer)
-Atmega2560-Mega2560-Board


Schema electronica/sistem:
- VCC - 3.3V-5V DC power input
- GND -0V Power pin
- OUT - Digital Output Pin


Cod de test pentru semnalizarea obstacolului:
int irSenRead =8;
int isObstacle = HIGH;
int LED=6;

void setup() {

  pinMode(irSenRead ,INPUT);
  pinMode(LED ,OUTPUT);
  Serial.begin(9600);
}

void loop() {

  isObstacle = digitalRead(irSenRead); // // Read IR sensor output
   Serial.println(digitalRead(irSenRead)); // // print the output

  // // isObstacle ==low there is obstacle infront of sensor
  // // using serial monitor we can see this output
  if (isObstacle == LOW) {
    Serial.println("OBSTACLE");
    digitalWrite(LED ,HIGH);
  }
  else
  {
    Serial.println("NO");
    digitalWrite(LED ,LOW);
  }

  delay(500);
}
Citirea receptorului IR folosind biblioteca IRemote:
/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include "IRremote.h"

int RECV_PIN = 8;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}
Weekend plăcut tuturor !

vineri, 17 august 2018

Mini proiectul de vineri (7) - Masurarea temperaturii si umiditatii folosind senzorul DHT11

Descriere proiect:Masurarea temperaturii si umiditatii folosind senzorul DHT11. Pentru a măsura temperatura si umiditatea cel mai simplu de folosit este senzorul DHT11. Conectarea lui este simpla si rezultatul măsurătorii este de încredere. În plus libraria idDHT11 returneaza temperatura in toate unitatile de măsura a temperaturii Celsius, Kelvin si Fahrenheit.
În imaginea de mai jos se poate observa conectarea senzorului la Atmega2560, Pin 1 DHT11 la 5V, Pin 2 DHT11 la Pinul 2 Arduino, Pin 3 DHT11 e neconectat si Pin 4 DHT11 se conecteaza la GND. Inre pinul 1 si 2 am conectat o rezistenta de 10K:
Documentatie proiect:
DHT11-Technical-Data-Sheet
How-to-set-up-the-dht11-humidity-sensor-on-an-arduino
Componente:
- Senzor de temperatura si umiditate
Schema electronica/sistem:
Afisarea umiditatii si temperaturii:

Cod de test:
/*
  Board            int.0   int.1   int.2   int.3   int.4   int.5
 Uno, Ethernet    2   3
 Mega2560   2   3   21    20    19    18
 Leonardo   3   2   0   1
 Due            (any pin, more info http://arduino.cc/en/Reference/AttachInterrupt)
 
 This example, as difference to the other, make use of the new method acquireAndWait()
 */

#include "idDHT11.h"

int idDHT11pin = 2; //Digital pin for comunications
int idDHT11intNumber = 0; //interrupt number (must be the one that use the previus defined pin (see table above)

//declaration
void dht11_wrapper(); // must be declared before the lib initialization

// Lib instantiate
idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);

void setup()
{
  Serial.begin(9600);
  Serial.println("idDHT11 Example program");
  Serial.print("LIB version: ");
  Serial.println(IDDHT11LIB_VERSION);
  Serial.println("---------------");
}
// This wrapper is in charge of calling 
// mus be defined like this for the lib work
void dht11_wrapper() {
  DHT11.isrCallback();
}
void loop()
{
  Serial.print("\nRetrieving information from sensor: ");
  Serial.print("Read sensor: ");
  //delay(100);
  
  int result = DHT11.acquireAndWait();
  switch (result)
  {
  case IDDHTLIB_OK: 
    Serial.println("OK"); 
    break;
  case IDDHTLIB_ERROR_CHECKSUM: 
    Serial.println("Error\n\r\tChecksum error"); 
    break;
  case IDDHTLIB_ERROR_ISR_TIMEOUT: 
    Serial.println("Error\n\r\tISR time out error"); 
    break;
  case IDDHTLIB_ERROR_RESPONSE_TIMEOUT: 
    Serial.println("Error\n\r\tResponse time out error"); 
    break;
  case IDDHTLIB_ERROR_DATA_TIMEOUT: 
    Serial.println("Error\n\r\tData time out error"); 
    break;
  case IDDHTLIB_ERROR_ACQUIRING: 
    Serial.println("Error\n\r\tAcquiring"); 
    break;
  case IDDHTLIB_ERROR_DELTA: 
    Serial.println("Error\n\r\tDelta time to small"); 
    break;
  case IDDHTLIB_ERROR_NOTSTARTED: 
    Serial.println("Error\n\r\tNot started"); 
    break;
  default: 
    Serial.println("Unknown error"); 
    break;
  }
  Serial.print("Humidity (%): ");
  Serial.println(DHT11.getHumidity(), 2);

  Serial.print("Temperature (oC): ");
  Serial.println(DHT11.getCelsius(), 2);

  Serial.print("Temperature (oF): ");
  Serial.println(DHT11.getFahrenheit(), 2);

  Serial.print("Temperature (K): ");
  Serial.println(DHT11.getKelvin(), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(DHT11.getDewPoint());

  Serial.print("Dew Point Slow (oC): ");
  Serial.println(DHT11.getDewPointSlow());

  delay(1000);
}
Codul l-am preluat de aici .
O zi bună tuturor !

joi, 16 august 2018

Mini proiectul de vineri (6) - Masurarea distantei folosind HC-SR04

Descriere proiect: Măsurarea distanței folosind HC-SR04
Având în dotare de ceva vreme un senzor ultrasonic de 40kHz am decis să încerc să-l pun în funcțiune. După ceva documentare conștiincioasă am constatat că e destul de simplu de conecta pentru ca are doar 4 pini VCC, TRIG, ECHO si GND. Apoi am facut calculele pentru o viteza a sunetului de 340 m/s și am calculat distanța pe baza duratei întoarcerii sunetului la receptor. Totul a mers fără nici o problemă. Senzorul are o rezolutie de minim 2 cm si maxim 4 metrii. Unda sonora este emisa de transmițător, se loveste de un obiect si se intoarce la receptor. Pe baza vitezei sunetului și a formulei de calcul a timpului rezultă formula distanței = timp * 0.034/2. Acest mini proiect probabil o să-l folosesc la dronă sau la un eventual proiect de masinuță autonomă.
În prima imagine am prins si calculele facute pentru un exemplu de obiect aflat la 10 cm de senzor. Iar mai jos se văd desenate semnalele senzorului si ordinea lor, in prima faza se seteaza pe high trigerul pentru 10 us iar apoi urmeaza 8 ropote (burst) :D de semnal urmate de semnalul de echo.

Documentatie proiect:

NewPing lib
Wiki ultrasound
Componente:
HC-SR04 pe robofun
HC-SR04 pe Amazon
Atmega2560-Mega2560-Board
Schema electronica/sistem:
Aici se poate observa conexiunea senzorului la placa Atmega2560:
Aici am testat măsurarea distantaței până la caiet:

Cod de test:
Cel mai simplu cod pentru masurarea distantei folosind doar setarea pinilor:
/*
* Ultrasonic Sensor HC-SR04
*
*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm ");
}

Codul sursa pentru masurarea distantei folosind libraria NewPing:
/*
* Ultrasonic Sensor HC-SR04
*
*/
#include "NewPing.h"

// defines variables
long duration;
int distance;
// defines pins numbers
#define TRIG_PN 9
#define ECHO_PN 10
#define MAX_DIST 400
#define MIN_DIST 2
NewPing sonar(TRIG_PN,ECHO_PN,MAX_DIST);

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Calculating the distance
distance= sonar.ping_cm();
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
if((distance >= MAX_DIST) || (distance <= MIN_DIST))
{
Serial.println("Out of range ");
}
else
{
Serial.print(distance);
Serial.println(" cm ");
}
}

O zi plăcută tuturor !

duminică, 17 iunie 2018

Tehnici de manipulare (2) Regula KGB 14

Regula KGB 14 din Tehnici de manipulare Editia VI:
Citat:
Trebuie făcut totul ca hotărârile și ordinele - fie acestea cu caracter juridic, economic sau organizatoric - să fie nepunctuale
.

Explicație:

Citat:
În statele-satelit trebuia păstrată permanent o stare de dezorganizare. trebuia ca legile să se bată cap în cap ori să vină pre târziu, ordinele și hotărârile să fie ineficiente, ierarhiile să nu aibă stabilitate etc. Menținând haosul, societatea își păstra slăbiciunile și putea fi ușor de controlat. Oamenii nu aveau posibilitatea să-și solidifice un sistem propriu de valori, sentimentul de insecuritate se accentua, iar manipulatorii aveau astfel un teren extrem de propice pentru acțiune.

Această regula este pe larg aplicată de parlamentul României. Nici o lege nu se face la timp, iar când legea este validată se constată că este ambiguă și nu se poate aplica. Mai rău de atât instabilitatea legislativă are repercursiuni majore asupra învățământului, iar mai departe asupra copiilor și asupra viitorului tării. Suntem într-o perpetua instabilitate generată exclusiv de această regulă (Regula KGB 14) care se aplică neîncetat în România de la venirea bolșevicilor. PSD-ul este urmașul de nădejde a lor.

3D scanner (4) - Carcasă controller

Descriere proiect:
În acest pas al proiectului am creat o carcasă pentru controller, motor și bluetooth. Se văd în imaginile de mai jos cam cum a ieșit, dar părerea mea este că această carcasă este suficient de compactă pentru a o folosi în continuare.
Documentatie proiect:
- Am învățat câteva tehnici de proiectare de pe site-ul tinkercad.com, site de proiectare pentru începători.
Componente:
- Plastic PLA incolor
- Imprimanta 3D
- Smartphone cu bluetooth
- Applicatie Android - Arduino Bluetooth controller v1.3

Schema electronică/sistem:

Cod de test:

#include "SoftwareSerial.h"
#include "BasicStepperDriver.h"
#include "StepperDriver.h" 
#include "AccelStepper.h"
#include "A4988.h"
#define MS1 6
#define MS2 7
#define MS3 8
#define ENABLE 5
// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
#define RPM 360
// Acceleration and deceleration values are always in FULL steps / s^2
#define MOTOR_ACCEL 2000
#define MOTOR_DECEL 1000
// Since microstepping is set externally, make sure this matches the selected mode
// If it doesn't, the motor will move at a different RPM than chosen
// 1=full step, 2=half step etc.
#define MICROSTEPS 8

// All the wires needed for full functionality
#define DIR 3
#define STEP 4

//Global Variables
String command = ""; // Stores response of the HC-06 Bluetooth device
// defines pins numbers
const int stepPin = STEP; 
const int dirPin = DIR; 
char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=RPM;
short microsteps=1;
// 2-wire basic config, microstepping is hardwired on the driver
A4988 stepper(MOTOR_STEPS, DIR, STEP, ENABLE, MS1, MS2, MS3);

void setup() {
  Serial.begin(57600);
  BluetoothInit();
  stepper.begin(RPM, MICROSTEPS);
  stepper.enable();
   /*
     * Set LINEAR_SPEED (accelerated) profile.
     */
    stepper.setSpeedProfile(stepper.LINEAR_SPEED, MOTOR_ACCEL, MOTOR_DECEL);
        Serial.println("START");
    /*
     * Using non-blocking mode to print out the step intervals.
     * We could have just as easily replace everything below this line with 
     * stepper.rotate(360);
     */
     stepper.startRotate(360);
}

void loop() {
        static int step = 0;
    unsigned wait_time = stepper.nextAction();
  //If new byte of data to receive from BT Shield
  if(Serial1.available())
  {
     _btRxData = Serial1.read(); //Read it
     _btRxBuff += _btRxData;   //Add it to buffer
     Serial.print(_btRxData);  //Debug: Send to PC Console 

      if(_btRxData == '1')              // Checks whether value of data is equal to 1
         digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
      else if(_btRxData == '0')         //  Checks whether value of data is equal to 0
         digitalWrite(dirPin, LOW);    //If value is 0 then LED turns OFF
      
      if(_btRxData == '2')              // Checks whether value of data is equal to 1
      {
        speedmot +=1; // Enables the motor to move in a particular direction
        Serial.println(speedmot);  //Debug: Send to PC Console
         stepper.enable(); 
      }
      else if(_btRxData == '3')         //  Checks whether value of data is equal to 0
      {
         speedmot -=1;   //If value is 0 then LED turns OFF
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'x')              // Checks whether value of data is equal to 1
      {
         speedmot = 0; // Enables the motor to move in a particular direction
         microsteps=1;
          Serial.println(speedmot);  //Debug: Send to PC Console 
            stepper.disable();
        Serial.println("END");
      }
      if(_btRxData == 'b')              // Checks whether value of data is equal to 1
      {
         speedmot = 1; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'c')              // Checks whether value of data is equal to 1
      {
         speedmot = 90; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'p')              // Checks whether value of data is equal to 1
      {
         speedmot = 180; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 't')              // Checks whether value of data is equal to 1
      {
         speedmot = 360; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
     if(_btRxData == 's')  
     {
      microsteps++;
      stepper.setMicrostep(microsteps);
      Serial.println(microsteps);  //Debug: Send to PC Console 
     }
  }

    /*
     * Moving motor one full revolution using the degree notation
     */
stepper.rotate(speedmot);

}

void BluetoothInit()
{  
  Serial1.begin(57900);
  Serial1.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  Serial1.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as "SeeedBTSlave"
  Serial1.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  Serial1.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  Serial1.print("\r\n+LOSSRECONN=0\r\n");
  delay(2000);
  Serial1.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  delay(2000); // This delay is required.
  Serial1.flush();
}
Urmează pasul următor, care cuprinde tijele pentru conectarea mecanică cu senzorul și un panou alb în spatele obiectului.
Weekend plăcut tuturor!

luni, 21 mai 2018

Tehnici de manipulare (1) Regula KGB 42

Regula KGB numarul 42 din Tehnici de manipulare Editia VI
Citat: "Acei conducări numiți de căre partid , care prin activitatea lor au produs pierderi sau au trezit nemulțumirea angajaților, să nu fie chemați în judecată. În cazuri drastice se recheamă din funcție, fiind numiți în poziții similare sau superioare. La sfârșit vor fi puși în funcții de conducere și ținuți în evidență ca și cadre de rezervă pentru perioada schimbărilor ulterioare."

Este una din regulile de bază după care se ghidează PSD-ul, iar rădăcinile comunist bolșevice sunt puternice în acest partid. Vă garantez că toți fost miniștrii și fost prim miniștrii PSD se vor întoarce în funcții de conducere cu prima ocazie.

luni, 30 aprilie 2018

3D scanner (3) - Controlarea directiei si vitezei motorului Nema17 folosind bluetooth HC06

Descriere proiect:
Controlul de pe telefon prin bluetooth a motorului pas cu pas NEMA17. Se poate controla direcția și viteza de rotire. Asta o sa ma ajute să opresc sau sa reduc viteza de scanare.

Documentatie proiect:
-Arduino-and-hc-06

Componente:
- Motor NEMA17
- Driver A4988
- Arduino Pro micro
- Cabluri de conectare
- Breadborad
- Suport motor și suport soclu printate 3D
- Bluetooth HC-06 (postari mai vechi legate de bluetooth)


Schema electronica/sistem:

Cod de test:

#include "SoftwareSerial.h"

//Global Variables

// defines pins numbers
const int stepPin = 4; 
const int dirPin = 5; 

char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=0;

void setup() {
  Serial.begin(57600);
  BluetoothInit();
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}

void loop() {

  //If new byte of data to receive from BT Shield
  if(Serial1.available())
  {
     _btRxData = Serial1.read(); //Read it
     _btRxBuff += _btRxData;   //Add it to buffer
     Serial.print(_btRxData);  //Debug: Send to PC Console 

      if(_btRxData == '1') // Checks whether value of data is equal to 1
         digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
      else if(_btRxData == '0')     //  Checks whether value of data is equal to 0
         digitalWrite(dirPin, LOW); //If value is 0 then LED turns OFF
      
      if(_btRxData == '2') // Checks whether value of data is equal to 2
         speedmot +=100; // If value is 2 then increase the motor speed

      else if(_btRxData == '3')//  Checks whether value of data is equal to 3
         speedmot -=100;   //If value is 3 then reduce the motor speed

      if(_btRxData == 'x') // Checks whether value of data is equal to x
         speedmot = 0; // stop the motor

      if(_btRxData == 'b')// Checks whether value of data is equal to b
         speedmot = 6000; //  set the motor speed

      if(_btRxData == 'c') // Checks whether value of data is equal to c
         speedmot = 60000; // set the motor speed

      if(_btRxData == 'p') // Checks whether value of data is equal to p
         speedmot = 600; // set the motor speed

      if(_btRxData == 't')// Checks whether value of data is equal to t
         speedmot = 500; //set the motor speed
  }
  
  
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(speedmot); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(speedmot); 
  }
}

void BluetoothInit()
{  
  Serial1.begin(57900);
  Serial1.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  Serial1.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as "SeeedBTSlave"
  Serial1.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  Serial1.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  Serial1.print("\r\n+LOSSRECONN=0\r\n");
  delay(2000);
  Serial1.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  delay(2000); // This delay is required.
  Serial1.flush();
}

In următorul pas o sa lipesc toate componentele pe o placa separata cât mai compactă. Apoi în următorul , probabil și ultimul pas, o sa încep sa scanez câteva obiecte, dar o sa am nevoie și de o placa rotunda foarte dreapta pe care obiectele sa se rotească fără a se înclina.
O seara faină tuturor!

duminică, 29 aprilie 2018

3D scanner (2) - Soclu rotitor la 360 grade

Descriere proiect:
Soclu rotitor pentru rotirea obiectelor la 360 de grade. In loc sa rotesc scanner-ul în jurul obiectului prefer sa rotesc obiectul și sa țin scanner-ul fix. Din acest motiv am nevoie de un soclu care se rotește cu o viteaza mica constantă. In următoarea fază ar trebui în spatele obiectului sa așez un panou alb pentru ca fundalul sa nu interfereze cu scanner-ul și cu obiectul.

Documentatie proiect:
M-am inspirat de pe pagina : Control a Stepper Motor with A4988 Driver and Arduino

Componente:
- Motor NEMA17
- Driver A4988
- Arduino Mega
- Cabluri de conectare
- Breadborad
- Suport motor și suport soclu printate 3D (modelele in thingverse)


Schema electronica:

Cod de test:
// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}

void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction

  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(60000); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(60000); 
  }
}
Urmează încapsularea controlerului și să-i adaug bluetooth sau un potențiometru pentru controlul vitezei.
Weekend plăcut tuturor !

luni, 9 aprilie 2018

3D scanner (1) - Documentație

Descrierea proiectului:
Am început un nou proiect, este vorba de un scanner 3d , care o să mă ajute sa scanez obiecte reale pe care apoi le pot imprima folosind imprimanta 3D. În plan am și să scanez obiecte sau oameni de până la 1-2 metri. Scanerele profesionale costa foarte mult, de aceea o să încerc sa creez un scanner care să rivalizeze ca și rezultat cu acestea. Îmi dau seama că e destul de greu, dar cred ca nu este un țel de nerealizat. Am început faza de documentație care probabil o sa dureze cam o lună. Apoi o sa intru în faza de construcție (platformă, piedestal pentru obiect și masă rotativă).În a treia etapă o să încep testele, și în ultima etapă o să pot face scanări de calitate.
Rămâne de văzut ce o să iasă.

Documentatie folosită până acum:
3D scanner
3d-scanning-tutorial
3D Scan app

Componente:
- Senzor Kinect
- Platforma pentru scanare
- Masă rotativă

Schema sistemului:

Sărbători fericite tuturor !

marți, 20 februarie 2018

Mărțișoare

Descriere proiect:
Mărțișoare cu modele florare din hârtie cartonată colorată. (wiki/Mărțișor)
Componente:
- Masina Scan N Cut Brother CM900
- Hârtie-carton colorată
- Chef de lucru
- Un pic de imaginație


Rezultat:
Aș zice ca rezultatul nu e rău pentru un începător, dar vă las pe voi să apreciați.

O zi perfectă tuturor !

luni, 19 februarie 2018

Linux - Extindere rețea locală

Descriere proiect:
Extindere și diagnosticare rețea folosind switch-ul plug and play fără management Switch TP-LINK TL-SG105, 5 x 10/100/1000Mbps
Componente:
- Switch TP-LINK TL-SG105, 5 x 10/100/1000Mbps
- Print Server MFP TP-LINK TL-PS310U, 10/100, USB 2.0
- Linux Armbian for Tinkerboard
- Windows 7
- Putty

Schema retelei:

Diagnosticarea retelei din Linux: - In Linux am găsit o lista întreagă de unelte software pentru diagnosticarea și configurarea rețelei (Linux-network-configuration-and-troubleshooting-commands).
1. Primul utilitar este ifconfig care se folosește pentru a inițializa și configura o interfața de rețea :
root@tinkerboard:~# ifconfig
dummy0    Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet6 addr: fXXXX::XXXX:XXXX:XXXX:XXXX/XX  Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:12000 (12.0 KB)

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.155  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/XX Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:301252 errors:0 dropped:0 overruns:0 frame:0
          TX packets:356627 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:74589716 (74.5 MB)  TX bytes:180768540 (180.7 MB)
          Interrupt:44

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:489 (489.0 B)  TX bytes:489 (489.0 B)

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


2. Utilitarul PING (Packet INternet Groper) este folosit pentru a testa conectivitatea cu nodurile rețelei.
root@tinkerboard:~# ping -h
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
            [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
            [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
            [-w deadline] [-W timeout] [hop1 ...] destination

root@tinkerboard:~# ping 192.168.1.156
PING 192.168.1.156 (192.168.1.156) 56(84) bytes of data.
64 bytes from 192.168.1.156: icmp_seq=1 ttl=64 time=1.28 ms
64 bytes from 192.168.1.156: icmp_seq=2 ttl=64 time=0.533 ms
64 bytes from 192.168.1.156: icmp_seq=3 ttl=64 time=0.496 ms
64 bytes from 192.168.1.156: icmp_seq=4 ttl=64 time=0.634 ms
64 bytes from 192.168.1.156: icmp_seq=5 ttl=64 time=0.515 ms
64 bytes from 192.168.1.156: icmp_seq=6 ttl=64 time=0.660 ms
^C
--- 192.168.1.156 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5108ms
rtt min/avg/max/mdev = 0.496/0.687/1.284/0.273 ms

3. Utilitarul TRACEROUTE care arată numărul de noduri folosite pentru a ajunge la destinație si determină, de asemenea, căile de călătorie pentru pachete.
root@tinkerboard:~# traceroute
Usage:
  traceroute [ -46dFITnreAUDV ] [ -f first_ttl ] [ -g gate,... ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ] [ -l flow_label ] [ -w waittime ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] host [ packetlen ]
Options:
  -4                          Use IPv4
  -6                          Use IPv6
  -d  --debug                 Enable socket level debugging
  -F  --dont-fragment         Do not fragment packets
  -f first_ttl  --first=first_ttl
                              Start from the first_ttl hop (instead from 1)
  -g gate,...  --gateway=gate,...
                              Route packets through the specified gateway
                              (maximum 8 for IPv4 and 127 for IPv6)
  -I  --icmp                  Use ICMP ECHO for tracerouting
  -T  --tcp                   Use TCP SYN for tracerouting (default port is 80)
  -i device  --interface=device
                              Specify a network interface to operate with
  -m max_ttl  --max-hops=max_ttl
                              Set the max number of hops (max TTL to be
                              reached). Default is 30
  -N squeries  --sim-queries=squeries
                              Set the number of probes to be tried
                              simultaneously (default is 16)
  -n                          Do not resolve IP addresses to their domain names
  -p port  --port=port        Set the destination port to use. It is either
                              initial udp port value for "default" method
                              (incremented by each probe, default is 33434), or
                              initial seq for "icmp" (incremented as well,
                              default from 1), or some constant destination
                              port for other methods (with default of 80 for
                              "tcp", 53 for "udp", etc.)
  -t tos  --tos=tos           Set the TOS (IPv4 type of service) or TC (IPv6
                              traffic class) value for outgoing packets
  -l flow_label  --flowlabel=flow_label
                              Use specified flow_label for IPv6 packets
  -w waittime  --wait=waittime
                              Set the number of seconds to wait for response to
                              a probe (default is 5.0). Non-integer (float
                              point) values allowed too
  -q nqueries  --queries=nqueries
                              Set the number of probes per each hop. Default is
                              3
  -r                          Bypass the normal routing and send directly to a
                              host on an attached network
  -s src_addr  --source=src_addr
                              Use source src_addr for outgoing packets
  -z sendwait  --sendwait=sendwait
                              Minimal time interval between probes (default 0).
                              If the value is more than 10, then it specifies a
                              number in milliseconds, else it is a number of
                              seconds (float point values allowed too)
  -e  --extensions            Show ICMP extensions (if present), including MPLS
  -A  --as-path-lookups       Perform AS path lookups in routing registries and
                              print results directly after the corresponding
                              addresses
  -M name  --module=name      Use specified module (either builtin or external)
                              for traceroute operations. Most methods have
                              their shortcuts (`-I' means `-M icmp' etc.)
  -O OPTS,...  --options=OPTS,...
                              Use module-specific option OPTS for the
                              traceroute module. Several OPTS allowed,
                              separated by comma. If OPTS is "help", print info
                              about available options
  --sport=num                 Use source port num for outgoing packets. Implies
                              `-N 1'
  --fwmark=num                Set firewall mark for outgoing packets
  -U  --udp                   Use UDP to particular port for tracerouting
                              (instead of increasing the port per each probe),
                              default port is 53
  -UL                         Use UDPLITE for tracerouting (default dest port
                              is 53)
  -D  --dccp                  Use DCCP Request for tracerouting (default port
                              is 33434)
  -P prot  --protocol=prot    Use raw packet of protocol prot for tracerouting
  --mtu                       Discover MTU along the path being traced. Implies
                              `-F -N 1'
  --back                      Guess the number of hops in the backward path and
                              print if it differs
  -V  --version               Print version info and exit
  --help                      Read this help and exit

Arguments:
+     host          The host to traceroute to
      packetlen     The full packet length (default is the length of an IP
                    header plus 40). Can be ignored or increased to a minimal
                    allowed value

root@tinkerboard:~# traceroute 192.168.1.1
traceroute to 192.168.1.1 (192.168.1.1), 30 hops max, 60 byte packets
 1  gateway (192.168.1.1)  0.660 ms  1.380 ms  1.643 ms

4. Utilitarul netstat este folosit pentru a afișa informațiile de conectivitate, căile de rutare și starea porturile. Pentru alte exemple vezi aici : 20-netstat-commands-for-linux-network-management
root@tinkerboard:~# netstat -h
usage: netstat [-vWeenNcCF] [] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [ ...]
       netstat { [-vWeenNac] -i | [-cWnNe] -M | -s }

        -r, --route              display routing table
        -i, --interfaces         display interface table
        -g, --groups             display multicast group memberships
        -s, --statistics         display networking statistics (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -W, --wide               don't truncate IP addresses
        -n, --numeric            don't resolve names
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           resolve hardware names
        -e, --extend             display other/more information
        -p, --programs           display PID/Program name for sockets
        -c, --continuous         continuous listing

        -l, --listening          display listening server sockets
        -a, --all, --listening   display all sockets (default: connected)
        -o, --timers             display timers
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB

  ={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
  =Use '-6|-4' or '-A ' or '--'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
    x25 (CCITT X.25)

root@tinkerboard:~# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0

5. Utilitarul DIG (domain information groper) este folosit pentru a interoga diverse informatii DNS (Domain Name System). Mai multe informatii gasiti aici :10-linux-dig-domain-information-groper-commands-to-query-dns
 root@tinkerboard:~# dig -h
Usage:  dig [@global-server] [domain] [q-type] [q-class] {q-opt}
            {global-d-opt} host [@local-server] {local-d-opt}
            [ host [@local-server] {local-d-opt} [...]]
Where:  domain    is in the Domain Name System
        q-class  is one of (in,hs,ch,...) [default: in]
        q-type   is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
                 (Use ixfr=version for type ixfr)
        q-opt    is one of:
                 -4                  (use IPv4 query transport only)
                 -6                  (use IPv6 query transport only)
                 -b address[#port]   (bind to source address/port)
                 -c class            (specify query class)
                 -f filename         (batch mode)
                 -i                  (use IP6.INT for IPv6 reverse lookups)
                 -k keyfile          (specify tsig key file)
                 -m                  (enable memory usage debugging)
                 -p port             (specify port number)
                 -q name             (specify query name)
                 -t type             (specify query type)
                 -u                  (display times in usec instead of msec)
                 -x dot-notation     (shortcut for reverse lookups)
                 -y [hmac:]name:key  (specify named base64 tsig key)
        d-opt    is of the form +keyword[=value], where keyword is:
                 +[no]aaonly         (Set AA flag in query (+[no]aaflag))
                 +[no]additional     (Control display of additional section)
                 +[no]adflag         (Set AD flag in query (default on))
                 +[no]all            (Set or clear all display flags)
                 +[no]answer         (Control display of answer section)
                 +[no]authority      (Control display of authority section)
                 +[no]besteffort     (Try to parse even illegal messages)
                 +bufsize=###        (Set EDNS0 Max UDP packet size)
                 +[no]cdflag         (Set checking disabled flag in query)
                 +[no]cl             (Control display of class in records)
                 +[no]cmd            (Control display of command line)
                 +[no]comments       (Control display of comment lines)
                 +[no]crypto         (Control display of cryptographic fields in records)
                 +[no]defname        (Use search list (+[no]search))
                 +[no]dnssec         (Request DNSSEC records)
                 +domain=###         (Set default domainname)
                 +[no]edns[=###]     (Set EDNS version) [0]
                 +ednsflags=###      (Set EDNS flag bits)
                 +[no]ednsnegotiation (Set EDNS version negotiation)
                 +ednsopt=###[:value] (Send specified EDNS option)
                 +noednsopt          (Clear list of +ednsopt options)
                 +[no]expire         (Request time to expire)
                 +[no]fail           (Don't try next server on SERVFAIL)
                 +[no]identify       (ID responders in short answers)
                 +[no]ignore         (Don't revert to TCP for TC responses.)
                 +[no]keepopen       (Keep the TCP socket open between queries)
                 +[no]multiline      (Print records in an expanded format)
                 +ndots=###          (Set search NDOTS value)
                 +[no]nsid           (Request Name Server ID)
                 +[no]nssearch       (Search all authoritative nameservers)
                 +[no]onesoa         (AXFR prints only one soa record)
                 +[no]opcode=[###]   (Set the opcode of the request)
                 +[no]qr             (Print question before sending)
                 +[no]question       (Control display of question section)
                 +[no]recurse        (Recursive mode)
                 +retry=###          (Set number of UDP retries) [2]
                 +[no]rrcomments     (Control display of per-record comments)
                 +[no]search         (Set whether to use searchlist)
                 +[no]short          (Display nothing except short
                                      form of answer)
                 +[no]showsearch     (Search with intermediate results)
                 +[no]split=##       (Split hex/base64 fields into chunks)
                 +[no]stats          (Control display of statistics)
                 +subnet=addr        (Set edns-client-subnet option)
                 +[no]tcp            (TCP mode (+[no]vc))
                 +time=###           (Set query timeout) [5]
                 +[no]trace          (Trace delegation down from root [+dnssec])
                 +tries=###          (Set number of UDP attempts) [3]
                 +[no]ttlid          (Control display of ttls in records)
                 +[no]vc             (TCP mode (+[no]tcp))
        global d-opts and servers (before host name) affect all queries.
        local d-opts and servers (after host name) affect only that lookup.
        -h                           (print help and exit)
        -v                           (print version and exit)

root@tinkerboard:~# dig yahoo.com +short
98.138.252.38
98.139.180.180
206.190.39.42


6. Utilitarul arp (Address Resolution Protocol) este folosit pentru vizualiza si adauga in tabela ARP . Mai multe informatii gasiti aici :Address_Resolution_Protocol
root@tinkerboard:~# arp -h
Usage:
  arp [-vn]  [] [-i ] [-a] []             <-Display ARP cache
  arp [-v]          [-i ] -d   [pub]               <-Delete ARP entry
  arp [-vnD] [] [-i ] -f  []            <-Add entry from file
  arp [-v]   [] [-i ] -s    [temp]            <-Add entry
  arp [-v]   [] [-i ] -Ds   [netmask ] pub          <-''-

        -a                       display (all) hosts in alternative (BSD) style
        -s, --set                set a new ARP entry
        -d, --delete             delete a specified entry
        -v, --verbose            be verbose
        -n, --numeric            don't resolve names
        -i, --device             specify network interface (e.g. eth0)
        -D, --use-device         read  from given device
        -A, -p, --protocol       specify protocol family
        -f, --file               read new entries from file or from /etc/ethers

  =Use '-H ' to specify hardware address type. Default: ether
  List of possible hardware types (which support ARP):
    ash (Ash) ether (Ethernet) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) rose (AMPR ROSE) arcnet (ARCnet)
    dlci (Frame Relay DLCI) fddi (Fiber Distributed Data Interface) hippi (HIPPI)
    irda (IrLAP) x25 (generic X.25) eui64 (Generic EUI-64)
  root@tinkerboard:~# arp -e
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.156            ether   XX:XX:XX:XX:XX:XX   C                     eth0
192.168.1.6              ether   XX:XX:XX:XX:XX:XX   C                     eth0
192.168.1.3              ether   XX:XX:XX:XX:XX:XX   C                     eth0
gateway                  ether   XX:XX:XX:XX:XX:XX   C                     eth0

O zi bună tuturor !