"Cube" 3D 3x3x7 à LED sur Arduino - partie 2 : Premier modèle

Déçu du rendu avec les LED disponibles sur le prototype, et vu que je pouvais aller plus loin, j'ai investi dans des LED 5mm bleues.

Objectif

  • Les bonnes LED et mieux alignées et orientées
  • La guirlande pourra être rétractée pour occuper moins de place
  • de fait, les jonctions entre les étages seront souples, mais tendues une fois ouvert
  • La partie electronique sera en bas (pas besoin de poid et ports plus accessibles)
  • EDIT : la partie électronique sera en faite en haut : La guirlande pourrait être utilisée dans un sens comme dans l'autre, mais avoir la partie large en haut rendra mieux

Matériel

  • 1 Arduino Nano ou équivalent (ici de marque Izokee)
  • 100 LED (63 pour 7 étages, 91 pour 9)
  • 9 résistances, ce coup-ci le jus passera par les colonnes
  • quelques cables pour faciliter les branchements
  • un cul de peinture noire en bombe ou en pot
  • EDIT : une batterie "de secours" USB pour alimenter le tout

J'ai pris 2 modèles de LED bleues 5mm, 120° pour voir ce qui correspondrait le mieux :

  • têtes plates, 800 mcd, 3,2 V à 25 mA (20 avec l'Arduino) (bleues sur la photo)
  • têtes rondes, 200 mcd, entre 3,2 et 3,4 V à 20 mA (blanches sur la photo)s

J'ignore directement les 1500 mcd et plus ; le but étant d'avoir des points lumineux sans être aveuglé.

Et ici, les LED bleues sont parfaites, diffuses, elles font un beau point et sont visibles même de jour, sans éblouir.

Assemblage

Avec des bouts de planches et 2 demi-tasseaux je découpe les pièces qui me semblent nécessaires à l'aide de mes croquis clairs et limpides

collage, ponçage et premiers trous des éléments haut et bas.

Arrivé de dernière minute : la batterie USB, pour briller en extérieur.

Une petite touche de peinture et les éléments sont prêts à être assemblés.

Ce coup-ci je me suis fait un gabarit pour la matrice des étages afin de positionner les LED équitablement.

Pour les colonnes, j'ai utilisé des brins de cuivre d'un cable Hi-Fi, par 3 (pas comme sur la photo).

Une centaine de soudures plus tard, je peux ajouter la carte et effectuer les branchements.

Je suis très mauvais en soudure (niveau collège en techno). du coup c'est du paté par endroit, mais on me dit dans l'oreillette, qu'on s'en bat les couilles, parce qu'une fois assemblé :

Ouverture de la guirlande/lampion 3D :

Côté code, je défini l'ordre des colonnes. Ici du fond vers l'avant, de gauche à droite.
const char colonne[] = {5, 6, 10, 4, 8, 7, 9, 2, 3};
Les étages, de haut en bas. Les A6, A7 n'éclairent pas mes derniers niveaux, j'ai donc utiliser les D0 et D1.
const char etage[] = {A1, A2, A3, A5, A4, 0, 1};
J'ai simplement repris le code du proto en modifiant les pins pour vérifier le bon fonctionnement.

Dans le noir :

Le résultat est beaucoup mieux. A suivre, la partie code !

 

Partie 1 : Le prototype
Partie 2 : Le premier modèle (vous êtes ici)
Partie 3 : Le code (à venir)

"Cube" 3D 3x3x7 à LED sur Arduino - partie 1 : Prototype

Pour prendre en main cette carte, j'ai glané quelques idées, je cherchais juste un truc sympa à réaliser. Et si comme moi vous avez vu des démos de cubes 8x8x8 et plus, comme celles-ci :

C'est parfaitement stylé et inutile !

De nombreux tutoriels proposent la création de ces cubes en 2, 3 et 4^3 avec ce modèle de carte ou équivalent, comme ici ou . Un nombre plus élevé de LED peut être géré, mais inclue la gestion de pièces supplémentaires et une plus grosse expérience. Exemple en 8x8x8.

Objectif

L'idée est de faire un premier jet sans moyen, à suspendre comme un lampion.
avec 20 pins, je soustrais le nombre de colonnes pour obtenir le nombre d'étages possible : 9 colonnes, 11 étages ; 12 colonnes, 8 étages ; 16 colonnes, 4 étages.
Je souhaite quand même garder de la place pour un futur bouton ou autre. Aussi, il devra être plus grand qu'une enceinte PC : en effet, la plupart des modèles produit sont "de bureau" et font cheap au final

3x3 est idéal pour moi. A 20mA par LED et par étage, je ne dépasse théoriquement pas les 190mA. Pour d'avantage il faudra peut-être procéder à un affichage LED à LED/groupées ou d'une alimentation externe.
J'ai donc opté pour un format atypique, un Parallélépipède 3x3x7 que je trouve plus intéressant à exploiter qu'un 4x4x4

Matériel

  • Le nouveau joujou : 1 Arduino Uno
  • et déja sous la main : du fil souple et rigide
  • 7 résistances, une par étage
  • 3x3x7 leds pourraves
  • deux bouts de carton

Assemblage

L'assemblage des étages se fait un peu à l'oeil, à l'aide de tiges presque droites.
Pas grand chose à ajouter, tous les tutos vus plus haut expliquent globalement la même chose, si ce n'est qu'ils se contentent souvent des pattes des LED.

Ici, les étages sont simplement entrecrochés pour pouvoir être démontés ou en ajouter. L'écart entre les LED est de 6 cm. Normalement les colonnes devaient finir par des poids, pour tendre l'ensemble de la structure, d'où l'aspect lendemain de cuite.

Vient la partie code. Pour simplement tester, voici un petit code qui va allumer une à une les LED, une fois les étages et colonnes définis.

const int colonnes = 9;
const int etages = 7;
const char colonne[] = {A2, A1, A0, 6, 7, 10, 5, 8, 9};
const char etage[] = {2, 3, 4, 0, 1, A4, A5};

void to_led (int num = 5) {  // milieu par defaut
	for (int t = 0; t < colonnes; t++) {
		digitalWrite(colonne[t], LOW);
		}
	digitalWrite(num, HIGH);
	};

void to_etage (int num = 0) {
	for (int t = 0; t < etages; t++) {
		digitalWrite(etage[t], HIGH);
		}
	digitalWrite(num, LOW);
	};

void setup () {
	for (int t = 0; t < etages; t++) {
		pinMode(etage[t], OUTPUT);
		digitalWrite(etage[t], HIGH);
		}
	for (int t = 0; t < colonnes; t++) {
		pinMode(colonne[t], INPUT);
		digitalWrite(colonne[t], LOW);
		}
	}

void loop () {
	for (int t = 0; t < etages; t++) {
		to_etage(etage[t]);
		for (int u = 0; u < colonnes; u++) {
			to_led(colonne[u]);
			delay(40);
			}
		}
	}

Et voila ! C'est bien de la daube... la caméra plus la faible luminosité des LED, il faut se concentrer pour les voir, mais ça donne un aperçu et surtout, ça fonctionne.

A suivre, le premier modèle !

 

Partie 1 : Le prototype (vous êtes ici)
Partie 2 : Le premier modèle
Partie 3 : Le code (à venir)

Script simple robinet à Bitcoins

Quelques étapes pour mettre en place votre faucet ou robinet à Bitcoins
Commencer par extraire le contenu de l'archive et modifier le fichier conf.php notamment admin_mdp

Le site peut être rendu inaccessible le temps de la mise en place avec open et ?acces_regie pour passer
Adapter la mémoire d'APC s'il est activé, et renseigner les données SMTP pour utiliser la validation des comptes par mail.


Accéder à l'administration en passant par la page /admin.php?pass=test
avec test pour le mot de passe administrateur par defaut

L'administration est simple
- La liste des inscrits et l'édition des variables
- L'état de la caisse : Les satoshis générés, les dépenses et les gains
- Les demandes de withdraw
- Des statistiques avec le trafic par heure et par jour
- La gestion des publicités
- Et gérer la mémoire

Il n'y a plus qu'à essayer et commencer à parier !

Il est possible de changer les devises en entrant dans le code
De même pour ajouter un captcha. Il y a une base à intégrer en fonction du service
Il est très simple de créer d'autres modules en complément ou principal type vidéo, galerie, playlist, jeux...

 

Télécharger sur

satoshibox | pastecoin | bitcoinfilebox | en direct

Démo utilisateur | administrateur
 

 



script simple faucet / robinet à bitcoins original
PHP, JS - HTML, CSS
Créez votre faucet en partageant vos revenus publicitaires !
 

- simple et rapide pour l'utilisateur : une adresse bitcoin et un mail
- inscription confirmable par mail
- Multilangue anglais, français
- simple anti-adblock
- système d'affiliation
- backend simple
- léger et sans base de donnée

modules inclus :

- paris : permet de parier à partir ses satoshis avec 1 chance sur 2 jusqu'à 1024
- actualité RSS : Afficher les flux de plusieurs sites
- citations : des phrases spirituelles en français et en anglais

Administration :

- gestion de la mémoire
- détails des utilisateurs
- supervision des sommes genérées
- statistiques journalières et heure par heure
- demandes de virement
- édition des encards publicitaires ou modules

Configuration :

- satoshis par defaut
- durée entre deux claims
- plusieurs pramètres
- durée en entre deux paris
- mise maximum
- contrôle de la caisse
- montant du withdraw
- satoshis de bienvenue
- satoshis de parrainage
- liens de referal
- nom et adresse du site
- informations mail
- fermer le site temporairement
- ouvrir les inscriptions
- masquer les publicités
- confirmer les inscription par mail
- session par cookies
- mode APCu
- ajouter des modules

ajouter plus de langues :

utiliser comme base avec "en" le code langue :
lang_en.php, faq_en.php et mod_phrases_en.php

J'en fait des caisses hein ? mais c'est juste un faucet PHP
Pour les nanani nanana, voyez avec Paul

 

Télécharger sur

satoshibox | pastecoin | bitcoinfilebox | en direct

Démo utilisateur | administrateur

 

[mémo] installation serveur web

Configuration rapide d'un RPS sur Jessie (Debian 8.7) neuf, d'un Atom à 1.8 GHz avec 2 Go et 1 To, sur D425KT. changer le mot de passe root

passwd mot_de_passe_root

créer un utilisateur

adduser mon_user

changer le port SSH et empécher le login root distant

nano /etc/ssh/sshd_config

et redémarrer

/etc/init.d/ssh restart

installer apache

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

configurer

nano /etc/apache2/apache2.conf

changer user et groupe d'exécution

nano /etc/apache2/envvars

recharger

service apache2 force-restart

ajouter les sites

nano /etc/apache2/sites-available/nom_du_site.conf

activer les sites

a2ensite nom_du_site

activer les mods nécessaires

a2enmod rewrite...

installer PHP

apt-get install php7.0 libapache2-mod-php7.0 php7.0-cli php7.0-common php7.0-mbstring php7.0-gd php7.0-intl php7.0-xml php7.0-mysql php7.0-mcrypt php7.0-zip

configurer

nano /etc/php5/apache2/php.ini

pour ligne de commande

nano /etc/php5/cli/php.ini

recharger Apache

service apache2 force-reload

installer SQL

apt-get install mysql-server mysql-client mysql-common

configurer SQL

nano /etc/mysql/my.cnf

 

Caméras chinoises IPC365 (ShowMo)

Je suis parti en quête de solutions, pour tenter de récupérer les flux de caméras réseau, pour un petit projet.

J'ai donc passé commande de 2 petites caméras IP chinoises ipc365 et low-cost, rondes 7 cm de diamètre et FOV de 185° à 960p... sale. Les mêmes que l'on retrouve sous différentes marques ex. Fredi). Mais des caméras pour lesquelles je pensais pouvoir bénéficier d'au moins un accès cgi, ftp, rtps... Le fait est que mon choix, basé sur le rapport résolution/prix ne permet qu'un accès distant à la caméra, et uniquement via une application Apple ou Android. C'est bien pour Mr Dupont, par contre, pour bénéficier d'un accès local, c'est un peu plus compliqué : Le port USB ne sert que d'alimentation, pas de webinterface (repertoire vide), pas de flux trouvé, et la carte SD seule est illisible..., juste du httpd/telnet.

Après avoir fait le tour des applications, Seule 360eyeS me permet de créer un compte pour lier et partager des caméra par code, voir en live ou un replay sur une timeline, record et 2, 3 trucs. Dans l'objectif d'éditer les vidéos sur mon poste, une application Android n'était pas ce qu'il y a de plus pratique.

Je tente dans un premier temps la lecture de la carte, avec explore2fs/ext2explore. Mais c'est finalement avec un passage en hexa que je lis wfs0.4. Si seulement je savais identifier les entêtes de mes fichiers (qui s'avèrent êtres du h264/PCM). Soit un système de fichiers dédié aux enregistrement de vidéo surveillance, enfaite bien connu pour ceux qui savent.

S'en suit des tentatives d'accès/récupération avec des softs comme DVR Examiner, HX Recovery, Elite WFS, Recovery for DVR et une tonne d'autres, mais systématiquement payants. Et c'était le monde à neuneu, j'en aurais acheté une license, tellement je peinais. Heureusement les prix étaient prohibitifs, puisque orientés pro.

A cette étape, j'en sors 3 liens utiles qu'on trouve aisement :
http://www.hkvstar.com/technology-news/china-ip-camera-configuration-firmware.html
https://jumpespjump.blogspot.fr/2015/09/how-i-hacked-my-ip-camera-and-found.html
https://forum.use-ip.co.uk/threads/hacking-china-ip-camera-need-help-for-rtsp-password-for-telnet.938/

Donc, accès avec telnet via le port classique impossible avec les identifiants trouvés. Par contre sur le 9527 : Busybox, avec les identifiants admin:123456 (nTBCS19C), accès au menu help et les commandes au shell. ça aurait pu être mieux sans le spam.

Exemple partiel de NetWork.json

NetWork:{

   },
   "DigManagerShow" : {
      "DigManagerShow" : "ShowAll"
   },
   "GetIPMode" : {
      "DHCPorTraversal" : 1


   ],
   "NetCommon" : {
      "GateWay" : "0x0101A8C0",
      "HostIP" : "0x0A01A8C0",
      "HostName" : "IPC365",
      "HttpPort" : 80,
      "MAC" : "DC:07:C1:F8:76:1E",
      "MaxBps" : 0,
      "MonMode" : "TCP",
      "SSLPort" : 8443,
      "Submask" : "0x00FFFFFF",
      "TCPMaxConn" : 10,
      "TCPPort" : 34567,
      "TransferPlan" : "Quality",
      "UDPPort" : 34568,
      "UseHSDownLoad" : false
   },

      {
         "DDNSKey" : "DynDns",
         "Enable" : false,
         "HostName" : "your.dyndns.org",
         "Server" : {
            "Address" : "0x0100060A",
            "Anonymity" : false,
            "Name" : "members.dyndns.org",
            "Password" : "",
            "Port" : 80,
            "UserName" : ""
         }
      },
      {
         "DDNSKey" : "Oray",
         "Enable" : false,
         "HostName" : "your.gicp.net",
         "Server" : {
            "Address" : "0x0100060A",
            "Anonymity" : false,
            "Name" : "hphwebservice.oray.net",
            "Password" : "",
            "Port" : 80,
            "UserName" : ""
         }
      },
      {
         "DDNSKey" : "NO-IP",
         "Enable" : false,
         "HostName" : "your.no-ip.com",
         "Server" : {
            "Address" : "0x0100060A",
            "Anonymity" : false,
            "Name" : "dynupdate.no-ip.com",
            "Password" : "",
            "Port" : 80,
            "UserName" : ""
         }
      },
      {
         "DDNSKey" : "MYQ-SEE",
         "Enable" : false,
         "HostName" : "your.myq-see.com",
         "Server" : {
            "Address" : "0x0100060A",
            "Anonymity" : false,
            "Name" : "myq-see.com",
            "Password" : "",
            "Port" : 80,
            "UserName" : ""
         }
      }
   ],
   "NetDHCP" : [
      {
         "Enable" : true,
         "Interface" : "eth2"
      },


   "NetMobile" : {
      "Enable" : true,
      "Server" : {
         "Address" : "0x00000000",
         "Anonymity" : false,
         "Name" : "Moblie",
         "Password" : "",
         "Port" : 34599,
         "UserName" : ""
      }
   },
   "NetNTP" : {
      "Enable" : true,
      "Server" : {
         "Address" : "0x00000000",
         "Anonymity" : false,
         "Name" : "time.nist.gov",
         "Password" : "",
         "Port" : 123,
         "UserName" : ""
      },
      "TimeZone" : 13,
      "UpdatePeriod" : 10
   },
  
   "RTSP" : {
      "Client" : {
         "Address" : "0x00000000",
         "Anonymity" : false,
         "Name" : "",
         "Password" : "",
         "Port" : 554,
         "UserName" : ""
      },
      "IsClient" : false,
      "IsServer" : true,
      "Server" : {
         "Address" : "0x00000000",
         "Anonymity" : false,
         "Name" : "",
         "Password" : "",
         "Port" : 554,
         "UserName" : ""
      }
   },

avec  nmap c'est presque une quinzaine de ports ouverts en UDP : 16674, 17077, 18985, 20525, 20884, 21111, 21323, 22996, 29256, 34256, 34796, 36384, 40866, 47981, 49172, 49181, 57813. Les configs me donnent des clés, identifiants, adresses, et surtout le wifi par défaut, pour me passer de l'application en cas de réinitialisation et/ou de déplacement (cfg -help).

Décompilation du fichier APK de 360eyes, avec des adresses et clés mais sans grand intérêt, Ca m'a surtout permis de comprendre un peu le fonctionnement.

Je récupère ensuite les trames avec Wireshack entre l'appli et les caméras, et pour le peu que j'ai compris ici : le web-service contacte la caméra via DNS et transite le flux.

Pour le moment, je suis passé par : l'accès à des services inexistants - l'extraction des données de la carte - La configuration via Telnet - l'analyse de l'application, et celle des trames... pour au final tomber sur une arborescence de type idea/2017-03-28-.../....[0].h264 dans une de ces trames.

Du coup, ça m'a permis de faire les bonnes recherches et je suis tombé sur Diskplayer de MT-Vision. Qui permettait théoriquement l'accès aux vidéos, mais toujours sans résultat. Et comme j'en étais à installer tout ce qui passait, c'est finalement le CMS juste au dessus (alias H264 DVR sur le splashscreen), qui a mit fin à ma quête.

Et pour le coup, c'est comme une énorme victoire, puisqu'en plus d'être gratuit, d'avoir le live et les enregistrements, il y a le son (ce que ne proposaient pas les autres solutions), et j'ai également accès à tous les paramètres modifiables, dont la plupart n'étaient pas disponibles sur 360eyeS.

Trouvé sur http://dl.cctv.odessa.ua/

Bref beaucoup de galère pour un truc peu documenté avec finalement une solution miracle, trouvée à la fin, évidemment.

En conclusion, j'utilise la paire d'identifiants trouvée et je récupère mes vidéos en local, sans faire transiter en Chine. Par contre elles se signalent toujours là bas, puisque liées à un compte et accès à internet, juste au cas ou je voudrais y accéder de la façon prévue.