eMag

duminică, 13 martie 2011

De unde Arduino ? - Surse de achizitie

  Cautand pe web un Atmega328 sau 168 am inteles (confirmat) ca in Romania preturile sunt exagerate!!
  Personal nu cred ca este just sa vinzi un board opensource cumparat din alta parte cu un adaos de 30%, asta este comert. Cumpar din America sau China si vand la pasionatii din RO cu 30% peste....... dar ce am facut eu pentru 30%? Am dezvoltat ceva, am imbunatatit ceva ? NU...... daca nu am facut nimic atunci ma compar cu Farnell, TME, Adelaida (comert) si nu mai sustin ca aduc suport unei comunitati de pasionati.

  Cei care sustin comunitatea Arduino tot prin China si America ii gasim, acolo sistemul este altul.... Ei dezvolta, imbunatatesc, consiliaza.... promotii, cadouri, etc.
  Tot ce am cumparat pana acum legat de Arduino provine din CH. Calitatea este exceptionala (in CH calitatea incepe de la -100% pana la 100% :) trebuie sa ai mare bagare de seama), preturile nu mai zic, transportul, nu acceptabil ci incredibil ( intre 4-9 usd la ordere sub 50usd si 0 la ordere >50usd).

  Sursa mea este SeeedStudio, va garantez calitatea, si promtitudinea serviciilor lor sunt profesionisti adevarati.
  Am cumparat Arduino de la ei cu 13,7 USD

Seeeduino V2.2 (Atmega 328P)$13.75

  Au o categorie de Final Sale Zone in care periodic baga produse EOL la preturi incepand cu -30% fata de lista. Trimit tichete cadou in colete.... Sunt tari.
  Pot sa spun ca am ceva experienta in trading-ul cu CH si HK am mai cumparat si din alte parti, trebuie testat inainte de a cumpara, cauti un pik pe forumuri, comanzi un sample ceva, vezi cum decurg lucrurile si apoi decizi.
  Cand ajunge produsul in RO ajunge in vama (posta vamala) (in aprox 14 zile), la vama:
     - valoarea este sub 120USD se plateste numai TVA (chinezul o sa scrie pe colet GIFT, vamesul spune ca asa face toata lumea si cere un document, voi spuneti ca ati avut cupoane de discount si nu ati platit cu bani, oricum va puteti intelege cu cei de la vama)
      - valoare este peste 120 USD se pateste TVA + VAMA conform codului TARIC
  Eu folosesc pentru plata PayPal consider ca este cea mai sigura modalitate de a plati pe internet.
  Mai avem si:
           Sure Electronics - preturi bune si ei
           SparkFun - mai bine decat in RO (astia au o faza ca la inchiderea orderului alegi ce val sa-ti treca :))  )

Asa... si va spuneam de Atmega328
In RO este 28 RON
La SparkFun 13 RON
La SeeedStudio, nu il au, am dat mail sa-mi faca rost, Va spun asta pentru ca, chinezul face orice pentru clientul sau... cauta el pentru tine si ti face pe plac. Deci astept Pret..

Sa spunem ca luam 5 bucati
RO 28x5 + 10 (sa spunem in cel mai bun caz Transport) =  150
US 13x5+30RON (transport) =95 (fara vama pt ca va avea val pe order sub 10usd)
Deci avem o economie de 55 RON substantial raportat la valoare zic eu.


A fost doar un exemplu!
Pe viitor poate facem liste de precomenzi si comandam la 2-3 saptamani in comenzi cumulate.

sâmbătă, 12 martie 2011

Arduino + 2xDS18B20 + pachube - continuare

   Dupa un timp de "inactivitate" iata ca reusesc sa mai scriu ceva,
   Daca nu am scris nu inseamna ca nu am facut nimic....., am facut si inca multe. ;)
   Pentru inceput am modificat sistemul de monitorizare al temperaturii din casa si din fata geamului. :).

   Treaba cu serverul ala de linux nu prea se merita dpdv energetic, pentru un script de py care rula acolo il tineam pornit 24/24, cei drept nu consuma mult dar consuma. A trebuit sa pun in aplicare planul B.

   PLANUL B.

   "Super" ROUTERUL meu cu DD-WRT (Asus WL-500P), el poate sa "tina" scripturile, dar deja tinea cam multe si nu prea vroiam sa-l transform chiar in server pt orice.
   Mai incercasem ceva pe el dar dadusem de o problema in python2.5 care compilat pt el are ceva "hibe", am reusit sa rezolv problemele si sa am python2.5 full functional cu modulele si librariile necesare: setuptools, python-eeml, python-xml.

Cu riscul de a ma repeta am sa recapitulez schema si scripturile implicate.

   Pe Arduino avem:

   Hardware: 2 senzori DS18B20
   Un Lm7805 + led.. bla bla pentru alimentarea de la POE-ul camerei
Toate astea pe un shield
Shield alimentare_conectori


   Cele 2 perechi de cabluri subtiri merg catre senzorii DS18B20, cel ALB mai gros merge la un convertor TTL-RS232 ai apoi in portul serial al camerei.
RS232-TTL
 Sketch:

Folosesc :

<OneWire.h>
<DallasTemperature.h>
Doua librarii de mare utilitate, despre care am scris in postul alterior.

Avem:

#define ONE_WIRE_BUS 6
senzorii la pinul 6
---------------------------------------------------------
if (Serial.available() > 0) {
  incomingByte = Serial.read();
  if (incomingByte==84)
asteapta pe serial caracterul T (ASCII 84)
--------------------------------------------------------
Daca aceasta conditie este indeplinita face request-uri "ByIndex" catre senzori si printeaza pe serial ceva de genul:
RAW Indoor: 24.94 Outdoor: 8.63


#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 6
int incomingByte;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

void setup()
{
  // start serial port
  Serial.begin(9600);

  // Start up the library
  sensors.begin();
  
}


void loop(){
 if (Serial.available() > 0) {
  incomingByte = Serial.read();
  if (incomingByte==84nd) {
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print("RAW");
  Serial.print(" Indoor: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
  Serial.print(" Outdoor: ");
  Serial.println(sensors.getTempCByIndex(1));
  } 
}
 
}

--------------------------------------------------------
   Pana aici am terminat cu Arduino, ca si concluzie Arduino raspunde cu citirile senzorilor daca cineva-i transmite T pe serial.

   Pe sistemul linux (routerul Asus WL-500) avem:

1. python2.5 pentru a pune feed-ul pe pachube
2. curl

Scriptul 1.


>#!/bin/sh
>python2.5 /mnt/pachube_mobo/read_serial.py
>
>curl -s -d "send=T&buttonSubmit=submit" http://user:pass@server/admin/rs232term?Update=fulltext | grep nooutput
>curl -s http://user:pass@server/admin/rs232term?Update=fulltext | grep RAW  > /mnt/pachube_mobo/temp.txt
>curl -s http://user:pass@server/admin/rs232term?delbuffer | grep nooutput
>

Sunt 3 comenzi curl.
Prima trimite caracterul "T" (ASCII 84) catre terminalul serial al camerei, conectat prin adaptorul RS232-TTL la Arduino
A doua comanda "partseaza" raspunsul si il pune in fisierul temp.txt
A treia comanda "rade" bufferul serial al camerei pentru a-l lasa curat asteptand o noua interogare deci un nou raspuns de la Arduino.

Prima linie, adica :
>python2.5 /mnt/pachube_mobo/read_serial.py

Lanseaza un script de py care va trimite informatia pe pachube.

Scriptul 2.

>import eeml
>import linecache
>
>##################################
>
>temphum = linecache.getline("/mnt/pachube_mobo/temp.txt", 1)
># parameters
>API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>API_URL = '/api/xxxxxxxx.xml'
>
>readings = temphum.split(' ') # the readings are separated by spaces
>pac = eeml.Pachube(API_URL, API_KEY)
>pac.update([eeml.Data(0, readings[3], unit=eeml.Celsius()), eeml.Data(1, readings[5], unit=eeml.Celsius())])
>pac.put()

Si aici treaba e simpla,
Avem o variabila "temphum" care citeste fisierul temp.txt si "splitueste" valorile
in continuare intervine libraria eeml care pune valorile citite in xml si le trimite pe pachube.

Scripturile sunt rulate de CRON

Cam asta este.
Vreau sa pun si un display 20x4 caractere conectat tot pe ethernet care sa-mi arate temperatura si altele.

Ansamblu
Ansamblu1