Ce site utilise des frames. Si vous ne voyez pas les menus à gauche, cliquez Ici

Un distributeur de fils de wrapping


J'utilise de plus en plus de fils de wrapping pour mes montages, je ne les wrap pas mais m'en sert pour faire les connexions sur mes "Plaques à trous".
J'utilise moins le fil émaillé thermosoudable car c'est lent et finnalement plus fragile.

De plus, l'utilisation de plusieurs couleurs rend le cablage plus facile.

J'ai trouvé des bobines pas cher sur ebay (Chercher Wrapping wire). On trouve des bobines de 300 m made in China qui ressemblent à ça :
Bobin.jpg

On les trouves à tous les prix mais si on les prend en Chine direct on les a pour environ 8 Euro port compris.
Le problème c'est que toutes ces bobines à trainer, c'est pas pratique, le fils se déroule, j'ai même une bobine qui est tombée et qui s'est cassée, le fils c'est emmelé, l'horreur !
J'ai donc eu envie de me faire un dévidoir. Aprés moult reflexions et des plans assez compliqués, j'ai fini par trouver une solution hyper simple:

IMG_0434.JPG

C'est basique et ça fonctionne trés bien.

J'ai pris deux barres d'alu de diamètre 25 que j'ai réusiné au diamètre de l'intérieur des bobines (environ 24mm)

Je les ai coupées a une longueur suffisante pour 4 bobines plus un peu de jeu.
Ensuite perçage et taraudage à M10.

Le but est que les bobines tournent librement mais avec un peu de frottement pour que le fil reste tendu et ne s'emmele pas.
De plus, quand une bobine tourne, il ne faut pas qu'elle entraine sa ou ses voisines.
J'ai donc découpé de vieux intercalaires de classeur pour faire des parois isolantes.

Puis j'ai découpé 2 flasques dans du plexi de 5mm d'épaisseur.

Voici les barres montées avec de la BTR :

IMG_0422.JPG

Ensuite on empile les bobines et les intercalaires et un ressort vient comprimer le tout. On ajuste l'angle pour que la pression soit optimum.

IMG_0425.JPG

Ensuite, j'ai découpé un U en perçant et fraisant des trous pour chaque fil.

IMG_0426.JPG

Puis je colle une mousse qui empêche les fils de glisser trop facilement.

IMG_0430.JPG

Reste plus qu'à fixer le U avec 4 vis btr M2.5 et voilà...

IMG_0429.JPG

Je suis hyper content du résultat, c'est simple et fonctionel.
Bon, c'est pas facile de changer une bobine mais vu ma consomation, je serait mort avant d'être à court de fils.....
8 * 305M = 2Km4 de fils, j'ai de quoi faire......

Un quadruple superviseur de batteries

Comme je l'ai déjà mentionné sur ce site, mon épouse élève des chevaux Traits Poitevins (Son site ici)
Pour ce faire elle posséde un vieux camion équipé de 2 batteries 12V en série, un tracteur en 12 V aussi et moult batteries de clôture électrique.
Elle n'utilise pas souvent ces équipements, surtout l'hiver et les batteries déchargées lui posaient souvent probléme. Il ne faut pas oublier qu'une batterie au plomb qui descent en dessous d'un certains niveau de tension est victime de sulfatation qui va le rendre vite inutilisable. Au prix des batteries, surtout celle du camion, il fallait que je fasse quelque chose.

L'idée est de faire un dispositif qui surveille la tension de 4 batteries et leur refile un petit coup de jus au besoin afin de compenser leurs éventuelles auto-décharge. Ce n'est PAS un chargeur de batterie.

Pour ma femme qui est plus à l'aise avec les animaux qu'avec l'électricité, il faut du matos simple et costaud, du rustique quoi. J'ai donc étudié le truc le plus simple du monde à utiliser, il suffit de brancher le vehicule et/ou la batterie concernée à l'aide d'un cable et d'une prise montée exprés et le bidule s'occupe de tout.

L'interface affiche la tension de chaque batterie branchée, indique si elle est trop basse et les charges séquentiellement au besoin.

Chaque batterie de 12V est considérée de manière isolée et elles peuvent êtres en série ou non, c'est sans importance. C'est bien sûr important pour le camion qui est équipé de 2 batteries de 12V en série.

J'ai desssiné et étudié le bazard pour qu'il s'installe dans une armoire électrique existante dans le hangar ou est entreposé le matos agricole.

Il se compose de 2 parties : Le boitier d'affichage/CPU et le module de puissance-chargeur-interface batteries. Les 2 sont reliés par un cable plat "Limande".
Le boitier CPU/Display est alimenté par une alimentation déjà existante.
Le Cpu s'alimente en 5V, l'interface de puissance en 12V. Le chargeur de batterie qui se met en route au besoins à son propre transfo.

Voici le schéma de l'inteface de puissance chargeur :

CP46-PWR.GIF

Ou peut y voir les 4 détecteurs de tension isolés par des photocoupleurs qui détecte la présence des batteries branchées. Une protection est présente à chaque entrée et une batterie branchée à l'envers ne sera pas détectée et ne causera aucun dommage. Ensuite on distingue les 4 relais qui permettent de sélectionner la batterie active parmis les 4 possibles. Il sont branchés en mode "Priorité" ce qui empêche tous court-circuits, même en cas de bug du CPU.

Pour finir, le chargeur qui ne se met en route qu'au besoins pour ne pas consommer de courant pour rien.
La tension max du transfo étant correcte pour charger, l'électronique se compose juste d'un limiteur de courant.
Un ampéremetre permet de visualiser le courant de charge. La sortie "Sense" permet de mesurer la tension de la batterie sélectionnée.

Maintenant voici le schéma de la carte CPU :

CP46-CPU.GIF


J'ai encore utilisé un bon vieux 8751. Un MAX813 se charge du reset, de la supervision de tension et du watchDOG. (Ce circuit est génial !!)
Un classique convertisseur A/D 8 bit ADC804 se charge de mesurer la tension. la précision est plus que suffisante pour l'application envisagée. Pour se simplifier la vie, sa sortie binaire de 0 à 255 correspond à 0V a 25.5V. Donc 1 point par 100mv. R4 permet de calibrer la bête. Un bon vieux LM336 compensé en température me fait une ref acceptable ajustable par R3 à 2.49V exactement pour minimiser le coeficient de température. (Voir DataSheet NS)

Jmp1 permet d'activer ou non le WachDog pour la mise au point
Jmp2 permet de passer en mode debug, ce qui force des temps de cycle trés court pour le test et la mise au point.
Jmp3 permet de passer en mode Calibrage. dans ce mode la tension à TP2 est affichée en continue.

Pour finir, voici la platine d'affichage :

CP46-Display.GIF

Bon, ici il faut commander 4 fois 3 afficheurs. Pour me simplifier la vie, j'utilise l'excellent MAX7219. Ce circuit polivalent permet, entre autre, de commander 8 afficheurs. Comme le point decimal est fixe ici et que je n'ai pas besoins d'afficher des valeurs de plus de 19.9, je ruse et utilise le point decimal pour commander le 1 de poid fort. Bon le fait de mettre 2 segments en parallele baisse un peu la luminosité mais c'est trés acceptable.

Pour le reste, il y a 4 led par batterie :
  1. Une qui indique la détection de sa présence
  2. Une qui indique qu'elle est trop basse
  3. Une qui indique qu'elle est sélectionnée
  4. Une qui indique qu'elle est en charge
Les 3 et 4 ne peuvent bien sûr être alumées que pour une batterie à la fois.

Une petite logique avec des portes se charge du décodage qui va bien.
Bien aprés le hard, le soft qui anime le tout :

Le principe générale est le suivant :

Le programme peut faire une analyse/Mesure qui mesure la tension de chaque batterie présente et décide s'il elle doit être chargée.
Cette analyse se fait à chaque fois qu'une batterie est branchée ou débranchée, ou à la fin de chaque cycle de charge ou d'attente.

Voici le Zip qui va bien qui contient le source sous Bascom et l'exe en Bin ou HEX Téléchargement ICI

Voici le source du programme:

NOTE :
kVoltLow est la constante qui fixe la tension en dessous de laquelle il faut charger la batterie, ici 12.6V
kVoltHi est la constante qui fixe la tension en dessous de laquelle il faut stopper la crage, ici 13.8V

kBatScanPeriod = 300                         indique la fréquence des cycles d'analyse si aucune batterie ne necessite de charge (5mn)
kBatChargePeriod = 1800                   indique le temps de charge de la batterie en cours de sélection (30mn)

kBatScanPeriodDBug et kBatChargePeriodDBug sont les mêmes valeurs en mode DBug.


'--------------------------------------------------------------
' CP0046 - Quad Batteries Supervisor Firmware
' File: CP0046.BAS
' By Philippe Demerliac
' (c) 2012-2013 Cyrob
'------------------------------------------------------------------------------
' Version history
' Version Date          Author      Comment
'   1.0d1 01 Jan 2013   Phildem     Preliminary tests
'   1.0d2 03 Jan 2013   Phildem     Cal Mode And Battery Detection
'   1.0   06 Jan 2013   Phildem     First Release OK
'------------------------------------------------------------------------------
' Hardware connexions

' P0 Use all pins as inputs................................................
' All p0 pins are connected to ADC0804 Data Bus

' P1 Use ..................................................................

' Out DispDIn     P1.0  Activ Hi    MAX7219 DataIn
' Out DispClock   P1.1  Activ Hi    MAX7219 Clock
' Out DispLoad    P1.2  Activ Low   MAX7219 Load
' Out AdcRead     P1.3  Activ Low   ADC0804 Read & CS
' Out AdcWrite    P1.4  Activ Low   ADC0804 Write & CS
' In  AdcEOC      P1.5  Activ Low   ADC0804 INTR (End Of Conversion)
' In  DebugMode   P1.6  Activ Low   Indicate DBug Mode
' Out WdTrig      P1.7  Toggle      Max813L WDI Must be toggled every Sec

' P2 Use all pins as outputs ..............................................

' ActBat1   P2.0  A logic Low select the Battery n°1
' ActBat2   P2.1  A logic Low select the Battery n°2
' ActBat3   P2.2  A logic Low select the Battery n°3
' ActBat4   P2.3  A logic Low select the Battery n°4
' LedLow1   P2.4  A logic Hi light the Led 'Low' of Battery n°1
' LedLow2   P2.5  A logic Hi light the Led 'Low' of Battery n°2
' LedLow3   P2.6  A logic Hi light the Led 'Low' of Battery n°3
' LedLow4   P2.7  A logic Hi light the Led 'Low' of Battery n°4

' P3 Use ..................................................................

' In  DetBat1     P3.0  Activ Hi    A logic Hi indicate battery 1 present
' In  DetBat2     P3.1  Activ Hi    A logic Hi indicate battery 2 present
' In  DetBat3     P3.2  Activ Hi    A logic Hi indicate battery 3 present
' In  DetBat4     P3.3  Activ Hi    A logic Hi indicate battery 4 present
' In  CalMode     P3.4  Activ low   A logic Low indicate 'Calibration Mode'
' In  <Unused>    P3.5
' In  <Unused>    P3.6
' Out  Charge     P3.7  Activ low   A logic Low Switch on the charger

'------------------------------------------------------------------------------
$regfile = "89c51.dat"                              'Define machine
$crystal = 12000000                                 '12 MHz XTal


'Const declaration ------------------------------------------------------------

Const kDisAddNop = &H0                              'Adress of disp NonOp
Const kDisAddDecMode = &H9                          'Adress of disp DecodeMode
Const kDisAddLum = &HA                              'Adress of disp Intensity
Const kDisAddScanLim = &HB                          'Adress of disp ScanLim
Const kDisAddShutD = &HC                            'Adress of disp ShutD
Const kDisAddDisTest = &HF                          'Adress of disp Test

Const kDisSegMinus = &HA                            'Display Minus Sign
Const kDisSegBlank = &HF                            'Display Blank
Const kDisIntens = &HE                              'Seg Intensity

Const kBatScanPeriodDBug = 10                       'Period Debug in Sec
Const kBatChargePeriodDBug = 20                     'Period Debug in Sec

Const kBatScanPeriod = 300                          'Period Normal in Sec
Const kBatChargePeriod = 1800                       'Period Normal in Sec

Const kVoltLow = 126                                'Low voltage Limit
Const kVoltHi = 138                                 'Hight voltage Limit

'IO Aliasing ------------------------------------------------------------------

In_ADC Alias P0

Out_DispDIn Alias P1.0
Out_DispClock Alias P1.1
Out_DispLoad Alias P1.2

Out_AdcRead Alias P1.3
Out_AdcWrite Alias P1.4
In_AdcEOC Alias P1.5

In_DebugMode Alias P1.6
Out_WdTrig Alias P1.7

Out_BatLowPort Alias P2
Out_ActBat1 Alias P2.0
Out_ActBat2 Alias P2.1
Out_ActBat3 Alias P2.2
Out_ActBat4 Alias P2.3

Out_LedLow1 Alias P2.4
Out_LedLow2 Alias P2.5
Out_LedLow3 Alias P2.6
Out_LedLow4 Alias P2.7


In_DetBatQ Alias P3
In_DetBat1 Alias P3.0
In_DetBat2 Alias P3.1
In_DetBat3 Alias P3.2
In_DetBat4 Alias P3.3

In_CalMode Alias P3.4

Out_Charge Alias P3.7


'Var Decl ---------------------------------------------------------------------

Dim Clock_word As Word                              'Timer counter
Dim Tick_hsec As Bit                                'Every 500ms Tick flag
Dim Watchd As Bit                                   'Watchd toggle

Dim Volt As Byte                                    'Last DAC Voltage Read
Dim VoltEoc As Bit                                  'EOC State

Dim I As Byte , J As Byte , K As Byte               'Work Var
Dim BB As Bit                                       'Work Bit

Dim Bat As Byte                                     'Actual Bat Connected
Dim BV(4) As byte                                   'Bat State 0:No 1:Low 2:Ok

Dim PSel As byte                                    'Sel Quartet
Dim PLow As byte                                    'Low Quartet

Dim Period As Word                                  'Curent Period
Dim MaxPeriod As Word                               'Max Period

Dim CurBat As Byte                                  'Current Bat on charge
Dim NbBat As Byte                                   'Nbr Of Bat Low


Declare Sub DispVolt(DispVChan As Byte , DispVolt As Byte)
Dim DispVChan As Byte , DispVolt As Byte

Declare Sub WriteDisp(DispAdd As Byte , DispDat As Byte)
Dim DispAdd As Byte , DispDat As Byte

'Program ----------------------------------------------------------------------

OnReset:

'Configure Timer0 for Interupt every 250µs

Config Timer0 = Timer , Gate = Internal , Mode = 2

On Timer0 Timer0_Int

Load Timer0 , 250

Priority Set Timer0
Enable Interrupts
Enable Timer0


'Init IO
Out_BatLowPort = &B00001111                         'Reset Low Port
Out_DispClock = 0                                   'Clear Disp Intf
Out_DispDIn = 0

'Init var
Clock_word = 0
Tick_hsec = 0
Watchd = 0

'INIT Timer
Start Timer0

'Init Display Ship

Call WriteDisp(kDisAddDecMode , &HFF)               'Use decoder for all digit
Call WriteDisp(kDisAddLum , kDisIntens)             'Set Up luminosity
Call WriteDisp(kDisAddScanLim , &H7)                'Use All Digit
Call WriteDisp(kDisAddShutD , &H1)                  'Wake it

'Test Display
Call WriteDisp(kDisAddDisTest , &H1)                'Display 188 to all

Waitmse 500                                         'Display Test for 500 ms

'End Test Display
Call WriteDisp(kDisAddDisTest , &H0)

' look for Cal Mode
BB = In_CalMode
If BB = 0 then
   Goto CalMode
EndIf

Bat = &HFF                                          'To insure init
CurBat = 4                                          'Start CurBat To 1


' Main Loop -------------------------------------------------------------------
Do
Main:
   If Tick_hsec = 1 Then                            'Every half Sec tick
      Tick_hsec = 0

      Out_WdTrig = 0                                'Pulse Watch dog
      Waitmse 2
      Out_WdTrig = 1

      ' Look if battery connected or disconected
      I = In_DetBatQ
      I = I And &B00001111
      J = &B00000001
      PSel = &B11111110
      PLow = 0

      If I <> Bat Then                              'Bat Cnx Changed
         Bat = I                                    'Update State
         NbBat = 0

         'Display minus on all Digit
         For I = 1 to 8
            Call WriteDisp(I , kDisSegMinus)
         Next I

         Out_Charge = 1                             'Stop Charge if any
         Waitmse 500                                'Give it time to sleep
         Out_WdTrig = 0                             'Toggle Watch Dog

         Out_BatLowPort = &B00001111                'Reset Low Port
         Waitmse 250                                'Wait for relay Establisment
         Out_WdTrig = 1                             'Toggle Watch Dog

         'Update BV and Display
         For I = 1 To 4
            K = Bat And J

            If K = 0 Then                           'If No Bat
               BV(I) = 0                            'Flag It To 0
            Else
               K = PSel AND &B00001111
               Out_BatLowPort = K                   'Sel Bat

               Out_WdTrig = 0                       'Toggle Watch Dog
               Waitmse 250                          'Wait for relay Establisment

               Gosub ReadAdc                        'Read Voltage
               Call DispVolt(I , Volt)              'Update Display
               BV(I) = 2                            'Update Array

               Out_BatLowPort = &B00001111          'No Sel, No Low Led for now
               Out_WdTrig = 1                       'Toggle Watch Dog
               Waitmse 250                          'Wait for relay Back

               If Volt < kVoltLow Then              'Set Low Flag if needed
                  Incr NbBat
                  BV(I) = 1
                  PLow = PLow Or J
               EndIf

            EndIf

            Shift J , Left , 1                      'Shift Mask For Next One
            Rotate PSel , Left , 1                  'Shift Sel For Next One
         Next I

         Shift PLow , Left , 4                      'Adjust PLow to Port

         BB = In_DebugMode                          'Look  if debug mode

         'Configure the item to charge if needed
         If NbBat <> 0 Then

            'Calc CharegPeriod
            If BB = 0 Then
               MaxPeriod = kBatChargePeriodDBug * 2
            Else
               MaxPeriod = kBatChargePeriod * 2
            EndIf

             'Calc CurBat and select it if needed
            For I = 1 To 4
               CurBat = CurBat + 1
               If CurBat > 4 Then
                  CurBat = 1
               EndIf

               If BV(CurBat) = 1 Then               'Bat Found

                  PSel = &B01111111
                  Rotate PSel , Left , CurBat       'Sel CurBat
                  J = PSel And &B00001111
                  J = J Or PLow                     'Display Low
                  Out_BatLowPort = J
                  Waitmse 400                       'Wait for relay

                  Out_Charge = 0                    'Charge It

                  Exit For
               EndIf
            Next I


         Else
            'Calc Scan Period
            If BB = 0 then
               MaxPeriod = kBatScanPeriodDBug * 2
            Else
               MaxPeriod = kBatScanPeriod * 2
            EndIf
         EndIf

         Period = 1                                 'Insure Start a new Cycle

         Goto Main                                  'So now loop normally
      EndIf


     'Look if Period End
      Period = Period + 1
      If Period > MaxPeriod Then                    'If Period ends, Scan Again
         Bat = &HFF
         Goto Main
      EndIf

      If NbBat = 0 Then                             'If not charge
          Goto Main                                 'Nothing To DO
      EndIf

      Gosub ReadAdc                                 'Read Voltage under charge
      Call DispVolt(CurBat , Volt)                  'Update Display

      If Volt >= kVoltHi Then                       'Avoid over load
         Period = MaxPeriod
      EndIf

   EndIf                                            'Of Tick


'And continue for ever, that's the computer hard duty..
Loop


'==============================================================================
' Calibration mode ============================================================
'==============================================================================
CalMode:

'Blank All display
For I = 1 to 8
   Call WriteDisp(I , kDisSegBlank)
Next I


Do

   If Tick_hsec = 1 Then                            'Every half Sec tick
      Tick_hsec = 0
      If Watchd = 0 Then
         Out_WdTrig = 1                             'Toggle Watch dog
         Watchd = 1
      Else
          Out_WdTrig = 0
          Watchd = 0
       EndIf

    'Read Voltage
    Gosub ReadAdc

    'Display Voltage
    Call DispVolt(1 , Volt)

   EndIf                                            'Of Tick


'And continue for ever, that's the computer hard duty..
Loop

'------------------------------------------------------------------------------
' Read Voltage at ADC and Fill Volt with the Value  ---------------------------
'------------------------------------------------------------------------------

ReadAdc:

   'Pulse Write to Init Measure
   Out_AdcWrite = 0
   Out_AdcWrite = 1

   ' Wait for measure Ok
   AdcWait:
   VoltEoc = In_AdcEOC
   If VoltEoc = 1 Then : Goto AdcWait : EndIf

   ' Read ADC Value
   Out_AdcRead = 0
   Volt = In_ADC
   Out_AdcRead = 1

Return

'------------------------------------------------------------------------------
' Timer 0 Interrupt -----------------------------------------------------------
'------------------------------------------------------------------------------

Timer0_Int:

'Incr Sec Ticks
Incr Clock_word
If Clock_word = 2000 Then
   Clock_word = 0
   Tick_hsec = 1
End If

Return

'------------------------------------------------------------------------------
' Display Voltage DispVolt in Chan DispVChan ----------------------------------
'------------------------------------------------------------------------------

Sub DispVolt(DispVChan As Byte , DispVolt As Byte)

Dim _DisV As Byte

'Get Digit Lo
DispVChan = DispVChan * 2

_DisV = DispVolt / 10
If _DisV > 9 then
    _DisV = _DisV - 10
    _DisV = _DisV OR &B10000000
EndIf
Call WriteDisp(DispVChan , _DisV)

'Disp volt
DispVChan = DispVChan - 1

'Disp 1/10 volt
_DisV = DispVolt Mod 10
Call WriteDisp(DispVChan , _DisV)

End Sub


'------------------------------------------------------------------------------
' Write in the digit controleur Adress, data  ---------------------------------
'------------------------------------------------------------------------------

Sub WriteDisp(DispAdd As Byte , DispDat As Byte)

Dim _DisW As Word
Dim _DigD as Word
Dim _Dig As Byte

'Build the serial data stream Adress + Data
_DisW = DispAdd * 256
_DisW = _DisW + DispDat

'Set Load Low to start the data Burst
Out_DispLoad = 0

'Serialize the data
For _Dig = 1 To 16
   _DigD = _DisW And &B1000000000000000
   If _DigD = &B1000000000000000 Then
      Out_DispDIn = 1
   Else
      Out_DispDIn = 0
   End If

   'Pulse Clock
   Out_DispClock = 1
   Out_DispClock = 0


   'Treat next bit
   Shift _DisW , Left , 1
Next _i

'Restore Din to low State
Out_DispDIn = 0


'Set Load Hi to End the data Burst and load Data to Display register
Out_DispLoad = 1

End Sub


Réglages :

Super simple il faut juste un voltmétre à haute impédance et un source de tension entre 10 et 19V.
Voici la procédure pas à pas :

  1. Couper l'alimentation
  2. Enlever Jmp1 pour désactiver le Watch-Dog
  3. Mettre Jmp2 pour activer le mode Calibrage
  4. Enlever Jmp4 pour déconnecter l'interface de puiisance
  5. Mettre le 5V
  6. Mettre le voltmètre sur TP1 et régler R3 pour lire 2.49V sur le voltmètre
  7. Mettre la source de tension ET le voltmètre sur TP2 et régler le plus haut possible sans dépasser 19V
  8. Régler R4 pour que l'interface affiche la même tension que le voltmétre.
  9. Couper l'alim
  10. Remetre Jmp1 et Jmp4
  11. Enlever Jmp2
  12. Voilà !! c'est réglé !
Voci queleques photos que j'ai prises au court de la réalisation du bidule :

Usinage et montage sur radiateur du pont de diode et du bon gros 2N3055 de puissance

IMG_0117.JPG



IMG_0119.JPG

J'ai fait un cache isolant en alu

IMG_0120.JPG

J'usine la face de l'interface de puissance dans du PVC de 6mm

IMG_0124.JPG

Bien sûr le connecteur de puissance que j'ai n'est pas au pas de 2.54, faut que je me fasse un adapateur :

IMG_0152.JPG

IMG_0155.JPG

Je cable tout les éléments

IMG_0183.JPG

Et oui ça en fait des prises...

IMG_0185.JPG

Je prépare le plaque de l'interface de puissance. ici ç'est dans un environement dur et avec des contraintes mécaniques, epoxy obligatoire.

IMG_0154.JPG


Bon, ben voila, ça tient sans problème..

IMG_0190.JPG

le même coté pile, j'ai bien sûr mis du gros fils pour les fort courants

IMG_0186.JPG

Bon maintenant la platine d'affichage, là, j'ai pas trop de place, je fait appel au CMS

IMG_0197.JPG

Je soude des plots pour fixer mes caches en fer blanc

IMG_0200.JPG

Ces caches servent à isoler les lumière des led entre elles

IMG_0201.JPG

Oui, là y a de la connexion, faut de la pateince mais on y arrive...Note que j'aurais mis aussi du temps à router un CI..

IMG_0205.JPG

Enfi terminé !!

IMG_0206.JPG

Pour la mise au point du soft, je me fait le support à insertion nulle qui va bien


IMG_0209.JPG
IMG_0210.JPG

Et je peux déjà calibrer le biniou

IMG_0219.JPG


Puis viens le temps des tests complets..

IMG_0220.JPG

Je me fais une belle face avant qui se coincera derrière une palque de plexy.


IMG_0221.JPG

Un capot en tôle protège le tout

IMG_0237.JPG

Et voilà, c'est beau non ?

IMG_0227.JPG

Y a plus qu'a l'installer

IMG_0229.JPG

Bon me reste plus qu'a faire les quatres prises spéciales...

IMG_0241.JPG

Et voilà !!


IMG_0243.JPG

C'est en place depuis quelques jours et ça marche bien. Une des batterie du camion est plus ancienne et ça les équilibre bien.

Bon , ça m'a pris quand même pas mal de temps mais on a rien sans rien, et puis ç'est un truc qu'on ne trouve pas dans le commerce.

On peut bien sûr ne cabler que ce qu'il faut pour 1,2 ou 3 batteries, le programme fonctionnera quand même.

Si vous avez des questions, vous pouvez me les poser par mail. Mais inutile de me demander d'en construire un pour vous, pas le temps et c'est vraiment du taf...


 Un superviseur de pompe à eau

CP0028, le projet trainard....Commencé en Mai 2009, je viens juste de le terminer. Je ne sais pas trop pourquoi, ce projet a mis 2 ans pour voir le jour et contrairement à ma bonne résolution de finir ce que je commence avant de me lancer dans d'autres aventures, je n'ai pas arrété de faire autre chose. De plus, j'ai changé d'avis sur la conception en cours de route et refait certaines parties...Enfin, tout vient à point à qui sait attendre et le biniou est opérationel !

Voici la description de l'engin, vous pouvez le fabriquer ou vous en inspirer pour vos réalisations...

Alors, à quoi ça sert ?

Notre habitation étant une vielle ferme perdue dans les fin fonds de la Vendée, nous n'avons pas le service d'eau. Ceci n'est pas génant et nous permet de substantielles économies. Une pompe à eau (Aussi appelée 'groupe surpresseur') pompe l'eau du puit et alimente la maison. Ma femme, avec son élevage de chevaux remplie souvent les abreuvoirs (Un cheval boit entre 15 et 60 litres d'eau par jour selon les conditions, et il y en a une douzaine...)
Il lui arrive parfois d'oublier de fermer l'eau et c'est des mètres cubes qui sont perdus....L'eau est un bien précieux (de plus en plus) et il ne faut pas la gaspiller.
Je ne peut pas changer le firmware de ma femme pour qu'elle n'oublie plus, mais je peut adapter la pompe à son comportement. le but de cet appareil est donc le suivant :
- Qaund la pompe est en route, un voyant rouge extérieur est allumé pour attirer l'attention.
- Si la pompe tourne plus de 25mn, un signal sonore puissant sonne 15 secondes toutes les minutes
- Passé 30 minutes, si personne n'arrète la pompe ou remet le compteur à zéro, la pompe se coupe.
- De plus une sonde mesure la température de la pompe, si celle-çi chauffe trop, elle se stoppe aussi.
- Pour l'hiver, un chauffage antigel est mis en route si la température est proche de zéro afin d'éviter le gel
- Si la pompe est hors-fonction, le voyant extérieur clignote afin de signaler le problème
- 2 afficheurs 7 segment affiche l'état du systéme

Les contraintes du systéme étaient les suivantes :
- Ne pas modifier la pompe, la détection de la mise en route se fait par mesure du courant consommée.
- Etre le plus simple possible à utiliser
- Pouvoir facilement mettre le système hors fonction en cas de panne afin de ne pas être sans eau en cas de défaillance de l'électronique.
- Pouvoir remettre la pompe en marche de la maison si elle est coupée
- Etre protégée dans un boitier résistant à l'humidité et au froid

J'ai choisi de mettre l'ensemble dans un coffret electrique étanche standard. Pour la pompe, j'ai pris un télérupteur avec une commande manuelle, Si l'electronique de commande est coupée, il est trés facile de mettre la pompe en ou hors fonction juste en poussant le bouton de commande. De même, j'ai choisi un relais de puissance pour la commande du chauffage.

Le systéme comporte une interface de puissance permettant de :
- Commander le télérupteur
- Détecter le presence de tension aprés celui-ci afin de connaitre son état
- Détecter si la pompe est en route ou non en mesurant son courant consommé.
- Commander le voyant extérieur en 220 v
- Commander la sirène en 220 V
- Commander le relais de puissance du chauffage
- Le tout assurant bien sûr une l'isolation galvanique parfaite avec le secteur

Ce module comporte 3 voyants:
- Un bleu indicant que la pompe est sous tension
- Un jaune indiquant que la pompe est en marche
- Un rouge indicant que l'indicateur extérieur est allumé

Voici le schéma de l'interface :
SchPwrIntf.GIF

Quelques explications....

J'ai choisi des relais statiques (Trouvés sur Ebay) pour la commande de tous les éléments extérieurs en 220V. Ces modules assurent l'isolation par une commande optique du triac interne. De plus la commutation se fait au passage à zéro de la tension secteur ce qui limite les parasites.
J'ai utilisé des portes 'Trigger de Schmitt" afin d'avoir une bonne immunitée aux parasites.

La détection de la mise en route de la pompe se fait via un transformateur torique. 2 spires au primaire suffisent à induire une tension au secondaire qui, aprés filtrage et amplification est détecté et mis en forme en TTL. Voici une photo de ce capteur fait maison :

08-Probe.JPG


La détection de la tension secteur aprés le télérupteur est elle confiée à un photo-coupleur bidirectionel parfaitement adapté à cette tâche.

J'ai monté l'ensemble dans un boitier de fabrication maison, J'ai utiliser un adaptateur spécial pour montage sur rail DIN.
J'ai fait un circuit au stylo :
09-PwrPcbCu.JPG

J'ai doublé de cuivre la piste véhiculant le courant de la pompe et généreusement étamé les autres pistes.

L'utilsation de bornier 'Débrochable' permet en cas de panne de sortir le module sans tout décabler.
Voila le circuit monté :


10-PwrPcb.JPG

A l'étage au dessus, l'électronique sur plaque à trous :

11-IntfBoard.JPG

Voici le module (Avant mise en place des voyants)

12-PwrIntf.JPG

Ce module terminé, il a fallut une alimentation. J'ai choisi d'alimenter le tout en 5 V
Afin d'avoir un bon rendement, j'ai choisi de faire une alimentation à découpage utilsant un CI spécialisé.

Voila le schéma : (La note d'application plus quelques protections et filtrage additionels....)

SchPsu.GIF

Même si elle n'est pas censée chauffer beaucoup (preuve de son bon rendement...), j'ai décider lui faire un petit radiateur.
Le haut du boitier avait des découpes rondes pour passage de cables éventuels, alors, je me suis  dit, je vais me faire un radiateur rond...
 
01-TopHole.JPG

J'ai pris un radiateur de processeur graphique de recup et lui ai fait la coupe au bol de rigueur...

02-UsiRad.JPG

Et voila...

03-RadDone.JPG

Ensuite, usinage d'une bride pour plaquer femement le régulateur et la diode contre le radiateur, avec bien sûr l'inévitable graisse au silicione afin d'améliorer le transfer thermique...



Et voila, c'est compact mais, il n'y a pas trop de place....

05-Pwr.JPG

Le tout est monté à coté du transfo 12V de reccup...


06-PwrTr.JPG

Et voila, ça fait une petite 'Touffe' d'alu sur le boitier, je me complique la vie des fois...mais bon faut bien laisser la créativité s'exprimer....

07-PwrTop.JPG

Test et mesure, Ca marche du feu de dieu, me voila tranquille coté alim !!

Maintenant, il me faut gérer les sondes de températures. Une sonde est placée sur le moteur. Un afficheur genre BarGraphe est chargée d'afficher cette température. J'ai pris un bon vieux LM3914, le dernier segment sert a détecter la surchauffe de la pompe. J'ai calculé la chaine de résistances pour une fourchette entre environs 20 et 60°. On notera la résistance R2 servant à limiter la dissipation du 3914 en mode 'Bar". Voir la note d'application de NS.

Pour la sonde antigel, j'ai fait simple et indépendant. Un bête comparateur se charge du travail. Je n'ai pas mis d'hysteresis, l'inertie thermique étant suffisante.

L'étalonnage s'est fait avec de la bombe thermique, un souffleur d'air chaud et un thermomètre.

Voici le schéma :

SchAnalog.GIF

Enfin, last but not least, le cerveau de la bête...Pour une fois, j'ai utilisé un micro-controleur. Mon choix c'est porté sur un 89c2051, version simplifiée du fameux µcontroleur 8051. J'aime particulièrement cette famille, digne successeur du bon vieux 8048. Même si les nouveaux Pic et autres bêtes de course sont bien plus puissantes, ce petit CI à trés bas prix rend déjà bien des service. Je n'ai pas eu le courage de me remettre à l'assembleur alors j'ai utilisé Bascom51, un basic dédié à la famille 8051. Même si ma préférence va pour le langage C, ce petit IDE est trés bien fait, facile à utiliser et bien documenté.

Voici le schéma du CPU :
SchCpu.GIF
Comme ont peut le voir, c'est trés simple. L'affichage est multiplexé. J'ai utilisé un 74Ls247 comme décodeur driver de Segments. J'utilise ainsi 4 lignes d'ES au lieu de 7. (par contre, je ne peux pas afficher tous les symboles sur les afficheurs mais qu'importe...)

Il n'y a pas de watchdog intégré, j'en ai donc fait un (J'ai depuis acheté des CI  Max613 qui font tout bien mais à l'époque, j'en avais point...). le classique TL7705 assure un reset clean au démarrage. Le programe est censé faire clignoter le point décimal toutes les secondes. Si suite à un parasite, le programme se plante et se bloque, C11 ne sera plus déchargé et génèrera un reset. Attention, il est déconseillé de gérer les watch-dog sur les interuptions, celles-ci n'assurant pas que le programme principale fonctionne correctement.

J'ai monté toutes la logique dans un boitier DIN de récup.

13-Main.JPG

Voici quelques explication sur le soft :

La pompe fonctionne par intermitance pour remplir le ballon tampon. Le soft attend donc 30 secondes d'arrêt effectif de la pompe pour considérer qu'elle est vraiment arrété. (temps mort ou dead time)

Le soft est un automate fini qui fonctionne en se basant prioritairement sur les états réels des entrées sortie. Une variable d'état nommée 'State' est calculée en permanence afin de déterminer l'état du système. Elle permet de gérer les phases de transition et l'affichage. Celui-ci peut avoir les indications suivantes.

Au boot affiche 88 afin de tester l'afficheur.
Le point décimal clignote en permanence et indique le bon fonctionnement du soft (et Trig le watch-Dog)
En mode stand bye, pompe alimentée et stoppée, rien n'est affiché.
Si la pompe tourne, s'affiche alors le nombre de minutes écoulée depuis sa mise en route.
Le décompte s'arrête pendans le temps mort et le temps affichée clignote.
Si le temps max est écoulé, l'afficheur affiche tt
A tout instant et de manière prioritaire, si la température max est atteinte, l'afficheur affiche t0
Si la pompe est mise hors tension manuellement, l'afficheur affiche cc (Le deuxime c est inversé mais j'ai pas la touche sur le clavier)

Si l'affichage est tt, t0 ou cc il est possible de revenir à l'état normal par appuis sur le télérupteur ou reset.
Quand la pompe est stoppée, l'indicateur extérieur clignote.

Note que, sauf dans le cas d'une surcharge thermique, la pompe se remet sous tension aprés le reset. Ceci permet de remettre la pompe en service depuis la maison en coupant puis rétablissant le disjoncteur de la pompe au tableau electrique.

L'affichage est entierement géré sous l'interuption du timer qui arrive toutes les 250 µs. Il suffit de positionner les variables DigMsb et Diglsb pour que l'affichage reflete leur valeurs.

J'ai utilisé des constantes pour toutes les valeurs critiques afin de rendre le code facile à lire et à modifier au besoin.
E même, j'ai aliasé toutes les I/O, c'est plus facile de lire In_PumpOn que P1.0

Un switch permet de sélectionner un mode 'Test' qui différe du mode 'Normal" par 3 points :
- Affiche u8 au reset
- Les minutes de comptage de mise en route sont des secondes
- Le dead time est de 5 secondes au lieu de 30

Ceci afin de tester le soft sans y passer sa vie....

Le code généré est petit (968 bytes) et est loin de remplir les 2k dispo du 89c2051

Le source original est dispo ici : CP0028.BAS le code compilé ici CP0028.HEX ou CP0028.BIN
J'ai mis le source en fin d'article pour les curieux...

Bon, j'arrive presque au bout de mes efforts...

Il faut monter l'indicateur extérieur et la siréne.
 Pour la sirène, j'ai finalement opté pour un modèle du commerce et j'ai juste fait une ptit alim vite fait :

SchSiren.GIF
Je monte tout ça sur une plaque de pvc avec des vis en plastique pour éviter la corosion

14-Plast.JPG

Note, je passe du fils souple. Il est impératif d'utiliser des embouts pour monter ces fils dans des cosses à serrage :
On trouve ces cosses facilement sur Ebay, on peut les sertir avec un pince plate mais le mieux est d'utiliser la sertisseuse qui va bien.


16-Cosses.JPG

Je test avec on super banc de test secteur

15-TstIndic.JPG


et je monte le bouzin dehors, à l'abris du toit quand même :


17-Indic.JPG

puis j'installe et je cable le coffret

18Ready.JPG

Je test, tout à l'air nominal....

Voici la pompe surplombé du chauffage antigel (Radian acheté dans un vide grenier...)

19-Pump.JPG

Je fixe les 2 sondes

Y a plus qu'à mettre le capot :

20-Done.JPG


et voilà, putain 2 ANS !!! Bon c'est vrai, que j'ai fait plein d'autres truc depuis, la preuve le dernier sorti est CP0036.....

Bon, c'est quand même un projet qui m'aura pris du temps, les beaux schémas, le cablage, le softs et l'installation. A vu de nez je dirais environs 80 heures de taf....

Mais maintenant, on ne devrais plus trop gacher d'eau ou craindre le Gel (Comme c'est parti, on risque plus la surchauffe...)

N'hésitez pas si vous avez des questions mais inutile de me demander d'en construire un pour vous....je travaille déjà sur mon futur projet, un poste de soudure par points.....

Mise à jour Mars 2013

Ma femme m'a alertée en me disant que l'alarme ne se déclanchait pas au bout de 30mn. Etrange, j'enquête et en effet, le compteur ne s'incrémente pas aussi vite que prévu. Une relecture 'A froid' du source montre en effet que l'incrément du compteur ne se fait pas si la pompe est en mode 'DeadTime'. Cela ne se voyait pas avant car la période de la pompe ne le mettait pas en évidence, mais ayant changé le pressostat recemment, celle-ci a changée et le disfonctionnement est plus sensible.
la correction est facile et j'ai donc claqué une 1.1 du firmware. La correction est incluse dans les liens du site. Je me suis aussi apercu en passant que le nouveaux pressostat faisait des parasites lors de certains démarrage de la pompe qui resetait le µP. J'ai donc ajouter une antiparasite de compétition et tout est rentré dans l'ordre.

Pour ceux que ça interrese, voici le source du firmware :

'--------------------------------------------------------------
' CP0028 - Pump Supervisor Firmware
' File: CP0028.BAS
' By Philippe Demerliac
' (c) 2011 Cyrob
'------------------------------------------------------------------------------
' Version history
' Version Date          Author      Comment
'   1.0d1 26 Feb 2011   Phildem     First release And preliminary tests
'   1.0d2 27 Feb 2011   Phildem     Change Display mode
'   1.0d3 06 Mar 2011   Phildem     Final Timer And dispay Test
'   1.0d4 02 Jun 2011   Phildem     Io Alias And final logic implementation
'   1.0b1 03 Jun 2011   Phildem     Final Test
'   1.0   03 Jun 2011   Phildem     Final release
'   1.1   09 Mar 2013   Phildem     Fix Bug Sample on DeadMode
'------------------------------------------------------------------------------
' Hardware connexions

' P1 Use

' In PumpOn       P1.0  Activ low
' In PumpPwr      P1.1  Activ low
' In PumpOverHeat P1.2  Activ low
' Out PumpOff     P1.3  Activ low
' Out IndLight On P1.4  Activ low
' Out Siren On    P1.5  Activ low
' In TestMode     P1.6  Activ low

' P3 Use all as output

' SegBCD A  P3.0  LSB Positiv Logic
' SegBCD B  P3.1
' SegBCD C  P3.2
' SegBCD D  P3.3

' Anode LSB P3.4  Display On when low
' Anode MSB P3.5  Display On when low

' Dp        P3.7  Dp On If 1 Used as WatchDog trigger


'------------------------------------------------------------------------------
$regfile = "89C2051.dat"                                      'Define machine
$crystal = 12000000                                           '12 MHz XTal


'Const declaration ------------------------------------------------------------
Const kDig_Delay = 1                                          'Digit display Time in ms
Const kRelayPulseWidth = 300                                  'Relay pulse width in ms

Const kSirenTrig = 25                                         'Siren Trig in Mn
Const kPumpMaxOnMn = 30                                       'Max On Time in Mn
Const kSirenOnTime = 30                                       'Siren On Time in Ticks

Const kTickPerMn = 120                                        'Normal Ticks/mn
Const kTickPerMnTst = 2                                       'Test Ticks/mn

Const kPumpDeadTime = 60                                      'Normal Dead Time in Ticks
Const kPumpDeadTimeTst = 10                                   'Test Dead Time in Ticks

' Possible Engine States
Const kStateIdle = 0                                          'Normal Idle
Const kStateOn = 1                                            'Pump is On
Const kStateDead = 2                                          'Pump is Dead Time
Const kStatePwrOff = 3                                        'Pump Power Manually Off
Const kStateTimeOut = 4                                       'Pump Time Out
Const kStateOverHeat = 5                                      'Pump Over Heat


'IO Aliasing ------------------------------------------------------------------

In_PumpOn Alias P1.0
In_PumpPwr Alias P1.1
In_OverHeat Alias P1.2
In_TestMode Alias P1.6

Out_PumpRelay Alias P1.3
Out_Indic Alias P1.4
Out_Siren Alias P1.5

'Var Decl ---------------------------------------------------------------------

Dim Clock_word As Word                                        'Timer counter
Dim Tick_hsec As Bit                                          'Every 500ms Tick flag
Dim Watchd As Byte                                            'Watchd toggle


Dim Cnt_mn As Byte                                            'Tick counter for 1 Mn
                                                    'will count 0->119

Dim Cnt_PumpOn As Byte                                        'Pump On Time In Mn
Dim DigLsb As Byte                                            'Lsb Digit Value
Dim DigMsb As Byte                                            'Msb Digit Value
Dim OutP3 As Byte                                             'Port 3 output buffer
Dim CurDisp As Bit                                            'Curent disp: 0 Lsb,1Msb
Dim PumpOn As Byte                                            'Nbr of Tick since PumpOn
Dim OnBlink As Bit                                            'Dead Blinker
Dim SirenOn As Bit                                            'Siren is On
Dim State As Byte                                             'System State

Dim VTickPerMn As Byte                                        'Used Tick/Mn
Dim VPumpDeadTime As Byte                                     'Used Dead Time in Ticks


'Program ----------------------------------------------------------------------

OnReset:

'Configure Timer0 for Interupt every 250µs

Config Timer0 = Timer , Gate = Internal , Mode = 2

On Timer0 Timer0_Int

Load Timer0 , 250

Priority Set Timer0
Enable Interrupts
Enable Timer0


'Init IO
P3 = &B01110000                                               'Display Off

'Init var
Clock_word = 0                                                'Init Timer counter
Cnt_mn = 0
Cnt_PumpOn = 0                                                'Init On Counter
CurDisp = 0
Watchd = 0
PumpOn = 0
OnBlink = 0
State = kStateIdle

' Look for Test Mode
If In_TestMode = 0 Then
   VTickPerMn = kTickPerMnTst
   VPumpDeadTime = kPumpDeadTimeTst

   DigLsb = 8                                                 'Disp u8 in Test Mode
   DigMsb = 12
else
   VTickPerMn = kTickPerMn
   VPumpDeadTime = kPumpDeadTime

   'Display c8 for 0.3 sec to test display
   DigLsb = 8                                                 'Disp 88 in Test Mode
   DigMsb = 8
End If

'Run display
Start Timer0

Waitmse 300

'Blank display
DigLsb = 15
DigMsb = 15


'Switch Pump Power On If off And not Overheat
If In_PumpPwr = 1 And In_OverHeat = 1 Then
   Gosub PulsePump
Else
   If In_OverHeat = 0 Then
      State = kStateOverHeat
   End If
End If


' Main Loop -------------------------------------------------------------------
Do


If Tick_hsec = 1 Then                                         'Every half Sec tick
   Tick_hsec = 0

   If Watchd = 0 Then
      Watchd = &B10000000                                     'Toggle Watch dog
   Else
      Watchd = 0
   End If

   'Calc State
   If In_PumpPwr = 0 Then                                     ' Look If Pwr Is On
                                'Look for over heat
      If In_OverHeat = 0 Then
          State = kStateOverHeat
      else
         If State > kStateDead Then                           ' Manually set Powered On
            State = kStateIdle
            Cnt_PumpOn = 0
            PumpOn = 0
         End If

         If In_PumpOn = 0 Then                                ' Pump is running
            State = kStateOn
            PumpOn = VPumpDeadTime

            If Cnt_PumpOn > kPumpMaxOnMn Then
               State = kStateTimeOut
            End If

         Else
            If PumpOn = 0 Then                                'Pump really stopped
               State = kStateIdle
               Cnt_PumpOn = 0                                 'Reset On counter
            else
               State = kStateDead
               Decr PumpOn
            End If

         End If
      End If

   else

      If State < kStateTimeOut Then                           ' Look If manually Off
         State = kStatePwrOff
      End If

   End If

   SirenOn = 0
   If state = kStateOn Or State = kStateDead Then
      If Cnt_PumpOn > kSirenTrig Then
         SirenOn = 1
      End If
   End If

   Select Case State
      Case kStateIdle :                                       'Idle, Blank display
         DigLsb = 15
         DigMsb = 15
         Set Out_Indic                                        ' Indic Off

      Case kStateOn :                                         'On Display Time
         DisTime:
         DigLsb = Cnt_PumpOn Mod 10                           ' Calc Lsb
         DigMsb = Cnt_PumpOn / 10                             ' Calc Msb
         Reset Out_Indic                                      ' Indic On

      Case kStateDead:                                        'Dead Blink Display
         OnBlink = Not OnBlink
         If OnBlink = 0 Then Goto DisTime
         DigLsb = 15
         DigMsb = 15
         Reset Out_Indic                                      'Indic On

       Case kStatePwrOff:                                     'Of Display c Rev c
         DigLsb = 11
         DigMsb = 10
         Out_Indic = Not Out_Indic

       Case kStateTimeOut:                                    'Time Out Display tt
         DigLsb = 14
         DigMsb = 14
         Gosub OffCond

       Case kStateOverHeat:                                   'Heat display t0
         DigLsb = 0
         DigMsb = 14
         Gosub OffCond

      Case Else :                                             ' Abnormal
         Goto OnReset
   End Select


   Incr Cnt_mn

   'Siren Handling
   If SirenOn = 1 And Cnt_mn <= kSirenOnTime Then
      Reset Out_Siren
   else
      Set Out_Siren
    End If

   ' Minute Timer
   If Cnt_mn = VTickPerMn Then
      Cnt_mn = 0

      If State = kStateOn Or State = kStateDead Then          'if pump is on, incr Cntr
         Incr Cnt_PumpOn
      End If

   End If


End If                                                        'Of Tick


'And continue for ever, that's the computer hard duty..
Loop


'---------------------------------------------------------
' Off Cond  ----------------------------------------------
'---------------------------------------------------------
OffCond:

    'Force Pump Off
    If In_PumpPwr = 0 Then Gosub PulsePump

    'Togle Light indicator
    Out_Indic = Not Out_Indic

Return

'---------------------------------------------------------
' Pulse Pump  --------------------------------------------
'---------------------------------------------------------
PulsePump:
   Reset Out_PumpRelay
   Waitmse kRelayPulseWidth
   Set Out_PumpRelay
Return

'------------------------------------------------------------------------------
' Timer 0 Interrupt -----------------------------------------------------------
'------------------------------------------------------------------------------

Timer0_Int:

'All Display Off Phamtom effect killer
OutP3 = Watchd Or &B01110000
P3 = OutP3

'Incr Sec Ticks
Incr Clock_word
If Clock_word = 2000 Then
   Clock_word = 0
   Tick_hsec = 1
End If

'Refresh Display
If CurDisp = 1 Then
   OutP3 = Watchd Or DigMsb
   P3 = OutP3 Or &B01010000                                   ' Display DigMsb
Else
   Outp3 = Watchd Or DigLsb
   P3 = OutP3 Or &B01100000                                   ' Display DigLsb
End If

CurDisp = Not CurDisp                                         ' Switch to next display

Return



 Une souris SteamPunk

Quand on surfe sur le net, impossible de manquer la vague "SteamPunk". Il suffit de chercher sur Google pour s'en convaincre.

Bien que j'ai un projet en cours... je n'ai pas résisté à l'envie de 'SteamPunker'. Bon, pour une première j'ai eu une ambition modeste et je me suis attaqué à une souris.
J'avais en stock une souris optique logitech qui a été choisie comme première victime.

Before.JPG

Aprés environs 5 h de travail voici ce qu'elle est devenue :
Global.JPG
Front.JPG
Rear.JPG
Left.JPG
Right.JPG

L'alimentation des Led se fait par l'USB.

In.JPG

J'ai utilisé entre autre :


Pour être honnête, l'ergonomie de la souris ne s'est pas trouvée améliorée par la 'SteamPunkanisation" mais, bon, ne faut'il pas souffrir pour être beau.
De plus, la led clignotante sur le dessus chauffe un peu ce qui est assez bizzare (mais pratique l'hivers pour se rechauffer la pogne..)

Fort de cette première expérience, il n'est pas impossible que je m'attaque à de nouveaux objets...

Note : A la demande du rédacteur en chef de la revue Elektor, j'ai écrit un article sur cette souris parut dans le numéro de Mars 2011.

Autre souris SteamPunk


J'ai un PC portable et comme je DETESTE les TrackPad, il me faut une souris nomade. Il faut qu'elle soit facile à transporter et j'ai trouver pour moins de 3 Euros une souris Corse chez NOOZ.

  IMG_0375.JPG

Je n'ai rien contre nos amis Corse mais j'ai une envie de la "SteamPunker" aussi. Bon, c'est pas raisonable vu que j'ai un retard pas possible sur mes nombreux projets mais c'est plus fort que moi. Je commence donc par protéger les parties sensibles et un coup de bombe "Bronze" lui fait déjà une autre tête.

IMG_0376.JPG
IMG_0383.JPG

J'ai acheté dans un vide grenier un poste de soudure par points à un chercheur en retraite trés sympathique qui s'en servait pour bricoler un Spectrographe de masse.
20 Euro, c'est une bonne affaire, mais le chercheur était content que son appareil serve encore et ne cherchait pas à s'enrichir. J'ai refabriqué des electrodes en cuivre plus proches de mes besoins et pour l'étrenner, je me fais des grilles de protection latérales.


IMG_0382.JPG
IMG_0381.JPG

Pour le reste, je pioche dans mes reccup diverses pour faire la bête. Pour des raisons de consommation, rien d'électrique ici.

J'utilise du Sugru pour faire repose paume.


IMG_0386.JPG

IMG_0392.JPG

IMG_0393.JPG

IMG_0398.JPG

IMG_0399.JPG


IMG_0400.JPG


Pour ceux qui ne connaisent pas le Sugru, c'est un super produit magique, une sorte de pâte à modeler silicone collante qui est vraiment géniale.
Voir le site Ici pour plus d'info et en acheter au besoin.

Comme le sachet ne se conserve pas une fois ouvert, j'en ai profité pour rendre ma brucelle anti-dérapante.
En fait j'avais aussi essayer de "Mouler" les boutons, mais ça c'est mal démoulé. J'avais utilisé du talc pour que ça ne colle pas et c'est un echec. Le prochain coup, je ferais des essais avec de la vaseline.

Pour info, je vous conseil de conserver les sachets de Sugru au frigo pour qu'ils se conservent plus longtemps.


IMG_0401.JPG

Et voilà, j'ai une souris originale pour mon portable...

Une inteface HAL9000

J'ai eu besoin pour mon labo de mettre un micro afin de commander le PC de gestion de celui-ci par la voix.
J'aurai bien sûr pu mettre un bête micro, mais comme je suis en vacance et qu'il faut se faire plaisir de temps en temps, j'ai décidé de rendre hommage à un des meilleurs film de SF jamais tourné, à savoir l'excellent 2001, l'odyssée de l'espace et son super computer HAL 9000. J'ai donc décidé de me faire une réplique de la célèbre interface. J'ai pris quelques libertés avec l'original mais le résultat est trés reconnaissable :

Voici comment j'ai procédé pour fabriquer le prop, quasi 100% reccup.
Je fréquente beaucoup les vides greniers, et je rachète trés souvent les vielles caméras Super8 pour 1 ou 2 euros. Celles-ci sont en effet des sources de visseries 2mm et autres petites pièces de mécanique et optique. J'ai donc utilisé un objectif pour faire l'oeil de HAL. N'importe quelle lentille pourrais faire l'affaire. J'ai utilisé une grosse led de 10mm pour faire le fond d'oeil. Pour le support, j'ai pris une plaque de plastique que j'ai fraisé, la table circulaire m'a permis de faire le bord de l'oeil. J'ai découpé un bout de tôle perforée pour faire la grille du micro. Celui-ci est un modèle à Electret pris sur un vieux magnéto HS qui a l'avantage d'avoir un support ammortisseur en caoutchouc.

Voici les pièces 'brut"

J'ai adapté le support de la lentille pour fixer la LED, le tout étant collé sur la plaque avec de la Cyano :

Voici la fixation du micro :

Un coup de peinture en bombe, suivi des bordures avec de la peinture à maquette 'ALU' et le tour est joué.
Reste plus qu'à faire l'autocollant avec PAINT:

Même éteint, on peut voir le fond rouge de l'oeil:

Un banc de test secteur

Je suis incorrigible, déjà que j'ai attaqué un projet avant qu'un autre soit fini, voila t'y pas que  j'm'en fait un autre vite fait....
Tout à commencé par les soldes ou j'ai acheté des ampoules de toutes sortes, alors bien sûr, rentré at home j'ai voulu les tester et là, encore une fois je me dis que je n'ai rien pour tester les ampoules facilement et je pense à me monter vite fait une ou deux douilles pour essayer et ensuite....ensuite comme d'hab je veux faire mieux et je fait un truc plus ambitieux, et je me dis que tant qu'à y passer du temps, autant faire un beau truc et voila, une demie journée pour fabriquer un petit boitier qui permet de :

  1. Tester sans risque les ampoules munies de douilles E27, B22 et E14
  2. Tester n'importe quelle truc secteur sans prises
  3. Pouvoir tester une charge secteur soupçonne de court-circuits sans risque en mettant une ampoule (A filament) en série.
Le tout de manière trés safe et manière mommentanée ou continue. 
Voici l'engin :

CP35Front.JPG

Le fonctionnement est trés simple, l'inter de gauche permet de mettre les prises de test (le bornier à fils devant et la prise femelle derrière) en paralléle ou en série avec les douilles. Le voyant vert indique la présence du secteur et le rouge que la charge est alimentée. Le bornier sert à connecter facilement et sans risque des fils (transfo à tester, alim, belle maman ;-o) .....). Le poussoir de sécurité permet d'essayer la charge de manière momentanée, l'inter de sécurité en paralléle dessus permet de maintenir le contact. (pour info, l'inter viens de Chine via ebay, le poussoir d'un viel onduleur)

CP35Back.JPG

On peut voir derrière le cable d'alim, la prise femelle permettant de brancher un bloc multiprises de test, et un fusible T5A.
J'ai monté les douilles sur des boulons M10 que j'ai percés avec le tour. Le pas n'est pas celui standard des douilles mais ça le fait quand même. J'aurais pu bien sûr acheter les trucs du commerce qui vont bien mais ils vendent un malheureux bout de laition fileté et perçé plus de 4 euro (26 frs !!) alors Cyrob m'en a fait 3 pour rien !

CP35CloseUp.JPG

Un gros plan sur les inters anti-je l'ai pas fait exprés mais ma manche s'est prise dans le bouton et ça c'est mis en marche et maintenant belle mam est toute noire et frisée !
Je me suis bien sûr fait de belles étiquettes pour avoir un look sympa. L'engin porte le doux nom de CP0035.  Depuis 2003 je donne un numéro à mes produits, CP c'est Cyrob Product et j'ai prévu trés large en réservant 4 digits soit 9999 réalisations. Aux trains ou ça va, je finirait dans l'au delà...


CP35Inside.JPG

Pour les curieux qui veulent tout savoir, un coup d'oeil dans la boite. (Note: j'avais mis des inters qui ne coupaient que la phase, ce qui n'est pas trés safe, j'ai changé depuis par des doubles qui coupent phase et neutre comme sur le schéma, faut pas rigoler avec la sécurité)

Bon j'ai fini par faire un beau schéma, avec variante à relais, option 230V ou 24V. D'autres tensions sont possibles en baissant la valeur de la capa C1.

Le schéma au format SPlan spl7

CP35Schema.jpg

Je ne regrette pas mon aprés midi, c'est trés pratique...

Ma vidéo:

Un portail electrique

Depuis le temps que j'en révait, je me suis offert un portail cette été. Je l'ai fait monter car je n'avais pas le temps, mais je l'ai automatisé.
J'ai longtemps hésité entre faire tout moi-même, moteur et tout.. ou monter un kit du commerce. Ma femme voulant le truc rapide et ayant trouvé un kit sur le net à un prix raz des paquerettes, je commande et je monte le bazar. Le matos est de la marque EA, (www.europe-automatismes.com) Il a l'air de bonne qualité pour le prix. La doc est relativement claire, à part celle de programation du clavier qui m'a un peu chauffé les neurones, mais bon on s'en sort. Bien sûr, le matos n'est pas du tout adapté au portail et je vais encore devoir bricoler ! De plus, des contraintes topologiques m'ont contraint à faire monter le battant à l'extérieur des poteaux de soutient.

Pour commencer, je doit fabriquer des équerres spéciales en alu et des pièces pour fixer les aimant des butées magnétiques:

Voici une des butées d'arrêt magnétique

Pour les branchements, je me modifie un connecteur de reccup genre "Centronix". Pour le secteur, j'augmente artificiellement l'espace entre les broches en en arrachant quelques unes.Je noie ensuite le tout dans de la colle au pistolet. Ceci me permet d'intervenir sur le boitier moteur trés facilement.

 


Voici l'intérieur du boitier qui support l'electronique de commande et la mécanique.

Ensuite je doit usiner un pylonne et un support pour l'antenne de la télécommande et le voyant clignotant obligatoire.
Je fais du trés costaud avec un support en plexi et vis nylon, pour éviter tout risque de corrosion.

Voila le clavier HF, le moteur et une des cellules photo-electrique

Et voila le portail monté.On peut voir la crémaillère en Nylon fixée le long du longeron du portail.

 

Je branche, je programme tous suivant la doc et tout fonctionne, c'est vraiment top.

En fait, ça a marché jusqu'au premières pluies d'automne. Las, le système se bloque et ne veut rien savoir. Aprés beaucoup de recherche, (j'ai même sérieusement envisagé de vier toute cette electronique de m... et mettre un truc simple à la place), j'ai trouvé la raison. Le sol étant mouillé, d'inévitable courants de fuite, (additionnés de pic assez violent du à la plétore de cloture electrique ceinturant la maison) font déraillé le micro-controleur qui commande le portail et il se plante. Si je débranche les cellules et la commande filaire à distance, tout marche. Le concepteur a été trés lége sur la protection des E/S du micro controleur. Je vais donc mettre des relais d'isolations et tous marchera okay. En attendant, j'ai shunté les cellules et déconnecté la commande à distance et c'est ok. J'attend le primtemps pour remettre ça au propre.

Mai 2013

Butées mécaniques pour portail électrique coulissant

En fait, je n'ai jamais rebranché tout cela et ça marchait trés bien sans. Mais ça c'était avant..
Il y a une quinzaine de jours, ça marche plus!!! Déjà avant il arrivait que le moteur force en fin de course mais là, plus rien !!
Avec ce temps de M..., j'attend un éclaircie sans pluie et j'ouvre le capot de l'engin.
Vision d'horreur !! ces garces de souris ont rongés un bonne partie des fils...
Bon je re-cable tout et met les fils dans des ressorts étirés pour les protéger des incives plastivores.
Je test mais manifestement la détection des fins de courses se fait mal.
Ce systéme de butées magnétiques, c'est pas terrible finalement et je dessine de faire dans le traditionel avec de bon vieux micro-switch.

Je me remémore donc les quelques bases à savoir sur les contacts de fin de course :

  1. Le contact n'est PAS une butée, toujours prévoir une butée solide pour ne pas surcharger le switch
  2. Sauf dans des cas de déplacement trés léger ou lent, la pièce mobile ne peut pas s'arréter d'un coup, il faut donc prévoir la distance d'arrêt, même minime.
  3. Il faut que le contact soit franc et n'accroche pas lors de la réouverture.
  4. Il faut souvent prévoir un ajustement de la butée
  5. On mets généralement des contacts 'Normalement Fermés' qui s'ouvrent lors de la butée, ceci par sécurité en cas de rupture de contact. Un moteur arrété est souvent moins dangereux :) Ici le portail est bien conçu et respecte ce point.
  6. Il faut protéger les contacts de l'environement climatique et mécanique.
  7. Plus la distance entre les contacts et la carte de commande est courte, mieux c'est.
Bon, ensuite, par les temps qui courts, moins ça coûte cher, mieux c'est !

Donc je commence par aller farfouiller dans ma boite à micro-switch pleine de 35 ans de reccup diverses....C'est surtout plein de petits modéles mais j'en trouve quelques un qui semblent convenir. J'en ai besoins que de deux mais j'aime bien avoir du rechange. Bon bien sûr ils ont une course trés faible avec un hystéresis malgrés tout assez sensible.
Ensuite je réfléchi à la meilleur manière de les monter afin des les protéger des contraintes mécaniques et climatiques. Je part sur un principe de "Barre de torsion".

Une lame métallique (En alu dans mon cas) est prise en sandwitch entre les 2 contacts. Quand elle se tord dans un sens ou dans l'autre sous l'action du portail, le switch se déclenche. La flexibilité de la barre permet un "jeu" d'au moins 1 cm sans endommager le switch ce qui me laisse de la marge de réglage.
Je monte le tout dans un bête boitier genre "Plexo" afin de garder tous ce petit monde au sec.

Portail%20Switch.JPG

Comme on peut le voir sur la photo, la lame est solidement fixée en haut entre 2 équerres métaliques, elles même fixée à une plaque métallique derrière pour fixer le boitier au poteau du portail.

La lame est suffisament flexible pour déclencher les contacts. Un fils blindé à 3 conducteurs de reccup assure la liason d'une trentaine de centimétres avec la carte de commande du bloc moteur.

Je laisse le minimum d'ouverture pour être le plus étanche possible.


Portail%20switch%20detail.JPG

Bon, ensuite je fixe le boitier au poteau du portail: (Photo du biniou portail fermé. Lorqu'il s'ouvre complétement, la butée opposée vient pousser la tige dans l'autre sens ce qui active le second switch)

Portail%20switch%20final.JPG

Puis je fixe les butées que j'ai fabriquée dans de l'alu épais. J'ai taraudé M6 afin de pouvoir mettre une vis en nylon permettant un réglage fin. Une molette permet de bloquer la vis une fois le réglage effectué.

Voici l'autre butée :
Portail%20Butopen.JPG

Je régle les butées pour être que les switchs se déclanchent quelques mm avant les butées mécaniques.
J'essaie et OUI !! c'est un succés total !! encore une victoire de canard !!

Bon, un peu de sérieux et de modestie que diantre. J'espère que ça va tenir longtemps......
Sur ce, je retourne dans mon lab vers de nouvelles aventures électroniques..

 


Ce site utilise des frames. Si vous ne voyez pas les menus à gauche, cliquez Ici